drama-pm-client 0.2.9 → 0.3.1

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/dist/index.d.ts CHANGED
@@ -36,6 +36,15 @@ export interface ClaimRewardsParams {
36
36
  winningOutcome: Outcome;
37
37
  sharesToClaim: number | BN;
38
38
  }
39
+ export interface BatchClaimParams {
40
+ user: PublicKey;
41
+ claims: Array<{
42
+ market: PublicKey;
43
+ bettingToken: PublicKey;
44
+ winningOutcome: Outcome;
45
+ sharesToClaim?: number | BN;
46
+ }>;
47
+ }
39
48
  export interface RefundParams {
40
49
  user: PublicKey;
41
50
  market: PublicKey;
@@ -113,6 +122,19 @@ export declare class DramaPmClient {
113
122
  * Build a complete transaction to claim rewards
114
123
  */
115
124
  buildClaimRewardsTx(params: ClaimRewardsParams): Promise<Transaction>;
125
+ /**
126
+ * Build instructions to claim rewards from multiple markets
127
+ * Returns an array of instructions that can be batched into transactions
128
+ */
129
+ batchClaimRewards(params: BatchClaimParams): Promise<TransactionInstruction[]>;
130
+ /**
131
+ * Build transactions to claim rewards from multiple markets
132
+ * Automatically splits into multiple transactions if needed (max 5 claims per tx to avoid size limits)
133
+ * @param params - Batch claim parameters
134
+ * @param maxClaimsPerTx - Maximum claims per transaction (default: 5)
135
+ * @returns Array of transactions
136
+ */
137
+ buildBatchClaimRewardsTx(params: BatchClaimParams, maxClaimsPerTx?: number): Promise<Transaction[]>;
116
138
  /**
117
139
  * Refund bets if market is refunded
118
140
  * @param params.tokenAmount - Amount of shares to refund. 0 or undefined means refund all shares.
package/dist/index.js CHANGED
@@ -260,6 +260,44 @@ export class DramaPmClient {
260
260
  const ix = await this.claimRewards(params);
261
261
  return new Transaction().add(ix);
262
262
  }
263
+ /**
264
+ * Build instructions to claim rewards from multiple markets
265
+ * Returns an array of instructions that can be batched into transactions
266
+ */
267
+ async batchClaimRewards(params) {
268
+ const { user, claims } = params;
269
+ const instructions = [];
270
+ for (const claim of claims) {
271
+ const ix = await this.claimRewards({
272
+ user,
273
+ market: claim.market,
274
+ bettingToken: claim.bettingToken,
275
+ winningOutcome: claim.winningOutcome,
276
+ sharesToClaim: claim.sharesToClaim ?? 0,
277
+ });
278
+ instructions.push(ix);
279
+ }
280
+ return instructions;
281
+ }
282
+ /**
283
+ * Build transactions to claim rewards from multiple markets
284
+ * Automatically splits into multiple transactions if needed (max 5 claims per tx to avoid size limits)
285
+ * @param params - Batch claim parameters
286
+ * @param maxClaimsPerTx - Maximum claims per transaction (default: 5)
287
+ * @returns Array of transactions
288
+ */
289
+ async buildBatchClaimRewardsTx(params, maxClaimsPerTx = 5) {
290
+ const instructions = await this.batchClaimRewards(params);
291
+ const transactions = [];
292
+ // Split instructions into chunks
293
+ for (let i = 0; i < instructions.length; i += maxClaimsPerTx) {
294
+ const chunk = instructions.slice(i, i + maxClaimsPerTx);
295
+ const tx = new Transaction();
296
+ chunk.forEach(ix => tx.add(ix));
297
+ transactions.push(tx);
298
+ }
299
+ return transactions;
300
+ }
263
301
  /**
264
302
  * Refund bets if market is refunded
265
303
  * @param params.tokenAmount - Amount of shares to refund. 0 or undefined means refund all shares.
@@ -417,4 +455,4 @@ export class DramaPmClient {
417
455
  return await getAccount(this.connection, vaultPda);
418
456
  }
419
457
  }
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVDQUF1QyxFQUN2QyxVQUFVLEVBQ1YsNkJBQTZCLEVBQzdCLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLGNBQWMsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdkIsT0FBTyxFQUVMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFdBQVcsRUFFWixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEVBQ1osVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLFlBQVksQ0FBQztBQUVwQixjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQVcsR0FBRyxFQUFFLENBQUM7QUE4Q3hCLE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQVksVUFBc0IsRUFBRSxNQUFlLEVBQUUsU0FBcUI7UUFDeEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IsMkNBQTJDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGFBQWEsR0FBVztZQUM1QixTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDakMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRztZQUN2QyxLQUFLLEVBQUUsY0FBYztTQUN0QixDQUFDO1FBRUYsSUFBSSxD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QUFLLENBQUMsYUFBYSxDQUFDLFNBQW9CO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQW9CO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uLFxuICBnZXRBY2NvdW50LFxuICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyxcbiAgVE9LRU5fUFJPR1JBTV9JRCxcbn0gZnJvbSBcIkBzb2xhbmEvc3BsLXRva2VuXCI7XG5cbmltcG9ydCB7IFByb2dyYW0gYXMgQW5jaG9yUHJvZ3JhbSwgQW5jaG9yUHJvdmlkZXIsIElkbCwgUHJvZ3JhbSwgV2FsbGV0IH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5cbmltcG9ydCBCTiBmcm9tIFwiYm4uanNcIjtcblxuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgS2V5cGFpcixcbiAgUHVibGljS2V5LFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvblxufSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgeyBJREwgfSBmcm9tIFwiLi9pZGwuanNcIjtcbmltcG9ydCB7IERyYW1hUG0gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0R2xvYmFsQ29uZmlnUGRhLFxuICBnZXRNYXJrZXRQZGEsXG4gIGdldE1hcmtldFBkYXMsXG4gIGdldFZhdWx0UGRhLFxuICBOT19NSU5UX1NFRUQsXG4gIFZBVUxUX1NFRUQsXG4gIFlFU19NSU5UX1NFRURcbn0gZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMuanNcIjtcbmV4cG9ydCB7IERyYW1hUG0sIElETCB9O1xuXG5leHBvcnQgdHlwZSBPdXRjb21lID0gXCJZZXNcIiB8IFwiTm9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVNYXJrZXRQYXJhbXMge1xuICBhZG1pbjogUHVibGljS2V5O1xuICBtYXJrZXRJZDogbnVtYmVyIHwgQk47XG4gIHllc1ByaWNlOiBudW1iZXIgfCBCTjtcbiAgbm9QcmljZTogbnVtYmVyIHwgQk47XG4gIGVuZFRpbWU6IG51bWJlciB8IEJOO1xuICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZUJldFBhcmFtcyB7XG4gIHVzZXI6IFB1YmxpY0tleTtcbiAgbWFya2V0OiBQdWJsaWNLZXk7IC8vIE1hcmtldCBQREEgYWRkcmVzc1xuICBhbW91bnQ6IG51bWJlciB8IEJOO1xuICBvdXRjb21lOiBPdXRjb21lO1xuICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbiAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5OyAvLyBGZWUgcmVjaXBpZW50IGFkZHJlc3MgKG9wdGlvbmFsLCB3aWxsIGZldGNoIGZyb20gY29uZmlnIGlmIG5vdCBwcm92aWRlZClcbiAgZmVlUmVjaXBpZW50VG9rZW4/OiBQdWJsaWNLZXkgfCBudWxsOyAvLyBGZWUgcmVjaXBpZW50IHRva2VuIGFjY291bnQgKG9wdGlvbmFsLCB1c2VkIGludGVybmFsbHkgYnkgYnVpbGRQbGFjZUJldFR4KVxuICBjcmVhdGVBdGE/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGNyZWF0ZSBBVEEgaW5zdHJ1Y3Rpb24gYXV0b21hdGljYWxseVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUZlZUNvbmZpZ1BhcmFtcyB7XG4gIGF1dGhvcml0eTogUHVibGljS2V5OyAvLyBDYW4gYmUgYXV0aG9yaXR5IG9yIGF1dGhvcml6ZWQgYWRtaW5cbiAgbmV3RmVlQnBzOiBudW1iZXI7IC8vIEZlZSBpbiBiYXNpcyBwb2ludHMgKDEgYnBzID0gMC4wMSUsIG1heCAxMDAwID0gMTAlKVxuICBuZXdGZWVSZWNpcGllbnQ6IFB1YmxpY0tleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGFpbVJld2FyZHNQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIHdpbm5pbmdPdXRjb21lOiBPdXRjb21lO1xuICBzaGFyZXNUb0NsYWltOiBudW1iZXIgfCBCTjsgLy8gQW1vdW50IG9mIHNoYXJlcyB0byBjbGFpbSAoMCA9IGNsYWltIGFsbClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZ1bmRQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIG91dGNvbWU6IE91dGNvbWU7XG4gIHRva2VuQW1vdW50PzogbnVtYmVyIHwgQk47IC8vIEFtb3VudCBvZiBzaGFyZXMgdG8gcmVmdW5kLiAwIG9yIHVuZGVmaW5lZCBtZWFucyByZWZ1bmQgYWxsIHNoYXJlcy5cbn1cblxuZXhwb3J0IGNsYXNzIERyYW1hUG1DbGllbnQge1xuICBwcm9ncmFtOiBQcm9ncmFtPERyYW1hUG0+O1xuICBwcm92aWRlcjogQW5jaG9yUHJvdmlkZXI7XG4gIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgd2FsbGV0PzogV2FsbGV0LCBwcm9ncmFtSWQ/OiBQdWJsaWNLZXkpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIFxuICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgd2FsbGV0IGlmIG5vbmUgcHJvdmlkZWRcbiAgICBjb25zdCBkZWZhdWx0S2V5cGFpciA9IEtleXBhaXIuZ2VuZXJhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0V2FsbGV0OiBXYWxsZXQgPSB7XG4gICAgICBwdWJsaWNLZXk6IGRlZmF1bHRLZXlwYWlyLnB1YmxpY0tleSxcbiAgICAgIHNpZ25UcmFuc2FjdGlvbjogYXN5bmMgKHR4KSA9PiB0eCxcbiAgICAgIHNpZ25BbGxUcmFuc2FjdGlvbnM6IGFzeW5jICh0eHMpID0+IHR4cyxcbiAgICAgIHBheWVyOiBkZWZhdWx0S2V5cGFpcixcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgQW5jaG9yUHJvdmlkZXIoXG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgd2FsbGV0IHx8IGRlZmF1bHRXYWxsZXQsXG4gICAgICB7IGNvbW1pdG1lbnQ6IFwiY29uZmlybWVkXCIgfVxuICAgICk7XG4gICAgXG4gICAgLy8gVXNlIGN1c3RvbSBwcm9ncmFtSWQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQgZnJvbSBJRExcbiAgICBjb25zdCBmaW5hbFByb2dyYW1JZCA9IHByb2dyYW1JZCB8fCBuZXcgUHVibGljS2V5KElETC5hZGRyZXNzKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBuZXcgSURMIHdpdGggdGhlIGN1c3RvbSBwcm9ncmFtSWRcbiAgICBjb25zdCBjdXN0b21JZGwgPSB7IC4uLklETCwgYWRkcmVzczogZmluYWxQcm9ncmFtSWQudG9CYXNlNTgoKSB9O1xuICAgIFxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBBbmNob3JQcm9ncmFtKGN1c3RvbUlkbCBhcyBJZGwsIHRoaXMucHJvdmlkZXIpIGFzIHVua25vd24gYXMgUHJvZ3JhbTxEcmFtYVBtPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgcHJvZ3JhbSBJRFxuICAgKi9cbiAgZ2V0UHJvZ3JhbUlkKCk6IFB1YmxpY0tleSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IHByb2dyYW0gSUQgYW5kIHJlaW5pdGlhbGl6ZSB0aGUgcHJvZ3JhbSBpbnN0YW5jZVxuICAgKiBVc2VmdWwgd2hlbiByZWRlcGxveWluZyB0aGUgcHJvZ3JhbSB0byBhIG5ldyBhZGRyZXNzXG4gICAqL1xuICBzZXRQcm9ncmFtSWQocHJvZ3JhbUlkOiBQdWJsaWNLZXkpOiB2b2lkIHtcbiAgICBjb25zdCBjdXN0b21JZGwgPSB7IC4uLklETCwgYWRkcmVzczogcHJvZ3JhbUlkLnRvQmFzZTU4KCkgfTtcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQW5jaG9yUHJvZ3JhbShjdXN0b21JZGwgYXMgSWRsLCB0aGlzLnByb3ZpZGVyKSBhcyB1bmtub3duIGFzIFByb2dyYW08RHJhbWFQbT47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgYXRhRXhpc3RzKGF0YTogUHVibGljS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGdldEFjY291bnQodGhpcy5jb25uZWN0aW9uLCBhdGEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0cnVjdGlvbiB0byBpbml0aWFsaXplIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudFxuICAgKi9cbiAgY3JlYXRlQXRhSW5zdHJ1Y3Rpb24oXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBvd25lcjogUHVibGljS2V5LFxuICAgIG1pbnQ6IFB1YmxpY0tleVxuICApOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uIHtcbiAgICBjb25zdCBhdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtaW50LCBvd25lcik7XG4gICAgcmV0dXJuIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbihcbiAgICAgIHBheWVyLFxuICAgICAgYXRhLFxuICAgICAgb3duZXIsXG4gICAgICBtaW50LFxuICAgICAgVE9LRU5fUFJPR1JBTV9JRFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBnbG9iYWwgY29uZmlndXJhdGlvbiAoQXV0aG9yaXR5IG9ubHkpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmluaXRpYWxpemVDb25maWcoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHksXG4gICAgICAgIHN5c3RlbVByb2dyYW06IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBjb25maWdcbiAgICovXG4gIGFzeW5jIGJ1aWxkSW5pdGlhbGl6ZUNvbmZpZ1R4KGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5pbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eSk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGF1dGhvcml6ZWQgYWRtaW4gKEF1dGhvcml0eSBvbmx5KVxuICAgKi9cbiAgYXN5bmMgYWRkQWRtaW4obmV3QWRtaW46IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmFkZEFkbWluKG5ld0FkbWluKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBhZG1pblxuICAgKi9cbiAgYXN5bmMgYnVpbGRBZGRBZG1pblR4KG5ld0FkbWluOiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmFkZEFkbWluKG5ld0FkbWluKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZmVlIGNvbmZpZ3VyYXRpb24gKEF1dGhvcml0eSBvciBhdXRob3JpemVkIGFkbWluKVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRmVlQ29uZmlnKHBhcmFtczogVXBkYXRlRmVlQ29uZmlnUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAudXBkYXRlRmVlQ29uZmlnKHBhcmFtcy5uZXdGZWVCcHMsIHBhcmFtcy5uZXdGZWVSZWNpcGllbnQpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnOiBnbG9iYWxDb25maWcsXG4gICAgICAgIGF1dGhvcml0eTogcGFyYW1zLmF1dGhvcml0eSxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBmZWUgY29uZmlnXG4gICAqL1xuICBhc3luYyBidWlsZFVwZGF0ZUZlZUNvbmZpZ1R4KHBhcmFtczogVXBkYXRlRmVlQ29uZmlnUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy51cGRhdGVGZWVDb25maWcocGFyYW1zKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJlZGljdGlvbiBtYXJrZXQgaW5zdHJ1Y3Rpb25cbiAgICovXG4gIGFzeW5jIGNyZWF0ZU1hcmtldChwYXJhbXM6IENyZWF0ZU1hcmtldFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgYWRtaW4sIG1hcmtldElkLCB5ZXNQcmljZSwgbm9QcmljZSwgZW5kVGltZSwgYmV0dGluZ1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgeWVzUHJpY2VCbiA9IG5ldyBCTih5ZXNQcmljZSk7XG4gICAgY29uc3Qgbm9QcmljZUJuID0gbmV3IEJOKG5vUHJpY2UpO1xuICAgIGNvbnN0IGVuZFRpbWVCbiA9IG5ldyBCTihlbmRUaW1lKTtcblxuICAgIGNvbnN0IHBkYXMgPSBnZXRNYXJrZXRQZGFzKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jcmVhdGVNYXJrZXQoe1xuICAgICAgICAgIG1hcmtldElkOiBtYXJrZXRJZEJuLFxuICAgICAgICAgIHllc1ByaWNlOiB5ZXNQcmljZUJuLFxuICAgICAgICAgIG5vUHJpY2U6IG5vUHJpY2VCbixcbiAgICAgICAgICBlbmRUaW1lOiBlbmRUaW1lQm4sXG4gICAgICAgIH0pXG4gICAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgICAgICBtYXJrZXQ6IHBkYXMubWFya2V0LFxuICAgICAgICAgIHllc01pbnQ6IHBkYXMueWVzTWludCxcbiAgICAgICAgICBub01pbnQ6IHBkYXMubm9NaW50LFxuICAgICAgICAgIGJldHRpbmdUb2tlbjogYmV0dGluZ1Rva2VuLFxuICAgICAgICAgIHZhdWx0OiBwZGFzLnZhdWx0LFxuICAgICAgICAgIGFkbWluOiBhZG1pbixcbiAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgICAgfSlcbiAgICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ3JlYXRlTWFya2V0VHgocGFyYW1zOiBDcmVhdGVNYXJrZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNyZWF0ZU1hcmtldChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlIGEgYmV0IGluc3RydWN0aW9uICh3aXRob3V0IEFUQSBjcmVhdGlvbilcbiAgICovXG4gIGFzeW5jIHBsYWNlQmV0KHBhcmFtczogUGxhY2VCZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYW1vdW50LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudFRva2VuIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgYW1vdW50Qm4gPSBuZXcgQk4oYW1vdW50KTtcbiAgICBjb25zdCBvdXRjb21lRW51bSA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB7IHllczoge30gfSA6IHsgbm86IHt9IH07XG5cbiAgICAvLyBHZXQgZ2xvYmFsIGNvbmZpZyBmb3IgZmVlIGluZm9cbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIFxuICAgIC8vIERldGVybWluZSB3aGljaCBvdXRjb21lIHRva2VuIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSBvdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlcik7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5wbGFjZUJldCh7XG4gICAgICAgIGJ1eU91dGNvbWU6IG91dGNvbWVFbnVtLFxuICAgICAgICBhbW91bnQ6IGFtb3VudEJuLFxuICAgICAgfSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50VG9rZW46IGZlZVJlY2lwaWVudFRva2VuIHx8IG51bGwsXG4gICAgICAgIHVzZXJPdXRjb21lVG9rZW4sXG4gICAgICAgIHVzZXJCZXR0aW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBwbGFjZSBhIGJldCAod2l0aCBvcHRpb25hbCBBVEEgY3JlYXRpb24gZm9yIGJvdGggb3V0Y29tZSB0b2tlbiBhbmQgZmVlIHJlY2lwaWVudClcbiAgICovXG4gIGFzeW5jIGJ1aWxkUGxhY2VCZXRUeChwYXJhbXM6IFBsYWNlQmV0UGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGNyZWF0ZUF0YSA9IHRydWUgfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgIFxuICAgIC8vIEZldGNoIGNvbmZpZyB0byBjaGVjayBmZWVfYnBzXG4gICAgY29uc3QgY29uZmlnQWNjb3VudCA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsQ29uZmlnQWNjb3VudCgpO1xuICAgIFxuICAgIC8vIERlcml2ZSBtaW50IFBEQXMgZnJvbSBtYXJrZXQgYWRkcmVzc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgXG4gICAgY29uc3QgdGFyZ2V0TWludCA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJPdXRjb21lVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0YXJnZXRNaW50LCB1c2VyKTtcblxuICAgIC8vIENoZWNrIGlmIHVzZXIgb3V0Y29tZSBBVEEgZXhpc3RzIGFuZCBjcmVhdGUgaWYgbmVlZGVkXG4gICAgaWYgKGNyZWF0ZUF0YSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHModXNlck91dGNvbWVUb2tlbik7XG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBjcmVhdGVBdGFJeCA9IHRoaXMuY3JlYXRlQXRhSW5zdHJ1Y3Rpb24odXNlciwgdXNlciwgdGFyZ2V0TWludCk7XG4gICAgICAgIHR4LmFkZChjcmVhdGVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBpZiBmZWVfYnBzID4gMFxuICAgIGxldCBmZWVSZWNpcGllbnRUb2tlbjogUHVibGljS2V5IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ0FjY291bnQuZmVlQnBzID4gMCkge1xuICAgICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IHBhcmFtcy5mZWVSZWNpcGllbnQgfHwgY29uZmlnQWNjb3VudC5mZWVSZWNpcGllbnQ7XG4gICAgICBmZWVSZWNpcGllbnRUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgZmVlUmVjaXBpZW50QWRkcmVzcyk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgQVRBIGV4aXN0cyBhbmQgY3JlYXRlIGlmIG5lZWRlZFxuICAgICAgY29uc3QgZmVlQXRhRXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHMoZmVlUmVjaXBpZW50VG9rZW4pO1xuICAgICAgaWYgKCFmZWVBdGFFeGlzdHMpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlRmVlQXRhSXggPSB0aGlzLmNyZWF0ZUF0YUluc3RydWN0aW9uKHVzZXIsIGZlZVJlY2lwaWVudEFkZHJlc3MsIGJldHRpbmdUb2tlbik7XG4gICAgICAgIHR4LmFkZChjcmVhdGVGZWVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGxhY2VCZXRJeCA9IGF3YWl0IHRoaXMucGxhY2VCZXQoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZmVlUmVjaXBpZW50VG9rZW4sXG4gICAgfSk7XG4gICAgdHguYWRkKHBsYWNlQmV0SXgpO1xuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHJld2FyZHMgYWZ0ZXIgbWFya2V0IHJlc29sdXRpb25cbiAgICovXG4gIGFzeW5jIGNsYWltUmV3YXJkcyhwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBiZXR0aW5nVG9rZW4sIHdpbm5pbmdPdXRjb21lIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIGNvbnN0IHRhcmdldE1pbnQgPSB3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIpO1xuICAgIGNvbnN0IHNoYXJlc1RvQ2xhaW1CbiA9IG5ldyBCTihwYXJhbXMuc2hhcmVzVG9DbGFpbSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY2xhaW1SZXdhcmRzKHtcbiAgICAgICAgdG9rZW5BbW91bnQ6IHNoYXJlc1RvQ2xhaW1CbixcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xhaW0gcmV3YXJkc1xuICAgKi9cbiAgYXN5bmMgYnVpbGRDbGFpbVJld2FyZHNUeChwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xhaW1SZXdhcmRzKHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmdW5kIGJldHMgaWYgbWFya2V0IGlzIHJlZnVuZGVkXG4gICAqIEBwYXJhbSBwYXJhbXMudG9rZW5BbW91bnQgLSBBbW91bnQgb2Ygc2hhcmVzIHRvIHJlZnVuZC4gMCBvciB1bmRlZmluZWQgbWVhbnMgcmVmdW5kIGFsbCBzaGFyZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyB1c2VycyB0byBwYXJ0aWFsbHkgcmVmdW5kIHRoZWlyIHBvc2l0aW9uIGFjcm9zcyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMuXG4gICAqL1xuICBhc3luYyByZWZ1bmQocGFyYW1zOiBSZWZ1bmRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYmV0dGluZ1Rva2VuLCBvdXRjb21lLCB0b2tlbkFtb3VudCB9ID0gcGFyYW1zO1xuICAgIFxuICAgIGNvbnN0IG91dGNvbWVFbnVtID0gb3V0Y29tZSA9PT0gXCJZZXNcIiA/IHsgeWVzOiB7fSB9IDogeyBubzoge30gfTtcbiAgICBcbiAgICAvLyBDb252ZXJ0IHRva2VuQW1vdW50IHRvIEJOICgwIG1lYW5zIHJlZnVuZCBhbGwpXG4gICAgY29uc3QgdG9rZW5BbW91bnRCbiA9IG5ldyBCTih0b2tlbkFtb3VudCA/PyAwKTtcbiAgICBcbiAgICAvLyBEZXJpdmUgbWludCBQREFzIGZyb20gbWFya2V0IGFkZHJlc3NcbiAgICBjb25zdCB5ZXNNaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oWUVTX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIGNvbnN0IG5vTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKE5PX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgY29uc3QgdXNlckJldHRpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgdXNlcik7XG4gICAgY29uc3QgdGFyZ2V0TWludCA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJPdXRjb21lVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0YXJnZXRNaW50LCB1c2VyKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlZnVuZCh7XG4gICAgICAgIG91dGNvbWU6IG91dGNvbWVFbnVtLFxuICAgICAgICB0b2tlbkFtb3VudDogdG9rZW5BbW91bnRCbixcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gcmVmdW5kXG4gICAqL1xuICBhc3luYyBidWlsZFJlZnVuZFR4KHBhcmFtczogUmVmdW5kUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5yZWZ1bmQocGFyYW1zKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgbWFya2V0IChBZG1pbiBvbmx5KVxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZU1hcmtldEJ5SUQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXRJZDogbnVtYmVyIHwgQk4sXG4gICAgd2lubmluZ091dGNvbWU6IFwiWWVzXCIgfCBcIk5vXCIgfCBudWxsXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IG1hcmtldElkQm4gPSBuZXcgQk4obWFya2V0SWQpO1xuICAgIGNvbnN0IG1hcmtldFBkYSA9IGdldE1hcmtldFBkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBhZG1pbiwgbWFya2V0SWRCbik7XG5cbiAgICBsZXQgb3V0Y29tZUVudW06IGFueSA9IG51bGw7XG4gICAgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIlllc1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgeWVzOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAod2lubmluZ091dGNvbWUgPT09IFwiTm9cIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IG5vOiB7fSB9O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlc29sdmVNYXJrZXQob3V0Y29tZUVudW0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0OiBtYXJrZXRQZGEsXG4gICAgICAgIGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gcmVzb2x2ZSBhIG1hcmtldFxuICAgKi9cbiAgYXN5bmMgYnVpbGRSZXNvbHZlTWFya2V0VHhCeUlEKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0SWQ6IG51bWJlciB8IEJOLFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnJlc29sdmVNYXJrZXRCeUlEKGFkbWluLCBtYXJrZXRJZCwgd2lubmluZ091dGNvbWUpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWFya2V0KFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0OiBQdWJsaWNLZXksXG4gICAgd2lubmluZ091dGNvbWU6IFwiWWVzXCIgfCBcIk5vXCIgfCBudWxsXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGxldCBvdXRjb21lRW51bTogYW55ID0gbnVsbDtcbiAgICBpZiAod2lubmluZ091dGNvbWUgPT09IFwiWWVzXCIpIHtcbiAgICAgIG91dGNvbWVFbnVtID0geyB5ZXM6IHt9IH07XG4gICAgfSBlbHNlIGlmICh3aW5uaW5nT3V0Y29tZSA9PT0gXCJOb1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgbm86IHt9IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVzb2x2ZU1hcmtldChvdXRjb21lRW51bSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldCxcbiAgICAgICAgYWRtaW4sXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byByZXNvbHZlIGEgbWFya2V0XG4gICAqL1xuICBhc3luYyBidWlsZFJlc29sdmVNYXJrZXRUeChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5LFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnJlc29sdmVNYXJrZXQoYWRtaW4sIG1hcmtldCwgd2lubmluZ091dGNvbWUpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGEgbWFya2V0IChBZG1pbiBvbmx5KVxuICAgKi9cbiAgYXN5bmMgY2xvc2VNYXJrZXQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jbG9zZU1hcmtldCgpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0OiBtYXJrZXQsXG4gICAgICAgIGFkbWluOiBhZG1pbixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGNsb3NlIGEgbWFya2V0XG4gICAqL1xuICBhc3luYyBidWlsZENsb3NlTWFya2V0VHgoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNsb3NlTWFya2V0KGFkbWluLCBtYXJrZXQpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGEgbWFya2V0IChBZG1pbiBvbmx5KVxuICAgKi9cbiAgYXN5bmMgY2xvc2VNYXJrZXRCeUlEKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0SWQ6IG51bWJlciB8IEJOXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IG1hcmtldElkQm4gPSBuZXcgQk4obWFya2V0SWQpO1xuICAgIGNvbnN0IG1hcmtldFBkYSA9IGdldE1hcmtldFBkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBhZG1pbiwgbWFya2V0SWRCbik7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jbG9zZU1hcmtldCgpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0OiBtYXJrZXRQZGEsXG4gICAgICAgIGFkbWluOiBhZG1pbixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGNsb3NlIGEgbWFya2V0XG4gICAqL1xuICBhc3luYyBidWlsZENsb3NlTWFya2V0VHhCeUlEKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0SWQ6IG51bWJlciB8IEJOXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xvc2VNYXJrZXRCeUlEKGFkbWluLCBtYXJrZXRJZCk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBnbG9iYWwgY29uZmlnIGFjY291bnQgZGF0YVxuICAgKi9cbiAgYXN5bmMgZ2V0R2xvYmFsQ29uZmlnQWNjb3VudCgpIHtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5hY2NvdW50Lmdsb2JhbENvbmZpZy5mZXRjaChnbG9iYWxDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIG1hcmtldCBhY2NvdW50IGRhdGFcbiAgICovXG4gIGFzeW5jIGdldE1hcmtldEFjY291bnQoYWRtaW46IFB1YmxpY0tleSwgbWFya2V0SWQ6IG51bWJlciB8IEJOKSB7XG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgbWFya2V0UGRhID0gZ2V0TWFya2V0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQubWFya2V0LmZldGNoKG1hcmtldFBkYSk7XG4gIH1cblxuICBhc3luYyBnZXRNYXJrZXRJbmZvKG1hcmtldFBkYTogUHVibGljS2V5KSB7XG4gICAgY29uc3QgbWFya2V0QWNjb3VudCA9IGF3YWl0IHRoaXMucHJvZ3JhbS5hY2NvdW50Lm1hcmtldC5mZXRjaChtYXJrZXRQZGEpO1xuICAgIHJldHVybiBtYXJrZXRBY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHZhdWx0IGFjY291bnQgZGF0YVxuICAgKi9cbiAgYXN5bmMgZ2V0VmF1bHRBY2NvdW50KG1hcmtldFBkYTogUHVibGljS2V5KSB7XG4gICAgY29uc3QgdmF1bHRQZGEgPSBnZXRWYXVsdFBkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBtYXJrZXRQZGEpO1xuICAgIHJldHVybiBhd2FpdCBnZXRBY2NvdW50KHRoaXMuY29ubmVjdGlvbiwgdmF1bHRQZGEpO1xuICB9XG59XG4iXX0=
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVDQUF1QyxFQUN2QyxVQUFVLEVBQ1YsNkJBQTZCLEVBQzdCLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLGNBQWMsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdkIsT0FBTyxFQUVMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFdBQVcsRUFFWixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEVBQ1osVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLFlBQVksQ0FBQztBQUVwQixjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQVcsR0FBRyxFQUFFLENBQUM7QUF3RHhCLE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQVksVUFBc0IsRUFBRSxNQUFlLEVBQUUsU0FBcUI7UUFDeEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IsMkNBQTJDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGFBQWEsR0FBVztZQUM1QixTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDakMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRztZQUN2QyxLQUFLLEVBQUUsY0FBYztTQUN0QixDQUFDO1FBRUYsSUFBSSxD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LFVBQVUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQW9CO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQW9CO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uLFxuICBnZXRBY2NvdW50LFxuICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyxcbiAgVE9LRU5fUFJPR1JBTV9JRCxcbn0gZnJvbSBcIkBzb2xhbmEvc3BsLXRva2VuXCI7XG5cbmltcG9ydCB7IFByb2dyYW0gYXMgQW5jaG9yUHJvZ3JhbSwgQW5jaG9yUHJvdmlkZXIsIElkbCwgUHJvZ3JhbSwgV2FsbGV0IH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5cbmltcG9ydCBCTiBmcm9tIFwiYm4uanNcIjtcblxuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgS2V5cGFpcixcbiAgUHVibGljS2V5LFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvblxufSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgeyBJREwgfSBmcm9tIFwiLi9pZGwuanNcIjtcbmltcG9ydCB7IERyYW1hUG0gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0R2xvYmFsQ29uZmlnUGRhLFxuICBnZXRNYXJrZXRQZGEsXG4gIGdldE1hcmtldFBkYXMsXG4gIGdldFZhdWx0UGRhLFxuICBOT19NSU5UX1NFRUQsXG4gIFZBVUxUX1NFRUQsXG4gIFlFU19NSU5UX1NFRURcbn0gZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMuanNcIjtcbmV4cG9ydCB7IERyYW1hUG0sIElETCB9O1xuXG5leHBvcnQgdHlwZSBPdXRjb21lID0gXCJZZXNcIiB8IFwiTm9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVNYXJrZXRQYXJhbXMge1xuICBhZG1pbjogUHVibGljS2V5O1xuICBtYXJrZXRJZDogbnVtYmVyIHwgQk47XG4gIHllc1ByaWNlOiBudW1iZXIgfCBCTjtcbiAgbm9QcmljZTogbnVtYmVyIHwgQk47XG4gIGVuZFRpbWU6IG51bWJlciB8IEJOO1xuICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZUJldFBhcmFtcyB7XG4gIHVzZXI6IFB1YmxpY0tleTtcbiAgbWFya2V0OiBQdWJsaWNLZXk7IC8vIE1hcmtldCBQREEgYWRkcmVzc1xuICBhbW91bnQ6IG51bWJlciB8IEJOO1xuICBvdXRjb21lOiBPdXRjb21lO1xuICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbiAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5OyAvLyBGZWUgcmVjaXBpZW50IGFkZHJlc3MgKG9wdGlvbmFsLCB3aWxsIGZldGNoIGZyb20gY29uZmlnIGlmIG5vdCBwcm92aWRlZClcbiAgZmVlUmVjaXBpZW50VG9rZW4/OiBQdWJsaWNLZXkgfCBudWxsOyAvLyBGZWUgcmVjaXBpZW50IHRva2VuIGFjY291bnQgKG9wdGlvbmFsLCB1c2VkIGludGVybmFsbHkgYnkgYnVpbGRQbGFjZUJldFR4KVxuICBjcmVhdGVBdGE/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGNyZWF0ZSBBVEEgaW5zdHJ1Y3Rpb24gYXV0b21hdGljYWxseVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUZlZUNvbmZpZ1BhcmFtcyB7XG4gIGF1dGhvcml0eTogUHVibGljS2V5OyAvLyBDYW4gYmUgYXV0aG9yaXR5IG9yIGF1dGhvcml6ZWQgYWRtaW5cbiAgbmV3RmVlQnBzOiBudW1iZXI7IC8vIEZlZSBpbiBiYXNpcyBwb2ludHMgKDEgYnBzID0gMC4wMSUsIG1heCAxMDAwID0gMTAlKVxuICBuZXdGZWVSZWNpcGllbnQ6IFB1YmxpY0tleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGFpbVJld2FyZHNQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIHdpbm5pbmdPdXRjb21lOiBPdXRjb21lO1xuICBzaGFyZXNUb0NsYWltOiBudW1iZXIgfCBCTjsgLy8gQW1vdW50IG9mIHNoYXJlcyB0byBjbGFpbSAoMCA9IGNsYWltIGFsbClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaENsYWltUGFyYW1zIHtcbiAgdXNlcjogUHVibGljS2V5O1xuICBjbGFpbXM6IEFycmF5PHtcbiAgICBtYXJrZXQ6IFB1YmxpY0tleTtcbiAgICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbiAgICB3aW5uaW5nT3V0Y29tZTogT3V0Y29tZTtcbiAgICBzaGFyZXNUb0NsYWltPzogbnVtYmVyIHwgQk47IC8vIEFtb3VudCBvZiBzaGFyZXMgdG8gY2xhaW0gKDAgb3IgdW5kZWZpbmVkID0gY2xhaW0gYWxsKVxuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZ1bmRQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIG91dGNvbWU6IE91dGNvbWU7XG4gIHRva2VuQW1vdW50PzogbnVtYmVyIHwgQk47IC8vIEFtb3VudCBvZiBzaGFyZXMgdG8gcmVmdW5kLiAwIG9yIHVuZGVmaW5lZCBtZWFucyByZWZ1bmQgYWxsIHNoYXJlcy5cbn1cblxuZXhwb3J0IGNsYXNzIERyYW1hUG1DbGllbnQge1xuICBwcm9ncmFtOiBQcm9ncmFtPERyYW1hUG0+O1xuICBwcm92aWRlcjogQW5jaG9yUHJvdmlkZXI7XG4gIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgd2FsbGV0PzogV2FsbGV0LCBwcm9ncmFtSWQ/OiBQdWJsaWNLZXkpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIFxuICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgd2FsbGV0IGlmIG5vbmUgcHJvdmlkZWRcbiAgICBjb25zdCBkZWZhdWx0S2V5cGFpciA9IEtleXBhaXIuZ2VuZXJhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0V2FsbGV0OiBXYWxsZXQgPSB7XG4gICAgICBwdWJsaWNLZXk6IGRlZmF1bHRLZXlwYWlyLnB1YmxpY0tleSxcbiAgICAgIHNpZ25UcmFuc2FjdGlvbjogYXN5bmMgKHR4KSA9PiB0eCxcbiAgICAgIHNpZ25BbGxUcmFuc2FjdGlvbnM6IGFzeW5jICh0eHMpID0+IHR4cyxcbiAgICAgIHBheWVyOiBkZWZhdWx0S2V5cGFpcixcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgQW5jaG9yUHJvdmlkZXIoXG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgd2FsbGV0IHx8IGRlZmF1bHRXYWxsZXQsXG4gICAgICB7IGNvbW1pdG1lbnQ6IFwiY29uZmlybWVkXCIgfVxuICAgICk7XG4gICAgXG4gICAgLy8gVXNlIGN1c3RvbSBwcm9ncmFtSWQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQgZnJvbSBJRExcbiAgICBjb25zdCBmaW5hbFByb2dyYW1JZCA9IHByb2dyYW1JZCB8fCBuZXcgUHVibGljS2V5KElETC5hZGRyZXNzKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBuZXcgSURMIHdpdGggdGhlIGN1c3RvbSBwcm9ncmFtSWRcbiAgICBjb25zdCBjdXN0b21JZGwgPSB7IC4uLklETCwgYWRkcmVzczogZmluYWxQcm9ncmFtSWQudG9CYXNlNTgoKSB9O1xuICAgIFxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBBbmNob3JQcm9ncmFtKGN1c3RvbUlkbCBhcyBJZGwsIHRoaXMucHJvdmlkZXIpIGFzIHVua25vd24gYXMgUHJvZ3JhbTxEcmFtYVBtPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgcHJvZ3JhbSBJRFxuICAgKi9cbiAgZ2V0UHJvZ3JhbUlkKCk6IFB1YmxpY0tleSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IHByb2dyYW0gSUQgYW5kIHJlaW5pdGlhbGl6ZSB0aGUgcHJvZ3JhbSBpbnN0YW5jZVxuICAgKiBVc2VmdWwgd2hlbiByZWRlcGxveWluZyB0aGUgcHJvZ3JhbSB0byBhIG5ldyBhZGRyZXNzXG4gICAqL1xuICBzZXRQcm9ncmFtSWQocHJvZ3JhbUlkOiBQdWJsaWNLZXkpOiB2b2lkIHtcbiAgICBjb25zdCBjdXN0b21JZGwgPSB7IC4uLklETCwgYWRkcmVzczogcHJvZ3JhbUlkLnRvQmFzZTU4KCkgfTtcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQW5jaG9yUHJvZ3JhbShjdXN0b21JZGwgYXMgSWRsLCB0aGlzLnByb3ZpZGVyKSBhcyB1bmtub3duIGFzIFByb2dyYW08RHJhbWFQbT47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgYXRhRXhpc3RzKGF0YTogUHVibGljS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGdldEFjY291bnQodGhpcy5jb25uZWN0aW9uLCBhdGEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0cnVjdGlvbiB0byBpbml0aWFsaXplIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudFxuICAgKi9cbiAgY3JlYXRlQXRhSW5zdHJ1Y3Rpb24oXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBvd25lcjogUHVibGljS2V5LFxuICAgIG1pbnQ6IFB1YmxpY0tleVxuICApOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uIHtcbiAgICBjb25zdCBhdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtaW50LCBvd25lcik7XG4gICAgcmV0dXJuIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbihcbiAgICAgIHBheWVyLFxuICAgICAgYXRhLFxuICAgICAgb3duZXIsXG4gICAgICBtaW50LFxuICAgICAgVE9LRU5fUFJPR1JBTV9JRFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBnbG9iYWwgY29uZmlndXJhdGlvbiAoQXV0aG9yaXR5IG9ubHkpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmluaXRpYWxpemVDb25maWcoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHksXG4gICAgICAgIHN5c3RlbVByb2dyYW06IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBjb25maWdcbiAgICovXG4gIGFzeW5jIGJ1aWxkSW5pdGlhbGl6ZUNvbmZpZ1R4KGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5pbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eSk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGF1dGhvcml6ZWQgYWRtaW4gKEF1dGhvcml0eSBvbmx5KVxuICAgKi9cbiAgYXN5bmMgYWRkQWRtaW4obmV3QWRtaW46IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmFkZEFkbWluKG5ld0FkbWluKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBhZG1pblxuICAgKi9cbiAgYXN5bmMgYnVpbGRBZGRBZG1pblR4KG5ld0FkbWluOiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmFkZEFkbWluKG5ld0FkbWluKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZmVlIGNvbmZpZ3VyYXRpb24gKEF1dGhvcml0eSBvciBhdXRob3JpemVkIGFkbWluKVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRmVlQ29uZmlnKHBhcmFtczogVXBkYXRlRmVlQ29uZmlnUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAudXBkYXRlRmVlQ29uZmlnKHBhcmFtcy5uZXdGZWVCcHMsIHBhcmFtcy5uZXdGZWVSZWNpcGllbnQpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnOiBnbG9iYWxDb25maWcsXG4gICAgICAgIGF1dGhvcml0eTogcGFyYW1zLmF1dGhvcml0eSxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBmZWUgY29uZmlnXG4gICAqL1xuICBhc3luYyBidWlsZFVwZGF0ZUZlZUNvbmZpZ1R4KHBhcmFtczogVXBkYXRlRmVlQ29uZmlnUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy51cGRhdGVGZWVDb25maWcocGFyYW1zKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJlZGljdGlvbiBtYXJrZXQgaW5zdHJ1Y3Rpb25cbiAgICovXG4gIGFzeW5jIGNyZWF0ZU1hcmtldChwYXJhbXM6IENyZWF0ZU1hcmtldFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgYWRtaW4sIG1hcmtldElkLCB5ZXNQcmljZSwgbm9QcmljZSwgZW5kVGltZSwgYmV0dGluZ1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgeWVzUHJpY2VCbiA9IG5ldyBCTih5ZXNQcmljZSk7XG4gICAgY29uc3Qgbm9QcmljZUJuID0gbmV3IEJOKG5vUHJpY2UpO1xuICAgIGNvbnN0IGVuZFRpbWVCbiA9IG5ldyBCTihlbmRUaW1lKTtcblxuICAgIGNvbnN0IHBkYXMgPSBnZXRNYXJrZXRQZGFzKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jcmVhdGVNYXJrZXQoe1xuICAgICAgICAgIG1hcmtldElkOiBtYXJrZXRJZEJuLFxuICAgICAgICAgIHllc1ByaWNlOiB5ZXNQcmljZUJuLFxuICAgICAgICAgIG5vUHJpY2U6IG5vUHJpY2VCbixcbiAgICAgICAgICBlbmRUaW1lOiBlbmRUaW1lQm4sXG4gICAgICAgIH0pXG4gICAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgICAgICBtYXJrZXQ6IHBkYXMubWFya2V0LFxuICAgICAgICAgIHllc01pbnQ6IHBkYXMueWVzTWludCxcbiAgICAgICAgICBub01pbnQ6IHBkYXMubm9NaW50LFxuICAgICAgICAgIGJldHRpbmdUb2tlbjogYmV0dGluZ1Rva2VuLFxuICAgICAgICAgIHZhdWx0OiBwZGFzLnZhdWx0LFxuICAgICAgICAgIGFkbWluOiBhZG1pbixcbiAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgICAgfSlcbiAgICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ3JlYXRlTWFya2V0VHgocGFyYW1zOiBDcmVhdGVNYXJrZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNyZWF0ZU1hcmtldChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlIGEgYmV0IGluc3RydWN0aW9uICh3aXRob3V0IEFUQSBjcmVhdGlvbilcbiAgICovXG4gIGFzeW5jIHBsYWNlQmV0KHBhcmFtczogUGxhY2VCZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYW1vdW50LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudFRva2VuIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgYW1vdW50Qm4gPSBuZXcgQk4oYW1vdW50KTtcbiAgICBjb25zdCBvdXRjb21lRW51bSA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB7IHllczoge30gfSA6IHsgbm86IHt9IH07XG5cbiAgICAvLyBHZXQgZ2xvYmFsIGNvbmZpZyBmb3IgZmVlIGluZm9cbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIFxuICAgIC8vIERldGVybWluZSB3aGljaCBvdXRjb21lIHRva2VuIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSBvdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlcik7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5wbGFjZUJldCh7XG4gICAgICAgIGJ1eU91dGNvbWU6IG91dGNvbWVFbnVtLFxuICAgICAgICBhbW91bnQ6IGFtb3VudEJuLFxuICAgICAgfSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50VG9rZW46IGZlZVJlY2lwaWVudFRva2VuIHx8IG51bGwsXG4gICAgICAgIHVzZXJPdXRjb21lVG9rZW4sXG4gICAgICAgIHVzZXJCZXR0aW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBwbGFjZSBhIGJldCAod2l0aCBvcHRpb25hbCBBVEEgY3JlYXRpb24gZm9yIGJvdGggb3V0Y29tZSB0b2tlbiBhbmQgZmVlIHJlY2lwaWVudClcbiAgICovXG4gIGFzeW5jIGJ1aWxkUGxhY2VCZXRUeChwYXJhbXM6IFBsYWNlQmV0UGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGNyZWF0ZUF0YSA9IHRydWUgfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgIFxuICAgIC8vIEZldGNoIGNvbmZpZyB0byBjaGVjayBmZWVfYnBzXG4gICAgY29uc3QgY29uZmlnQWNjb3VudCA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsQ29uZmlnQWNjb3VudCgpO1xuICAgIFxuICAgIC8vIERlcml2ZSBtaW50IFBEQXMgZnJvbSBtYXJrZXQgYWRkcmVzc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgXG4gICAgY29uc3QgdGFyZ2V0TWludCA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJPdXRjb21lVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0YXJnZXRNaW50LCB1c2VyKTtcblxuICAgIC8vIENoZWNrIGlmIHVzZXIgb3V0Y29tZSBBVEEgZXhpc3RzIGFuZCBjcmVhdGUgaWYgbmVlZGVkXG4gICAgaWYgKGNyZWF0ZUF0YSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHModXNlck91dGNvbWVUb2tlbik7XG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBjcmVhdGVBdGFJeCA9IHRoaXMuY3JlYXRlQXRhSW5zdHJ1Y3Rpb24odXNlciwgdXNlciwgdGFyZ2V0TWludCk7XG4gICAgICAgIHR4LmFkZChjcmVhdGVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBpZiBmZWVfYnBzID4gMFxuICAgIGxldCBmZWVSZWNpcGllbnRUb2tlbjogUHVibGljS2V5IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ0FjY291bnQuZmVlQnBzID4gMCkge1xuICAgICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IHBhcmFtcy5mZWVSZWNpcGllbnQgfHwgY29uZmlnQWNjb3VudC5mZWVSZWNpcGllbnQ7XG4gICAgICBmZWVSZWNpcGllbnRUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgZmVlUmVjaXBpZW50QWRkcmVzcyk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgQVRBIGV4aXN0cyBhbmQgY3JlYXRlIGlmIG5lZWRlZFxuICAgICAgY29uc3QgZmVlQXRhRXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHMoZmVlUmVjaXBpZW50VG9rZW4pO1xuICAgICAgaWYgKCFmZWVBdGFFeGlzdHMpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlRmVlQXRhSXggPSB0aGlzLmNyZWF0ZUF0YUluc3RydWN0aW9uKHVzZXIsIGZlZVJlY2lwaWVudEFkZHJlc3MsIGJldHRpbmdUb2tlbik7XG4gICAgICAgIHR4LmFkZChjcmVhdGVGZWVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGxhY2VCZXRJeCA9IGF3YWl0IHRoaXMucGxhY2VCZXQoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZmVlUmVjaXBpZW50VG9rZW4sXG4gICAgfSk7XG4gICAgdHguYWRkKHBsYWNlQmV0SXgpO1xuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHJld2FyZHMgYWZ0ZXIgbWFya2V0IHJlc29sdXRpb25cbiAgICovXG4gIGFzeW5jIGNsYWltUmV3YXJkcyhwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBiZXR0aW5nVG9rZW4sIHdpbm5pbmdPdXRjb21lIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIGNvbnN0IHRhcmdldE1pbnQgPSB3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIpO1xuICAgIGNvbnN0IHNoYXJlc1RvQ2xhaW1CbiA9IG5ldyBCTihwYXJhbXMuc2hhcmVzVG9DbGFpbSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY2xhaW1SZXdhcmRzKHtcbiAgICAgICAgdG9rZW5BbW91bnQ6IHNoYXJlc1RvQ2xhaW1CbixcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xhaW0gcmV3YXJkc1xuICAgKi9cbiAgYXN5bmMgYnVpbGRDbGFpbVJld2FyZHNUeChwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xhaW1SZXdhcmRzKHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgaW5zdHJ1Y3Rpb25zIHRvIGNsYWltIHJld2FyZHMgZnJvbSBtdWx0aXBsZSBtYXJrZXRzXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGJlIGJhdGNoZWQgaW50byB0cmFuc2FjdGlvbnNcbiAgICovXG4gIGFzeW5jIGJhdGNoQ2xhaW1SZXdhcmRzKHBhcmFtczogQmF0Y2hDbGFpbVBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdPiB7XG4gICAgY29uc3QgeyB1c2VyLCBjbGFpbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjbGFpbSBvZiBjbGFpbXMpIHtcbiAgICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5jbGFpbVJld2FyZHMoe1xuICAgICAgICB1c2VyLFxuICAgICAgICBtYXJrZXQ6IGNsYWltLm1hcmtldCxcbiAgICAgICAgYmV0dGluZ1Rva2VuOiBjbGFpbS5iZXR0aW5nVG9rZW4sXG4gICAgICAgIHdpbm5pbmdPdXRjb21lOiBjbGFpbS53aW5uaW5nT3V0Y29tZSxcbiAgICAgICAgc2hhcmVzVG9DbGFpbTogY2xhaW0uc2hhcmVzVG9DbGFpbSA/PyAwLFxuICAgICAgfSk7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaChpeCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0cmFuc2FjdGlvbnMgdG8gY2xhaW0gcmV3YXJkcyBmcm9tIG11bHRpcGxlIG1hcmtldHNcbiAgICogQXV0b21hdGljYWxseSBzcGxpdHMgaW50byBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkIChtYXggNSBjbGFpbXMgcGVyIHR4IHRvIGF2b2lkIHNpemUgbGltaXRzKVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQmF0Y2ggY2xhaW0gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gbWF4Q2xhaW1zUGVyVHggLSBNYXhpbXVtIGNsYWltcyBwZXIgdHJhbnNhY3Rpb24gKGRlZmF1bHQ6IDUpXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgYXN5bmMgYnVpbGRCYXRjaENsYWltUmV3YXJkc1R4KFxuICAgIHBhcmFtczogQmF0Y2hDbGFpbVBhcmFtcyxcbiAgICBtYXhDbGFpbXNQZXJUeDogbnVtYmVyID0gNVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBhd2FpdCB0aGlzLmJhdGNoQ2xhaW1SZXdhcmRzKHBhcmFtcyk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdID0gW107XG5cbiAgICAvLyBTcGxpdCBpbnN0cnVjdGlvbnMgaW50byBjaHVua3NcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkgKz0gbWF4Q2xhaW1zUGVyVHgpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gaW5zdHJ1Y3Rpb25zLnNsaWNlKGksIGkgKyBtYXhDbGFpbXNQZXJUeCk7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgY2h1bmsuZm9yRWFjaChpeCA9PiB0eC5hZGQoaXgpKTtcbiAgICAgIHRyYW5zYWN0aW9ucy5wdXNoKHR4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnVuZCBiZXRzIGlmIG1hcmtldCBpcyByZWZ1bmRlZFxuICAgKiBAcGFyYW0gcGFyYW1zLnRva2VuQW1vdW50IC0gQW1vdW50IG9mIHNoYXJlcyB0byByZWZ1bmQuIDAgb3IgdW5kZWZpbmVkIG1lYW5zIHJlZnVuZCBhbGwgc2hhcmVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcGFydGlhbGx5IHJlZnVuZCB0aGVpciBwb3NpdGlvbiBhY3Jvc3MgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLlxuICAgKi9cbiAgYXN5bmMgcmVmdW5kKHBhcmFtczogUmVmdW5kUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgeyB1c2VyLCBtYXJrZXQsIGJldHRpbmdUb2tlbiwgb3V0Y29tZSwgdG9rZW5BbW91bnQgfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCBvdXRjb21lRW51bSA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB7IHllczoge30gfSA6IHsgbm86IHt9IH07XG4gICAgXG4gICAgLy8gQ29udmVydCB0b2tlbkFtb3VudCB0byBCTiAoMCBtZWFucyByZWZ1bmQgYWxsKVxuICAgIGNvbnN0IHRva2VuQW1vdW50Qm4gPSBuZXcgQk4odG9rZW5BbW91bnQgPz8gMCk7XG4gICAgXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIGNvbnN0IHRhcmdldE1pbnQgPSBvdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlcik7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5yZWZ1bmQoe1xuICAgICAgICBvdXRjb21lOiBvdXRjb21lRW51bSxcbiAgICAgICAgdG9rZW5BbW91bnQ6IHRva2VuQW1vdW50Qm4sXG4gICAgICB9KVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgdXNlck91dGNvbWVUb2tlbixcbiAgICAgICAgdXNlckJldHRpbmdUb2tlbixcbiAgICAgICAgdXNlcixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlZnVuZFxuICAgKi9cbiAgYXN5bmMgYnVpbGRSZWZ1bmRUeChwYXJhbXM6IFJlZnVuZFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMucmVmdW5kKHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIG1hcmtldCAoQWRtaW4gb25seSlcbiAgICovXG4gIGFzeW5jIHJlc29sdmVNYXJrZXRCeUlEKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0SWQ6IG51bWJlciB8IEJOLFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuXG4gICAgbGV0IG91dGNvbWVFbnVtOiBhbnkgPSBudWxsO1xuICAgIGlmICh3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IHllczoge30gfTtcbiAgICB9IGVsc2UgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIk5vXCIpIHtcbiAgICAgIG91dGNvbWVFbnVtID0geyBubzoge30gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5yZXNvbHZlTWFya2V0KG91dGNvbWVFbnVtKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldDogbWFya2V0UGRhLFxuICAgICAgICBhZG1pbixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlc29sdmUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVzb2x2ZU1hcmtldFR4QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTixcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGxcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWFya2V0QnlJRChhZG1pbiwgbWFya2V0SWQsIHdpbm5pbmdPdXRjb21lKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgbWFya2V0IChBZG1pbiBvbmx5KVxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZU1hcmtldChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5LFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBsZXQgb3V0Y29tZUVudW06IGFueSA9IG51bGw7XG4gICAgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIlllc1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgeWVzOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAod2lubmluZ091dGNvbWUgPT09IFwiTm9cIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IG5vOiB7fSB9O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlc29sdmVNYXJrZXQob3V0Y29tZUVudW0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0OiBtYXJrZXQsXG4gICAgICAgIGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gcmVzb2x2ZSBhIG1hcmtldFxuICAgKi9cbiAgYXN5bmMgYnVpbGRSZXNvbHZlTWFya2V0VHgoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleSxcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGxcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWFya2V0KGFkbWluLCBtYXJrZXQsIHdpbm5pbmdPdXRjb21lKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhIG1hcmtldCAoQWRtaW4gb25seSlcbiAgICovXG4gIGFzeW5jIGNsb3NlTWFya2V0KFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0OiBQdWJsaWNLZXlcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY2xvc2VNYXJrZXQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldDogbWFya2V0LFxuICAgICAgICBhZG1pbjogYWRtaW4sXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBjbG9zZSBhIG1hcmtldFxuICAgKi9cbiAgYXN5bmMgYnVpbGRDbG9zZU1hcmtldFR4KFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0OiBQdWJsaWNLZXlcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5jbG9zZU1hcmtldChhZG1pbiwgbWFya2V0KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhIG1hcmtldCAoQWRtaW4gb25seSlcbiAgICovXG4gIGFzeW5jIGNsb3NlTWFya2V0QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY2xvc2VNYXJrZXQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldDogbWFya2V0UGRhLFxuICAgICAgICBhZG1pbjogYWRtaW4sXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBjbG9zZSBhIG1hcmtldFxuICAgKi9cbiAgYXN5bmMgYnVpbGRDbG9zZU1hcmtldFR4QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNsb3NlTWFya2V0QnlJRChhZG1pbiwgbWFya2V0SWQpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmV0Y2ggZ2xvYmFsIGNvbmZpZyBhY2NvdW50IGRhdGFcbiAgICovXG4gIGFzeW5jIGdldEdsb2JhbENvbmZpZ0FjY291bnQoKSB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0uYWNjb3VudC5nbG9iYWxDb25maWcuZmV0Y2goZ2xvYmFsQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBtYXJrZXQgYWNjb3VudCBkYXRhXG4gICAqL1xuICBhc3luYyBnZXRNYXJrZXRBY2NvdW50KGFkbWluOiBQdWJsaWNLZXksIG1hcmtldElkOiBudW1iZXIgfCBCTikge1xuICAgIGNvbnN0IG1hcmtldElkQm4gPSBuZXcgQk4obWFya2V0SWQpO1xuICAgIGNvbnN0IG1hcmtldFBkYSA9IGdldE1hcmtldFBkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBhZG1pbiwgbWFya2V0SWRCbik7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5hY2NvdW50Lm1hcmtldC5mZXRjaChtYXJrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWFya2V0SW5mbyhtYXJrZXRQZGE6IFB1YmxpY0tleSkge1xuICAgIGNvbnN0IG1hcmtldEFjY291bnQgPSBhd2FpdCB0aGlzLnByb2dyYW0uYWNjb3VudC5tYXJrZXQuZmV0Y2gobWFya2V0UGRhKTtcbiAgICByZXR1cm4gbWFya2V0QWNjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB2YXVsdCBhY2NvdW50IGRhdGFcbiAgICovXG4gIGFzeW5jIGdldFZhdWx0QWNjb3VudChtYXJrZXRQZGE6IFB1YmxpY0tleSkge1xuICAgIGNvbnN0IHZhdWx0UGRhID0gZ2V0VmF1bHRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgbWFya2V0UGRhKTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0QWNjb3VudCh0aGlzLmNvbm5lY3Rpb24sIHZhdWx0UGRhKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drama-pm-client",
3
- "version": "0.2.9",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "TypeScript client for Drama Prediction Market",
6
6
  "main": "dist/index.js",