@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
package/README.md
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
# @1upmonster/duel
|
|
2
2
|
|
|
3
|
-
TypeScript SDK for **Duel**
|
|
3
|
+
TypeScript SDK for **Duel** — a privacy-preserving matchmaking protocol on Solana using MagicBlock Ephemeral Rollups (TEE).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- **Privacy-First**: Player ELO and queue status hidden in TEE
|
|
8
|
-
- **Client-Side**: Players join queues directly from their wallets (no CPI required)
|
|
9
|
-
- **Automatic Matching**: TEE processes matches based on ELO windows
|
|
10
|
-
- **Easy Integration**: Simple SDK for both game owners and players
|
|
5
|
+
Built on [`@solana/kit`](https://github.com/anza-xyz/kit). No `@coral-xyz/anchor` or legacy `web3.js` dependency.
|
|
11
6
|
|
|
12
7
|
## Installation
|
|
13
8
|
|
|
@@ -17,85 +12,141 @@ npm install @1upmonster/duel
|
|
|
17
12
|
|
|
18
13
|
## Quick Start
|
|
19
14
|
|
|
20
|
-
### For Game Owners
|
|
21
|
-
|
|
22
|
-
Initialize matchmaking infrastructure for your game:
|
|
15
|
+
### For Game Owners (`MatchmakingAdmin`)
|
|
23
16
|
|
|
24
17
|
```typescript
|
|
25
18
|
import { MatchmakingAdmin } from "@1upmonster/duel";
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
19
|
+
import { createSolanaRpc, createKeyPairSignerFromBytes } from "@solana/kit";
|
|
20
|
+
import * as crypto from "crypto";
|
|
21
|
+
|
|
22
|
+
const rpc = createSolanaRpc("https://api.devnet.solana.com");
|
|
23
|
+
const signer = await createKeyPairSignerFromBytes(/* your keypair bytes */);
|
|
24
|
+
const admin = new MatchmakingAdmin(rpc, signer);
|
|
25
|
+
|
|
26
|
+
// 1. Initialize Tenant — stores callback config on L1
|
|
27
|
+
const callbackDiscriminator = Array.from(
|
|
28
|
+
crypto.createHash("sha256").update("global:on_match_found").digest().slice(0, 8)
|
|
29
|
+
);
|
|
30
|
+
await admin.initializeTenant(YOUR_GAME_PROGRAM_ID, {
|
|
31
|
+
eloWindow: 100n, // max ELO diff for a match
|
|
32
|
+
eloOffset: 40, // byte offset of ELO in player account
|
|
33
|
+
eloDataType: "u64", // u8 | u16 | u32 | u64
|
|
34
|
+
callbackProgramId: YOUR_GAME_PROGRAM_ID,
|
|
35
|
+
callbackDiscriminator,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
// 2.
|
|
39
|
-
const
|
|
38
|
+
// 2. Create and delegate queue to TEE
|
|
39
|
+
const authority = signer.address;
|
|
40
40
|
await admin.initializeQueue(authority, tenantPda);
|
|
41
|
-
|
|
42
|
-
// 3. Delegate to TEE Validator
|
|
43
41
|
await admin.delegateQueue(authority, validatorPubkey);
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### ELO Data Types
|
|
47
|
-
|
|
48
|
-
The SDK supports different ELO data types to optimize storage:
|
|
49
|
-
- `'u8'`: 0-255 (1 byte)
|
|
50
|
-
- `'u16'`: 0-65,535 (2 bytes) **[DEFAULT]**
|
|
51
|
-
- `'u32'`: 0-4,294,967,295 (4 bytes)
|
|
52
|
-
- `'u64'`: 0-18,446,744,073,709,551,615 (8 bytes)
|
|
53
42
|
|
|
54
|
-
|
|
43
|
+
// 3. After players have matched, flush opponent tickets + commit all to L1
|
|
44
|
+
await admin.resolveMatches(queuePda, tenantPda, [p1TicketPda, p2TicketPda]);
|
|
45
|
+
```
|
|
55
46
|
|
|
56
|
-
|
|
47
|
+
### For Players (`MatchmakingPlayer`)
|
|
57
48
|
|
|
58
49
|
```typescript
|
|
59
50
|
import { MatchmakingPlayer } from "@1upmonster/duel";
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
51
|
+
import { getAuthToken } from "@1upmonster/duel";
|
|
52
|
+
import { createSolanaRpc } from "@solana/kit";
|
|
53
|
+
|
|
54
|
+
const l1Rpc = createSolanaRpc("https://api.devnet.solana.com");
|
|
55
|
+
const player = new MatchmakingPlayer(l1Rpc, signer);
|
|
56
|
+
|
|
57
|
+
// High-level: creates ticket on L1, delegates to TEE, joins queue in one call
|
|
58
|
+
const { token } = await getAuthToken("https://tee.magicblock.app", signer);
|
|
59
|
+
const teeRpc = createSolanaRpc(`https://tee.magicblock.app?token=${token}`);
|
|
60
|
+
|
|
61
|
+
const ticketPda = await player.enterQueue(
|
|
62
|
+
tenantPda,
|
|
63
|
+
queuePda,
|
|
64
|
+
playerProfilePda,
|
|
65
|
+
teeRpc,
|
|
66
|
+
`https://tee.magicblock.app?token=${token}`,
|
|
67
|
+
validatorPubkey, // optional TEE validator
|
|
68
|
+
YOUR_GAME_PROGRAM_ID, // optional: callback fires via Tenant PDA when matched
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// Poll L1 until the ticket shows Matched status
|
|
72
|
+
const match = await player.pollForMatch(ticketPda);
|
|
73
|
+
// match = { opponent: Address, matchId: bigint }
|
|
65
74
|
```
|
|
66
75
|
|
|
67
76
|
## API Reference
|
|
68
77
|
|
|
69
78
|
### `MatchmakingAdmin`
|
|
70
79
|
|
|
71
|
-
**Constructor
|
|
72
|
-
- `new MatchmakingAdmin(provider: AnchorProvider, programId?: PublicKey)`
|
|
80
|
+
**Constructor:** `new MatchmakingAdmin(rpc, signer, programId?)`
|
|
73
81
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
| Method | Description |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `initializeTenant(tenantProgramId, options?)` | Create Tenant PDA with ELO config and optional callback |
|
|
85
|
+
| `initializeQueue(authority, tenant)` | Create Queue PDA linked to tenant |
|
|
86
|
+
| `delegateQueue(authority, validator?)` | Delegate queue to TEE (makes it private) |
|
|
87
|
+
| `flushMatches(queue, tenant, ticketPdas)` | Update opponent tickets from pending matches |
|
|
88
|
+
| `commitTickets(tenant, ticketPdas)` | Push matched ticket state back to L1 |
|
|
89
|
+
| `resolveMatches(queue, tenant, ticketPdas, settlementDelayMs?)` | High-level: flush + wait + commit |
|
|
90
|
+
| `getQueue(queuePda)` | Fetch queue account |
|
|
91
|
+
| `getQueuePda(authority)` | Derive queue PDA |
|
|
92
|
+
| `getTenantPda(authority)` | Derive tenant PDA |
|
|
80
93
|
|
|
81
94
|
### `MatchmakingPlayer`
|
|
82
95
|
|
|
83
|
-
**Constructor
|
|
84
|
-
|
|
96
|
+
**Constructor:** `new MatchmakingPlayer(rpc, signer, programId?)`
|
|
97
|
+
|
|
98
|
+
| Method | Description |
|
|
99
|
+
|---|---|
|
|
100
|
+
| `enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator?, callbackProgram?)` | High-level: create ticket → delegate → join queue |
|
|
101
|
+
| `createTicket(tenant)` | Create MatchTicket PDA on L1 |
|
|
102
|
+
| `delegateTicket(player, tenant, validator?)` | Delegate ticket to TEE |
|
|
103
|
+
| `joinQueue(queue, tenant, playerData, callbackProgram?)` | Join queue in TEE; callback fires via Tenant PDA on match |
|
|
104
|
+
| `cancelTicket(tenant)` | Cancel search (sets ticket to Cancelled) |
|
|
105
|
+
| `closeTicket(tenant)` | Reclaim rent after match or cancel |
|
|
106
|
+
| `pollForMatch(ticketPda, maxAttempts?, pollInterval?)` | Poll L1 until ticket is Matched |
|
|
107
|
+
| `getTicket(ticketPda)` | Fetch ticket account |
|
|
108
|
+
| `withRpc(teeUrl)` | Return a new client pointing at a different RPC |
|
|
109
|
+
|
|
110
|
+
### `getAuthToken(rpcUrl, signer)`
|
|
111
|
+
|
|
112
|
+
Authenticate with the MagicBlock TEE. Returns `{ token, expiresAt }`. The token is passed as `?token=<jwt>` in the TEE RPC URL.
|
|
113
|
+
|
|
114
|
+
### `waitUntilPermissionActive(teeUrlWithToken, pda)`
|
|
85
115
|
|
|
86
|
-
|
|
87
|
-
- `joinQueue(queue, tenant, playerData)` - Join matchmaking queue
|
|
116
|
+
Poll the TEE until a delegated PDA is active (authorized users list is non-empty).
|
|
88
117
|
|
|
89
|
-
## How
|
|
118
|
+
## How the Callback Works
|
|
119
|
+
|
|
120
|
+
When a match is found during `join_queue`, the duel program fires a CPI callback **signed by the Tenant PDA** via `invoke_signed`. This is cryptographically unforgeable — game programs can verify the signer is the Tenant PDA without any additional access control:
|
|
121
|
+
|
|
122
|
+
```rust
|
|
123
|
+
pub fn on_match_found(
|
|
124
|
+
ctx: Context<OnMatchFound>,
|
|
125
|
+
player1: Pubkey,
|
|
126
|
+
player2: Pubkey,
|
|
127
|
+
match_id: u64,
|
|
128
|
+
) -> Result<()> {
|
|
129
|
+
// ctx.accounts.signer.key() == Tenant PDA — verified by the runtime
|
|
130
|
+
// Only the duel program can produce this signer
|
|
131
|
+
Ok(())
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#[derive(Accounts)]
|
|
135
|
+
pub struct OnMatchFound<'info> {
|
|
136
|
+
pub signer: Signer<'info>, // will be the Tenant PDA
|
|
137
|
+
}
|
|
138
|
+
```
|
|
90
139
|
|
|
91
|
-
|
|
92
|
-
2. **Matching**: TEE automatically processes matches based on ELO windows
|
|
93
|
-
3. **Privacy**: Queue state is only visible within the TEE, not on L1
|
|
140
|
+
Pass the callback program as `remaining_accounts` in `joinQueue` (or via `callbackProgram` param in the SDK) for the callback to fire.
|
|
94
141
|
|
|
95
|
-
##
|
|
142
|
+
## ELO Data Types
|
|
96
143
|
|
|
97
|
-
|
|
98
|
-
|
|
144
|
+
| Type | Bytes | Range |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| `"u8"` | 1 | 0–255 |
|
|
147
|
+
| `"u16"` | 2 | 0–65,535 |
|
|
148
|
+
| `"u32"` | 4 | 0–4,294,967,295 |
|
|
149
|
+
| `"u64"` | 8 | 0–18,446,744,073,709,551,615 |
|
|
99
150
|
|
|
100
151
|
## License
|
|
101
152
|
|
package/dist/admin.d.ts
CHANGED
|
@@ -20,8 +20,15 @@ export declare class MatchmakingAdmin {
|
|
|
20
20
|
initializeTenant(tenantProgramId: Address, options?: InitializeTenantOptions): Promise<string>;
|
|
21
21
|
initializeQueue(_authority: Address, tenant: Address): Promise<string>;
|
|
22
22
|
delegateQueue(authority: Address, validator?: Address): Promise<string>;
|
|
23
|
-
flushMatches(queue: Address, tenant: Address, ticketPdas: Address[]
|
|
23
|
+
flushMatches(queue: Address, tenant: Address, ticketPdas: Address[]): Promise<string>;
|
|
24
24
|
commitTickets(tenant: Address, ticketPdas: Address[]): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
27
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
28
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
29
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
30
|
+
*/
|
|
31
|
+
resolveMatches(queue: Address, tenant: Address, ticketPdas: Address[], settlementDelayMs?: number): Promise<void>;
|
|
25
32
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
26
33
|
withRpc(teeUrl: string): MatchmakingAdmin;
|
|
27
34
|
}
|
package/dist/admin.js
CHANGED
|
@@ -62,19 +62,18 @@ export class MatchmakingAdmin {
|
|
|
62
62
|
}, { programAddress: this.programId });
|
|
63
63
|
return sendInstruction(this.rpc, ix, this.signer);
|
|
64
64
|
}
|
|
65
|
-
async flushMatches(queue, tenant, ticketPdas
|
|
65
|
+
async flushMatches(queue, tenant, ticketPdas) {
|
|
66
66
|
const ix = getFlushMatchesInstruction({
|
|
67
67
|
queue,
|
|
68
68
|
tenant,
|
|
69
69
|
signer: this.signer,
|
|
70
70
|
}, { programAddress: this.programId });
|
|
71
|
-
const remainingAccounts = [
|
|
72
|
-
...ticketPdas.map((address) => ({ address, role: 1 })),
|
|
73
|
-
...(callbackProgram ? [{ address: callbackProgram, role: 0 }] : []),
|
|
74
|
-
];
|
|
75
71
|
const ixWithRemaining = {
|
|
76
72
|
...ix,
|
|
77
|
-
accounts: [
|
|
73
|
+
accounts: [
|
|
74
|
+
...ix.accounts,
|
|
75
|
+
...ticketPdas.map((address) => ({ address, role: 1 })),
|
|
76
|
+
],
|
|
78
77
|
};
|
|
79
78
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
79
|
return sendInstruction(this.rpc, ixWithRemaining, this.signer);
|
|
@@ -94,9 +93,24 @@ export class MatchmakingAdmin {
|
|
|
94
93
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
94
|
return sendInstruction(this.rpc, ixWithRemaining, this.signer);
|
|
96
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
98
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
99
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
100
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
101
|
+
*/
|
|
102
|
+
async resolveMatches(queue, tenant, ticketPdas, settlementDelayMs = 3000) {
|
|
103
|
+
const queueData = await this.getQueue(queue);
|
|
104
|
+
const pendingTicketPdas = await Promise.all(queueData.data.pendingMatches.map((pm) => utils.deriveTicketPda(this.programId, pm.player, tenant)));
|
|
105
|
+
if (pendingTicketPdas.length > 0) {
|
|
106
|
+
await this.flushMatches(queue, tenant, pendingTicketPdas);
|
|
107
|
+
await new Promise((r) => setTimeout(r, settlementDelayMs));
|
|
108
|
+
}
|
|
109
|
+
await this.commitTickets(tenant, ticketPdas);
|
|
110
|
+
}
|
|
97
111
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
98
112
|
withRpc(teeUrl) {
|
|
99
113
|
return new MatchmakingAdmin(createSolanaRpc(teeUrl), this.signer, this.programId);
|
|
100
114
|
}
|
|
101
115
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsR0FLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQWFwQyxTQUFTLFVBQVUsQ0FBQyxRQUFxQjtJQUN2QyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWtCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENB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QUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQVUsRUFBRSxDQUFDLENBQUM7YUFDaEU7U0FDRixDQUFDO1FBRUYsOERBQThEO1FBQzlELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBc0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbixcbiAgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLFxuICBmZXRjaFF1ZXVlLFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgdHlwZSBFbG9EYXRhVHlwZSA9IFwidThcIiB8IFwidTE2XCIgfCBcInUzMlwiIHwgXCJ1NjRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplVGVuYW50T3B0aW9ucyB7XG4gIGF1dGhvcml0eT86IEFkZHJlc3M7XG4gIGVsb1dpbmRvdz86IGJpZ2ludDtcbiAgZWxvT2Zmc2V0PzogbnVtYmVyO1xuICBlbG9EYXRhVHlwZT86IEVsb0RhdGFUeXBlO1xuICBjYWxsYmFja1Byb2dyYW1JZD86IEFkZHJlc3MgfCBudWxsO1xuICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I/OiBudW1iZXJbXSB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEVsb1NpemUoZGF0YVR5cGU6IEVsb0RhdGFUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ1OFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwidTE2XCI6IHJldHVybiAyO1xuICAgIGNhc2UgXCJ1MzJcIjogcmV0dXJuIDQ7XG4gICAgY2FzZSBcInU2NFwiOiByZXR1cm4gODtcbiAgfVxufVxuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nQWRtaW4ge1xuICBwdWJsaWMgcnBjOiBScGM8U29sYW5hUnBjQXBpPjtcbiAgcHVibGljIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI7XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IEFkZHJlc3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyLFxuICAgIHByb2dyYW1JZDogQWRkcmVzcyA9IERVRUxfUFJPR1JBTV9JRCxcbiAgKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zaWduZXIgPSBzaWduZXI7XG4gICAgdGhpcy5wcm9ncmFtSWQgPSBwcm9ncmFtSWQ7XG4gIH1cblxuICBhc3luYyBnZXRRdWV1ZVBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlUXVldWVQZGEodGhpcy5wcm9ncmFtSWQsIGF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyBnZXRUZW5hbnRQZGEoYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRlbmFudFBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlKHF1ZXVlUGRhOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGZldGNoUXVldWUodGhpcy5ycGMsIHF1ZXVlUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVUZW5hbnQoXG4gICAgdGVuYW50UHJvZ3JhbUlkOiBBZGRyZXNzLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXplVGVuYW50T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbG9XaW5kb3cgPSAxMDBuLFxuICAgICAgZWxvT2Zmc2V0ID0gNDAsXG4gICAgICBlbG9EYXRhVHlwZSA9IFwidTE2XCIsXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZCA9IG51bGwsXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3IgPSBudWxsLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZWxvU2l6ZSA9IGdldEVsb1NpemUoZWxvRGF0YVR5cGUpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgYXV0aG9yaXR5OiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudFByb2dyYW1JZCxcbiAgICAgIGVsb09mZnNldCxcbiAgICAgIGVsb1NpemUsXG4gICAgICBlbG9XaW5kb3csXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZDogY2FsbGJhY2tQcm9ncmFtSWQgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IGNhbGxiYWNrUHJvZ3JhbUlkIH0gOiB7IF9fb3B0aW9uOiBcIk5vbmVcIiB9LFxuICAgICAgY2FsbGJhY2tEaXNjcmltaW5hdG9yOiBjYWxsYmFja0Rpc2NyaW1pbmF0b3JcbiAgICAgICAgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IG5ldyBVaW50OEFycmF5KGNhbGxiYWNrRGlzY3JpbWluYXRvcikgfVxuICAgICAgICA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG5cbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVF1ZXVlKFxuICAgIF9hdXRob3JpdHk6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBkZWxlZ2F0ZVF1ZXVlKFxuICAgIGF1dGhvcml0eTogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHF1ZXVlUGRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVBkYShhdXRob3JpdHkpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgICBjYWxsYmFja1Byb2dyYW0/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Rmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24oe1xuICAgICAgcXVldWUsXG4gICAgICB0ZW5hbnQsXG4gICAgICBzaWduZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHMgPSBbXG4gICAgICAuLi50aWNrZXRQZGFzLm1hcCgoYWRkcmVzcykgPT4gKHsgYWRkcmVzcywgcm9sZTogMSBhcyBjb25zdCB9KSksXG4gICAgICAuLi4oY2FsbGJhY2tQcm9ncmFtID8gW3sgYWRkcmVzczogY2FsbGJhY2tQcm9ncmFtLCByb2xlOiAwIGFzIGNvbnN0IH1dIDogW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBpeFdpdGhSZW1haW5pbmcgPSB7XG4gICAgICAuLi5peCxcbiAgICAgIGFjY291bnRzOiBbLi4uaXguYWNjb3VudHMsIC4uLnJlbWFpbmluZ0FjY291bnRzXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjb21taXRUaWNrZXRzKFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICB0aWNrZXRQZGFzOiBBZGRyZXNzW10sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBnZXRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24oe1xuICAgICAgdGVuYW50LFxuICAgICAgcGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgaXhXaXRoUmVtYWluaW5nID0ge1xuICAgICAgLi4uaXgsXG4gICAgICBhY2NvdW50czogW1xuICAgICAgICAuLi5peC5hY2NvdW50cyxcbiAgICAgICAgLi4udGlja2V0UGRhcy5tYXAoKGFkZHJlc3MpID0+ICh7IGFkZHJlc3MsIHJvbGU6IDEgYXMgY29uc3QgfSkpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsR0FLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQWFwQyxTQUFTLFVBQVUsQ0FBQyxRQUFxQjtJQUN2QyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWtCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENB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RSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsS0FBYyxFQUNkLE1BQWUsRUFDZixVQUFxQixFQUNyQixpQkFBaUIsR0FBRyxJQUFJO1FBRXhCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDdkMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQ3pELENBQ0YsQ0FBQztRQUVGLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbixcbiAgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLFxuICBmZXRjaFF1ZXVlLFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgdHlwZSBFbG9EYXRhVHlwZSA9IFwidThcIiB8IFwidTE2XCIgfCBcInUzMlwiIHwgXCJ1NjRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplVGVuYW50T3B0aW9ucyB7XG4gIGF1dGhvcml0eT86IEFkZHJlc3M7XG4gIGVsb1dpbmRvdz86IGJpZ2ludDtcbiAgZWxvT2Zmc2V0PzogbnVtYmVyO1xuICBlbG9EYXRhVHlwZT86IEVsb0RhdGFUeXBlO1xuICBjYWxsYmFja1Byb2dyYW1JZD86IEFkZHJlc3MgfCBudWxsO1xuICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I/OiBudW1iZXJbXSB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEVsb1NpemUoZGF0YVR5cGU6IEVsb0RhdGFUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ1OFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwidTE2XCI6IHJldHVybiAyO1xuICAgIGNhc2UgXCJ1MzJcIjogcmV0dXJuIDQ7XG4gICAgY2FzZSBcInU2NFwiOiByZXR1cm4gODtcbiAgfVxufVxuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nQWRtaW4ge1xuICBwdWJsaWMgcnBjOiBScGM8U29sYW5hUnBjQXBpPjtcbiAgcHVibGljIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI7XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IEFkZHJlc3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyLFxuICAgIHByb2dyYW1JZDogQWRkcmVzcyA9IERVRUxfUFJPR1JBTV9JRCxcbiAgKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zaWduZXIgPSBzaWduZXI7XG4gICAgdGhpcy5wcm9ncmFtSWQgPSBwcm9ncmFtSWQ7XG4gIH1cblxuICBhc3luYyBnZXRRdWV1ZVBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlUXVldWVQZGEodGhpcy5wcm9ncmFtSWQsIGF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyBnZXRUZW5hbnRQZGEoYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRlbmFudFBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlKHF1ZXVlUGRhOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGZldGNoUXVldWUodGhpcy5ycGMsIHF1ZXVlUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVUZW5hbnQoXG4gICAgdGVuYW50UHJvZ3JhbUlkOiBBZGRyZXNzLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXplVGVuYW50T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbG9XaW5kb3cgPSAxMDBuLFxuICAgICAgZWxvT2Zmc2V0ID0gNDAsXG4gICAgICBlbG9EYXRhVHlwZSA9IFwidTE2XCIsXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZCA9IG51bGwsXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3IgPSBudWxsLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZWxvU2l6ZSA9IGdldEVsb1NpemUoZWxvRGF0YVR5cGUpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgYXV0aG9yaXR5OiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudFByb2dyYW1JZCxcbiAgICAgIGVsb09mZnNldCxcbiAgICAgIGVsb1NpemUsXG4gICAgICBlbG9XaW5kb3csXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZDogY2FsbGJhY2tQcm9ncmFtSWQgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IGNhbGxiYWNrUHJvZ3JhbUlkIH0gOiB7IF9fb3B0aW9uOiBcIk5vbmVcIiB9LFxuICAgICAgY2FsbGJhY2tEaXNjcmltaW5hdG9yOiBjYWxsYmFja0Rpc2NyaW1pbmF0b3JcbiAgICAgICAgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IG5ldyBVaW50OEFycmF5KGNhbGxiYWNrRGlzY3JpbWluYXRvcikgfVxuICAgICAgICA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG5cbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVF1ZXVlKFxuICAgIF9hdXRob3JpdHk6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBkZWxlZ2F0ZVF1ZXVlKFxuICAgIGF1dGhvcml0eTogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHF1ZXVlUGRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVBkYShhdXRob3JpdHkpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgc2lnbmVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY29tbWl0VGlja2V0cyhcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uKHtcbiAgICAgIHRlbmFudCxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWw6IGZ1bGwgbWF0Y2ggcmVzb2x1dGlvbiBmbG93IChydW5zIG9uIFRFRSkuXG4gICAqIFJlYWRzIHRoZSBxdWV1ZSdzIHBlbmRpbmcgbWF0Y2hlcywgZmx1c2hlcyB0aGVtICh1cGRhdGluZyBvcHBvbmVudCB0aWNrZXRzKSxcbiAgICogd2FpdHMgZm9yIFRFRSBzZXR0bGVtZW50LCB0aGVuIGNvbW1pdHMgYWxsIHRpY2tldHMgYmFjayB0byBMMS5cbiAgICogVXNlIGluZGl2aWR1YWwgbWV0aG9kcyAoZmx1c2hNYXRjaGVzLCBjb21taXRUaWNrZXRzKSBhcyBlc2NhcGUgaGF0Y2hlcyBpZiBuZWVkZWQuXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWF0Y2hlcyhcbiAgICBxdWV1ZTogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICAgIHNldHRsZW1lbnREZWxheU1zID0gMzAwMCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVldWVEYXRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZShxdWV1ZSk7XG4gICAgY29uc3QgcGVuZGluZ1RpY2tldFBkYXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHF1ZXVlRGF0YS5kYXRhLnBlbmRpbmdNYXRjaGVzLm1hcCgocG0pID0+XG4gICAgICAgIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcG0ucGxheWVyLCB0ZW5hbnQpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKHBlbmRpbmdUaWNrZXRQZGFzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZmx1c2hNYXRjaGVzKHF1ZXVlLCB0ZW5hbnQsIHBlbmRpbmdUaWNrZXRQZGFzKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHNldHRsZW1lbnREZWxheU1zKSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jb21taXRUaWNrZXRzKHRlbmFudCwgdGlja2V0UGRhcyk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -18,9 +18,7 @@ export declare const DUEL_ERROR__INVALID_ELO_SIZE = 6003;
|
|
|
18
18
|
export declare const DUEL_ERROR__INVALID_TICKET_STATUS = 6004;
|
|
19
19
|
/** InvalidTicketAccount: Invalid ticket account */
|
|
20
20
|
export declare const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 6005;
|
|
21
|
-
|
|
22
|
-
export declare const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 6006;
|
|
23
|
-
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__MISSING_CALLBACK_PROGRAM | typeof DUEL_ERROR__UNAUTHORIZED;
|
|
21
|
+
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;
|
|
24
22
|
export declare function getDuelErrorMessage(code: DuelError): string;
|
|
25
23
|
export declare function isDuelError<TProgramErrorCode extends DuelError>(error: unknown, transactionMessage: {
|
|
26
24
|
instructions: Record<number, {
|
|
@@ -19,11 +19,9 @@ export const DUEL_ERROR__INVALID_ELO_SIZE = 0x1773; // 6003
|
|
|
19
19
|
export const DUEL_ERROR__INVALID_TICKET_STATUS = 0x1774; // 6004
|
|
20
20
|
/** InvalidTicketAccount: Invalid ticket account */
|
|
21
21
|
export const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 0x1775; // 6005
|
|
22
|
-
/** MissingCallbackProgram: Missing or invalid callback program in remaining accounts */
|
|
23
|
-
export const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 0x1776; // 6006
|
|
24
22
|
let duelErrorMessages;
|
|
25
23
|
if (process.env.NODE_ENV !== 'production') {
|
|
26
|
-
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`, [
|
|
24
|
+
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` };
|
|
27
25
|
}
|
|
28
26
|
export function getDuelErrorMessage(code) {
|
|
29
27
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -34,4 +32,4 @@ export function getDuelErrorMessage(code) {
|
|
|
34
32
|
export function isDuelError(error, transactionMessage, code) {
|
|
35
33
|
return isProgramError(error, transactionMessage, DUEL_PROGRAM_ADDRESS, code);
|
|
36
34
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9lcnJvcnMvZHVlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFnRixNQUFNLGFBQWEsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDdkQscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDM0Qsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDaEUsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFJakUsSUFBSSxpQkFBd0QsQ0FBQztBQUM3RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO0lBQzFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLHFDQUFxQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxnREFBZ0QsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUseURBQXlELEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztBQUM3YyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWU7SUFDakQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxPQUFRLGlCQUErQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxPQUFPLG9EQUFvRCxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixLQUFjLEVBQ2Qsa0JBQWlGLEVBQ2pGLElBQXdCO0lBRTFCLE9BQU8sY0FBYyxDQUFvQixLQUFLLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGlzUHJvZ3JhbUVycm9yLCB0eXBlIEFkZHJlc3MsIHR5cGUgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NLCB0eXBlIFNvbGFuYUVycm9yIH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgRFVFTF9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5cbi8qKiBJbnZhbGlkVGVuYW50OiBBY2NvdW50IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIFRlbmFudCBQcm9ncmFtICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlQgPSAweDE3NzA7IC8vIDYwMDBcbi8qKiBEYXRhVG9vU21hbGw6IEFjY291bnQgZGF0YSB0b28gc21hbGwgZm9yIEVMTyByZWFkICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fREFUQV9UT09fU01BTEwgPSAweDE3NzE7IC8vIDYwMDFcbi8qKiBVbmF1dGhvcml6ZWQ6IFVuYXV0aG9yaXplZCBhY2Nlc3MgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19VTkFVVEhPUklaRUQgPSAweDE3NzI7IC8vIDYwMDJcbi8qKiBJbnZhbGlkRWxvU2l6ZTogSW52YWxpZCBFTE8gc2l6ZSAobXVzdCBiZSAxLCAyLCA0LCBvciA4IGJ5dGVzKSAqL1xuZXhwb3J0IGNvbnN0IERVRUxfRVJST1JfX0lOVkFMSURfRUxPX1NJWkUgPSAweDE3NzM7IC8vIDYwMDNcbi8qKiBJbnZhbGlkVGlja2V0U3RhdHVzOiBJbnZhbGlkIHRpY2tldCBzdGF0dXMgZm9yIHRoaXMgb3BlcmF0aW9uICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTID0gMHgxNzc0OyAvLyA2MDA0XG4vKiogSW52YWxpZFRpY2tldEFjY291bnQ6IEludmFsaWQgdGlja2V0IGFjY291bnQgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UID0gMHgxNzc1OyAvLyA2MDA1XG5cbmV4cG9ydCB0eXBlIER1ZWxFcnJvciA9IHR5cGVvZiBEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTCB8IHR5cGVvZiBEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVEVOQU5UIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVElDS0VUX0FDQ09VTlQgfCB0eXBlb2YgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTIHwgdHlwZW9mIERVRUxfRVJST1JfX1VOQVVUSE9SSVpFRDtcblxubGV0IGR1ZWxFcnJvck1lc3NhZ2VzOiBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZHVlbEVycm9yTWVzc2FnZXMgPSB7IFtEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTF06IGBBY2NvdW50IGRhdGEgdG9vIHNtYWxsIGZvciBFTE8gcmVhZGAsIFtEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFXTogYEludmFsaWQgRUxPIHNpemUgKG11c3QgYmUgMSwgMiwgNCwgb3IgOCBieXRlcylgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlRdOiBgQWNjb3VudCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBUZW5hbnQgUHJvZ3JhbWAsIFtEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UXTogYEludmFsaWQgdGlja2V0IGFjY291bnRgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTXTogYEludmFsaWQgdGlja2V0IHN0YXR1cyBmb3IgdGhpcyBvcGVyYXRpb25gLCBbRFVFTF9FUlJPUl9fVU5BVVRIT1JJWkVEXTogYFVuYXV0aG9yaXplZCBhY2Nlc3NgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWVsRXJyb3JNZXNzYWdlKGNvZGU6IER1ZWxFcnJvcik6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIChkdWVsRXJyb3JNZXNzYWdlcyBhcyBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+KVtjb2RlXTtcbiAgfVxuXG4gIHJldHVybiAnRXJyb3IgbWVzc2FnZSBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24gYnVuZGxlcy4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEdWVsRXJyb3I8VFByb2dyYW1FcnJvckNvZGUgZXh0ZW5kcyBEdWVsRXJyb3I+KFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIHRyYW5zYWN0aW9uTWVzc2FnZTogeyBpbnN0cnVjdGlvbnM6IFJlY29yZDxudW1iZXIsIHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3MgfT4gfSxcbiAgICBjb2RlPzogVFByb2dyYW1FcnJvckNvZGUsXG4pOiBlcnJvciBpcyBTb2xhbmFFcnJvcjx0eXBlb2YgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NPiAmIFJlYWRvbmx5PHsgY29udGV4dDogUmVhZG9ubHk8eyBjb2RlOiBUUHJvZ3JhbUVycm9yQ29kZSB9PiB9PiB7XG4gIHJldHVybiBpc1Byb2dyYW1FcnJvcjxUUHJvZ3JhbUVycm9yQ29kZT4oZXJyb3IsIHRyYW5zYWN0aW9uTWVzc2FnZSwgRFVFTF9QUk9HUkFNX0FERFJFU1MsIGNvZGUpO1xufSJdfQ==
|
|
@@ -33,10 +33,10 @@ export async function getDelegateQueueInstructionAsync(input, config) {
|
|
|
33
33
|
accounts.bufferPda.value = await getProgramDerivedAddress({ programAddress: 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X', seeds: [getBytesEncoder().encode(new Uint8Array([98, 117, 102, 102, 101, 114])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
|
|
34
34
|
}
|
|
35
35
|
if (!accounts.delegationRecordPda.value) {
|
|
36
|
-
accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress
|
|
36
|
+
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))] });
|
|
37
37
|
}
|
|
38
38
|
if (!accounts.delegationMetadataPda.value) {
|
|
39
|
-
accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress
|
|
39
|
+
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))] });
|
|
40
40
|
}
|
|
41
41
|
if (!accounts.ownerProgram.value) {
|
|
42
42
|
accounts.ownerProgram.value = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X';
|
|
@@ -87,4 +87,4 @@ export function parseDelegateQueueInstruction(instruction) {
|
|
|
87
87
|
};
|
|
88
88
|
return { programAddress: instruction.programAddress, accounts: { bufferPda: getNextAccount(), delegationRecordPda: getNextAccount(), delegationMetadataPda: getNextAccount(), pda: getNextAccount(), payer: getNextAccount(), validator: getNextOptionalAccount(), ownerProgram: getNextAccount(), delegationProgram: getNextAccount(), systemProgram: getNextAccount() }, data: getDelegateQueueInstructionDataDecoder().decode(instruction.data) };
|
|
89
89
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9pbnN0cnVjdGlvbnMvZGVsZWdhdGVRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQXFTLE1BQU0sYUFBYSxDQUFDO0FBQzNqQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBMEMsTUFBTSxVQUFVLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLFVBQVUsa0NBQWtDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBUzFJLE1BQU0sVUFBVSxzQ0FBc0M7SUFDbEQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FB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QUUsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdmIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBEVUVMX1BST0dSQU1fQUREUkVTUyB9IGZyb20gJy4uL3Byb2dyYW1zJztcbmltcG9ydCB7IGdldEFjY291bnRUeXBlRGVjb2RlciwgZ2V0QWNjb3VudFR5cGVFbmNvZGVyLCB0eXBlIEFjY291bnRUeXBlLCB0eXBlIEFjY291bnRUeXBlQXJncyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFTEVHQVRFX1FVRVVFX0RJU0NSSU1JTkFUT1IgPSBuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZURpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCJERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaFwiLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50QnVmZmVyUGRhPiA6IFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhPiA6IFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+IDogVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGRhPiA6IFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVTaWduZXJBY2NvdW50PFRBY2NvdW50UGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQYXllcj4gOiBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFZhbGlkYXRvcj4gOiBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRPd25lclByb2dyYW0+IDogVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT4gOiBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPiA6IFRBY2NvdW50U3lzdGVtUHJvZ3JhbSwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgYWNjb3VudFR5cGU6IEFjY291bnRUeXBlOyAgfTtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUFyZ3MgPSB7IGFjY291bnRUeXBlOiBBY2NvdW50VHlwZUFyZ3M7ICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRW5jb2RlcjxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV0sIFsnYWNjb3VudFR5cGUnLCBnZXRBY2NvdW50VHlwZUVuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUiB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBEZWNvZGVyPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydhY2NvdW50VHlwZScsIGdldEFjY291bnRUeXBlRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUNvZGVjKCk6IENvZGVjPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzLCBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE/OiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVBc3luY0lucHV0PFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gRFVFTF9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmJ1ZmZlclBkYS52YWx1ZSkge1xuYWNjb3VudHMuYnVmZmVyUGRhLnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3M6ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPiwgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk4LCAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNF0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBkYVwiLCBhY2NvdW50cy5wZGEudmFsdWUpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzczogJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+LCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTAwLCAxMDEsIDEwOCwgMTAxLCAxMDMsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTBdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwZGFcIiwgYWNjb3VudHMucGRhLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzOiAnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnIGFzIEFkZHJlc3M8J0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJz4sIHNlZWRzOiBbZ2V0Qnl0ZXNFbmNvZGVyKCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMDAsIDEwMSwgMTA4LCAxMDEsIDEwMywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDUsIDEwOSwgMTAxLCAxMTYsIDk3LCAxMDAsIDk3LCAxMTYsIDk3XSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGRhXCIsIGFjY291bnRzLnBkYS52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSA9ICdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCcgYXMgQWRkcmVzczwnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnPjtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImJ1ZmZlclBkYVwiLCBhY2NvdW50cy5idWZmZXJQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25SZWNvcmRQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvblJlY29yZFBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvbk1ldGFkYXRhUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYSksIGdldEFjY291bnRNZXRhKFwicGRhXCIsIGFjY291bnRzLnBkYSksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInZhbGlkYXRvclwiLCBhY2NvdW50cy52YWxpZGF0b3IpLCBnZXRBY2NvdW50TWV0YShcIm93bmVyUHJvZ3JhbVwiLCBhY2NvdW50cy5vd25lclByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25Qcm9ncmFtXCIsIGFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBEZWxlZ2F0ZVF1ZXVlSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE6IEFkZHJlc3M8VEFjY291bnRCdWZmZXJQZGE+O1xuZGVsZWdhdGlvblJlY29yZFBkYTogQWRkcmVzczxUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGE+O1xuZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50T3duZXJQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBEZWxlZ2F0ZVF1ZXVlSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgYnVmZmVyUGRhOiB7IHZhbHVlOiBpbnB1dC5idWZmZXJQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBkZWxlZ2F0aW9uUmVjb3JkUGRhOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uUmVjb3JkUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwZGE6IHsgdmFsdWU6IGlucHV0LnBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBheWVyOiB7IHZhbHVlOiBpbnB1dC5wYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHZhbGlkYXRvcjogeyB2YWx1ZTogaW5wdXQudmFsaWRhdG9yID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIG93bmVyUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQub3duZXJQcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIGRlbGVnYXRpb25Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBzeXN0ZW1Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5zeXN0ZW1Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cbi8vIE9yaWdpbmFsIGFyZ3MuXG5jb25zdCBhcmdzID0geyAuLi5pbnB1dCwgIH07XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSA9ICdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCcgYXMgQWRkcmVzczwnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnPjtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImJ1ZmZlclBkYVwiLCBhY2NvdW50cy5idWZmZXJQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25SZWNvcmRQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvblJlY29yZFBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvbk1ldGFkYXRhUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYSksIGdldEFjY291bnRNZXRhKFwicGRhXCIsIGFjY291bnRzLnBkYSksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInZhbGlkYXRvclwiLCBhY2NvdW50cy52YWxpZGF0b3IpLCBnZXRBY2NvdW50TWV0YShcIm93bmVyUHJvZ3JhbVwiLCBhY2NvdW50cy5vd25lclByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25Qcm9ncmFtXCIsIGFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5idWZmZXJQZGE6IFRBY2NvdW50TWV0YXNbMF07XG5kZWxlZ2F0aW9uUmVjb3JkUGRhOiBUQWNjb3VudE1ldGFzWzFdO1xuZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBUQWNjb3VudE1ldGFzWzJdO1xucGRhOiBUQWNjb3VudE1ldGFzWzNdO1xucGF5ZXI6IFRBY2NvdW50TWV0YXNbNF07XG52YWxpZGF0b3I/OiBUQWNjb3VudE1ldGFzWzVdIHwgdW5kZWZpbmVkO1xub3duZXJQcm9ncmFtOiBUQWNjb3VudE1ldGFzWzZdO1xuZGVsZWdhdGlvblByb2dyYW06IFRBY2NvdW50TWV0YXNbN107XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzhdO1xufTtcbmRhdGE6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgOSkge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogOSB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuY29uc3QgZ2V0TmV4dE9wdGlvbmFsQWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSBnZXROZXh0QWNjb3VudCgpO1xuICByZXR1cm4gYWNjb3VudE1ldGEuYWRkcmVzcyA9PT0gRFVFTF9QUk9HUkFNX0FERFJFU1MgPyB1bmRlZmluZWQgOiBhY2NvdW50TWV0YTtcbn07XG4gIHJldHVybiB7IHByb2dyYW1BZGRyZXNzOiBpbnN0cnVjdGlvbi5wcm9ncmFtQWRkcmVzcywgYWNjb3VudHM6IHsgYnVmZmVyUGRhOiBnZXROZXh0QWNjb3VudCgpLCBkZWxlZ2F0aW9uUmVjb3JkUGRhOiBnZXROZXh0QWNjb3VudCgpLCBkZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IGdldE5leHRBY2NvdW50KCksIHBkYTogZ2V0TmV4dEFjY291bnQoKSwgcGF5ZXI6IGdldE5leHRBY2NvdW50KCksIHZhbGlkYXRvcjogZ2V0TmV4dE9wdGlvbmFsQWNjb3VudCgpLCBvd25lclByb2dyYW06IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpLCBzeXN0ZW1Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpIH0sIGRhdGE6IGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkuZGVjb2RlKGluc3RydWN0aW9uLmRhdGEpIH07XG59Il19
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9pbnN0cnVjdGlvbnMvZGVsZWdhdGVRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQXFTLE1BQU0sYUFBYSxDQUFDO0FBQzNqQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBMEMsTUFBTSxVQUFVLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLFVBQVUsa0NBQWtDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBUzFJLE1BQU0sVUFBVSxzQ0FBc0M7SUFDbEQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FB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QUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdmIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBEVUVMX1BST0dSQU1fQUREUkVTUyB9IGZyb20gJy4uL3Byb2dyYW1zJztcbmltcG9ydCB7IGdldEFjY291bnRUeXBlRGVjb2RlciwgZ2V0QWNjb3VudFR5cGVFbmNvZGVyLCB0eXBlIEFjY291bnRUeXBlLCB0eXBlIEFjY291bnRUeXBlQXJncyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFTEVHQVRFX1FVRVVFX0RJU0NSSU1JTkFUT1IgPSBuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZURpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCJERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaFwiLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50QnVmZmVyUGRhPiA6IFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhPiA6IFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+IDogVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGRhPiA6IFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVTaWduZXJBY2NvdW50PFRBY2NvdW50UGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQYXllcj4gOiBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFZhbGlkYXRvcj4gOiBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRPd25lclByb2dyYW0+IDogVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT4gOiBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPiA6IFRBY2NvdW50U3lzdGVtUHJvZ3JhbSwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgYWNjb3VudFR5cGU6IEFjY291bnRUeXBlOyAgfTtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUFyZ3MgPSB7IGFjY291bnRUeXBlOiBBY2NvdW50VHlwZUFyZ3M7ICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRW5jb2RlcjxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV0sIFsnYWNjb3VudFR5cGUnLCBnZXRBY2NvdW50VHlwZUVuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUiB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBEZWNvZGVyPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydhY2NvdW50VHlwZScsIGdldEFjY291bnRUeXBlRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUNvZGVjKCk6IENvZGVjPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzLCBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE/OiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVBc3luY0lucHV0PFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gRFVFTF9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmJ1ZmZlclBkYS52YWx1ZSkge1xuYWNjb3VudHMuYnVmZmVyUGRhLnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3M6ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPiwgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk4LCAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNF0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBkYVwiLCBhY2NvdW50cy5wZGEudmFsdWUpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzEwMCwgMTAxLCAxMDgsIDEwMSwgMTAzLCA5NywgMTE2LCAxMDUsIDExMSwgMTEwXSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGRhXCIsIGFjY291bnRzLnBkYS52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzEwMCwgMTAxLCAxMDgsIDEwMSwgMTAzLCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA0NSwgMTA5LCAxMDEsIDExNiwgOTcsIDEwMCwgOTcsIDExNiwgOTddKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwZGFcIiwgYWNjb3VudHMucGRhLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLm93bmVyUHJvZ3JhbS52YWx1ZSA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlID0gJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+O1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwiYnVmZmVyUGRhXCIsIGFjY291bnRzLmJ1ZmZlclBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblJlY29yZFBkYVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uUmVjb3JkUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uTWV0YWRhdGFQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwZGFcIiwgYWNjb3VudHMucGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllciksIGdldEFjY291bnRNZXRhKFwidmFsaWRhdG9yXCIsIGFjY291bnRzLnZhbGlkYXRvciksIGdldEFjY291bnRNZXRhKFwib3duZXJQcm9ncmFtXCIsIGFjY291bnRzLm93bmVyUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblByb2dyYW1cIiwgYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZShhcmdzIGFzIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50VmFsaWRhdG9yIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9ICB7XG4gIGJ1ZmZlclBkYTogQWRkcmVzczxUQWNjb3VudEJ1ZmZlclBkYT47XG5kZWxlZ2F0aW9uUmVjb3JkUGRhOiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IEFkZHJlc3M8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+O1xucGRhOiBBZGRyZXNzPFRBY2NvdW50UGRhPjtcbnBheWVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFBheWVyPjtcbnZhbGlkYXRvcj86IEFkZHJlc3M8VEFjY291bnRWYWxpZGF0b3I+O1xub3duZXJQcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudE93bmVyUHJvZ3JhbT47XG5kZWxlZ2F0aW9uUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT47XG5zeXN0ZW1Qcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudFN5c3RlbVByb2dyYW0+O1xuYWNjb3VudFR5cGU6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzW1wiYWNjb3VudFR5cGVcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+IHtcbiAgLy8gUHJvZ3JhbSBhZGRyZXNzLlxuY29uc3QgcHJvZ3JhbUFkZHJlc3MgPSBjb25maWc/LnByb2dyYW1BZGRyZXNzID8/IERVRUxfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBidWZmZXJQZGE6IHsgdmFsdWU6IGlucHV0LmJ1ZmZlclBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25SZWNvcmRQZGE6IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25SZWNvcmRQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBkZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25NZXRhZGF0YVBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBkYTogeyB2YWx1ZTogaW5wdXQucGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgdmFsaWRhdG9yOiB7IHZhbHVlOiBpbnB1dC52YWxpZGF0b3IgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgb3duZXJQcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5vd25lclByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgZGVsZWdhdGlvblByb2dyYW06IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIHN5c3RlbVByb2dyYW06IHsgdmFsdWU6IGlucHV0LnN5c3RlbVByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gT3JpZ2luYWwgYXJncy5cbmNvbnN0IGFyZ3MgPSB7IC4uLmlucHV0LCAgfTtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLm93bmVyUHJvZ3JhbS52YWx1ZSA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlID0gJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+O1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwiYnVmZmVyUGRhXCIsIGFjY291bnRzLmJ1ZmZlclBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblJlY29yZFBkYVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uUmVjb3JkUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uTWV0YWRhdGFQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwZGFcIiwgYWNjb3VudHMucGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllciksIGdldEFjY291bnRNZXRhKFwidmFsaWRhdG9yXCIsIGFjY291bnRzLnZhbGlkYXRvciksIGdldEFjY291bnRNZXRhKFwib3duZXJQcm9ncmFtXCIsIGFjY291bnRzLm93bmVyUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblByb2dyYW1cIiwgYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZShhcmdzIGFzIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10gPSByZWFkb25seSBBY2NvdW50TWV0YVtdPiA9IHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3M8VFByb2dyYW0+O1xuYWNjb3VudHM6IHtcbmJ1ZmZlclBkYTogVEFjY291bnRNZXRhc1swXTtcbmRlbGVnYXRpb25SZWNvcmRQZGE6IFRBY2NvdW50TWV0YXNbMV07XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IFRBY2NvdW50TWV0YXNbMl07XG5wZGE6IFRBY2NvdW50TWV0YXNbM107XG5wYXllcjogVEFjY291bnRNZXRhc1s0XTtcbnZhbGlkYXRvcj86IFRBY2NvdW50TWV0YXNbNV0gfCB1bmRlZmluZWQ7XG5vd25lclByb2dyYW06IFRBY2NvdW50TWV0YXNbNl07XG5kZWxlZ2F0aW9uUHJvZ3JhbTogVEFjY291bnRNZXRhc1s3XTtcbnN5c3RlbVByb2dyYW06IFRBY2NvdW50TWV0YXNbOF07XG59O1xuZGF0YTogRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1ldGFzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4oaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFRBY2NvdW50TWV0YXM+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+KTogUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtLCBUQWNjb3VudE1ldGFzPiB7XG4gIGlmIChpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGggPCA5KSB7XG4gIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIHsgYWN0dWFsQWNjb3VudE1ldGFzOiBpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGgsIGV4cGVjdGVkQWNjb3VudE1ldGFzOiA5IH0pO1xufVxubGV0IGFjY291bnRJbmRleCA9IDA7XG5jb25zdCBnZXROZXh0QWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMgYXMgVEFjY291bnRNZXRhcylbYWNjb3VudEluZGV4XSE7XG4gIGFjY291bnRJbmRleCArPSAxO1xuICByZXR1cm4gYWNjb3VudE1ldGE7XG59XG5jb25zdCBnZXROZXh0T3B0aW9uYWxBY2NvdW50ID0gKCkgPT4ge1xuICBjb25zdCBhY2NvdW50TWV0YSA9IGdldE5leHRBY2NvdW50KCk7XG4gIHJldHVybiBhY2NvdW50TWV0YS5hZGRyZXNzID09PSBEVUVMX1BST0dSQU1fQUREUkVTUyA/IHVuZGVmaW5lZCA6IGFjY291bnRNZXRhO1xufTtcbiAgcmV0dXJuIHsgcHJvZ3JhbUFkZHJlc3M6IGluc3RydWN0aW9uLnByb2dyYW1BZGRyZXNzLCBhY2NvdW50czogeyBidWZmZXJQZGE6IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25SZWNvcmRQZGE6IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogZ2V0TmV4dEFjY291bnQoKSwgcGRhOiBnZXROZXh0QWNjb3VudCgpLCBwYXllcjogZ2V0TmV4dEFjY291bnQoKSwgdmFsaWRhdG9yOiBnZXROZXh0T3B0aW9uYWxBY2NvdW50KCksIG93bmVyUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSwgZGVsZWdhdGlvblByb2dyYW06IGdldE5leHRBY2NvdW50KCksIHN5c3RlbVByb2dyYW06IGdldE5leHRBY2NvdW50KCkgfSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=
|