@1upmonster/duel 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -59
- package/dist/admin.d.ts +8 -1
- package/dist/admin.js +21 -7
- package/dist/generated/duel/errors/duel.d.ts +1 -3
- package/dist/generated/duel/errors/duel.js +2 -4
- package/dist/generated/duel/instructions/delegateQueue.js +3 -3
- package/dist/generated/duel/instructions/delegateTicket.js +3 -3
- package/dist/generated/duel/instructions/index.d.ts +1 -0
- package/dist/generated/duel/instructions/index.js +2 -1
- package/dist/generated/duel/instructions/joinQueue.d.ts +1 -1
- package/dist/generated/duel/instructions/joinQueue.js +3 -3
- package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
- package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
- package/dist/generated/duel/programs/duel.d.ts +7 -3
- package/dist/generated/duel/programs/duel.js +11 -3
- package/dist/player.d.ts +7 -1
- package/dist/player.js +23 -3
- package/package.json +1 -1
- package/src/admin.ts +31 -7
- package/src/duel.json +0 -5
- package/src/generated/duel/errors/duel.ts +2 -4
- package/src/generated/duel/instructions/delegateQueue.ts +2 -2
- package/src/generated/duel/instructions/delegateTicket.ts +2 -2
- package/src/generated/duel/instructions/index.ts +2 -1
- package/src/generated/duel/instructions/joinQueue.ts +3 -3
- package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
- package/src/generated/duel/programs/duel.ts +8 -4
- package/src/player.ts +34 -1
- package/src/idl/private_matchmaking.json +0 -1027
- package/src/idl/private_matchmaking.ts +0 -1033
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { assertIsInstructionWithAccounts, containsBytes, fixEncoderSize, getBytesEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, SolanaError } from '@solana/kit';
|
|
9
9
|
import { addSelfFetchFunctions, addSelfPlanAndSendFunctions } from '@solana/program-client-core';
|
|
10
10
|
import { getMatchTicketCodec, getQueueCodec, getTenantCodec } from '../accounts';
|
|
11
|
-
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, parseCancelTicketInstruction, parseCloseTicketInstruction, parseCommitTicketsInstruction, parseCreateTicketInstruction, parseDelegateQueueInstruction, parseDelegateTicketInstruction, parseFlushMatchesInstruction, parseInitializeQueueInstruction, parseInitializeTenantInstruction, parseJoinQueueInstruction, parseProcessUndelegationInstruction } from '../instructions';
|
|
11
|
+
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupTicketPermissionInstructionAsync, parseCancelTicketInstruction, parseCloseTicketInstruction, parseCommitTicketsInstruction, parseCreateTicketInstruction, parseDelegateQueueInstruction, parseDelegateTicketInstruction, parseFlushMatchesInstruction, parseInitializeQueueInstruction, parseInitializeTenantInstruction, parseJoinQueueInstruction, parseProcessUndelegationInstruction, parseSetupTicketPermissionInstruction } from '../instructions';
|
|
12
12
|
export const DUEL_PROGRAM_ADDRESS = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X';
|
|
13
13
|
export var DuelAccount;
|
|
14
14
|
(function (DuelAccount) {
|
|
@@ -42,6 +42,7 @@ export var DuelInstruction;
|
|
|
42
42
|
DuelInstruction[DuelInstruction["InitializeTenant"] = 8] = "InitializeTenant";
|
|
43
43
|
DuelInstruction[DuelInstruction["JoinQueue"] = 9] = "JoinQueue";
|
|
44
44
|
DuelInstruction[DuelInstruction["ProcessUndelegation"] = 10] = "ProcessUndelegation";
|
|
45
|
+
DuelInstruction[DuelInstruction["SetupTicketPermission"] = 11] = "SetupTicketPermission";
|
|
45
46
|
})(DuelInstruction || (DuelInstruction = {}));
|
|
46
47
|
export function identifyDuelInstruction(instruction) {
|
|
47
48
|
const data = 'data' in instruction ? instruction.data : instruction;
|
|
@@ -78,6 +79,9 @@ export function identifyDuelInstruction(instruction) {
|
|
|
78
79
|
if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([196, 28, 41, 206, 48, 37, 51, 167])), 0)) {
|
|
79
80
|
return DuelInstruction.ProcessUndelegation;
|
|
80
81
|
}
|
|
82
|
+
if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([164, 29, 7, 235, 183, 223, 11, 85])), 0)) {
|
|
83
|
+
return DuelInstruction.SetupTicketPermission;
|
|
84
|
+
}
|
|
81
85
|
throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { instructionData: data, programName: "duel" });
|
|
82
86
|
}
|
|
83
87
|
export function parseDuelInstruction(instruction) {
|
|
@@ -127,12 +131,16 @@ export function parseDuelInstruction(instruction) {
|
|
|
127
131
|
assertIsInstructionWithAccounts(instruction);
|
|
128
132
|
return { instructionType: DuelInstruction.ProcessUndelegation, ...parseProcessUndelegationInstruction(instruction) };
|
|
129
133
|
}
|
|
134
|
+
case DuelInstruction.SetupTicketPermission: {
|
|
135
|
+
assertIsInstructionWithAccounts(instruction);
|
|
136
|
+
return { instructionType: DuelInstruction.SetupTicketPermission, ...parseSetupTicketPermissionInstruction(instruction) };
|
|
137
|
+
}
|
|
130
138
|
default: throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { instructionType: instructionType, programName: "duel" });
|
|
131
139
|
}
|
|
132
140
|
}
|
|
133
141
|
export function duelProgram() {
|
|
134
142
|
return (client) => {
|
|
135
|
-
return { ...client, duel: { accounts: { matchTicket: addSelfFetchFunctions(client, getMatchTicketCodec()), queue: addSelfFetchFunctions(client, getQueueCodec()), tenant: addSelfFetchFunctions(client, getTenantCodec()) }, instructions: { cancelTicket: input => addSelfPlanAndSendFunctions(client, getCancelTicketInstructionAsync(input)), closeTicket: input => addSelfPlanAndSendFunctions(client, getCloseTicketInstructionAsync(input)), commitTickets: input => addSelfPlanAndSendFunctions(client, getCommitTicketsInstruction({ ...input, payer: input.payer ?? client.payer })), createTicket: input => addSelfPlanAndSendFunctions(client, getCreateTicketInstructionAsync(input)), delegateQueue: input => addSelfPlanAndSendFunctions(client, getDelegateQueueInstructionAsync({ ...input, payer: input.payer ?? client.payer })), delegateTicket: input => addSelfPlanAndSendFunctions(client, getDelegateTicketInstructionAsync({ ...input, payer: input.payer ?? client.payer })), flushMatches: input => addSelfPlanAndSendFunctions(client, getFlushMatchesInstruction(input)), initializeQueue: input => addSelfPlanAndSendFunctions(client, getInitializeQueueInstructionAsync(input)), initializeTenant: input => addSelfPlanAndSendFunctions(client, getInitializeTenantInstructionAsync(input)), joinQueue: input => addSelfPlanAndSendFunctions(client, getJoinQueueInstructionAsync(input)), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })) } } };
|
|
143
|
+
return { ...client, duel: { accounts: { matchTicket: addSelfFetchFunctions(client, getMatchTicketCodec()), queue: addSelfFetchFunctions(client, getQueueCodec()), tenant: addSelfFetchFunctions(client, getTenantCodec()) }, instructions: { cancelTicket: input => addSelfPlanAndSendFunctions(client, getCancelTicketInstructionAsync(input)), closeTicket: input => addSelfPlanAndSendFunctions(client, getCloseTicketInstructionAsync(input)), commitTickets: input => addSelfPlanAndSendFunctions(client, getCommitTicketsInstruction({ ...input, payer: input.payer ?? client.payer })), createTicket: input => addSelfPlanAndSendFunctions(client, getCreateTicketInstructionAsync(input)), delegateQueue: input => addSelfPlanAndSendFunctions(client, getDelegateQueueInstructionAsync({ ...input, payer: input.payer ?? client.payer })), delegateTicket: input => addSelfPlanAndSendFunctions(client, getDelegateTicketInstructionAsync({ ...input, payer: input.payer ?? client.payer })), flushMatches: input => addSelfPlanAndSendFunctions(client, getFlushMatchesInstruction(input)), initializeQueue: input => addSelfPlanAndSendFunctions(client, getInitializeQueueInstructionAsync(input)), initializeTenant: input => addSelfPlanAndSendFunctions(client, getInitializeTenantInstructionAsync(input)), joinQueue: input => addSelfPlanAndSendFunctions(client, getJoinQueueInstructionAsync(input)), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })), setupTicketPermission: input => addSelfPlanAndSendFunctions(client, getSetupTicketPermissionInstructionAsync(input)) } } };
|
|
136
144
|
};
|
|
137
145
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9wcm9ncmFtcy9kdWVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx5REFBeUQsRUFBRSw2REFBNkQsRUFBRSw0REFBNEQsRUFBRSxXQUFXLEVBQTJQLE1BQU0sYUFBYSxDQUFDO0FBQzVpQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQTBELE1BQU0sNkJBQTZCLENBQUM7QUFDekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQW9HLE1BQU0sYUFBYSxDQUFDO0FBQ25MLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxtQ0FBbUMsRUFBMHRCLE1BQU0saUJBQWlCLENBQUM7QUFFMzdDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUF5RyxDQUFDO0FBRTlJLE1BQU0sQ0FBTixJQUFZLFdBQTBDO0FBQXRELFdBQVksV0FBVztJQUFHLDJEQUFXLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsaURBQU0sQ0FBQTtBQUFDLENBQUMsRUFBMUMsV0FBVyxLQUFYLFdBQVcsUUFBK0I7QUFFdEQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQTBEO0lBQzFG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QyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFBQyxDQUFDO0lBQ3ZLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQUMsQ0FBQztJQUN0SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLFlBQVksQ0FBQztJQUFDLENBQUM7SUFDdkssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUM7SUFBQyxDQUFDO0lBQ3hLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsY0FBYyxDQUFDO0lBQUMsQ0FBQztJQUN6SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLFlBQVksQ0FBQztJQUFDLENBQUM7SUFDdEssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFBQyxDQUFDO0lBQzNLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxD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QUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvZ0QsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hUaWNrZXRDb2RlYywgZ2V0UXVldWVDb2RlYywgZ2V0VGVuYW50Q29kZWMsIHR5cGUgTWF0Y2hUaWNrZXQsIHR5cGUgTWF0Y2hUaWNrZXRBcmdzLCB0eXBlIFF1ZXVlLCB0eXBlIFF1ZXVlQXJncywgdHlwZSBUZW5hbnQsIHR5cGUgVGVuYW50QXJncyB9IGZyb20gJy4uL2FjY291bnRzJztcbmltcG9ydCB7IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYywgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsIGdldFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgcGFyc2VDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VDbG9zZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbiwgcGFyc2VDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb24sIHBhcnNlSm9pblF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uLCB0eXBlIENhbmNlbFRpY2tldEFzeW5jSW5wdXQsIHR5cGUgQ2xvc2VUaWNrZXRBc3luY0lucHV0LCB0eXBlIENvbW1pdFRpY2tldHNJbnB1dCwgdHlwZSBDcmVhdGVUaWNrZXRBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlUXVldWVBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBGbHVzaE1hdGNoZXNJbnB1dCwgdHlwZSBJbml0aWFsaXplUXVldWVBc3luY0lucHV0LCB0eXBlIEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0LCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQsIHR5cGUgUGFyc2VkQ2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ2xvc2VUaWNrZXRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQgfSBmcm9tICcuLi9pbnN0cnVjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgRFVFTF9QUk9HUkFNX0FERFJFU1MgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG5cbmV4cG9ydCBlbnVtIER1ZWxBY2NvdW50IHsgTWF0Y2hUaWNrZXQsIFF1ZXVlLCBUZW5hbnQgfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlEdWVsQWNjb3VudChhY2NvdW50OiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogRHVlbEFjY291bnQge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gYWNjb3VudCA/IGFjY291bnQuZGF0YSA6IGFjY291bnQ7XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTEsIDEzMSwgNCwgMTU3LCAyMDcsIDc5LCAxMjYsIDVdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5NYXRjaFRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjA0LCAxNjcsIDYsIDI0NywgMjAsIDMzLCAyLCAxODhdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5RdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNjEsIDQzLCAyMTUsIDUxLCAyMzIsIDI0MiwgMjA5LCAxNzBdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5UZW5hbnQ7IH1cbiAgICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9BQ0NPVU5ULCB7IGFjY291bnREYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG59XG5cbmV4cG9ydCBlbnVtIER1ZWxJbnN0cnVjdGlvbiB7IENhbmNlbFRpY2tldCwgQ2xvc2VUaWNrZXQsIENvbW1pdFRpY2tldHMsIENyZWF0ZVRpY2tldCwgRGVsZWdhdGVRdWV1ZSwgRGVsZWdhdGVUaWNrZXQsIEZsdXNoTWF0Y2hlcywgSW5pdGlhbGl6ZVF1ZXVlLCBJbml0aWFsaXplVGVuYW50LCBKb2luUXVldWUsIFByb2Nlc3NVbmRlbGVnYXRpb24gfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlEdWVsSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb246IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBEdWVsSW5zdHJ1Y3Rpb24ge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gaW5zdHJ1Y3Rpb24gPyBpbnN0cnVjdGlvbi5kYXRhIDogaW5zdHJ1Y3Rpb247XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjE2LCAyOCwgMjQ3LCAyMDYsIDE5NSwgMTcxLCAxMDAsIDE0M10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DYW5jZWxUaWNrZXQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzY2LCAyMDksIDExNCwgMTk3LCA3NSwgMjcsIDE4MiwgMTE3XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyNDUsIDE5OSwgODEsIDAsIDYyLCAxMzMsIDE4LCAyMl0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNiwgMTc4LCAxMjIsIDI1LCAyMTMsIDg1LCA5NiwgMTI5XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkNyZWF0ZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxOTUsIDMsIDc4LCA2NCwgMTI4LCAyMzUsIDIwOSwgMTcxXSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs0OSwgMTQ4LCAxNjMsIDcxLCA3NywgNjMsIDE5NywgNzZdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNzQsIDEwMiwgMTMyLCAyMzIsIDkwLCAyMDIsIDI3LCAyMF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk0LCAxMjAsIDM0LCAxODYsIDU3LCAxNjcsIDI0MSwgMjA2XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzE1NywgMTE1LCA0OCwgMTA5LCA2NSwgODYsIDIwMywgMjM4XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk2LCAyOCwgNDEsIDIwNiwgNDgsIDM3LCA1MSwgMTY3XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb247IH1cbiAgICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgeyBpbnN0cnVjdGlvbkRhdGE6IGRhdGEsIHByb2dyYW1OYW1lOiBcImR1ZWxcIiB9KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkRHVlbEluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gJ0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz4gPVxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNhbmNlbFRpY2tldCB9ICYgUGFyc2VkQ2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2xvc2VUaWNrZXQgfSAmIFBhcnNlZENsb3NlVGlja2V0SW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ29tbWl0VGlja2V0cyB9ICYgUGFyc2VkQ29tbWl0VGlja2V0c0luc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNyZWF0ZVRpY2tldCB9ICYgUGFyc2VkQ3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZSB9ICYgUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0IH0gJiBQYXJzZWREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlcyB9ICYgUGFyc2VkRmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlIH0gJiBQYXJzZWRJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50IH0gJiBQYXJzZWRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlIH0gJiBQYXJzZWRKb2luUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uIH0gJiBQYXJzZWRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG5cblxuICAgICAgICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiBcbiAgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PlxuICAgICAgICApOiBQYXJzZWREdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uVHlwZSA9IGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0LCAuLi5wYXJzZUNhbmNlbFRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0LCAuLi5wYXJzZUNsb3NlVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHM6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzLCAuLi5wYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0LCAuLi5wYXJzZUNyZWF0ZVRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZSwgLi4ucGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVUaWNrZXQsIC4uLnBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzLCAuLi5wYXJzZUZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWUsIC4uLnBhcnNlSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50LCAuLi5wYXJzZUluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlLCAuLi5wYXJzZUpvaW5RdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiwgLi4ucGFyc2VQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCB7IGluc3RydWN0aW9uVHlwZTogaW5zdHJ1Y3Rpb25UeXBlIGFzIHN0cmluZywgcHJvZ3JhbU5hbWU6IFwiZHVlbFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW4gPSB7IGFjY291bnRzOiBEdWVsUGx1Z2luQWNjb3VudHM7IGluc3RydWN0aW9uczogRHVlbFBsdWdpbkluc3RydWN0aW9uczsgfVxuXG5leHBvcnQgdHlwZSBEdWVsUGx1Z2luQWNjb3VudHMgPSB7IG1hdGNoVGlja2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRNYXRjaFRpY2tldENvZGVjPiAmIFNlbGZGZXRjaEZ1bmN0aW9uczxNYXRjaFRpY2tldEFyZ3MsIE1hdGNoVGlja2V0PjsgcXVldWU6IFJldHVyblR5cGU8dHlwZW9mIGdldFF1ZXVlQ29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPFF1ZXVlQXJncywgUXVldWU+OyB0ZW5hbnQ6IFJldHVyblR5cGU8dHlwZW9mIGdldFRlbmFudENvZGVjPiAmIFNlbGZGZXRjaEZ1bmN0aW9uczxUZW5hbnRBcmdzLCBUZW5hbnQ+OyB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW5JbnN0cnVjdGlvbnMgPSB7IGNhbmNlbFRpY2tldDogKGlucHV0OiBDYW5jZWxUaWNrZXRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgY2xvc2VUaWNrZXQ6IChpbnB1dDogQ2xvc2VUaWNrZXRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBjb21taXRUaWNrZXRzOiAoaW5wdXQ6IE1ha2VPcHRpb25hbDxDb21taXRUaWNrZXRzSW5wdXQsIFwicGF5ZXJcIj4pID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbj4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGNyZWF0ZVRpY2tldDogKGlucHV0OiBDcmVhdGVUaWNrZXRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgZGVsZWdhdGVRdWV1ZTogKGlucHV0OiBNYWtlT3B0aW9uYWw8RGVsZWdhdGVRdWV1ZUFzeW5jSW5wdXQsIFwicGF5ZXJcIj4pID0+IFJldHVyblR5cGU8dHlwZW9mIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgZGVsZWdhdGVUaWNrZXQ6IChpbnB1dDogTWFrZU9wdGlvbmFsPERlbGVnYXRlVGlja2V0QXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgZmx1c2hNYXRjaGVzOiAoaW5wdXQ6IEZsdXNoTWF0Y2hlc0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbj4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGluaXRpYWxpemVRdWV1ZTogKGlucHV0OiBJbml0aWFsaXplUXVldWVBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVRlbmFudDogKGlucHV0OiBJbml0aWFsaXplVGVuYW50QXN5bmNJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBqb2luUXVldWU6IChpbnB1dDogSm9pblF1ZXVlQXN5bmNJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IHByb2Nlc3NVbmRlbGVnYXRpb246IChpbnB1dDogTWFrZU9wdGlvbmFsPFByb2Nlc3NVbmRlbGVnYXRpb25JbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgfVxuXG5leHBvcnQgdHlwZSBEdWVsUGx1Z2luUmVxdWlyZW1lbnRzID0gQ2xpZW50V2l0aFJwYzxHZXRBY2NvdW50SW5mb0FwaSAmIEdldE11bHRpcGxlQWNjb3VudHNBcGk+ICYgQ2xpZW50V2l0aFBheWVyICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uUGxhbm5pbmcgJiBDbGllbnRXaXRoVHJhbnNhY3Rpb25TZW5kaW5nXG5cbmV4cG9ydCBmdW5jdGlvbiBkdWVsUHJvZ3JhbSgpIHtcbiAgICByZXR1cm4gPFQgZXh0ZW5kcyBEdWVsUGx1Z2luUmVxdWlyZW1lbnRzPihjbGllbnQ6IFQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY2xpZW50LCBkdWVsOiA8RHVlbFBsdWdpbj57IGFjY291bnRzOiB7IG1hdGNoVGlja2V0OiBhZGRTZWxmRmV0Y2hGdW5jdGlvbnMoY2xpZW50LCBnZXRNYXRjaFRpY2tldENvZGVjKCkpLCBxdWV1ZTogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0UXVldWVDb2RlYygpKSwgdGVuYW50OiBhZGRTZWxmRmV0Y2hGdW5jdGlvbnMoY2xpZW50LCBnZXRUZW5hbnRDb2RlYygpKSB9LCBpbnN0cnVjdGlvbnM6IHsgY2FuY2VsVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGNsb3NlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgY29tbWl0VGlja2V0czogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBjcmVhdGVUaWNrZXQ6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgZGVsZWdhdGVRdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllciB9KSksIGRlbGVnYXRlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllciB9KSksIGZsdXNoTWF0Y2hlczogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Rmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24oaW5wdXQpKSwgaW5pdGlhbGl6ZVF1ZXVlOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGluaXRpYWxpemVUZW5hbnQ6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGpvaW5RdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBwcm9jZXNzVW5kZWxlZ2F0aW9uOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllci5hZGRyZXNzIH0pKSB9IH0gfTtcbiAgICB9O1xufVxuXG50eXBlIE1ha2VPcHRpb25hbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjsiXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9wcm9ncmFtcy9kdWVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx5REFBeUQsRUFBRSw2REFBNkQsRUFBRSw0REFBNEQsRUFBRSxXQUFXLEVBQTJQLE1BQU0sYUFBYSxDQUFDO0FBQzVpQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQTBELE1BQU0sNkJBQTZCLENBQUM7QUFDekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQW9HLE1BQU0sYUFBYSxDQUFDO0FBQ25MLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSx3Q0FBd0MsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBNnlCLE1BQU0saUJBQWlCLENBQUM7QUFFL2xELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUF5RyxDQUFDO0FBRTlJLE1BQU0sQ0FBTixJQUFZLFdBQTBDO0FBQXRELFdBQVksV0FBVztJQUFHLDJEQUFXLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsaURBQU0sQ0FBQTtBQUFDLENBQUMsRUFBMUMsV0FBVyxLQUFYLFdBQVcsUUFBK0I7QUFFdEQsTUFBTSxVQUFV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QyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxjQUFjLENBQUM7SUFBQyxDQUFDO0lBQ3pLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQUMsQ0FBQztJQUN0SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQztJQUFDLENBQUM7SUFDM0ssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUFDLENBQUM7SUFDNUssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQ3JLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUM7SUFBQyxDQUFDO0lBQzdLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMscUJBQXFCLENBQUM7SUFBQyxDQUFDO0lBQzNLLE1BQU0sSUFBSSxXQUFXLENBQUMsNkRBQTZELEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLENBQUM7QUFpQk8sTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxXQUM2QztJQUU3QyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxRQUFRLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDdkcsS0FBSyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzNHLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDM0csS0FBSyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRSxHQUFHLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzdHLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsZUFBZSxFQUFFLEdBQUcsK0JBQStCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDL0csS0FBSyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxnQ0FBZ0MsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUNqSCxLQUFLLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDbkcsS0FBSyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxtQ0FBbUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN2SCxLQUFLLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLHFDQUFxQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzNHLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsNERBQTRELEVBQUUsRUFBRSxlQUFlLEVBQUUsZUFBeUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0SyxDQUFDO0FBQ0wsQ0FBQztBQVVULE1BQU0sVUFBVSxXQUFXO0lBQ3ZCLE9BQU8sQ0FBbUMsTUFBUyxFQUFFLEVBQUU7UUFDbkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyb0QsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hUaWNrZXRDb2RlYywgZ2V0UXVldWVDb2RlYywgZ2V0VGVuYW50Q29kZWMsIHR5cGUgTWF0Y2hUaWNrZXQsIHR5cGUgTWF0Y2hUaWNrZXRBcmdzLCB0eXBlIFF1ZXVlLCB0eXBlIFF1ZXVlQXJncywgdHlwZSBUZW5hbnQsIHR5cGUgVGVuYW50QXJncyB9IGZyb20gJy4uL2FjY291bnRzJztcbmltcG9ydCB7IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYywgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsIGdldFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYywgcGFyc2VDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VDbG9zZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbiwgcGFyc2VDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb24sIHBhcnNlSm9pblF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uLCBwYXJzZVNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uLCB0eXBlIENhbmNlbFRpY2tldEFzeW5jSW5wdXQsIHR5cGUgQ2xvc2VUaWNrZXRBc3luY0lucHV0LCB0eXBlIENvbW1pdFRpY2tldHNJbnB1dCwgdHlwZSBDcmVhdGVUaWNrZXRBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlUXVldWVBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBGbHVzaE1hdGNoZXNJbnB1dCwgdHlwZSBJbml0aWFsaXplUXVldWVBc3luY0lucHV0LCB0eXBlIEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0LCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQsIHR5cGUgUGFyc2VkQ2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ2xvc2VUaWNrZXRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQsIHR5cGUgU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCB9IGZyb20gJy4uL2luc3RydWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBEVUVMX1BST0dSQU1fQUREUkVTUyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcblxuZXhwb3J0IGVudW0gRHVlbEFjY291bnQgeyBNYXRjaFRpY2tldCwgUXVldWUsIFRlbmFudCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeUR1ZWxBY2NvdW50KGFjY291bnQ6IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBEdWVsQWNjb3VudCB7XG4gICAgY29uc3QgZGF0YSA9ICdkYXRhJyBpbiBhY2NvdW50ID8gYWNjb3VudC5kYXRhIDogYWNjb3VudDtcbiAgICBpZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMSwgMTMxLCA0LCAxNTcsIDIwNywgNzksIDEyNiwgNV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50Lk1hdGNoVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyMDQsIDE2NywgNiwgMjQ3LCAyMCwgMzMsIDIsIDE4OF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2MSwgNDMsIDIxNSwgNTEsIDIzMiwgMjQyLCAyMDksIDE3MF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlRlbmFudDsgfVxuICAgIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fRkFJTEVEX1RPX0lERU5USUZZX0FDQ09VTlQsIHsgYWNjb3VudERhdGE6IGRhdGEsIHByb2dyYW1OYW1lOiBcImR1ZWxcIiB9KTtcbn1cblxuZXhwb3J0IGVudW0gRHVlbEluc3RydWN0aW9uIHsgQ2FuY2VsVGlja2V0LCBDbG9zZVRpY2tldCwgQ29tbWl0VGlja2V0cywgQ3JlYXRlVGlja2V0LCBEZWxlZ2F0ZVF1ZXVlLCBEZWxlZ2F0ZVRpY2tldCwgRmx1c2hNYXRjaGVzLCBJbml0aWFsaXplUXVldWUsIEluaXRpYWxpemVUZW5hbnQsIEpvaW5RdWV1ZSwgUHJvY2Vzc1VuZGVsZWdhdGlvbiwgU2V0dXBUaWNrZXRQZXJtaXNzaW9uIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uOiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogRHVlbEluc3RydWN0aW9uIHtcbiAgICBjb25zdCBkYXRhID0gJ2RhdGEnIGluIGluc3RydWN0aW9uID8gaW5zdHJ1Y3Rpb24uZGF0YSA6IGluc3RydWN0aW9uO1xuICAgIGlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzIxNiwgMjgsIDI0NywgMjA2LCAxOTUsIDE3MSwgMTAwLCAxNDNdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2NiwgMjA5LCAxMTQsIDE5NywgNzUsIDI3LCAxODIsIDExN10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjQ1LCAxOTksIDgxLCAwLCA2MiwgMTMzLCAxOCwgMjJdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ29tbWl0VGlja2V0czsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTYsIDE3OCwgMTIyLCAyNSwgMjEzLCA4NSwgOTYsIDEyOV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzMxLCAyMDAsIDEzOSwgMTI1LCA5MywgMjM5LCA4MywgODddKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk1LCAzLCA3OCwgNjQsIDEyOCwgMjM1LCAyMDksIDE3MV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNDksIDE0OCwgMTYzLCA3MSwgNzcsIDYzLCAxOTcsIDc2XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlczsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTc0LCAxMDIsIDEzMiwgMjMyLCA5MCwgMjAyLCAyNywgMjBdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs5NCwgMTIwLCAzNCwgMTg2LCA1NywgMTY3LCAyNDEsIDIwNl0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNTcsIDExNSwgNDgsIDEwOSwgNjUsIDg2LCAyMDMsIDIzOF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Kb2luUXVldWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzE5NiwgMjgsIDQxLCAyMDYsIDQ4LCAzNywgNTEsIDE2N10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNjQsIDI5LCA3LCAyMzUsIDE4MywgMjIzLCAxMSwgODVdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uU2V0dXBUaWNrZXRQZXJtaXNzaW9uOyB9XG4gICAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfSU5TVFJVQ1RJT04sIHsgaW5zdHJ1Y3Rpb25EYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZER1ZWxJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCc+ID1cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DYW5jZWxUaWNrZXQgfSAmIFBhcnNlZENhbmNlbFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0IH0gJiBQYXJzZWRDbG9zZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHMgfSAmIFBhcnNlZENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQgfSAmIFBhcnNlZENyZWF0ZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlUXVldWUgfSAmIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldCB9ICYgUGFyc2VkRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5GbHVzaE1hdGNoZXMgfSAmIFBhcnNlZEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVRdWV1ZSB9ICYgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVRlbmFudCB9ICYgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZSB9ICYgUGFyc2VkSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiB9ICYgUGFyc2VkUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiB9ICYgUGFyc2VkU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG5cblxuICAgICAgICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiBcbiAgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PlxuICAgICAgICApOiBQYXJzZWREdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uVHlwZSA9IGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0LCAuLi5wYXJzZUNhbmNlbFRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0LCAuLi5wYXJzZUNsb3NlVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHM6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzLCAuLi5wYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0LCAuLi5wYXJzZUNyZWF0ZVRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZSwgLi4ucGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVUaWNrZXQsIC4uLnBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzLCAuLi5wYXJzZUZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWUsIC4uLnBhcnNlSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50LCAuLi5wYXJzZUluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlLCAuLi5wYXJzZUpvaW5RdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiwgLi4ucGFyc2VQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiwgLi4ucGFyc2VTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fVU5SRUNPR05JWkVEX0lOU1RSVUNUSU9OX1RZUEUsIHsgaW5zdHJ1Y3Rpb25UeXBlOiBpbnN0cnVjdGlvblR5cGUgYXMgc3RyaW5nLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbiA9IHsgYWNjb3VudHM6IER1ZWxQbHVnaW5BY2NvdW50czsgaW5zdHJ1Y3Rpb25zOiBEdWVsUGx1Z2luSW5zdHJ1Y3Rpb25zOyB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW5BY2NvdW50cyA9IHsgbWF0Y2hUaWNrZXQ6IFJldHVyblR5cGU8dHlwZW9mIGdldE1hdGNoVGlja2V0Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPE1hdGNoVGlja2V0QXJncywgTWF0Y2hUaWNrZXQ+OyBxdWV1ZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UXVldWVDb2RlYz4gJiBTZWxmRmV0Y2hGdW5jdGlvbnM8UXVldWVBcmdzLCBRdWV1ZT47IHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VGVuYW50Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPFRlbmFudEFyZ3MsIFRlbmFudD47IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbkluc3RydWN0aW9ucyA9IHsgY2FuY2VsVGlja2V0OiAoaW5wdXQ6IENhbmNlbFRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBjbG9zZVRpY2tldDogKGlucHV0OiBDbG9zZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGNvbW1pdFRpY2tldHM6IChpbnB1dDogTWFrZU9wdGlvbmFsPENvbW1pdFRpY2tldHNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgY3JlYXRlVGlja2V0OiAoaW5wdXQ6IENyZWF0ZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVF1ZXVlOiAoaW5wdXQ6IE1ha2VPcHRpb25hbDxEZWxlZ2F0ZVF1ZXVlQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVRpY2tldDogKGlucHV0OiBNYWtlT3B0aW9uYWw8RGVsZWdhdGVUaWNrZXRBc3luY0lucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBmbHVzaE1hdGNoZXM6IChpbnB1dDogRmx1c2hNYXRjaGVzSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVF1ZXVlOiAoaW5wdXQ6IEluaXRpYWxpemVRdWV1ZUFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBpbml0aWFsaXplVGVuYW50OiAoaW5wdXQ6IEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGpvaW5RdWV1ZTogKGlucHV0OiBKb2luUXVldWVBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgcHJvY2Vzc1VuZGVsZWdhdGlvbjogKGlucHV0OiBNYWtlT3B0aW9uYWw8UHJvY2Vzc1VuZGVsZWdhdGlvbklucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBzZXR1cFRpY2tldFBlcm1pc3Npb246IChpbnB1dDogU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpblJlcXVpcmVtZW50cyA9IENsaWVudFdpdGhScGM8R2V0QWNjb3VudEluZm9BcGkgJiBHZXRNdWx0aXBsZUFjY291bnRzQXBpPiAmIENsaWVudFdpdGhQYXllciAmIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uU2VuZGluZ1xuXG5leHBvcnQgZnVuY3Rpb24gZHVlbFByb2dyYW0oKSB7XG4gICAgcmV0dXJuIDxUIGV4dGVuZHMgRHVlbFBsdWdpblJlcXVpcmVtZW50cz4oY2xpZW50OiBUKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmNsaWVudCwgZHVlbDogPER1ZWxQbHVnaW4+eyBhY2NvdW50czogeyBtYXRjaFRpY2tldDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0TWF0Y2hUaWNrZXRDb2RlYygpKSwgcXVldWU6IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucyhjbGllbnQsIGdldFF1ZXVlQ29kZWMoKSksIHRlbmFudDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0VGVuYW50Q29kZWMoKSkgfSwgaW5zdHJ1Y3Rpb25zOiB7IGNhbmNlbFRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBjbG9zZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGNvbW1pdFRpY2tldHM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbih7IC4uLmlucHV0LCBwYXllcjogaW5wdXQucGF5ZXIgPz8gY2xpZW50LnBheWVyIH0pKSwgY3JlYXRlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGRlbGVnYXRlUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBkZWxlZ2F0ZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBmbHVzaE1hdGNoZXM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGlucHV0KSksIGluaXRpYWxpemVRdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBpbml0aWFsaXplVGVuYW50OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBqb2luUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgcHJvY2Vzc1VuZGVsZWdhdGlvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIuYWRkcmVzcyB9KSksIHNldHVwVGlja2V0UGVybWlzc2lvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpIH0gfSB9O1xuICAgIH07XG59XG5cbnR5cGUgTWFrZU9wdGlvbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiBQYXJ0aWFsPFBpY2s8VCwgSz4+OyJdfQ==
|
package/dist/player.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare class MatchmakingPlayer {
|
|
|
8
8
|
getTicket(ticketPda: Address): Promise<import("@solana/accounts").MaybeAccount<import("./generated/duel/index.js").MatchTicket, string>>;
|
|
9
9
|
createTicket(tenant: Address): Promise<string>;
|
|
10
10
|
delegateTicket(player: Address, tenant: Address, validator?: Address): Promise<string>;
|
|
11
|
-
joinQueue(queue: Address, tenant: Address, playerData: Address): Promise<string>;
|
|
11
|
+
joinQueue(queue: Address, tenant: Address, playerData: Address, callbackProgram?: Address): Promise<string>;
|
|
12
12
|
cancelTicket(tenant: Address): Promise<string>;
|
|
13
13
|
closeTicket(tenant: Address): Promise<string>;
|
|
14
14
|
/**
|
|
@@ -19,6 +19,12 @@ export declare class MatchmakingPlayer {
|
|
|
19
19
|
opponent: Address;
|
|
20
20
|
matchId: bigint;
|
|
21
21
|
} | null>;
|
|
22
|
+
/**
|
|
23
|
+
* High-level: full matchmaking TEE entry flow.
|
|
24
|
+
* Creates ticket on L1, delegates it to TEE, waits for activation, then joins the queue.
|
|
25
|
+
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
26
|
+
*/
|
|
27
|
+
enterQueue(tenant: Address, queue: Address, playerData: Address, teeRpc: Rpc<SolanaRpcApi>, teeUrlWithToken: string, validator?: Address, callbackProgram?: Address): Promise<Address>;
|
|
22
28
|
/** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
|
|
23
29
|
withRpc(teeUrl: string): MatchmakingPlayer;
|
|
24
30
|
}
|
package/dist/player.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createSolanaRpc, } from "@solana/kit";
|
|
2
2
|
import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
|
|
3
3
|
import { sendInstruction } from "./transaction.js";
|
|
4
|
+
import { waitUntilPermissionActive } from "./tee.js";
|
|
4
5
|
import * as utils from "./utils.js";
|
|
5
6
|
const DUEL_PROGRAM_ID = "EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X";
|
|
6
7
|
export class MatchmakingPlayer {
|
|
@@ -32,14 +33,18 @@ export class MatchmakingPlayer {
|
|
|
32
33
|
}, { programAddress: this.programId });
|
|
33
34
|
return sendInstruction(this.rpc, ix, this.signer);
|
|
34
35
|
}
|
|
35
|
-
async joinQueue(queue, tenant, playerData) {
|
|
36
|
+
async joinQueue(queue, tenant, playerData, callbackProgram) {
|
|
36
37
|
const ix = await getJoinQueueInstructionAsync({
|
|
37
38
|
queue,
|
|
38
39
|
tenant,
|
|
39
40
|
playerData,
|
|
40
41
|
signer: this.signer,
|
|
41
42
|
}, { programAddress: this.programId });
|
|
42
|
-
|
|
43
|
+
const ixFinal = callbackProgram
|
|
44
|
+
? { ...ix, accounts: [...ix.accounts, { address: callbackProgram, role: 0 }] }
|
|
45
|
+
: ix;
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
return sendInstruction(this.rpc, ixFinal, this.signer);
|
|
43
48
|
}
|
|
44
49
|
async cancelTicket(tenant) {
|
|
45
50
|
const ix = await getCancelTicketInstructionAsync({
|
|
@@ -79,9 +84,24 @@ export class MatchmakingPlayer {
|
|
|
79
84
|
}
|
|
80
85
|
return null;
|
|
81
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* High-level: full matchmaking TEE entry flow.
|
|
89
|
+
* Creates ticket on L1, delegates it to TEE, waits for activation, then joins the queue.
|
|
90
|
+
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
91
|
+
*/
|
|
92
|
+
async enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator, callbackProgram) {
|
|
93
|
+
const player = this.signer.address;
|
|
94
|
+
const ticketPda = await this.getTicketPda(player, tenant);
|
|
95
|
+
await this.createTicket(tenant);
|
|
96
|
+
await this.delegateTicket(player, tenant, validator);
|
|
97
|
+
await waitUntilPermissionActive(teeUrlWithToken, ticketPda);
|
|
98
|
+
const teeClient = new MatchmakingPlayer(teeRpc, this.signer, this.programId);
|
|
99
|
+
await teeClient.joinQueue(queue, tenant, playerData, callbackProgram);
|
|
100
|
+
return ticketPda;
|
|
101
|
+
}
|
|
82
102
|
/** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
|
|
83
103
|
withRpc(teeUrl) {
|
|
84
104
|
return new MatchmakingPlayer(createSolanaRpc(teeUrl), this.signer, this.programId);
|
|
85
105
|
}
|
|
86
106
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sZUFBZSxHQUFHLDhDQUF5RCxDQUFDO0FBRWxGLE1BQU0sT0FBTyxpQkFBaUI7SUFLNUIsWUFDRSxHQUFzQixFQUN0QixNQUF5QixFQUN6QixZQUFxQixlQUFlO1FBRXBDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZSxFQUFFLE1BQWU7UUFDakQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQWtCO1FBQ2hDLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFlO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sK0JBQStCLENBQUM7WUFDL0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE1BQU07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QU07b0JBQUUsU0FBUztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHlDQUF5QztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGZldGNoTWF5YmVNYXRjaFRpY2tldCxcbiAgYWNjb3VudFR5cGUsXG59IGZyb20gXCIuL2dlbmVyYXRlZC9kdWVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZW5kSW5zdHJ1Y3Rpb24gfSBmcm9tIFwiLi90cmFuc2FjdGlvbi5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuY29uc3QgRFVFTF9QUk9HUkFNX0lEID0gXCJFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WFwiIGFzIEFkZHJlc3M7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdmFsaWRhdG9yPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiB0aWNrZXRQZGEsXG4gICAgICBwYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB2YWxpZGF0b3IsXG4gICAgICBhY2NvdW50VHlwZTogYWNjb3VudFR5cGUoXCJUaWNrZXRcIiwgeyBwbGF5ZXIsIHRlbmFudCB9KSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgam9pblF1ZXVlKFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICBwbGF5ZXJEYXRhOiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBxdWV1ZSxcbiAgICAgIHRlbmFudCxcbiAgICAgIHBsYXllckRhdGEsXG4gICAgICBzaWduZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjYW5jZWxUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwbGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKipcbiAgICogUG9sbCBMMSBmb3IgdGlja2V0IHN0YXR1cy5cbiAgICogUmV0dXJucyBtYXRjaCBpbmZvIHdoZW4gc3RhdHVzIGJlY29tZXMgTWF0Y2hlZC5cbiAgICovXG4gIGFzeW5jIHBvbGxGb3JNYXRjaChcbiAgICB0aWNrZXRQZGE6IEFkZHJlc3MsXG4gICAgbWF4QXR0ZW1wdHMgPSA2MCxcbiAgICBwb2xsSW50ZXJ2YWwgPSAyMDAwLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHsgb3Bwb25lbnQ6IEFkZHJlc3M7IG1hdGNoSWQ6IGJpZ2ludCB9IHwgbnVsbD4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4QXR0ZW1wdHM7IGkrKykge1xuICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIG51bGw7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBwb2xsSW50ZXJ2YWwpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1heWJlVGlja2V0ID0gYXdhaXQgZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICAgICAgICBpZiAoIW1heWJlVGlja2V0LmV4aXN0cykgY29udGludWU7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG1heWJlVGlja2V0LmRhdGEuc3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLl9fa2luZCA9PT0gXCJNYXRjaGVkXCIpIHtcbiAgICAgICAgICByZXR1cm4geyBvcHBvbmVudDogc3RhdHVzLm9wcG9uZW50LCBtYXRjaElkOiBzdGF0dXMubWF0Y2hJZCB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGRlY29kZSBlcnJvcnMgZHVyaW5nIHRyYW5zaXRpb25cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nUGxheWVyIHBvaW50aW5nIGF0IGEgVEVFIFJQQyBlbmRwb2ludC4gKi9cbiAgd2l0aFJwYyh0ZWVVcmw6IHN0cmluZyk6IE1hdGNobWFraW5nUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IE1hdGNobWFraW5nUGxheWVyKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxNQUFNLCtCQUErQixDQUFD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QUFNLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFdEUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGZldGNoTWF5YmVNYXRjaFRpY2tldCxcbiAgYWNjb3VudFR5cGUsXG59IGZyb20gXCIuL2dlbmVyYXRlZC9kdWVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZW5kSW5zdHJ1Y3Rpb24gfSBmcm9tIFwiLi90cmFuc2FjdGlvbi5qc1wiO1xuaW1wb3J0IHsgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSB9IGZyb20gXCIuL3RlZS5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuY29uc3QgRFVFTF9QUk9HUkFNX0lEID0gXCJFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WFwiIGFzIEFkZHJlc3M7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdmFsaWRhdG9yPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiB0aWNrZXRQZGEsXG4gICAgICBwYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB2YWxpZGF0b3IsXG4gICAgICBhY2NvdW50VHlwZTogYWNjb3VudFR5cGUoXCJUaWNrZXRcIiwgeyBwbGF5ZXIsIHRlbmFudCB9KSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgam9pblF1ZXVlKFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICBwbGF5ZXJEYXRhOiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgcGxheWVyRGF0YSxcbiAgICAgIHNpZ25lcjogdGhpcy5zaWduZXIsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgY29uc3QgaXhGaW5hbCA9IGNhbGxiYWNrUHJvZ3JhbVxuICAgICAgPyB7IC4uLml4LCBhY2NvdW50czogWy4uLml4LmFjY291bnRzLCB7IGFkZHJlc3M6IGNhbGxiYWNrUHJvZ3JhbSwgcm9sZTogMCBhcyBjb25zdCB9XSB9XG4gICAgICA6IGl4O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhGaW5hbCBhcyBhbnksIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwbGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjbG9zZVRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xsIEwxIGZvciB0aWNrZXQgc3RhdHVzLlxuICAgKiBSZXR1cm5zIG1hdGNoIGluZm8gd2hlbiBzdGF0dXMgYmVjb21lcyBNYXRjaGVkLlxuICAgKi9cbiAgYXN5bmMgcG9sbEZvck1hdGNoKFxuICAgIHRpY2tldFBkYTogQWRkcmVzcyxcbiAgICBtYXhBdHRlbXB0cyA9IDYwLFxuICAgIHBvbGxJbnRlcnZhbCA9IDIwMDAsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyBvcHBvbmVudDogQWRkcmVzczsgbWF0Y2hJZDogYmlnaW50IH0gfCBudWxsPiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhBdHRlbXB0czsgaSsrKSB7XG4gICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gbnVsbDtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHBvbGxJbnRlcnZhbCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWF5YmVUaWNrZXQgPSBhd2FpdCBmZXRjaE1heWJlTWF0Y2hUaWNrZXQodGhpcy5ycGMsIHRpY2tldFBkYSk7XG4gICAgICAgIGlmICghbWF5YmVUaWNrZXQuZXhpc3RzKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbWF5YmVUaWNrZXQuZGF0YS5zdGF0dXM7XG4gICAgICAgIGlmIChzdGF0dXMuX19raW5kID09PSBcIk1hdGNoZWRcIikge1xuICAgICAgICAgIHJldHVybiB7IG9wcG9uZW50OiBzdGF0dXMub3Bwb25lbnQsIG1hdGNoSWQ6IHN0YXR1cy5tYXRjaElkIH07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgZGVjb2RlIGVycm9ycyBkdXJpbmcgdHJhbnNpdGlvblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWdoLWxldmVsOiBmdWxsIG1hdGNobWFraW5nIFRFRSBlbnRyeSBmbG93LlxuICAgKiBDcmVhdGVzIHRpY2tldCBvbiBMMSwgZGVsZWdhdGVzIGl0IHRvIFRFRSwgd2FpdHMgZm9yIGFjdGl2YXRpb24sIHRoZW4gam9pbnMgdGhlIHF1ZXVlLlxuICAgKiBVc2UgaW5kaXZpZHVhbCBtZXRob2RzIChjcmVhdGVUaWNrZXQsIGRlbGVnYXRlVGlja2V0LCBqb2luUXVldWUpIGFzIGVzY2FwZSBoYXRjaGVzIGlmIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGVudGVyUXVldWUoXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgdGVlUnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRpY2tldCh0ZW5hbnQpO1xuICAgIGF3YWl0IHRoaXMuZGVsZWdhdGVUaWNrZXQocGxheWVyLCB0ZW5hbnQsIHZhbGlkYXRvcik7XG4gICAgYXdhaXQgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSh0ZWVVcmxXaXRoVG9rZW4sIHRpY2tldFBkYSk7XG5cbiAgICBjb25zdCB0ZWVDbGllbnQgPSBuZXcgTWF0Y2htYWtpbmdQbGF5ZXIodGVlUnBjLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICAgIGF3YWl0IHRlZUNsaWVudC5qb2luUXVldWUocXVldWUsIHRlbmFudCwgcGxheWVyRGF0YSwgY2FsbGJhY2tQcm9ncmFtKTtcblxuICAgIHJldHVybiB0aWNrZXRQZGE7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nUGxheWVyIHBvaW50aW5nIGF0IGEgVEVFIFJQQyBlbmRwb2ludC4gKi9cbiAgd2l0aFJwYyh0ZWVVcmw6IHN0cmluZyk6IE1hdGNobWFraW5nUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IE1hdGNobWFraW5nUGxheWVyKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
package/src/admin.ts
CHANGED
|
@@ -127,7 +127,6 @@ export class MatchmakingAdmin {
|
|
|
127
127
|
queue: Address,
|
|
128
128
|
tenant: Address,
|
|
129
129
|
ticketPdas: Address[],
|
|
130
|
-
callbackProgram?: Address,
|
|
131
130
|
): Promise<string> {
|
|
132
131
|
const ix = getFlushMatchesInstruction({
|
|
133
132
|
queue,
|
|
@@ -135,14 +134,12 @@ export class MatchmakingAdmin {
|
|
|
135
134
|
signer: this.signer,
|
|
136
135
|
}, { programAddress: this.programId });
|
|
137
136
|
|
|
138
|
-
const remainingAccounts = [
|
|
139
|
-
...ticketPdas.map((address) => ({ address, role: 1 as const })),
|
|
140
|
-
...(callbackProgram ? [{ address: callbackProgram, role: 0 as const }] : []),
|
|
141
|
-
];
|
|
142
|
-
|
|
143
137
|
const ixWithRemaining = {
|
|
144
138
|
...ix,
|
|
145
|
-
accounts: [
|
|
139
|
+
accounts: [
|
|
140
|
+
...ix.accounts,
|
|
141
|
+
...ticketPdas.map((address) => ({ address, role: 1 as const })),
|
|
142
|
+
],
|
|
146
143
|
};
|
|
147
144
|
|
|
148
145
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -170,6 +167,33 @@ export class MatchmakingAdmin {
|
|
|
170
167
|
return sendInstruction(this.rpc, ixWithRemaining as any, this.signer);
|
|
171
168
|
}
|
|
172
169
|
|
|
170
|
+
/**
|
|
171
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
172
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
173
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
174
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
175
|
+
*/
|
|
176
|
+
async resolveMatches(
|
|
177
|
+
queue: Address,
|
|
178
|
+
tenant: Address,
|
|
179
|
+
ticketPdas: Address[],
|
|
180
|
+
settlementDelayMs = 3000,
|
|
181
|
+
): Promise<void> {
|
|
182
|
+
const queueData = await this.getQueue(queue);
|
|
183
|
+
const pendingTicketPdas = await Promise.all(
|
|
184
|
+
queueData.data.pendingMatches.map((pm) =>
|
|
185
|
+
utils.deriveTicketPda(this.programId, pm.player, tenant),
|
|
186
|
+
),
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
if (pendingTicketPdas.length > 0) {
|
|
190
|
+
await this.flushMatches(queue, tenant, pendingTicketPdas);
|
|
191
|
+
await new Promise((r) => setTimeout(r, settlementDelayMs));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
await this.commitTickets(tenant, ticketPdas);
|
|
195
|
+
}
|
|
196
|
+
|
|
173
197
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
174
198
|
withRpc(teeUrl: string): MatchmakingAdmin {
|
|
175
199
|
return new MatchmakingAdmin(createSolanaRpc(teeUrl), this.signer, this.programId);
|
package/src/duel.json
CHANGED
|
@@ -984,11 +984,6 @@
|
|
|
984
984
|
"code": 6005,
|
|
985
985
|
"name": "InvalidTicketAccount",
|
|
986
986
|
"msg": "Invalid ticket account"
|
|
987
|
-
},
|
|
988
|
-
{
|
|
989
|
-
"code": 6006,
|
|
990
|
-
"name": "MissingCallbackProgram",
|
|
991
|
-
"msg": "Missing or invalid callback program in remaining accounts"
|
|
992
987
|
}
|
|
993
988
|
],
|
|
994
989
|
"types": [
|
|
@@ -21,14 +21,12 @@ export const DUEL_ERROR__INVALID_ELO_SIZE = 0x1773; // 6003
|
|
|
21
21
|
export const DUEL_ERROR__INVALID_TICKET_STATUS = 0x1774; // 6004
|
|
22
22
|
/** InvalidTicketAccount: Invalid ticket account */
|
|
23
23
|
export const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 0x1775; // 6005
|
|
24
|
-
/** MissingCallbackProgram: Missing or invalid callback program in remaining accounts */
|
|
25
|
-
export const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 0x1776; // 6006
|
|
26
24
|
|
|
27
|
-
export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof
|
|
25
|
+
export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof DUEL_ERROR__UNAUTHORIZED;
|
|
28
26
|
|
|
29
27
|
let duelErrorMessages: Record<DuelError, string> | undefined;
|
|
30
28
|
if (process.env.NODE_ENV !== 'production') {
|
|
31
|
-
duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [
|
|
29
|
+
duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [DUEL_ERROR__UNAUTHORIZED]: `Unauthorized access` };
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
export function getDuelErrorMessage(code: DuelError): string {
|
|
@@ -65,10 +65,10 @@ if (!accounts.bufferPda.value) {
|
|
|
65
65
|
accounts.bufferPda.value = await getProgramDerivedAddress({ programAddress: 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X' as Address<'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X'>, seeds: [getBytesEncoder().encode(new Uint8Array([98, 117, 102, 102, 101, 114])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
66
66
|
}
|
|
67
67
|
if (!accounts.delegationRecordPda.value) {
|
|
68
|
-
accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress
|
|
68
|
+
accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
69
69
|
}
|
|
70
70
|
if (!accounts.delegationMetadataPda.value) {
|
|
71
|
-
accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress
|
|
71
|
+
accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110, 45, 109, 101, 116, 97, 100, 97, 116, 97])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
72
72
|
}
|
|
73
73
|
if (!accounts.ownerProgram.value) {
|
|
74
74
|
accounts.ownerProgram.value = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X' as Address<'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X'>;
|
|
@@ -65,10 +65,10 @@ if (!accounts.bufferPda.value) {
|
|
|
65
65
|
accounts.bufferPda.value = await getProgramDerivedAddress({ programAddress: 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X' as Address<'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X'>, seeds: [getBytesEncoder().encode(new Uint8Array([98, 117, 102, 102, 101, 114])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
66
66
|
}
|
|
67
67
|
if (!accounts.delegationRecordPda.value) {
|
|
68
|
-
accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress
|
|
68
|
+
accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
69
69
|
}
|
|
70
70
|
if (!accounts.delegationMetadataPda.value) {
|
|
71
|
-
accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress
|
|
71
|
+
accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110, 45, 109, 101, 116, 97, 100, 97, 116, 97])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
72
72
|
}
|
|
73
73
|
if (!accounts.ownerProgram.value) {
|
|
74
74
|
accounts.ownerProgram.value = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X' as Address<'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X'>;
|
|
@@ -16,4 +16,5 @@ export * from './flushMatches';
|
|
|
16
16
|
export * from './initializeQueue';
|
|
17
17
|
export * from './initializeTenant';
|
|
18
18
|
export * from './joinQueue';
|
|
19
|
-
export * from './processUndelegation';
|
|
19
|
+
export * from './processUndelegation';
|
|
20
|
+
export * from './setupTicketPermission';
|
|
@@ -15,7 +15,7 @@ export const JOIN_QUEUE_DISCRIMINATOR = new Uint8Array([157, 115, 48, 109, 65, 8
|
|
|
15
15
|
export function getJoinQueueDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(JOIN_QUEUE_DISCRIMINATOR); }
|
|
16
16
|
|
|
17
17
|
export type JoinQueueInstruction<TProgram extends string = typeof DUEL_PROGRAM_ADDRESS, TAccountQueue extends string | AccountMeta<string> = string, TAccountTenant extends string | AccountMeta<string> = string, TAccountPlayerData extends string | AccountMeta<string> = string, TAccountPlayerTicket extends string | AccountMeta<string> = string, TAccountSigner extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> =
|
|
18
|
-
Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountQueue extends string ? WritableAccount<TAccountQueue> : TAccountQueue, TAccountTenant extends string ? ReadonlyAccount<TAccountTenant> : TAccountTenant, TAccountPlayerData extends string ?
|
|
18
|
+
Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountQueue extends string ? WritableAccount<TAccountQueue> : TAccountQueue, TAccountTenant extends string ? ReadonlyAccount<TAccountTenant> : TAccountTenant, TAccountPlayerData extends string ? ReadonlyAccount<TAccountPlayerData> : TAccountPlayerData, TAccountPlayerTicket extends string ? WritableAccount<TAccountPlayerTicket> : TAccountPlayerTicket, TAccountSigner extends string ? ReadonlySignerAccount<TAccountSigner> & AccountSignerMeta<TAccountSigner> : TAccountSigner, ...TRemainingAccounts]>;
|
|
19
19
|
|
|
20
20
|
export type JoinQueueInstructionData = { discriminator: ReadonlyUint8Array; };
|
|
21
21
|
|
|
@@ -46,7 +46,7 @@ export async function getJoinQueueInstructionAsync<TAccountQueue extends string,
|
|
|
46
46
|
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
47
47
|
|
|
48
48
|
// Original accounts.
|
|
49
|
-
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable:
|
|
49
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable: false }, playerTicket: { value: input.playerTicket ?? null, isWritable: true }, signer: { value: input.signer ?? null, isWritable: false } }
|
|
50
50
|
const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedInstructionAccount>;
|
|
51
51
|
|
|
52
52
|
|
|
@@ -72,7 +72,7 @@ export function getJoinQueueInstruction<TAccountQueue extends string, TAccountTe
|
|
|
72
72
|
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
73
73
|
|
|
74
74
|
// Original accounts.
|
|
75
|
-
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable:
|
|
75
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable: false }, playerTicket: { value: input.playerTicket ?? null, isWritable: true }, signer: { value: input.signer ?? null, isWritable: false } }
|
|
76
76
|
const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedInstructionAccount>;
|
|
77
77
|
|
|
78
78
|
|