@zcomb/programs-sdk 1.9.0 → 1.11.0
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/futarchy/client.d.ts +2 -1
- package/dist/futarchy/client.js +14 -4
- package/dist/futarchy/utils.js +3 -3
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +1 -1
- package/package.json +1 -1
|
@@ -692,9 +692,10 @@ export declare class FutarchyClient {
|
|
|
692
692
|
* @param creator - The user redeeming
|
|
693
693
|
* @param proposalPda - The proposal PDA
|
|
694
694
|
* @param altAddress - Optional ALT address (will be created if not provided for 3+ options)
|
|
695
|
+
* @param options - Optional transaction options (priority fee, compute units)
|
|
695
696
|
* @returns Unsigned versioned transaction, ALT address, number of options, and blockhash info for confirmation
|
|
696
697
|
*/
|
|
697
|
-
redeemLiquidityVersioned(creator: PublicKey, proposalPda: PublicKey, altAddress?: PublicKey): Promise<{
|
|
698
|
+
redeemLiquidityVersioned(creator: PublicKey, proposalPda: PublicKey, altAddress?: PublicKey, options?: TxOptions): Promise<{
|
|
698
699
|
versionedTx: VersionedTransaction;
|
|
699
700
|
altAddress: PublicKey;
|
|
700
701
|
numOptions: number;
|
package/dist/futarchy/client.js
CHANGED
|
@@ -91,7 +91,11 @@ class FutarchyClient {
|
|
|
91
91
|
if (options?.includeCuBudget === false) {
|
|
92
92
|
return [];
|
|
93
93
|
}
|
|
94
|
-
|
|
94
|
+
const instructions = [web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: this.getComputeUnits(options) })];
|
|
95
|
+
if (options?.priorityFeeMicroLamports !== undefined && options.priorityFeeMicroLamports > 0) {
|
|
96
|
+
instructions.push(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: options.priorityFeeMicroLamports }));
|
|
97
|
+
}
|
|
98
|
+
return instructions;
|
|
95
99
|
}
|
|
96
100
|
/* Instruction Builders */
|
|
97
101
|
async initializeModerator(admin, baseMint, quoteMint, name, options) {
|
|
@@ -459,9 +463,10 @@ class FutarchyClient {
|
|
|
459
463
|
* @param creator - The user redeeming
|
|
460
464
|
* @param proposalPda - The proposal PDA
|
|
461
465
|
* @param altAddress - Optional ALT address (will be created if not provided for 3+ options)
|
|
466
|
+
* @param options - Optional transaction options (priority fee, compute units)
|
|
462
467
|
* @returns Unsigned versioned transaction, ALT address, number of options, and blockhash info for confirmation
|
|
463
468
|
*/
|
|
464
|
-
async redeemLiquidityVersioned(creator, proposalPda, altAddress) {
|
|
469
|
+
async redeemLiquidityVersioned(creator, proposalPda, altAddress, options) {
|
|
465
470
|
const provider = this.program.provider;
|
|
466
471
|
const { builder, numOptions } = await this.redeemLiquidity(creator, proposalPda);
|
|
467
472
|
// Create ALT if not provided and needed
|
|
@@ -509,10 +514,15 @@ class FutarchyClient {
|
|
|
509
514
|
// Build instruction
|
|
510
515
|
const instruction = await builder.instruction();
|
|
511
516
|
const computeBudgetIx = web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 });
|
|
517
|
+
// Build pre-instructions array with optional priority fee
|
|
518
|
+
const preInstructions = [computeBudgetIx];
|
|
519
|
+
if (options?.priorityFeeMicroLamports !== undefined && options.priorityFeeMicroLamports > 0) {
|
|
520
|
+
preInstructions.push(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: options.priorityFeeMicroLamports }));
|
|
521
|
+
}
|
|
512
522
|
// Get fresh blockhash with lastValidBlockHeight for confirmation tracking
|
|
513
523
|
const { blockhash, lastValidBlockHeight } = await provider.connection.getLatestBlockhash('confirmed');
|
|
514
524
|
// Build versioned transaction using the verified ALT (no re-fetch)
|
|
515
|
-
const versionedTx = this.buildVersionedTxWithALT(creator, [
|
|
525
|
+
const versionedTx = this.buildVersionedTxWithALT(creator, [...preInstructions, instruction], verifiedALT, blockhash);
|
|
516
526
|
// Return the versioned transaction along with blockhash info for proper confirmation
|
|
517
527
|
// This allows the caller to use their own signing mechanism (e.g., keypair.sign)
|
|
518
528
|
return { versionedTx, altAddress: altPubkey, numOptions, blockhash, lastValidBlockHeight };
|
|
@@ -754,4 +764,4 @@ class FutarchyClient {
|
|
|
754
764
|
}
|
|
755
765
|
}
|
|
756
766
|
exports.FutarchyClient = FutarchyClient;
|
|
757
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1dGFyY2h5L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4Q0FBZ0U7QUFDaEUsNkNBVXlCO0FBQ3pCLGlEQUsyQjtBQUMzQiwyQ0FBNEQ7QUFTNUQsbUNBV2lCO0FBQ2pCLGlEQWF3QjtBQUd4QixvQ0FBeUY7QUFDekYsZ0NBQXNHO0FBRXRHLDRDQUFnRDtBQUNoRCx5REFBMkM7QUFFM0MsTUFBTSxxQkFBcUIsR0FBRyxNQUFPLENBQUM7QUFFdEMsTUFBYSxjQUFjO0lBT3pCLFlBQVksUUFBd0IsRUFBRSxTQUFxQixFQUFFLFlBQXFCO1FBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLHNCQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFPLENBQUMsa0JBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGVBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxJQUFJLHFCQUFxQixDQUFDO0lBQ25FLENBQUM7SUFFRCxpQkFBaUI7SUFFakIsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFBLG9CQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxV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QU0sT0FBTyxHQUFHLElBQUEscUNBQXNCLEVBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsSUFBSSxFQUNKLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsV0FBVyxDQUNaLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXZELE9BQU87WUFDTCxPQUFPO1lBQ1AsTUFBTTtZQUNOLFlBQVk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQ2pCLEtBQWdCLEVBQ2hCLElBQVksRUFDWixRQUFtQixFQUNuQixPQUFtQjtRQUVuQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJELE1BQU0sT0FBTyxHQUFHLElBQUEsNEJBQWEsRUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixRQUFRLENBQ1QsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdkQsT0FBTztZQUNMLE9BQU87WUFDUCxNQUFNO1lBQ04sWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1a0NELHdDQTRrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogSGlnaC1sZXZlbCBjbGllbnQgZm9yIHRoZSBGdXRhcmNoeSBwcm9ncmFtLlxuICogSGFuZGxlcyBhY2NvdW50IGRlcml2YXRpb24sIGluc3RydWN0aW9uIGJ1aWxkaW5nLCBhbmQgdHJhbnNhY3Rpb24gY29tcG9zaXRpb24uXG4gKi9cblxuaW1wb3J0IHsgUHJvZ3JhbSwgQW5jaG9yUHJvdmlkZXIsIEJOIH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5pbXBvcnQge1xuICBQdWJsaWNLZXksXG4gIENvbXB1dGVCdWRnZXRQcm9ncmFtLFxuICBBZGRyZXNzTG9va3VwVGFibGVQcm9ncmFtLFxuICBBZGRyZXNzTG9va3VwVGFibGVBY2NvdW50LFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbixcbiAgVHJhbnNhY3Rpb25NZXNzYWdlLFxuICBWZXJzaW9uZWRUcmFuc2FjdGlvbixcbn0gZnJvbSBcIkBzb2xhbmEvd2ViMy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMsXG4gIFRPS0VOX1BST0dSQU1fSUQsXG4gIEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudElkZW1wb3RlbnRJbnN0cnVjdGlvbixcbn0gZnJvbSBcIkBzb2xhbmEvc3BsLXRva2VuXCI7XG5pbXBvcnQgeyBQUk9HUkFNX0lELCBTUVVBRFNfUFJPR1JBTV9JRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgRnV0YXJjaHksXG4gIERBT0FjY291bnQsXG4gIE1vZGVyYXRvckFjY291bnQsXG4gIFByb3Bvc2FsQWNjb3VudCxcbiAgUHJvcG9zYWxQYXJhbXMsXG4gIFBvb2xUeXBlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZGVyaXZlREFPUERBLFxuICBkZXJpdmVNb2RlcmF0b3JQREEsXG4gIGRlcml2ZVByb3Bvc2FsUERBLFxuICBkZXJpdmVNaW50Q3JlYXRlS2V5UERBLFxuICBmZXRjaERBT0FjY291bnQsXG4gIGZldGNoTW9kZXJhdG9yQWNjb3VudCxcbiAgZmV0Y2hQcm9wb3NhbEFjY291bnQsXG4gIHBhcnNlUHJvcG9zYWxTdGF0ZSxcbiAgaXNQcm9wb3NhbEV4cGlyZWQsXG4gIGdldFRpbWVSZW1haW5pbmcsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBpbml0aWFsaXplTW9kZXJhdG9yLFxuICBpbml0aWFsaXplUHJvcG9zYWwsXG4gIGFkZE9wdGlvbixcbiAgbGF1bmNoUHJvcG9zYWwsXG4gIGZpbmFsaXplUHJvcG9zYWwsXG4gIHJlZGVlbUxpcXVpZGl0eSxcbiAgYWRkSGlzdG9yaWNhbFByb3Bvc2FsLFxuICBpbml0aWFsaXplUGFyZW50REFPLFxuICBpbml0aWFsaXplQ2hpbGREQU8sXG4gIHVwZ3JhZGVEQU8sXG4gIGFkZEhpc3RvcmljYWxQYXJlbnREQU8sXG4gIHRyYW5zZmVyQWRtaW4sXG59IGZyb20gXCIuL2luc3RydWN0aW9uc1wiO1xuaW1wb3J0IHsgVHhPcHRpb25zIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmltcG9ydCB7IFZhdWx0Q2xpZW50LCBkZXJpdmVWYXVsdFBEQSwgZGVyaXZlQ29uZGl0aW9uYWxNaW50LCBWYXVsdFR5cGUgfSBmcm9tIFwiLi4vdmF1bHRcIjtcbmltcG9ydCB7IEFNTUNsaWVudCwgZGVyaXZlUG9vbFBEQSwgZGVyaXZlUmVzZXJ2ZVBEQSwgZGVyaXZlRmVlVmF1bHRQREEsIEZFRV9BVVRIT1JJVFkgfSBmcm9tIFwiLi4vYW1tXCI7XG5cbmltcG9ydCB7IEZ1dGFyY2h5SURMIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC9pZGxzXCI7XG5pbXBvcnQgKiBhcyBtdWx0aXNpZyBmcm9tIFwiQHNxZHMvbXVsdGlzaWdcIjtcblxuY29uc3QgREVGQVVMVF9DT01QVVRFX1VOSVRTID0gNTAwXzAwMDtcblxuZXhwb3J0IGNsYXNzIEZ1dGFyY2h5Q2xpZW50IHtcbiAgcHVibGljIHByb2dyYW06IFByb2dyYW08RnV0YXJjaHk+O1xuICBwdWJsaWMgcHJvZ3JhbUlkOiBQdWJsaWNLZXk7XG4gIHB1YmxpYyB2YXVsdDogVmF1bHRDbGllbnQ7XG4gIHB1YmxpYyBhbW06IEFNTUNsaWVudDtcbiAgcHJpdmF0ZSBkZWZhdWx0Q29tcHV0ZVVuaXRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJvdmlkZXI6IEFuY2hvclByb3ZpZGVyLCBwcm9ncmFtSWQ/OiBQdWJsaWNLZXksIGNvbXB1dGVVbml0cz86IG51bWJlcikge1xuICAgIHRoaXMucHJvZ3JhbUlkID0gcHJvZ3JhbUlkID8/IFBST0dSQU1fSUQ7XG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IFByb2dyYW0oRnV0YXJjaHlJREwgYXMgRnV0YXJjaHksIHByb3ZpZGVyKTtcbiAgICB0aGlzLnZhdWx0ID0gbmV3IFZhdWx0Q2xpZW50KHByb3ZpZGVyKTtcbiAgICB0aGlzLmFtbSA9IG5ldyBBTU1DbGllbnQocHJvdmlkZXIpO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVVbml0cyA9IGNvbXB1dGVVbml0cyA/PyBERUZBVUxUX0NPTVBVVEVfVU5JVFM7XG4gIH1cblxuICAvKiBQREEgSGVscGVycyAqL1xuXG4gIGRlcml2ZURBT1BEQShuYW1lOiBzdHJpbmcpOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlREFPUERBKG5hbWUsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIGRlcml2ZU1vZGVyYXRvclBEQShuYW1lOiBzdHJpbmcpOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlTW9kZXJhdG9yUERBKG5hbWUsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIGRlcml2ZVByb3Bvc2FsUERBKG1vZGVyYXRvcjogUHVibGljS2V5LCBwcm9wb3NhbElkOiBudW1iZXIpOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlUHJvcG9zYWxQREEobW9kZXJhdG9yLCBwcm9wb3NhbElkLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICAvKiBGZXRjaGVycyAqL1xuXG4gIGFzeW5jIGZldGNoREFPKGRhb1BkYTogUHVibGljS2V5KTogUHJvbWlzZTxEQU9BY2NvdW50PiB7XG4gICAgcmV0dXJuIGZldGNoREFPQWNjb3VudCh0aGlzLnByb2dyYW0sIGRhb1BkYSk7XG4gIH1cblxuICBhc3luYyBmZXRjaE1vZGVyYXRvcihtb2RlcmF0b3JQZGE6IFB1YmxpY0tleSk6IFByb21pc2U8TW9kZXJhdG9yQWNjb3VudD4ge1xuICAgIHJldHVybiBmZXRjaE1vZGVyYXRvckFjY291bnQodGhpcy5wcm9ncmFtLCBtb2RlcmF0b3JQZGEpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYTogUHVibGljS2V5KTogUHJvbWlzZTxQcm9wb3NhbEFjY291bnQ+IHtcbiAgICByZXR1cm4gZmV0Y2hQcm9wb3NhbEFjY291bnQodGhpcy5wcm9ncmFtLCBwcm9wb3NhbFBkYSk7XG4gIH1cblxuICAvKiBQcm9wb3NhbCBIZWxwZXJzICovXG5cbiAgaXNQcm9wb3NhbEV4cGlyZWQocHJvcG9zYWw6IFByb3Bvc2FsQWNjb3VudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1Byb3Bvc2FsRXhwaXJlZChwcm9wb3NhbCk7XG4gIH1cblxuICBnZXRUaW1lUmVtYWluaW5nKHByb3Bvc2FsOiBQcm9wb3NhbEFjY291bnQpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRUaW1lUmVtYWluaW5nKHByb3Bvc2FsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcHV0ZVVuaXRzKG9wdGlvbnM/OiBUeE9wdGlvbnMpOiBudW1iZXIge1xuICAgIHJldHVybiBvcHRpb25zPy5jb21wdXRlVW5pdHMgPz8gdGhpcy5kZWZhdWx0Q29tcHV0ZVVuaXRzO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucz86IFR4T3B0aW9ucyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVDdUJ1ZGdldCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFtDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHsgdW5pdHM6IHRoaXMuZ2V0Q29tcHV0ZVVuaXRzKG9wdGlvbnMpIH0pXTtcbiAgfVxuXG4gIC8qIEluc3RydWN0aW9uIEJ1aWxkZXJzICovXG5cbiAgYXN5bmMgaW5pdGlhbGl6ZU1vZGVyYXRvcihcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIGJhc2VNaW50OiBQdWJsaWNLZXksXG4gICAgcXVvdGVNaW50OiBQdWJsaWNLZXksXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgW21vZGVyYXRvclBkYV0gPSB0aGlzLmRlcml2ZU1vZGVyYXRvclBEQShuYW1lKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0aWFsaXplTW9kZXJhdG9yKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICBiYXNlTWludCxcbiAgICAgIHF1b3RlTWludCxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIG5hbWVcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4geyBidWlsZGVyLCBtb2RlcmF0b3JQZGEsIG5hbWUgfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEhpc3RvcmljYWxQcm9wb3NhbChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1vZGVyYXRvclBkYTogUHVibGljS2V5LFxuICAgIG51bU9wdGlvbnM6IG51bWJlcixcbiAgICB3aW5uaW5nSWR4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgY3JlYXRlZEF0OiBCTiB8IG51bWJlcixcbiAgICBtZXRhZGF0YTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbW9kZXJhdG9yID0gYXdhaXQgdGhpcy5mZXRjaE1vZGVyYXRvcihtb2RlcmF0b3JQZGEpO1xuICAgIGNvbnN0IHByb3Bvc2FsSWQgPSBtb2RlcmF0b3IucHJvcG9zYWxJZENvdW50ZXI7XG4gICAgY29uc3QgW3Byb3Bvc2FsUGRhXSA9IHRoaXMuZGVyaXZlUHJvcG9zYWxQREEobW9kZXJhdG9yUGRhLCBwcm9wb3NhbElkKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBhZGRIaXN0b3JpY2FsUHJvcG9zYWwoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgbnVtT3B0aW9ucyxcbiAgICAgIHdpbm5pbmdJZHgsXG4gICAgICBsZW5ndGgsXG4gICAgICBjcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YVxuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGJ1aWxkZXIsIHByb3Bvc2FsUGRhLCBwcm9wb3NhbElkIH07XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplUHJvcG9zYWwoXG4gICAgY3JlYXRvcjogUHVibGljS2V5LFxuICAgIG1vZGVyYXRvclBkYTogUHVibGljS2V5LFxuICAgIHByb3Bvc2FsUGFyYW1zOiBQcm9wb3NhbFBhcmFtcyxcbiAgICBtZXRhZGF0YT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1vZGVyYXRvciA9IGF3YWl0IHRoaXMuZmV0Y2hNb2RlcmF0b3IobW9kZXJhdG9yUGRhKTtcbiAgICBjb25zdCBwcm9wb3NhbElkID0gbW9kZXJhdG9yLnByb3Bvc2FsSWRDb3VudGVyO1xuICAgIGNvbnN0IFtwcm9wb3NhbFBkYV0gPSB0aGlzLmRlcml2ZVByb3Bvc2FsUERBKG1vZGVyYXRvclBkYSwgcHJvcG9zYWxJZCk7XG5cbiAgICAvLyBEZXJpdmUgdmF1bHQgUERBIChwcm9wb3NhbCBpcyB0aGUgb3duZXIsIG5vbmNlPXByb3Bvc2FsSWQpXG4gICAgY29uc3QgW3ZhdWx0UGRhXSA9IGRlcml2ZVZhdWx0UERBKHByb3Bvc2FsUGRhLCBwcm9wb3NhbElkLCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgY29uZGl0aW9uYWwgbWludHMgZm9yIGluaXRpYWwgMiBvcHRpb25zXG4gICAgY29uc3QgW2NvbmRCYXNlTWludDBdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuQmFzZSwgMCwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtjb25kQmFzZU1pbnQxXSA9IGRlcml2ZUNvbmRpdGlvbmFsTWludCh2YXVsdFBkYSwgVmF1bHRUeXBlLkJhc2UsIDEsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbY29uZFF1b3RlTWludDBdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuUXVvdGUsIDAsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbY29uZFF1b3RlTWludDFdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuUXVvdGUsIDEsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcblxuICAgIC8vIERlcml2ZSBwb29sIFBEQXMgZm9yIGluaXRpYWwgMiBvcHRpb25zIChwcm9wb3NhbCBpcyBhZG1pbiwgbWludEE9Y29uZFF1b3RlLCBtaW50Qj1jb25kQmFzZSlcbiAgICBjb25zdCBbcG9vbDBdID0gZGVyaXZlUG9vbFBEQShwcm9wb3NhbFBkYSwgY29uZFF1b3RlTWludDAsIGNvbmRCYXNlTWludDAsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW3Bvb2wxXSA9IGRlcml2ZVBvb2xQREEocHJvcG9zYWxQZGEsIGNvbmRRdW90ZU1pbnQxLCBjb25kQmFzZU1pbnQxLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuXG4gICAgLy8gRGVyaXZlIHJlc2VydmVzIGFuZCBmZWUgdmF1bHRzXG4gICAgY29uc3QgW3Jlc2VydmVBMF0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wwLCBjb25kUXVvdGVNaW50MCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUIwXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbDAsIGNvbmRCYXNlTWludDAsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW2ZlZVZhdWx0MF0gPSBkZXJpdmVGZWVWYXVsdFBEQShwb29sMCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUExXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbDEsIGNvbmRRdW90ZU1pbnQxLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQjFdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sMSwgY29uZEJhc2VNaW50MSwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbZmVlVmF1bHQxXSA9IGRlcml2ZUZlZVZhdWx0UERBKHBvb2wxLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuXG4gICAgLy8gVmF1bHQgdG9rZW4gYWNjb3VudHNcbiAgICBjb25zdCBiYXNlVG9rZW5BY2MgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtb2RlcmF0b3IuYmFzZU1pbnQsIHZhdWx0UGRhLCB0cnVlKTtcbiAgICBjb25zdCBxdW90ZVRva2VuQWNjID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobW9kZXJhdG9yLnF1b3RlTWludCwgdmF1bHRQZGEsIHRydWUpO1xuXG4gICAgLy8gQnVpbGQgcmVtYWluaW5nIGFjY291bnRzIGluIGV4cGVjdGVkIG9yZGVyIChzZWUgaW5pdGlhbGl6ZV9wcm9wb3NhbC5ycylcbiAgICBjb25zdCByZW1haW5pbmdBY2NvdW50cyA9IFtcbiAgICAgIHsgcHVia2V5OiBtb2RlcmF0b3IuYmFzZU1pbnQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSwgICAgICAvLyAwOiBiYXNlX21pbnRcbiAgICAgIHsgcHVia2V5OiBtb2RlcmF0b3IucXVvdGVNaW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sICAgICAvLyAxOiBxdW90ZV9taW50XG4gICAgICB7IHB1YmtleTogdmF1bHRQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgLy8gMjogdmF1bHRcbiAgICAgIHsgcHVia2V5OiBiYXNlVG9rZW5BY2MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAvLyAzOiBiYXNlX3Rva2VuX2FjY1xuICAgICAgeyBwdWJrZXk6IHF1b3RlVG9rZW5BY2MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgIC8vIDQ6IHF1b3RlX3Rva2VuX2FjY1xuICAgICAgeyBwdWJrZXk6IGNvbmRCYXNlTWludDAsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgIC8vIDU6IGNvbmRfYmFzZV9taW50XzBcbiAgICAgIHsgcHVia2V5OiBjb25kQmFzZU1pbnQxLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAvLyA2OiBjb25kX2Jhc2VfbWludF8xXG4gICAgICB7IHB1YmtleTogY29uZFF1b3RlTWludDAsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgLy8gNzogY29uZF9xdW90ZV9taW50XzBcbiAgICAgIHsgcHVia2V5OiBjb25kUXVvdGVNaW50MSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAvLyA4OiBjb25kX3F1b3RlX21pbnRfMVxuICAgICAgeyBwdWJrZXk6IHBvb2wwLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgICAgIC8vIDk6IHBvb2xfMFxuICAgICAgeyBwdWJrZXk6IHJlc2VydmVBMCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIDEwOiByZXNlcnZlX2FfMFxuICAgICAgeyBwdWJrZXk6IHJlc2VydmVCMCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIDExOiByZXNlcnZlX2JfMFxuICAgICAgeyBwdWJrZXk6IEZFRV9BVVRIT1JJVFksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSwgICAgICAgICAgIC8vIDEyOiBmZWVfYXV0aG9yaXR5XG4gICAgICB7IHB1YmtleTogZmVlVmF1bHQwLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTM6IGZlZV92YXVsdF8wXG4gICAgICB7IHB1YmtleTogcG9vbDEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgICAgLy8gMTQ6IHBvb2xfMVxuICAgICAgeyBwdWJrZXk6IHJlc2VydmVBMSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIDE1OiByZXNlcnZlX2FfMVxuICAgICAgeyBwdWJrZXk6IHJlc2VydmVCMSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIDE2OiByZXNlcnZlX2JfMVxuICAgICAgeyBwdWJrZXk6IGZlZVZhdWx0MSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIDE3OiBmZWVfdmF1bHRfMVxuICAgIF07XG5cbiAgICBjb25zdCBidWlsZGVyID0gaW5pdGlhbGl6ZVByb3Bvc2FsKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgY3JlYXRvcixcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgcHJvcG9zYWxQYXJhbXMsXG4gICAgICBtZXRhZGF0YSA/PyBudWxsLFxuICAgICAgcmVtYWluaW5nQWNjb3VudHNcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVpbGRlcixcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgcHJvcG9zYWxJZCxcbiAgICAgIHZhdWx0UGRhLFxuICAgICAgcG9vbHM6IFtwb29sMCwgcG9vbDFdLFxuICAgICAgY29uZEJhc2VNaW50czogW2NvbmRCYXNlTWludDAsIGNvbmRCYXNlTWludDFdLFxuICAgICAgY29uZFF1b3RlTWludHM6IFtjb25kUXVvdGVNaW50MCwgY29uZFF1b3RlTWludDFdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBhZGRPcHRpb24oY3JlYXRvcjogUHVibGljS2V5LCBwcm9wb3NhbFBkYTogUHVibGljS2V5LCBvcHRpb25zPzogVHhPcHRpb25zKSB7XG4gICAgY29uc3QgcHJvcG9zYWwgPSBhd2FpdCB0aGlzLmZldGNoUHJvcG9zYWwocHJvcG9zYWxQZGEpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gcHJvcG9zYWwubnVtT3B0aW9ucztcblxuICAgIC8vIERlcml2ZSBuZXcgY29uZGl0aW9uYWwgbWludHNcbiAgICBjb25zdCBbY29uZEJhc2VNaW50XSA9IGRlcml2ZUNvbmRpdGlvbmFsTWludChwcm9wb3NhbC52YXVsdCwgVmF1bHRUeXBlLkJhc2UsIG9wdGlvbkluZGV4LCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG4gICAgY29uc3QgW2NvbmRRdW90ZU1pbnRdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHByb3Bvc2FsLnZhdWx0LCBWYXVsdFR5cGUuUXVvdGUsIG9wdGlvbkluZGV4LCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgcG9vbCBQREFcbiAgICBjb25zdCBbcG9vbF0gPSBkZXJpdmVQb29sUERBKHByb3Bvc2FsUGRhLCBjb25kUXVvdGVNaW50LCBjb25kQmFzZU1pbnQsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbCwgY29uZFF1b3RlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUJdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sLCBjb25kQmFzZU1pbnQsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW2ZlZVZhdWx0XSA9IGRlcml2ZUZlZVZhdWx0UERBKHBvb2wsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG5cbiAgICAvLyBCdWlsZCByZW1haW5pbmcgYWNjb3VudHMgKHNlZSBhZGRfb3B0aW9uLnJzKVxuICAgIGNvbnN0IHJlbWFpbmluZ0FjY291bnRzID0gW1xuICAgICAgeyBwdWJrZXk6IHByb3Bvc2FsLnZhdWx0LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgIC8vIDA6IHZhdWx0XG4gICAgICB7IHB1YmtleTogY29uZEJhc2VNaW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgLy8gMTogY29uZF9iYXNlX21pbnRcbiAgICAgIHsgcHVia2V5OiBjb25kUXVvdGVNaW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAvLyAyOiBjb25kX3F1b3RlX21pbnRcbiAgICAgIHsgcHVia2V5OiBwb29sLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgICAgICAvLyAzOiBwb29sXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgLy8gNDogcmVzZXJ2ZV9hXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUIsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgLy8gNTogcmVzZXJ2ZV9iXG4gICAgICB7IHB1YmtleTogRkVFX0FVVEhPUklUWSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCAgICAgICAgICAgLy8gNjogZmVlX2F1dGhvcml0eVxuICAgICAgeyBwdWJrZXk6IGZlZVZhdWx0LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgIC8vIDc6IGZlZV92YXVsdFxuICAgIF07XG5cbiAgICBjb25zdCBidWlsZGVyID0gYWRkT3B0aW9uKHRoaXMucHJvZ3JhbSwgY3JlYXRvciwgcHJvcG9zYWxQZGEsIHJlbWFpbmluZ0FjY291bnRzKVxuICAgICAgLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4geyBidWlsZGVyLCBvcHRpb25JbmRleCwgcG9vbCwgY29uZEJhc2VNaW50LCBjb25kUXVvdGVNaW50IH07XG4gIH1cblxuICBhc3luYyBsYXVuY2hQcm9wb3NhbChcbiAgICBjcmVhdG9yOiBQdWJsaWNLZXksXG4gICAgcHJvcG9zYWxQZGE6IFB1YmxpY0tleSxcbiAgICBiYXNlQW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBxdW90ZUFtb3VudDogQk4gfCBudW1iZXIsXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBwcm9wb3NhbCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYSk7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLnZhdWx0LmZldGNoVmF1bHQocHJvcG9zYWwudmF1bHQpO1xuICAgIGNvbnN0IG51bU9wdGlvbnMgPSBwcm9wb3NhbC5udW1PcHRpb25zO1xuXG4gICAgLy8gU2xpY2UgYXJyYXlzIHRvIG51bU9wdGlvbnMgKGZpeGVkLXNpemUgYXJyYXlzIGZyb20gUnVzdCBpbmNsdWRlIGVtcHR5IHNsb3RzKVxuICAgIGNvbnN0IGNvbmRCYXNlTWludHMgPSB2YXVsdC5jb25kQmFzZU1pbnRzLnNsaWNlKDAsIG51bU9wdGlvbnMpO1xuICAgIGNvbnN0IGNvbmRRdW90ZU1pbnRzID0gdmF1bHQuY29uZFF1b3RlTWludHMuc2xpY2UoMCwgbnVtT3B0aW9ucyk7XG5cbiAgICAvLyBQcmUtY3JlYXRlIGNvbmRpdGlvbmFsIEFUQXMgZm9yIDMrIG9wdGlvbnMgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZVxuICAgIC8vIDY0IGluc3RydWN0aW9uIHRyYWNlIGxpbWl0LiBFYWNoIEFUQSBjcmVhdGlvbiB2aWEgdmF1bHQgZGVwb3NpdCBhZGRzXG4gICAgLy8gNSBpbm5lciBpbnN0cnVjdGlvbnM7IHdpdGggNCBvcHRpb25zIHRoYXQncyA0MCBleHRyYSBpbnN0cnVjdGlvbnMuXG4gICAgY29uc3Qgc2hvdWxkRW5zdXJlQVRBcyA9IG9wdGlvbnM/LmVuc3VyZUFUQXMgPz8gKG51bU9wdGlvbnMgPj0gMyk7XG4gICAgaWYgKHNob3VsZEVuc3VyZUFUQXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbmFsQVRBcyhjcmVhdG9yLCBjb25kQmFzZU1pbnRzLCBjb25kUXVvdGVNaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IHBvb2xzID0gcHJvcG9zYWwucG9vbHMuc2xpY2UoMCwgbnVtT3B0aW9ucyk7XG5cbiAgICAvLyBEZXJpdmUgYWxsIHVzZXIgY29uZGl0aW9uYWwgdG9rZW4gQVRBc1xuICAgIGNvbnN0IHVzZXJDb25kQmFzZUFUQXMgPSBjb25kQmFzZU1pbnRzLm1hcCgobSkgPT4gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobSwgY3JlYXRvcikpO1xuICAgIGNvbnN0IHVzZXJDb25kUXVvdGVBVEFzID0gY29uZFF1b3RlTWludHMubWFwKChtKSA9PiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtLCBjcmVhdG9yKSk7XG5cbiAgICAvLyBEZXJpdmUgcmVzZXJ2ZSBhY2NvdW50cyBmb3IgZWFjaCBwb29sXG4gICAgY29uc3QgcmVzZXJ2ZXNBOiBQdWJsaWNLZXlbXSA9IFtdO1xuICAgIGNvbnN0IHJlc2VydmVzQjogUHVibGljS2V5W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9wdGlvbnM7IGkrKykge1xuICAgICAgY29uc3QgW3Jlc0FdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sc1tpXSwgY29uZFF1b3RlTWludHNbaV0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgICBjb25zdCBbcmVzQl0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2xzW2ldLCBjb25kQmFzZU1pbnRzW2ldLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgICAgcmVzZXJ2ZXNBLnB1c2gocmVzQSk7XG4gICAgICByZXNlcnZlc0IucHVzaChyZXNCKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByZW1haW5pbmcgYWNjb3VudHMgKHNlZSBsYXVuY2hfcHJvcG9zYWwucnMpXG4gICAgLy8gTGF5b3V0OiA2IGZpeGVkICsgNypOIHZhcmlhYmxlXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHM6IHsgcHVia2V5OiBQdWJsaWNLZXk7IGlzU2lnbmVyOiBib29sZWFuOyBpc1dyaXRhYmxlOiBib29sZWFuIH1bXSA9IFtcbiAgICAgIHsgcHVia2V5OiB2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDogYmFzZV9taW50XG4gICAgICB7IHB1YmtleTogdmF1bHQucXVvdGVNaW50LmFkZHJlc3MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6IHF1b3RlX21pbnRcbiAgICAgIHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBwcm9wb3NhbC52YXVsdCwgdHJ1ZSksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgIC8vIDI6IHZhdWx0X2Jhc2VfYXRhXG4gICAgICB7IHB1YmtleTogZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQucXVvdGVNaW50LmFkZHJlc3MsIHByb3Bvc2FsLnZhdWx0LCB0cnVlKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAvLyAzOiB2YXVsdF9xdW90ZV9hdGFcbiAgICAgIHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBjcmVhdG9yKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAvLyA0OiB1c2VyX2Jhc2VfYXRhXG4gICAgICB7IHB1YmtleTogZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQucXVvdGVNaW50LmFkZHJlc3MsIGNyZWF0b3IpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgLy8gNTogdXNlcl9xdW90ZV9hdGFcbiAgICBdO1xuXG4gICAgLy8gNi4uNitOOiBjb25kX2Jhc2VfbWludHNcbiAgICBmb3IgKGNvbnN0IG1pbnQgb2YgY29uZEJhc2VNaW50cykge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogbWludCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyA2K04uLjYrMk46IGNvbmRfcXVvdGVfbWludHNcbiAgICBmb3IgKGNvbnN0IG1pbnQgb2YgY29uZFF1b3RlTWludHMpIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IG1pbnQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gNisyTi4uNiszTjogdXNlcl9jb25kX2Jhc2VfYXRhc1xuICAgIGZvciAoY29uc3QgYXRhIG9mIHVzZXJDb25kQmFzZUFUQXMpIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IGF0YSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyA2KzNOLi42KzROOiB1c2VyX2NvbmRfcXVvdGVfYXRhc1xuICAgIGZvciAoY29uc3QgYXRhIG9mIHVzZXJDb25kUXVvdGVBVEFzKSB7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBhdGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gNis0Ti4uNis1TjogcG9vbHNcbiAgICBmb3IgKGNvbnN0IHBvb2wgb2YgcG9vbHMpIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHBvb2wsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gNis1Ti4uNis2TjogcmVzZXJ2ZXNfYVxuICAgIGZvciAoY29uc3QgcmVzIG9mIHJlc2VydmVzQSkge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogcmVzLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIC8vIDYrNk4uLjYrN046IHJlc2VydmVzX2JcbiAgICBmb3IgKGNvbnN0IHJlcyBvZiByZXNlcnZlc0IpIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHJlcywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBsYXVuY2hQcm9wb3NhbChcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGNyZWF0b3IsXG4gICAgICBwcm9wb3NhbFBkYSxcbiAgICAgIHByb3Bvc2FsLnZhdWx0LFxuICAgICAgYmFzZUFtb3VudCxcbiAgICAgIHF1b3RlQW1vdW50LFxuICAgICAgcmVtYWluaW5nQWNjb3VudHNcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4geyBidWlsZGVyIH07XG4gIH1cblxuICAvKipcbiAgICogUHJlLWNyZWF0ZXMgYWxsIGNvbmRpdGlvbmFsIHRva2VuIEFUQXMgZm9yIGEgdXNlciBiZWZvcmUgbGF1bmNoaW5nIGEgcHJvcG9zYWwuXG4gICAqXG4gICAqIFRoaXMgaXMgUkVRVUlSRUQgZm9yIHByb3Bvc2FscyB3aXRoIDMrIG9wdGlvbnMgdG8gYXZvaWQgZXhjZWVkaW5nIFNvbGFuYSdzXG4gICAqIG1heCBpbnN0cnVjdGlvbiB0cmFjZSBsZW5ndGggbGltaXQgKDY0IGluc3RydWN0aW9ucykuIFRoZSB2YXVsdCdzIGRlcG9zaXQgQ1BJXG4gICAqIGNyZWF0ZXMgQVRBcyBvbi10aGUtZmx5LCBlYWNoIHJlcXVpcmluZyA1IGlubmVyIGluc3RydWN0aW9ucy4gRm9yIDQgb3B0aW9uczpcbiAgICogOCBBVEFzIMOXIDUgPSA0MCBleHRyYSBpbnN0cnVjdGlvbnMsIHB1c2hpbmcgdGhlIHRvdGFsIG92ZXIgNjQuXG4gICAqXG4gICAqIFByZS1jcmVhdGluZyBBVEFzIGVsaW1pbmF0ZXMgdGhpcyBvdmVyaGVhZCwgcmVkdWNpbmcgdGhlIHRyYWNlIHRvIH4zMiBpbnN0cnVjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjcmVhdG9yIC0gVGhlIHVzZXIgd2hvIHdpbGwgcmVjZWl2ZSBjb25kaXRpb25hbCB0b2tlbnNcbiAgICogQHBhcmFtIHByb3Bvc2FsUGRhIC0gVGhlIHByb3Bvc2FsIFBEQSAobXVzdCBiZSBpbml0aWFsaXplZCBidXQgbm90IGxhdW5jaGVkKVxuICAgKiBAcmV0dXJucyBUcmFuc2FjdGlvbiBzaWduYXR1cmVcbiAgICovXG4gIGFzeW5jIGVuc3VyZUNvbmRpdGlvbmFsQVRBcyhcbiAgICBjcmVhdG9yOiBQdWJsaWNLZXksXG4gICAgcHJvcG9zYWxQZGE6IFB1YmxpY0tleSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcm9wb3NhbCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYSk7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLnZhdWx0LmZldGNoVmF1bHQocHJvcG9zYWwudmF1bHQpO1xuICAgIGNvbnN0IGNvbmRCYXNlTWludHMgPSB2YXVsdC5jb25kQmFzZU1pbnRzLnNsaWNlKDAsIHByb3Bvc2FsLm51bU9wdGlvbnMpO1xuICAgIGNvbnN0IGNvbmRRdW90ZU1pbnRzID0gdmF1bHQuY29uZFF1b3RlTWludHMuc2xpY2UoMCwgcHJvcG9zYWwubnVtT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNvbmRpdGlvbmFsQVRBcyhjcmVhdG9yLCBjb25kQmFzZU1pbnRzLCBjb25kUXVvdGVNaW50cyk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBjb25kaXRpb25hbCBBVEFzIGdpdmVuIG1pbnQgYXJyYXlzLlxuICAgKiBVc2VkIGJ5IGJvdGggZW5zdXJlQ29uZGl0aW9uYWxBVEFzIGFuZCBsYXVuY2hQcm9wb3NhbCB0byBhdm9pZCByZWR1bmRhbnQgZmV0Y2hlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2NyZWF0ZUNvbmRpdGlvbmFsQVRBcyhcbiAgICBjcmVhdG9yOiBQdWJsaWNLZXksXG4gICAgY29uZEJhc2VNaW50czogUHVibGljS2V5W10sXG4gICAgY29uZFF1b3RlTWludHM6IFB1YmxpY0tleVtdLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyIGFzIEFuY2hvclByb3ZpZGVyO1xuXG4gICAgLy8gQnVpbGQgQVRBIGNyZWF0aW9uIGluc3RydWN0aW9ucyAoaWRlbXBvdGVudCAtIHdvbid0IGZhaWwgaWYgZXhpc3RzKVxuICAgIGNvbnN0IGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25kQmFzZU1pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1c2VyQ29uZEJhc2VBdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhjb25kQmFzZU1pbnRzW2ldLCBjcmVhdG9yKTtcbiAgICAgIGNvbnN0IHVzZXJDb25kUXVvdGVBdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhjb25kUXVvdGVNaW50c1tpXSwgY3JlYXRvcik7XG5cbiAgICAgIGluc3RydWN0aW9ucy5wdXNoKFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgdXNlckNvbmRCYXNlQXRhLFxuICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgY29uZEJhc2VNaW50c1tpXVxuICAgICAgICApLFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgdXNlckNvbmRRdW90ZUF0YSxcbiAgICAgICAgICBjcmVhdG9yLFxuICAgICAgICAgIGNvbmRRdW90ZU1pbnRzW2ldXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKC4uLmluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIHByb3ZpZGVyLnNlbmRBbmRDb25maXJtKHR4KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmFsaXplUHJvcG9zYWwoc2lnbmVyOiBQdWJsaWNLZXksIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXksIG9wdGlvbnM/OiBUeE9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9wb3NhbCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYSk7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLnZhdWx0LmZldGNoVmF1bHQocHJvcG9zYWwudmF1bHQpO1xuICAgIGNvbnN0IG51bU9wdGlvbnMgPSBwcm9wb3NhbC5udW1PcHRpb25zO1xuXG4gICAgLy8gQnVpbGQgcmVtYWluaW5nIGFjY291bnRzICgzIHBlciBwb29sOiBwb29sLCByZXNlcnZlX2EsIHJlc2VydmVfYilcbiAgICBjb25zdCByZW1haW5pbmdBY2NvdW50czogeyBwdWJrZXk6IFB1YmxpY0tleTsgaXNTaWduZXI6IGJvb2xlYW47IGlzV3JpdGFibGU6IGJvb2xlYW4gfVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9wdGlvbnM7IGkrKykge1xuICAgICAgY29uc3QgcG9vbCA9IHByb3Bvc2FsLnBvb2xzW2ldO1xuICAgICAgY29uc3QgW3Jlc2VydmVBXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbCwgdmF1bHQuY29uZFF1b3RlTWludHNbaV0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgICBjb25zdCBbcmVzZXJ2ZUJdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sLCB2YXVsdC5jb25kQmFzZU1pbnRzW2ldLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuXG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBwb29sLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiByZXNlcnZlQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHJlc2VydmVCLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBmaW5hbGl6ZVByb3Bvc2FsKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgc2lnbmVyLFxuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICBwcm9wb3NhbC52YXVsdCxcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHsgYnVpbGRlciB9O1xuICB9XG5cbiAgYXN5bmMgcmVkZWVtTGlxdWlkaXR5KGNyZWF0b3I6IFB1YmxpY0tleSwgcHJvcG9zYWxQZGE6IFB1YmxpY0tleSwgb3B0aW9ucz86IFR4T3B0aW9ucykge1xuICAgIGNvbnN0IHByb3Bvc2FsID0gYXdhaXQgdGhpcy5mZXRjaFByb3Bvc2FsKHByb3Bvc2FsUGRhKTtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMudmF1bHQuZmV0Y2hWYXVsdChwcm9wb3NhbC52YXVsdCk7XG4gICAgY29uc3QgbnVtT3B0aW9ucyA9IHByb3Bvc2FsLm51bU9wdGlvbnM7XG5cbiAgICBjb25zdCB7IHdpbm5pbmdJZHggfSA9IHBhcnNlUHJvcG9zYWxTdGF0ZShwcm9wb3NhbC5zdGF0ZSk7XG4gICAgaWYgKHdpbm5pbmdJZHggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3Bvc2FsIG5vdCBmaW5hbGl6ZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHdpbm5pbmdQb29sID0gcHJvcG9zYWwucG9vbHNbd2lubmluZ0lkeF07XG5cbiAgICAvLyBEZXJpdmUgd2lubmluZyBwb29sIHJlc2VydmVzXG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IGRlcml2ZVJlc2VydmVQREEod2lubmluZ1Bvb2wsIHZhdWx0LmNvbmRRdW90ZU1pbnRzW3dpbm5pbmdJZHhdLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQl0gPSBkZXJpdmVSZXNlcnZlUERBKHdpbm5pbmdQb29sLCB2YXVsdC5jb25kQmFzZU1pbnRzW3dpbm5pbmdJZHhdLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuXG4gICAgLy8gVXNlcidzIHdpbm5pbmcgY29uZGl0aW9uYWwgdG9rZW4gQVRBc1xuICAgIGNvbnN0IGNyZWF0b3JDb25kUXVvdGVBdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kUXVvdGVNaW50c1t3aW5uaW5nSWR4XSwgY3JlYXRvcik7XG4gICAgY29uc3QgY3JlYXRvckNvbmRCYXNlQXRhID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQuY29uZEJhc2VNaW50c1t3aW5uaW5nSWR4XSwgY3JlYXRvcik7XG5cbiAgICAvLyBCdWlsZCByZW1haW5pbmcgYWNjb3VudHMgKHNlZSByZWRlZW1fbGlxdWlkaXR5LnJzKVxuICAgIGNvbnN0IHJlbWFpbmluZ0FjY291bnRzOiB7IHB1YmtleTogUHVibGljS2V5OyBpc1NpZ25lcjogYm9vbGVhbjsgaXNXcml0YWJsZTogYm9vbGVhbiB9W10gPSBbXG4gICAgICAvLyByZW1vdmVfbGlxdWlkaXR5IGFjY291bnRzICgwLTMpXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IHJlc2VydmVCLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiBjcmVhdG9yQ29uZFF1b3RlQXRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiBjcmVhdG9yQ29uZEJhc2VBdGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuXG4gICAgICAvLyByZWRlZW1fd2lubmluZ3MgYmFzZSBmaXhlZCBhY2NvdW50cyAoNC02KVxuICAgICAgeyBwdWJrZXk6IHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBwcm9wb3NhbC52YXVsdCwgdHJ1ZSksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIGNyZWF0b3IpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICBdO1xuXG4gICAgLy8gcmVkZWVtX3dpbm5pbmdzIGJhc2UgcmVtYWluaW5nICg3Li43KzJOKTogW2NvbmRfYmFzZV9taW50X2ksIHVzZXJfY29uZF9iYXNlX2F0YV9pXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT3B0aW9uczsgaSsrKSB7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiB2YXVsdC5jb25kQmFzZU1pbnRzW2ldLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kQmFzZU1pbnRzW2ldLCBjcmVhdG9yKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIHJlZGVlbV93aW5uaW5ncyBxdW90ZSBmaXhlZCBhY2NvdW50c1xuICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHZhdWx0LnF1b3RlTWludC5hZGRyZXNzLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LnF1b3RlTWludC5hZGRyZXNzLCBwcm9wb3NhbC52YXVsdCwgdHJ1ZSksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgY3JlYXRvciksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcblxuICAgIC8vIHJlZGVlbV93aW5uaW5ncyBxdW90ZSByZW1haW5pbmc6IFtjb25kX3F1b3RlX21pbnRfaSwgdXNlcl9jb25kX3F1b3RlX2F0YV9pXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT3B0aW9uczsgaSsrKSB7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiB2YXVsdC5jb25kUXVvdGVNaW50c1tpXSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQuY29uZFF1b3RlTWludHNbaV0sIGNyZWF0b3IpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlciA9IHJlZGVlbUxpcXVpZGl0eShcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGNyZWF0b3IsXG4gICAgICBwcm9wb3NhbFBkYSxcbiAgICAgIHByb3Bvc2FsLnZhdWx0LFxuICAgICAgd2lubmluZ1Bvb2wsXG4gICAgICByZW1haW5pbmdBY2NvdW50c1xuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGJ1aWxkZXIsIG51bU9wdGlvbnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFkZHJlc3MgTG9va3VwIFRhYmxlIGZvciByZWRlbXB0aW9uIG9wZXJhdGlvbnMuXG4gICAqIFJlcXVpcmVkIGZvciBwcm9wb3NhbHMgd2l0aCAzKyBvcHRpb25zIHRvIGF2b2lkIGV4Y2VlZGluZyB0cmFuc2FjdGlvbiBzaXplIGxpbWl0cy5cbiAgICpcbiAgICogQHBhcmFtIGNyZWF0b3IgLSBUaGUgdXNlciByZWRlZW1pbmcgKGNyZWF0b3Igb2YgcHJvcG9zYWwgb3IgbGlxdWlkaXR5IHByb3ZpZGVyKVxuICAgKiBAcGFyYW0gcHJvcG9zYWxQZGEgLSBUaGUgcHJvcG9zYWwgUERBXG4gICAqIEByZXR1cm5zIEFMVCBhZGRyZXNzXG4gICAqL1xuICBhc3luYyBjcmVhdGVSZWRlbXB0aW9uQUxUKFxuICAgIGNyZWF0b3I6IFB1YmxpY0tleSxcbiAgICBwcm9wb3NhbFBkYTogUHVibGljS2V5LFxuICApOiBQcm9taXNlPHsgYWx0QWRkcmVzczogUHVibGljS2V5IH0+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvZ3JhbS5wcm92aWRlciBhcyBBbmNob3JQcm92aWRlcjtcbiAgICBjb25zdCBwcm9wb3NhbCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYSk7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLnZhdWx0LmZldGNoVmF1bHQocHJvcG9zYWwudmF1bHQpO1xuICAgIGNvbnN0IG51bU9wdGlvbnMgPSBwcm9wb3NhbC5udW1PcHRpb25zO1xuXG4gICAgY29uc3QgeyB3aW5uaW5nSWR4IH0gPSBwYXJzZVByb3Bvc2FsU3RhdGUocHJvcG9zYWwuc3RhdGUpO1xuICAgIGlmICh3aW5uaW5nSWR4ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wb3NhbCBub3QgZmluYWxpemVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NlczogUHVibGljS2V5W10gPSBbXG4gICAgICAvLyBQcm9ncmFtc1xuICAgICAgdGhpcy5wcm9ncmFtSWQsXG4gICAgICB0aGlzLnZhdWx0LnByb2dyYW1JZCxcbiAgICAgIHRoaXMuYW1tLnByb2dyYW1JZCxcbiAgICAgIFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIC8vIENvcmUgYWNjb3VudHNcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgcHJvcG9zYWwudmF1bHQsXG4gICAgICBwcm9wb3NhbC5tb2RlcmF0b3IsXG4gICAgICB2YXVsdC5iYXNlTWludC5hZGRyZXNzLFxuICAgICAgdmF1bHQucXVvdGVNaW50LmFkZHJlc3MsXG4gICAgICAvLyBXaW5uaW5nIHBvb2wgYW5kIHJlc2VydmVzXG4gICAgICBwcm9wb3NhbC5wb29sc1t3aW5uaW5nSWR4XSxcbiAgICAgIC8vIFZhdWx0IHRva2VuIGFjY291bnRzXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBwcm9wb3NhbC52YXVsdCwgdHJ1ZSksXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgcHJvcG9zYWwudmF1bHQsIHRydWUpLFxuICAgICAgLy8gQ3JlYXRvcidzIGJhc2UvcXVvdGUgQVRBc1xuICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQuYmFzZU1pbnQuYWRkcmVzcywgY3JlYXRvciksXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgY3JlYXRvciksXG4gICAgXTtcblxuICAgIC8vIFdpbm5pbmcgcG9vbCByZXNlcnZlc1xuICAgIGNvbnN0IFtyZXNlcnZlQV0gPSBkZXJpdmVSZXNlcnZlUERBKHByb3Bvc2FsLnBvb2xzW3dpbm5pbmdJZHhdLCB2YXVsdC5jb25kUXVvdGVNaW50c1t3aW5uaW5nSWR4XSwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUJdID0gZGVyaXZlUmVzZXJ2ZVBEQShwcm9wb3NhbC5wb29sc1t3aW5uaW5nSWR4XSwgdmF1bHQuY29uZEJhc2VNaW50c1t3aW5uaW5nSWR4XSwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBhZGRyZXNzZXMucHVzaChyZXNlcnZlQSwgcmVzZXJ2ZUIpO1xuXG4gICAgLy8gUGVyLW9wdGlvbiBhY2NvdW50cyAoY29uZGl0aW9uYWwgbWludHMgYW5kIHVzZXIgQVRBcylcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9wdGlvbnM7IGkrKykge1xuICAgICAgYWRkcmVzc2VzLnB1c2goXG4gICAgICAgIHZhdWx0LmNvbmRCYXNlTWludHNbaV0sXG4gICAgICAgIHZhdWx0LmNvbmRRdW90ZU1pbnRzW2ldLFxuICAgICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kQmFzZU1pbnRzW2ldLCBjcmVhdG9yKSxcbiAgICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQuY29uZFF1b3RlTWludHNbaV0sIGNyZWF0b3IpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgcmVjZW50IHNsb3QgZm9yIEFMVCBjcmVhdGlvblxuICAgIGNvbnN0IHNsb3QgPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldFNsb3QoXCJmaW5hbGl6ZWRcIik7XG5cbiAgICBjb25zdCBbY3JlYXRlSXgsIGFsdEFkZHJlc3NdID0gQWRkcmVzc0xvb2t1cFRhYmxlUHJvZ3JhbS5jcmVhdGVMb29rdXBUYWJsZSh7XG4gICAgICBhdXRob3JpdHk6IGNyZWF0b3IsXG4gICAgICBwYXllcjogY3JlYXRvcixcbiAgICAgIHJlY2VudFNsb3Q6IHNsb3QsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQUxUXG4gICAgY29uc3QgY3JlYXRlVHggPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoY3JlYXRlSXgpO1xuICAgIGNvbnN0IHsgYmxvY2toYXNoOiBjcmVhdGVCbG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBjcmVhdGVMYXN0VmFsaWRCbG9ja0hlaWdodCB9ID1cbiAgICAgIGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0TGF0ZXN0QmxvY2toYXNoKCdjb25maXJtZWQnKTtcbiAgICBjcmVhdGVUeC5yZWNlbnRCbG9ja2hhc2ggPSBjcmVhdGVCbG9ja2hhc2g7XG4gICAgY3JlYXRlVHguZmVlUGF5ZXIgPSBjcmVhdG9yO1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgcHJvdmlkZXIud2FsbGV0LnNpZ25UcmFuc2FjdGlvbihjcmVhdGVUeCk7XG4gICAgY29uc3Qgc2lnID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5zZW5kUmF3VHJhbnNhY3Rpb24oc2lnbmVkVHguc2VyaWFsaXplKCksIHtcbiAgICAgIHNraXBQcmVmbGlnaHQ6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5jb25maXJtVHJhbnNhY3Rpb24oe1xuICAgICAgc2lnbmF0dXJlOiBzaWcsXG4gICAgICBibG9ja2hhc2g6IGNyZWF0ZUJsb2NraGFzaCxcbiAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBjcmVhdGVMYXN0VmFsaWRCbG9ja0hlaWdodCxcbiAgICB9LCBcImNvbmZpcm1lZFwiKTtcblxuICAgIC8vIEV4dGVuZCBBTFQgd2l0aCBhZGRyZXNzZXNcbiAgICAvLyBVc2Ugc2tpcFByZWZsaWdodCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aGVyZSBzaW11bGF0aW9uIHNlZXMgc3RhbGUgc3RhdGVcbiAgICAvLyBiZWZvcmUgcHJldmlvdXMgZXh0ZW5kIGhhcyBwcm9wYWdhdGVkIChzYW1lIHBhdHRlcm4gYXMgQ1JFQVRFIGFib3ZlKVxuICAgIGNvbnN0IENIVU5LX1NJWkUgPSAyMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkgKz0gQ0hVTktfU0laRSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBhZGRyZXNzZXMuc2xpY2UoaSwgaSArIENIVU5LX1NJWkUpO1xuICAgICAgY29uc3QgZXh0ZW5kSXggPSBBZGRyZXNzTG9va3VwVGFibGVQcm9ncmFtLmV4dGVuZExvb2t1cFRhYmxlKHtcbiAgICAgICAgcGF5ZXI6IGNyZWF0b3IsXG4gICAgICAgIGF1dGhvcml0eTogY3JlYXRvcixcbiAgICAgICAgbG9va3VwVGFibGU6IGFsdEFkZHJlc3MsXG4gICAgICAgIGFkZHJlc3NlczogY2h1bmssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dGVuZFR4ID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGV4dGVuZEl4KTtcbiAgICAgIGNvbnN0IHsgYmxvY2toYXNoOiBleHRlbmRCbG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBleHRlbmRMYXN0VmFsaWRCbG9ja0hlaWdodCB9ID1cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5nZXRMYXRlc3RCbG9ja2hhc2goJ2NvbmZpcm1lZCcpO1xuICAgICAgZXh0ZW5kVHgucmVjZW50QmxvY2toYXNoID0gZXh0ZW5kQmxvY2toYXNoO1xuICAgICAgZXh0ZW5kVHguZmVlUGF5ZXIgPSBjcmVhdG9yO1xuICAgICAgY29uc3Qgc2lnbmVkRXh0ZW5kVHggPSBhd2FpdCBwcm92aWRlci53YWxsZXQuc2lnblRyYW5zYWN0aW9uKGV4dGVuZFR4KTtcbiAgICAgIGNvbnN0IGV4dGVuZFNpZyA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uc2VuZFJhd1RyYW5zYWN0aW9uKHNpZ25lZEV4dGVuZFR4LnNlcmlhbGl6ZSgpLCB7XG4gICAgICAgIHNraXBQcmVmbGlnaHQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uY29uZmlybVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc2lnbmF0dXJlOiBleHRlbmRTaWcsXG4gICAgICAgIGJsb2NraGFzaDogZXh0ZW5kQmxvY2toYXNoLFxuICAgICAgICBsYXN0VmFsaWRCbG9ja0hlaWdodDogZXh0ZW5kTGFzdFZhbGlkQmxvY2tIZWlnaHQsXG4gICAgICB9LCBcImNvbmZpcm1lZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBhbHRBZGRyZXNzIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIGZvciByZWRlZW1pbmcgbGlxdWlkaXR5IHdpdGggQUxULlxuICAgKiBSZXF1aXJlZCBmb3IgcHJvcG9zYWxzIHdpdGggMysgb3B0aW9ucyB0byBhdm9pZCBleGNlZWRpbmcgdHJhbnNhY3Rpb24gc2l6ZSBsaW1pdHMuXG4gICAqXG4gICAqIEBwYXJhbSBjcmVhdG9yIC0gVGhlIHVzZXIgcmVkZWVtaW5nXG4gICAqIEBwYXJhbSBwcm9wb3NhbFBkYSAtIFRoZSBwcm9wb3NhbCBQREFcbiAgICogQHBhcmFtIGFsdEFkZHJlc3MgLSBPcHRpb25hbCBBTFQgYWRkcmVzcyAod2lsbCBiZSBjcmVhdGVkIGlmIG5vdCBwcm92aWRlZCBmb3IgMysgb3B0aW9ucylcbiAgICogQHJldHVybnMgVW5zaWduZWQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uLCBBTFQgYWRkcmVzcywgbnVtYmVyIG9mIG9wdGlvbnMsIGFuZCBibG9ja2hhc2ggaW5mbyBmb3IgY29uZmlybWF0aW9uXG4gICAqL1xuICBhc3luYyByZWRlZW1MaXF1aWRpdHlWZXJzaW9uZWQoXG4gICAgY3JlYXRvcjogUHVibGljS2V5LFxuICAgIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXksXG4gICAgYWx0QWRkcmVzcz86IFB1YmxpY0tleSxcbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbmVkVHg6IFZlcnNpb25lZFRyYW5zYWN0aW9uO1xuICAgIGFsdEFkZHJlc3M6IFB1YmxpY0tleTtcbiAgICBudW1PcHRpb25zOiBudW1iZXI7XG4gICAgYmxvY2toYXNoOiBzdHJpbmc7XG4gICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IG51bWJlcjtcbiAgfT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyIGFzIEFuY2hvclByb3ZpZGVyO1xuICAgIGNvbnN0IHsgYnVpbGRlciwgbnVtT3B0aW9ucyB9ID0gYXdhaXQgdGhpcy5yZWRlZW1MaXF1aWRpdHkoY3JlYXRvciwgcHJvcG9zYWxQZGEpO1xuXG4gICAgLy8gQ3JlYXRlIEFMVCBpZiBub3QgcHJvdmlkZWQgYW5kIG5lZWRlZFxuICAgIGxldCBhbHRQdWJrZXkgPSBhbHRBZGRyZXNzO1xuICAgIGxldCB2ZXJpZmllZEFMVDogQWRkcmVzc0xvb2t1cFRhYmxlQWNjb3VudCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKCFhbHRQdWJrZXkgJiYgbnVtT3B0aW9ucyA+PSAzKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICBDcmVhdGluZyByZWRlbXB0aW9uIEFMVCBmb3IgJHtudW1PcHRpb25zfSBvcHRpb25zLi4uYCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNyZWF0ZVJlZGVtcHRpb25BTFQoY3JlYXRvciwgcHJvcG9zYWxQZGEpO1xuICAgICAgYWx0UHVia2V5ID0gcmVzdWx0LmFsdEFkZHJlc3M7XG4gICAgICBjb25zb2xlLmxvZyhgICDinJMgUmVkZW1wdGlvbiBBTFQgY3JlYXRlZDogJHthbHRQdWJrZXkudG9CYXNlNTgoKX1gKTtcblxuICAgICAgLy8gV2FpdCBmb3IgQUxUIHRvIGJlIGZ1bGx5IGF2YWlsYWJsZSB3aXRoIGFsbCBhZGRyZXNzZXNcbiAgICAgIC8vIFVzZSBsb25nZXIgZGVsYXlzIGFmdGVyIGV4dGVuZGluZyB0byBlbnN1cmUgcHJvcGFnYXRpb25cbiAgICAgIGNvbnNvbGUubG9nKGAgIFdhaXRpbmcgZm9yIEFMVCBwcm9wYWdhdGlvbi4uLmApO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzZXMgPSAxOCArIChudW1PcHRpb25zICogNCk7IC8vIEJhc2UgYWNjb3VudHMgKyBwZXItb3B0aW9uIGFjY291bnRzXG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuXG4gICAgICAvLyBJbml0aWFsIGRlbGF5IGFmdGVyIGV4dGVuc2lvblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMDApKTtcblxuICAgICAgd2hpbGUgKGF0dGVtcHRzIDwgMzApIHtcbiAgICAgICAgY29uc3QgYWx0QWNjb3VudCA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0QWRkcmVzc0xvb2t1cFRhYmxlKGFsdFB1YmtleSwge1xuICAgICAgICAgIGNvbW1pdG1lbnQ6ICdjb25maXJtZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFsdEFjY291bnQudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzQ291bnQgPSBhbHRBY2NvdW50LnZhbHVlLnN0YXRlLmFkZHJlc3Nlcy5sZW5ndGg7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQXR0ZW1wdCAke2F0dGVtcHRzICsgMX06IEFMVCBoYXMgJHthZGRyZXNzQ291bnR9LyR7ZXhwZWN0ZWRBZGRyZXNzZXN9IGFkZHJlc3Nlc2ApO1xuICAgICAgICAgIGlmIChhZGRyZXNzQ291bnQgPj0gZXhwZWN0ZWRBZGRyZXNzZXMpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkQUxUID0gYWx0QWNjb3VudC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIOKckyBBTFQgdmVyaWZpZWQgd2l0aCAke2FkZHJlc3NDb3VudH0gYWRkcmVzc2VzYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgIH1cblxuICAgICAgaWYgKCF2ZXJpZmllZEFMVCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFMVCBmYWlsZWQgdG8gcG9wdWxhdGUgd2l0aCBleHBlY3RlZCAke2V4cGVjdGVkQWRkcmVzc2VzfSBhZGRyZXNzZXMgYWZ0ZXIgJHthdHRlbXB0c30gYXR0ZW1wdHNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWFsdFB1YmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQUxUIGFkZHJlc3MgcmVxdWlyZWQgZm9yIG11bHRpLW9wdGlvbiByZWRlbXB0aW9uXCIpO1xuICAgIH1cblxuICAgIC8vIEZldGNoIEFMVCBpZiB3ZSBkb24ndCBoYXZlIGl0IHZlcmlmaWVkIGFscmVhZHlcbiAgICBpZiAoIXZlcmlmaWVkQUxUKSB7XG4gICAgICB2ZXJpZmllZEFMVCA9IGF3YWl0IHRoaXMuZmV0Y2hBTFQoYWx0UHVia2V5KTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBpbnN0cnVjdGlvblxuICAgIGNvbnN0IGluc3RydWN0aW9uID0gYXdhaXQgYnVpbGRlci5pbnN0cnVjdGlvbigpO1xuICAgIGNvbnN0IGNvbXB1dGVCdWRnZXRJeCA9IENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoeyB1bml0czogNTAwXzAwMCB9KTtcblxuICAgIC8vIEdldCBmcmVzaCBibG9ja2hhc2ggd2l0aCBsYXN0VmFsaWRCbG9ja0hlaWdodCBmb3IgY29uZmlybWF0aW9uIHRyYWNraW5nXG4gICAgY29uc3QgeyBibG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldExhdGVzdEJsb2NraGFzaCgnY29uZmlybWVkJyk7XG5cbiAgICAvLyBCdWlsZCB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIHZlcmlmaWVkIEFMVCAobm8gcmUtZmV0Y2gpXG4gICAgY29uc3QgdmVyc2lvbmVkVHggPSB0aGlzLmJ1aWxkVmVyc2lvbmVkVHhXaXRoQUxUKFxuICAgICAgY3JlYXRvcixcbiAgICAgIFtjb21wdXRlQnVkZ2V0SXgsIGluc3RydWN0aW9uXSxcbiAgICAgIHZlcmlmaWVkQUxULFxuICAgICAgYmxvY2toYXNoLFxuICAgICk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHZlcnNpb25lZCB0cmFuc2FjdGlvbiBhbG9uZyB3aXRoIGJsb2NraGFzaCBpbmZvIGZvciBwcm9wZXIgY29uZmlybWF0aW9uXG4gICAgLy8gVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgdGhlaXIgb3duIHNpZ25pbmcgbWVjaGFuaXNtIChlLmcuLCBrZXlwYWlyLnNpZ24pXG4gICAgcmV0dXJuIHsgdmVyc2lvbmVkVHgsIGFsdEFkZHJlc3M6IGFsdFB1YmtleSwgbnVtT3B0aW9ucywgYmxvY2toYXNoLCBsYXN0VmFsaWRCbG9ja0hlaWdodCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBzZW5kIGEgc2lnbmVkIHZlcnNpb25lZCB0cmFuc2FjdGlvbiB3aXRoIHJvYnVzdCBjb25maXJtYXRpb24gaGFuZGxpbmcuXG4gICAqIFVzZXMgYmxvY2toYXNoLWJhc2VkIGNvbmZpcm1hdGlvbiB0byBwcm9wZXJseSBkZXRlY3QgdHJhbnNhY3Rpb24gZXhwaXJhdGlvblxuICAgKiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBmaXhlZCB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gc2lnbmVkVHggLSBUaGUgc2lnbmVkIHZlcnNpb25lZCB0cmFuc2FjdGlvbiB0byBzZW5kXG4gICAqIEBwYXJhbSBjb25maXJtYXRpb25JbmZvIC0gT3B0aW9uYWwgYmxvY2toYXNoIGluZm8gZnJvbSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgYnVpbHQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIGEgZnJlc2ggYmxvY2toYXNoIHdpbGwgYmUgZmV0Y2hlZCAobGVzcyBhY2N1cmF0ZSkuXG4gICAqL1xuICBhc3luYyBzZW5kVmVyc2lvbmVkVHJhbnNhY3Rpb24oXG4gICAgc2lnbmVkVHg6IFZlcnNpb25lZFRyYW5zYWN0aW9uLFxuICAgIGNvbmZpcm1hdGlvbkluZm8/OiB7IGJsb2NraGFzaDogc3RyaW5nOyBsYXN0VmFsaWRCbG9ja0hlaWdodDogbnVtYmVyIH0sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb2dyYW0ucHJvdmlkZXIgYXMgQW5jaG9yUHJvdmlkZXI7XG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgYmxvY2toYXNoIGluZm8gb3IgZmV0Y2ggZnJlc2ggb25lXG4gICAgLy8gVXNpbmcgdGhlIG9yaWdpbmFsIGJsb2NraGFzaCBpcyBtb3JlIGFjY3VyYXRlIGZvciBkZXRlY3RpbmcgZXhwaXJhdGlvblxuICAgIGxldCBibG9ja2hhc2g6IHN0cmluZztcbiAgICBsZXQgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IG51bWJlcjtcblxuICAgIGlmIChjb25maXJtYXRpb25JbmZvKSB7XG4gICAgICBibG9ja2hhc2ggPSBjb25maXJtYXRpb25JbmZvLmJsb2NraGFzaDtcbiAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0ID0gY29uZmlybWF0aW9uSW5mby5sYXN0VmFsaWRCbG9ja0hlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2s6IGdldCBmcmVzaCBibG9ja2hhc2ggKG1heSB3YWl0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSBpZiB0eCBhbHJlYWR5IGV4cGlyZWQpXG4gICAgICBjb25zdCBsYXRlc3RCbG9ja2hhc2ggPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldExhdGVzdEJsb2NraGFzaCgnY29uZmlybWVkJyk7XG4gICAgICBibG9ja2hhc2ggPSBsYXRlc3RCbG9ja2hhc2guYmxvY2toYXNoO1xuICAgICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQgPSBsYXRlc3RCbG9ja2hhc2gubGFzdFZhbGlkQmxvY2tIZWlnaHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5zZW5kVHJhbnNhY3Rpb24oc2lnbmVkVHgsIHtcbiAgICAgIHNraXBQcmVmbGlnaHQ6IGZhbHNlLFxuICAgICAgcHJlZmxpZ2h0Q29tbWl0bWVudDogJ2NvbmZpcm1lZCcsXG4gICAgfSk7XG5cbiAgICAvLyBVc2UgYmxvY2toYXNoLWJhc2VkIGNvbmZpcm1hdGlvbiB3aGljaCB3YWl0cyB1bnRpbCBlaXRoZXI6XG4gICAgLy8gMS4gVHJhbnNhY3Rpb24gaXMgY29uZmlybWVkXG4gICAgLy8gMi4gQmxvY2toYXNoIGV4cGlyZXMgKGxhc3RWYWxpZEJsb2NrSGVpZ2h0IHBhc3NlZClcbiAgICAvLyBUaGlzIGlzIG1vcmUgcm9idXN0IHRoYW4gYSBmaXhlZCB0aW1lb3V0IG9uIGNvbmdlc3RlZCBuZXR3b3Jrc1xuICAgIGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uY29uZmlybVRyYW5zYWN0aW9uKHtcbiAgICAgIHNpZ25hdHVyZSxcbiAgICAgIGJsb2NraGFzaCxcbiAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0LFxuICAgIH0sICdjb25maXJtZWQnKTtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICAvKiBBZGRyZXNzIExvb2t1cCBUYWJsZSAqL1xuXG4gIGFzeW5jIGNyZWF0ZVByb3Bvc2FsQUxUKFxuICAgIGNyZWF0b3I6IFB1YmxpY0tleSxcbiAgICBtb2RlcmF0b3JQZGE6IFB1YmxpY0tleSxcbiAgICBudW1PcHRpb25zOiBudW1iZXIgPSAyLFxuICApOiBQcm9taXNlPHsgYWx0QWRkcmVzczogUHVibGljS2V5IH0+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvZ3JhbS5wcm92aWRlciBhcyBBbmNob3JQcm92aWRlcjtcbiAgICBjb25zdCBtb2RlcmF0b3IgPSBhd2FpdCB0aGlzLmZldGNoTW9kZXJhdG9yKG1vZGVyYXRvclBkYSk7XG4gICAgY29uc3QgcHJvcG9zYWxJZCA9IG1vZGVyYXRvci5wcm9wb3NhbElkQ291bnRlcjtcbiAgICBjb25zdCBbcHJvcG9zYWxQZGFdID0gdGhpcy5kZXJpdmVQcm9wb3NhbFBEQShtb2RlcmF0b3JQZGEsIHByb3Bvc2FsSWQpO1xuICAgIGNvbnN0IFt2YXVsdFBkYV0gPSBkZXJpdmVWYXVsdFBEQShwcm9wb3NhbFBkYSwgcHJvcG9zYWxJZCwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuXG4gICAgY29uc3QgYWRkcmVzc2VzOiBQdWJsaWNLZXlbXSA9IFtcbiAgICAgIC8vIFByb2dyYW1zXG4gICAgICB0aGlzLnByb2dyYW1JZCxcbiAgICAgIHRoaXMudmF1bHQucHJvZ3JhbUlkLFxuICAgICAgdGhpcy5hbW0ucHJvZ3JhbUlkLFxuICAgICAgU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsXG4gICAgICBUT0tFTl9QUk9HUkFNX0lELFxuICAgICAgQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxuICAgICAgLy8gQ29yZSBhY2NvdW50c1xuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICB2YXVsdFBkYSxcbiAgICAgIG1vZGVyYXRvci5iYXNlTWludCxcbiAgICAgIG1vZGVyYXRvci5xdW90ZU1pbnQsXG4gICAgICBGRUVfQVVUSE9SSVRZLFxuICAgICAgLy8gVmF1bHQgdG9rZW4gYWNjb3VudHNcbiAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG1vZGVyYXRvci5iYXNlTWludCwgdmF1bHRQZGEsIHRydWUpLFxuICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobW9kZXJhdG9yLnF1b3RlTWludCwgdmF1bHRQZGEsIHRydWUpLFxuICAgICAgLy8gQ3JlYXRvcidzIGJhc2UvcXVvdGUgQVRBc1xuICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobW9kZXJhdG9yLmJhc2VNaW50LCBjcmVhdG9yKSxcbiAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG1vZGVyYXRvci5xdW90ZU1pbnQsIGNyZWF0b3IpLFxuICAgIF07XG5cbiAgICAvLyBQZXItb3B0aW9uIGFjY291bnRzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PcHRpb25zOyBpKyspIHtcbiAgICAgIGNvbnN0IFtjb25kQmFzZU1pbnRdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuQmFzZSwgaSwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuICAgICAgY29uc3QgW2NvbmRRdW90ZU1pbnRdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuUXVvdGUsIGksIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtwb29sXSA9IGRlcml2ZVBvb2xQREEocHJvcG9zYWxQZGEsIGNvbmRRdW90ZU1pbnQsIGNvbmRCYXNlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtyZXNlcnZlQV0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wsIGNvbmRRdW90ZU1pbnQsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgICBjb25zdCBbcmVzZXJ2ZUJdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sLCBjb25kQmFzZU1pbnQsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgICBjb25zdCBbZmVlVmF1bHRdID0gZGVyaXZlRmVlVmF1bHRQREEocG9vbCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcblxuICAgICAgYWRkcmVzc2VzLnB1c2goXG4gICAgICAgIGNvbmRCYXNlTWludCxcbiAgICAgICAgY29uZFF1b3RlTWludCxcbiAgICAgICAgcG9vbCxcbiAgICAgICAgcmVzZXJ2ZUEsXG4gICAgICAgIHJlc2VydmVCLFxuICAgICAgICBmZWVWYXVsdCxcbiAgICAgICAgLy8gQ3JlYXRvcidzIGNvbmRpdGlvbmFsIHRva2VuIEFUQXNcbiAgICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMoY29uZEJhc2VNaW50LCBjcmVhdG9yKSxcbiAgICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMoY29uZFF1b3RlTWludCwgY3JlYXRvciksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbW9zdCByZWNlbnQgc2xvdCB1c2luZyBcImZpbmFsaXplZFwiIGNvbW1pdG1lbnQgZm9yIHN0YWJpbGl0eVxuICAgIGNvbnN0IHNsb3QgPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldFNsb3QoXCJmaW5hbGl6ZWRcIik7XG5cbiAgICBjb25zdCBbY3JlYXRlSXgsIGFsdEFkZHJlc3NdID0gQWRkcmVzc0xvb2t1cFRhYmxlUHJvZ3JhbS5jcmVhdGVMb29rdXBUYWJsZSh7XG4gICAgICBhdXRob3JpdHk6IGNyZWF0b3IsXG4gICAgICBwYXllcjogY3JlYXRvcixcbiAgICAgIHJlY2VudFNsb3Q6IHNsb3QsXG4gICAgfSk7XG5cbiAgICAvLyBTZW5kIGNyZWF0ZSB0cmFuc2FjdGlvbiBpbW1lZGlhdGVseSwgc2tpcCBwcmVmbGlnaHQgdG8gYXZvaWQgc2xvdCB0aW1pbmcgaXNzdWVzXG4gICAgY29uc3QgY3JlYXRlVHggPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoY3JlYXRlSXgpO1xuICAgIGNvbnN0IHsgYmxvY2toYXNoOiBjcmVhdGVCbG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBjcmVhdGVMYXN0VmFsaWRCbG9ja0hlaWdodCB9ID1cbiAgICAgIGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0TGF0ZXN0QmxvY2toYXNoKCdjb25maXJtZWQnKTtcbiAgICBjcmVhdGVUeC5yZWNlbnRCbG9ja2hhc2ggPSBjcmVhdGVCbG9ja2hhc2g7XG4gICAgY3JlYXRlVHguZmVlUGF5ZXIgPSBjcmVhdG9yO1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgcHJvdmlkZXIud2FsbGV0LnNpZ25UcmFuc2FjdGlvbihjcmVhdGVUeCk7XG4gICAgY29uc3Qgc2lnID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5zZW5kUmF3VHJhbnNhY3Rpb24oc2lnbmVkVHguc2VyaWFsaXplKCksIHtcbiAgICAgIHNraXBQcmVmbGlnaHQ6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5jb25maXJtVHJhbnNhY3Rpb24oe1xuICAgICAgc2lnbmF0dXJlOiBzaWcsXG4gICAgICBibG9ja2hhc2g6IGNyZWF0ZUJsb2NraGFzaCxcbiAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBjcmVhdGVMYXN0VmFsaWRCbG9ja0hlaWdodCxcbiAgICB9LCBcImNvbmZpcm1lZFwiKTtcblxuICAgIC8vIFNwbGl0IGFkZHJlc3NlcyBpbnRvIGNodW5rcyB0byBhdm9pZCB0cmFuc2FjdGlvbiBzaXplIGxpbWl0c1xuICAgIC8vIEVhY2ggYWRkcmVzcyBpcyAzMiBieXRlcywgfjIwIGFkZHJlc3NlcyBwZXIgZXh0ZW5kIGluc3RydWN0aW9uIGlzIHNhZmVcbiAgICAvLyBVc2Ugc2tpcFByZWZsaWdodCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aGVyZSBzaW11bGF0aW9uIHNlZXMgc3RhbGUgc3RhdGVcbiAgICAvLyBiZWZvcmUgcHJldmlvdXMgZXh0ZW5kIGhhcyBwcm9wYWdhdGVkIChzYW1lIHBhdHRlcm4gYXMgQ1JFQVRFIGFib3ZlKVxuICAgIGNvbnN0IENIVU5LX1NJWkUgPSAyMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkgKz0gQ0hVTktfU0laRSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBhZGRyZXNzZXMuc2xpY2UoaSwgaSArIENIVU5LX1NJWkUpO1xuICAgICAgY29uc3QgZXh0ZW5kSXggPSBBZGRyZXNzTG9va3VwVGFibGVQcm9ncmFtLmV4dGVuZExvb2t1cFRhYmxlKHtcbiAgICAgICAgcGF5ZXI6IGNyZWF0b3IsXG4gICAgICAgIGF1dGhvcml0eTogY3JlYXRvcixcbiAgICAgICAgbG9va3VwVGFibGU6IGFsdEFkZHJlc3MsXG4gICAgICAgIGFkZHJlc3NlczogY2h1bmssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dGVuZFR4ID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGV4dGVuZEl4KTtcbiAgICAgIGNvbnN0IHsgYmxvY2toYXNoOiBleHRlbmRCbG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBleHRlbmRMYXN0VmFsaWRCbG9ja0hlaWdodCB9ID1cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5nZXRMYXRlc3RCbG9ja2hhc2goJ2NvbmZpcm1lZCcpO1xuICAgICAgZXh0ZW5kVHgucmVjZW50QmxvY2toYXNoID0gZXh0ZW5kQmxvY2toYXNoO1xuICAgICAgZXh0ZW5kVHguZmVlUGF5ZXIgPSBjcmVhdG9yO1xuICAgICAgY29uc3Qgc2lnbmVkRXh0ZW5kVHggPSBhd2FpdCBwcm92aWRlci53YWxsZXQuc2lnblRyYW5zYWN0aW9uKGV4dGVuZFR4KTtcbiAgICAgIGNvbnN0IGV4dGVuZFNpZyA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uc2VuZFJhd1RyYW5zYWN0aW9uKHNpZ25lZEV4dGVuZFR4LnNlcmlhbGl6ZSgpLCB7XG4gICAgICAgIHNraXBQcmVmbGlnaHQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uY29uZmlybVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc2lnbmF0dXJlOiBleHRlbmRTaWcsXG4gICAgICAgIGJsb2NraGFzaDogZXh0ZW5kQmxvY2toYXNoLFxuICAgICAgICBsYXN0VmFsaWRCbG9ja0hlaWdodDogZXh0ZW5kTGFzdFZhbGlkQmxvY2tIZWlnaHQsXG4gICAgICB9LCBcImNvbmZpcm1lZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBhbHRBZGRyZXNzIH07XG4gIH1cblxuICBhc3luYyBmZXRjaEFMVChhbHRBZGRyZXNzOiBQdWJsaWNLZXkpOiBQcm9taXNlPEFkZHJlc3NMb29rdXBUYWJsZUFjY291bnQ+IHtcbiAgICBjb25zdCBhbHQgPSBhd2FpdCB0aGlzLnByb2dyYW0ucHJvdmlkZXIuY29ubmVjdGlvbi5nZXRBZGRyZXNzTG9va3VwVGFibGUoYWx0QWRkcmVzcyk7XG4gICAgaWYgKCFhbHQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFMVCBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBhbHQudmFsdWU7XG4gIH1cblxuICBhc3luYyBidWlsZFZlcnNpb25lZFR4KFxuICAgIHBheWVyOiBQdWJsaWNLZXksXG4gICAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gICAgYWx0QWRkcmVzczogUHVibGljS2V5LFxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uZWRUeDogVmVyc2lvbmVkVHJhbnNhY3Rpb247XG4gICAgYmxvY2toYXNoOiBzdHJpbmc7XG4gICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IG51bWJlcjtcbiAgfT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyIGFzIEFuY2hvclByb3ZpZGVyO1xuICAgIGNvbnN0IGFsdCA9IGF3YWl0IHRoaXMuZmV0Y2hBTFQoYWx0QWRkcmVzcyk7XG4gICAgY29uc3QgeyBibG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldExhdGVzdEJsb2NraGFzaCgnY29uZmlybWVkJyk7XG4gICAgY29uc3QgdmVyc2lvbmVkVHggPSB0aGlzLmJ1aWxkVmVyc2lvbmVkVHhXaXRoQUxUKHBheWVyLCBpbnN0cnVjdGlvbnMsIGFsdCwgYmxvY2toYXNoKTtcbiAgICByZXR1cm4geyB2ZXJzaW9uZWRUeCwgYmxvY2toYXNoLCBsYXN0VmFsaWRCbG9ja0hlaWdodCB9O1xuICB9XG5cbiAgYnVpbGRWZXJzaW9uZWRUeFdpdGhBTFQoXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgICBhbHQ6IEFkZHJlc3NMb29rdXBUYWJsZUFjY291bnQsXG4gICAgYmxvY2toYXNoOiBzdHJpbmcsXG4gICk6IFZlcnNpb25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFRyYW5zYWN0aW9uTWVzc2FnZSh7XG4gICAgICBwYXllcktleTogcGF5ZXIsXG4gICAgICByZWNlbnRCbG9ja2hhc2g6IGJsb2NraGFzaCxcbiAgICAgIGluc3RydWN0aW9ucyxcbiAgICB9KS5jb21waWxlVG9WME1lc3NhZ2UoW2FsdF0pO1xuXG4gICAgcmV0dXJuIG5ldyBWZXJzaW9uZWRUcmFuc2FjdGlvbihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qIERBTyBNZXRob2RzICovXG5cbiAgZGVyaXZlTWludENyZWF0ZUtleVBEQShkYW9QZGE6IFB1YmxpY0tleSwgbmFtZTogc3RyaW5nKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZU1pbnRDcmVhdGVLZXlQREEoZGFvUGRhLCBuYW1lLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoU3F1YWRzUHJvZ3JhbUNvbmZpZygpIHtcbiAgICBjb25zdCBbcHJvZ3JhbUNvbmZpZ1BkYV0gPSBtdWx0aXNpZy5nZXRQcm9ncmFtQ29uZmlnUGRhKHtcbiAgICAgIHByb2dyYW1JZDogU1FVQURTX1BST0dSQU1fSUQsXG4gICAgfSk7XG4gICAgY29uc3QgcHJvZ3JhbUNvbmZpZyA9IGF3YWl0IG11bHRpc2lnLmFjY291bnRzLlByb2dyYW1Db25maWcuZnJvbUFjY291bnRBZGRyZXNzKFxuICAgICAgdGhpcy5wcm9ncmFtLnByb3ZpZGVyLmNvbm5lY3Rpb24sXG4gICAgICBwcm9ncmFtQ29uZmlnUGRhXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvZ3JhbUNvbmZpZzogcHJvZ3JhbUNvbmZpZ1BkYSxcbiAgICAgIHByb2dyYW1Db25maWdUcmVhc3VyeTogcHJvZ3JhbUNvbmZpZy50cmVhc3VyeSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXJpdmVNdWx0aXNpZ1BkYShjcmVhdGVLZXk6IFB1YmxpY0tleSk6IFB1YmxpY0tleSB7XG4gICAgY29uc3QgW211bHRpc2lnUGRhXSA9IG11bHRpc2lnLmdldE11bHRpc2lnUGRhKHtcbiAgICAgIGNyZWF0ZUtleSxcbiAgICAgIHByb2dyYW1JZDogU1FVQURTX1BST0dSQU1fSUQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG11bHRpc2lnUGRhO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhcmVudERBTyhcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIHBhcmVudEFkbWluOiBQdWJsaWNLZXksXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGJhc2VNaW50OiBQdWJsaWNLZXksXG4gICAgcXVvdGVNaW50OiBQdWJsaWNLZXksXG4gICAgdHJlYXN1cnlDb3NpZ25lcjogUHVibGljS2V5LFxuICAgIHBvb2w6IFB1YmxpY0tleSxcbiAgICBwb29sVHlwZTogUG9vbFR5cGUsXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbZGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKG5hbWUpO1xuICAgIGNvbnN0IFttb2RlcmF0b3JQZGFdID0gdGhpcy5kZXJpdmVNb2RlcmF0b3JQREEobmFtZSk7XG4gICAgY29uc3QgW21pbnRDcmVhdGVLZXlQZGFdID0gdGhpcy5kZXJpdmVNaW50Q3JlYXRlS2V5UERBKGRhb1BkYSwgbmFtZSk7XG5cbiAgICAvLyBEZXJpdmUgU3F1YWRzIGFjY291bnRzIChzaW5nbGUgUlBDIGNhbGwpXG4gICAgY29uc3Qgc3F1YWRzQ29uZmlnID0gYXdhaXQgdGhpcy5mZXRjaFNxdWFkc1Byb2dyYW1Db25maWcoKTtcbiAgICBjb25zdCB0cmVhc3VyeU11bHRpc2lnUGRhID0gdGhpcy5kZXJpdmVNdWx0aXNpZ1BkYShkYW9QZGEpO1xuICAgIGNvbnN0IG1pbnRNdWx0aXNpZ1BkYSA9IHRoaXMuZGVyaXZlTXVsdGlzaWdQZGEobWludENyZWF0ZUtleVBkYSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gaW5pdGlhbGl6ZVBhcmVudERBTyhcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGFkbWluLFxuICAgICAgcGFyZW50QWRtaW4sXG4gICAgICBkYW9QZGEsXG4gICAgICBtb2RlcmF0b3JQZGEsXG4gICAgICBiYXNlTWludCxcbiAgICAgIHF1b3RlTWludCxcbiAgICAgIHNxdWFkc0NvbmZpZy5wcm9ncmFtQ29uZmlnLFxuICAgICAgc3F1YWRzQ29uZmlnLnByb2dyYW1Db25maWdUcmVhc3VyeSxcbiAgICAgIHRyZWFzdXJ5TXVsdGlzaWdQZGEsXG4gICAgICBtaW50TXVsdGlzaWdQZGEsXG4gICAgICBtaW50Q3JlYXRlS2V5UGRhLFxuICAgICAgU1FVQURTX1BST0dSQU1fSUQsXG4gICAgICBuYW1lLFxuICAgICAgdHJlYXN1cnlDb3NpZ25lcixcbiAgICAgIHBvb2wsXG4gICAgICBwb29sVHlwZVxuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZGVyLFxuICAgICAgZGFvUGRhLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgdHJlYXN1cnlNdWx0aXNpZzogdHJlYXN1cnlNdWx0aXNpZ1BkYSxcbiAgICAgIG1pbnRNdWx0aXNpZzogbWludE11bHRpc2lnUGRhLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplQ2hpbGREQU8oXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBwYXJlbnRBZG1pbjogUHVibGljS2V5LFxuICAgIHBhcmVudERhb05hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gICAgdHJlYXN1cnlDb3NpZ25lcjogUHVibGljS2V5LFxuICAgIG9wdGlvbnM/OiBUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgW2Rhb1BkYV0gPSB0aGlzLmRlcml2ZURBT1BEQShuYW1lKTtcbiAgICBjb25zdCBbcGFyZW50RGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKHBhcmVudERhb05hbWUpO1xuICAgIGNvbnN0IFttaW50Q3JlYXRlS2V5UGRhXSA9IHRoaXMuZGVyaXZlTWludENyZWF0ZUtleVBEQShkYW9QZGEsIG5hbWUpO1xuXG4gICAgLy8gRGVyaXZlIFNxdWFkcyBhY2NvdW50cyAoc2luZ2xlIFJQQyBjYWxsKVxuICAgIGNvbnN0IHNxdWFkc0NvbmZpZyA9IGF3YWl0IHRoaXMuZmV0Y2hTcXVhZHNQcm9ncmFtQ29uZmlnKCk7XG4gICAgY29uc3QgdHJlYXN1cnlNdWx0aXNpZ1BkYSA9IHRoaXMuZGVyaXZlTXVsdGlzaWdQZGEoZGFvUGRhKTtcbiAgICBjb25zdCBtaW50TXVsdGlzaWdQZGEgPSB0aGlzLmRlcml2ZU11bHRpc2lnUGRhKG1pbnRDcmVhdGVLZXlQZGEpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGluaXRpYWxpemVDaGlsZERBTyhcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGFkbWluLFxuICAgICAgcGFyZW50QWRtaW4sXG4gICAgICBkYW9QZGEsXG4gICAgICBwYXJlbnREYW9QZGEsXG4gICAgICB0b2tlbk1pbnQsXG4gICAgICBzcXVhZHNDb25maWcucHJvZ3JhbUNvbmZpZyxcbiAgICAgIHNxdWFkc0NvbmZpZy5wcm9ncmFtQ29uZmlnVHJlYXN1cnksXG4gICAgICB0cmVhc3VyeU11bHRpc2lnUGRhLFxuICAgICAgbWludE11bHRpc2lnUGRhLFxuICAgICAgbWludENyZWF0ZUtleVBkYSxcbiAgICAgIFNRVUFEU19QUk9HUkFNX0lELFxuICAgICAgbmFtZSxcbiAgICAgIHRyZWFzdXJ5Q29zaWduZXJcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVpbGRlcixcbiAgICAgIGRhb1BkYSxcbiAgICAgIHBhcmVudERhb1BkYSxcbiAgICAgIHRyZWFzdXJ5TXVsdGlzaWc6IHRyZWFzdXJ5TXVsdGlzaWdQZGEsXG4gICAgICBtaW50TXVsdGlzaWc6IG1pbnRNdWx0aXNpZ1BkYSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBncmFkZURBTyhcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIHBhcmVudEFkbWluOiBQdWJsaWNLZXksXG4gICAgZGFvTmFtZTogc3RyaW5nLFxuICAgIHBhcmVudERhb05hbWU6IHN0cmluZyxcbiAgICBiYXNlTWludDogUHVibGljS2V5LFxuICAgIHF1b3RlTWludDogUHVibGljS2V5LFxuICAgIHBvb2w6IFB1YmxpY0tleSxcbiAgICBwb29sVHlwZTogUG9vbFR5cGUsXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbZGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKGRhb05hbWUpO1xuICAgIGNvbnN0IFtwYXJlbnREYW9QZGFdID0gdGhpcy5kZXJpdmVEQU9QREEocGFyZW50RGFvTmFtZSk7XG4gICAgY29uc3QgW21vZGVyYXRvclBkYV0gPSB0aGlzLmRlcml2ZU1vZGVyYXRvclBEQShkYW9OYW1lKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSB1cGdyYWRlREFPKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICBwYXJlbnRBZG1pbixcbiAgICAgIGRhb1BkYSxcbiAgICAgIHBhcmVudERhb1BkYSxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIGJhc2VNaW50LFxuICAgICAgcXVvdGVNaW50LFxuICAgICAgcG9vbCxcbiAgICAgIHBvb2xUeXBlXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHsgYnVpbGRlciwgZGFvUGRhLCBtb2RlcmF0b3JQZGEgfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEhpc3RvcmljYWxQYXJlbnREQU8oXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYmFzZU1pbnQ6IFB1YmxpY0tleSxcbiAgICBxdW90ZU1pbnQ6IFB1YmxpY0tleSxcbiAgICB0cmVhc3VyeU11bHRpc2lnOiBQdWJsaWNLZXksXG4gICAgbWludEF1dGhNdWx0aXNpZzogUHVibGljS2V5LFxuICAgIGNvc2lnbmVyOiBQdWJsaWNLZXksXG4gICAgcG9vbDogUHVibGljS2V5LFxuICAgIHBvb2xUeXBlOiBQb29sVHlwZSxcbiAgICBwcm9wb3NhbElkQ291bnRlcjogbnVtYmVyLFxuICAgIGFkbWluUHVia2V5OiBQdWJsaWNLZXksXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbZGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKG5hbWUpO1xuICAgIGNvbnN0IFttb2RlcmF0b3JQZGFdID0gdGhpcy5kZXJpdmVNb2RlcmF0b3JQREEobmFtZSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gYWRkSGlzdG9yaWNhbFBhcmVudERBTyhcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGFkbWluLFxuICAgICAgZGFvUGRhLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgdHJlYXN1cnlNdWx0aXNpZyxcbiAgICAgIG1pbnRBdXRoTXVsdGlzaWcsXG4gICAgICBiYXNlTWludCxcbiAgICAgIHF1b3RlTWludCxcbiAgICAgIG5hbWUsXG4gICAgICBjb3NpZ25lcixcbiAgICAgIHBvb2wsXG4gICAgICBwb29sVHlwZSxcbiAgICAgIHByb3Bvc2FsSWRDb3VudGVyLFxuICAgICAgYWRtaW5QdWJrZXlcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVpbGRlcixcbiAgICAgIGRhb1BkYSxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdHJhbnNmZXJBZG1pbihcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdBZG1pbjogUHVibGljS2V5LFxuICAgIG9wdGlvbnM/OiBUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgW2Rhb1BkYV0gPSB0aGlzLmRlcml2ZURBT1BEQShuYW1lKTtcbiAgICBjb25zdCBbbW9kZXJhdG9yUGRhXSA9IHRoaXMuZGVyaXZlTW9kZXJhdG9yUERBKG5hbWUpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IHRyYW5zZmVyQWRtaW4oXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIGRhb1BkYSxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIG5ld0FkbWluXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBkYW9QZGEsXG4gICAgICBtb2RlcmF0b3JQZGEsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1dGFyY2h5L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4Q0FBZ0U7QUFDaEUsNkNBVXlCO0FBQ3pCLGlEQUsyQjtBQUMzQiwyQ0FBNEQ7QUFTNUQsbUNBV2lCO0FBQ2pCLGlEQWF3QjtBQUd4QixvQ0FBeUY7QUFDekYsZ0NBQXNHO0FBRXRHLDRDQUFnRDtBQUNoRCx5REFBMkM7QUFFM0MsTUFBTSxxQkFBcUIsR0FBRyxNQUFPLENBQUM7QUFFdEMsTUFBYSxjQUFjO0lBT3pCLFlBQVksUUFBd0IsRUFBRSxTQUFxQixFQUFFLFlBQXFCO1FBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLHNCQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFPLENBQUMsa0JBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGVBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxJQUFJLHFCQUFxQixDQUFDO0lBQ25FLENBQUM7SUFFRCxpQkFBaUI7SUFFakIsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFBLG9CQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxV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QyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCxNQUFNLE9BQU8sR0FBRyxJQUFBLDRCQUFhLEVBQzNCLElBQUksQ0FBQyxPQUFPLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osUUFBUSxDQUNULENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXZELE9BQU87WUFDTCxPQUFPO1lBQ1AsTUFBTTtZQUNOLFlBQVk7U0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeGxDRCx3Q0F3bENDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEhpZ2gtbGV2ZWwgY2xpZW50IGZvciB0aGUgRnV0YXJjaHkgcHJvZ3JhbS5cbiAqIEhhbmRsZXMgYWNjb3VudCBkZXJpdmF0aW9uLCBpbnN0cnVjdGlvbiBidWlsZGluZywgYW5kIHRyYW5zYWN0aW9uIGNvbXBvc2l0aW9uLlxuICovXG5cbmltcG9ydCB7IFByb2dyYW0sIEFuY2hvclByb3ZpZGVyLCBCTiB9IGZyb20gXCJAY29yYWwteHl6L2FuY2hvclwiO1xuaW1wb3J0IHtcbiAgUHVibGljS2V5LFxuICBDb21wdXRlQnVkZ2V0UHJvZ3JhbSxcbiAgQWRkcmVzc0xvb2t1cFRhYmxlUHJvZ3JhbSxcbiAgQWRkcmVzc0xvb2t1cFRhYmxlQWNjb3VudCxcbiAgU3lzdGVtUHJvZ3JhbSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG4gIFRyYW5zYWN0aW9uTWVzc2FnZSxcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gXCJAc29sYW5hL3dlYjMuanNcIjtcbmltcG9ydCB7XG4gIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jLFxuICBUT0tFTl9QUk9HUkFNX0lELFxuICBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQsXG4gIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24sXG59IGZyb20gXCJAc29sYW5hL3NwbC10b2tlblwiO1xuaW1wb3J0IHsgUFJPR1JBTV9JRCwgU1FVQURTX1BST0dSQU1fSUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEZ1dGFyY2h5LFxuICBEQU9BY2NvdW50LFxuICBNb2RlcmF0b3JBY2NvdW50LFxuICBQcm9wb3NhbEFjY291bnQsXG4gIFByb3Bvc2FsUGFyYW1zLFxuICBQb29sVHlwZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGRlcml2ZURBT1BEQSxcbiAgZGVyaXZlTW9kZXJhdG9yUERBLFxuICBkZXJpdmVQcm9wb3NhbFBEQSxcbiAgZGVyaXZlTWludENyZWF0ZUtleVBEQSxcbiAgZmV0Y2hEQU9BY2NvdW50LFxuICBmZXRjaE1vZGVyYXRvckFjY291bnQsXG4gIGZldGNoUHJvcG9zYWxBY2NvdW50LFxuICBwYXJzZVByb3Bvc2FsU3RhdGUsXG4gIGlzUHJvcG9zYWxFeHBpcmVkLFxuICBnZXRUaW1lUmVtYWluaW5nLFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZU1vZGVyYXRvcixcbiAgaW5pdGlhbGl6ZVByb3Bvc2FsLFxuICBhZGRPcHRpb24sXG4gIGxhdW5jaFByb3Bvc2FsLFxuICBmaW5hbGl6ZVByb3Bvc2FsLFxuICByZWRlZW1MaXF1aWRpdHksXG4gIGFkZEhpc3RvcmljYWxQcm9wb3NhbCxcbiAgaW5pdGlhbGl6ZVBhcmVudERBTyxcbiAgaW5pdGlhbGl6ZUNoaWxkREFPLFxuICB1cGdyYWRlREFPLFxuICBhZGRIaXN0b3JpY2FsUGFyZW50REFPLFxuICB0cmFuc2ZlckFkbWluLFxufSBmcm9tIFwiLi9pbnN0cnVjdGlvbnNcIjtcbmltcG9ydCB7IFR4T3B0aW9ucyB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbXBvcnQgeyBWYXVsdENsaWVudCwgZGVyaXZlVmF1bHRQREEsIGRlcml2ZUNvbmRpdGlvbmFsTWludCwgVmF1bHRUeXBlIH0gZnJvbSBcIi4uL3ZhdWx0XCI7XG5pbXBvcnQgeyBBTU1DbGllbnQsIGRlcml2ZVBvb2xQREEsIGRlcml2ZVJlc2VydmVQREEsIGRlcml2ZUZlZVZhdWx0UERBLCBGRUVfQVVUSE9SSVRZIH0gZnJvbSBcIi4uL2FtbVwiO1xuXG5pbXBvcnQgeyBGdXRhcmNoeUlETCB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvaWRsc1wiO1xuaW1wb3J0ICogYXMgbXVsdGlzaWcgZnJvbSBcIkBzcWRzL211bHRpc2lnXCI7XG5cbmNvbnN0IERFRkFVTFRfQ09NUFVURV9VTklUUyA9IDUwMF8wMDA7XG5cbmV4cG9ydCBjbGFzcyBGdXRhcmNoeUNsaWVudCB7XG4gIHB1YmxpYyBwcm9ncmFtOiBQcm9ncmFtPEZ1dGFyY2h5PjtcbiAgcHVibGljIHByb2dyYW1JZDogUHVibGljS2V5O1xuICBwdWJsaWMgdmF1bHQ6IFZhdWx0Q2xpZW50O1xuICBwdWJsaWMgYW1tOiBBTU1DbGllbnQ7XG4gIHByaXZhdGUgZGVmYXVsdENvbXB1dGVVbml0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3ZpZGVyOiBBbmNob3JQcm92aWRlciwgcHJvZ3JhbUlkPzogUHVibGljS2V5LCBjb21wdXRlVW5pdHM/OiBudW1iZXIpIHtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZCA/PyBQUk9HUkFNX0lEO1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBQcm9ncmFtKEZ1dGFyY2h5SURMIGFzIEZ1dGFyY2h5LCBwcm92aWRlcik7XG4gICAgdGhpcy52YXVsdCA9IG5ldyBWYXVsdENsaWVudChwcm92aWRlcik7XG4gICAgdGhpcy5hbW0gPSBuZXcgQU1NQ2xpZW50KHByb3ZpZGVyKTtcbiAgICB0aGlzLmRlZmF1bHRDb21wdXRlVW5pdHMgPSBjb21wdXRlVW5pdHMgPz8gREVGQVVMVF9DT01QVVRFX1VOSVRTO1xuICB9XG5cbiAgLyogUERBIEhlbHBlcnMgKi9cblxuICBkZXJpdmVEQU9QREEobmFtZTogc3RyaW5nKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZURBT1BEQShuYW1lLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICBkZXJpdmVNb2RlcmF0b3JQREEobmFtZTogc3RyaW5nKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZU1vZGVyYXRvclBEQShuYW1lLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICBkZXJpdmVQcm9wb3NhbFBEQShtb2RlcmF0b3I6IFB1YmxpY0tleSwgcHJvcG9zYWxJZDogbnVtYmVyKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZVByb3Bvc2FsUERBKG1vZGVyYXRvciwgcHJvcG9zYWxJZCwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG5cbiAgLyogRmV0Y2hlcnMgKi9cblxuICBhc3luYyBmZXRjaERBTyhkYW9QZGE6IFB1YmxpY0tleSk6IFByb21pc2U8REFPQWNjb3VudD4ge1xuICAgIHJldHVybiBmZXRjaERBT0FjY291bnQodGhpcy5wcm9ncmFtLCBkYW9QZGEpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hNb2RlcmF0b3IobW9kZXJhdG9yUGRhOiBQdWJsaWNLZXkpOiBQcm9taXNlPE1vZGVyYXRvckFjY291bnQ+IHtcbiAgICByZXR1cm4gZmV0Y2hNb2RlcmF0b3JBY2NvdW50KHRoaXMucHJvZ3JhbSwgbW9kZXJhdG9yUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoUHJvcG9zYWwocHJvcG9zYWxQZGE6IFB1YmxpY0tleSk6IFByb21pc2U8UHJvcG9zYWxBY2NvdW50PiB7XG4gICAgcmV0dXJuIGZldGNoUHJvcG9zYWxBY2NvdW50KHRoaXMucHJvZ3JhbSwgcHJvcG9zYWxQZGEpO1xuICB9XG5cbiAgLyogUHJvcG9zYWwgSGVscGVycyAqL1xuXG4gIGlzUHJvcG9zYWxFeHBpcmVkKHByb3Bvc2FsOiBQcm9wb3NhbEFjY291bnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNQcm9wb3NhbEV4cGlyZWQocHJvcG9zYWwpO1xuICB9XG5cbiAgZ2V0VGltZVJlbWFpbmluZyhwcm9wb3NhbDogUHJvcG9zYWxBY2NvdW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0VGltZVJlbWFpbmluZyhwcm9wb3NhbCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXB1dGVVbml0cyhvcHRpb25zPzogVHhPcHRpb25zKTogbnVtYmVyIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uY29tcHV0ZVVuaXRzID8/IHRoaXMuZGVmYXVsdENvbXB1dGVVbml0cztcbiAgfVxuXG4gIHByaXZhdGUgbWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnM/OiBUeE9wdGlvbnMpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICAgIGlmIChvcHRpb25zPy5pbmNsdWRlQ3VCdWRnZXQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IFtDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHsgdW5pdHM6IHRoaXMuZ2V0Q29tcHV0ZVVuaXRzKG9wdGlvbnMpIH0pXTtcbiAgICBpZiAob3B0aW9ucz8ucHJpb3JpdHlGZWVNaWNyb0xhbXBvcnRzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5wcmlvcml0eUZlZU1pY3JvTGFtcG9ydHMgPiAwKSB7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaChDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdFByaWNlKHsgbWljcm9MYW1wb3J0czogb3B0aW9ucy5wcmlvcml0eUZlZU1pY3JvTGFtcG9ydHMgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xuICB9XG5cbiAgLyogSW5zdHJ1Y3Rpb24gQnVpbGRlcnMgKi9cblxuICBhc3luYyBpbml0aWFsaXplTW9kZXJhdG9yKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgYmFzZU1pbnQ6IFB1YmxpY0tleSxcbiAgICBxdW90ZU1pbnQ6IFB1YmxpY0tleSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbbW9kZXJhdG9yUGRhXSA9IHRoaXMuZGVyaXZlTW9kZXJhdG9yUERBKG5hbWUpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGluaXRpYWxpemVNb2RlcmF0b3IoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIGJhc2VNaW50LFxuICAgICAgcXVvdGVNaW50LFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgbmFtZVxuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGJ1aWxkZXIsIG1vZGVyYXRvclBkYSwgbmFtZSB9O1xuICB9XG5cbiAgYXN5bmMgYWRkSGlzdG9yaWNhbFByb3Bvc2FsKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbW9kZXJhdG9yUGRhOiBQdWJsaWNLZXksXG4gICAgbnVtT3B0aW9uczogbnVtYmVyLFxuICAgIHdpbm5pbmdJZHg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBjcmVhdGVkQXQ6IEJOIHwgbnVtYmVyLFxuICAgIG1ldGFkYXRhOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBtb2RlcmF0b3IgPSBhd2FpdCB0aGlzLmZldGNoTW9kZXJhdG9yKG1vZGVyYXRvclBkYSk7XG4gICAgY29uc3QgcHJvcG9zYWxJZCA9IG1vZGVyYXRvci5wcm9wb3NhbElkQ291bnRlcjtcbiAgICBjb25zdCBbcHJvcG9zYWxQZGFdID0gdGhpcy5kZXJpdmVQcm9wb3NhbFBEQShtb2RlcmF0b3JQZGEsIHByb3Bvc2FsSWQpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGFkZEhpc3RvcmljYWxQcm9wb3NhbChcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGFkbWluLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICBudW1PcHRpb25zLFxuICAgICAgd2lubmluZ0lkeCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIGNyZWF0ZWRBdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHsgYnVpbGRlciwgcHJvcG9zYWxQZGEsIHByb3Bvc2FsSWQgfTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVQcm9wb3NhbChcbiAgICBjcmVhdG9yOiBQdWJsaWNLZXksXG4gICAgbW9kZXJhdG9yUGRhOiBQdWJsaWNLZXksXG4gICAgcHJvcG9zYWxQYXJhbXM6IFByb3Bvc2FsUGFyYW1zLFxuICAgIG1ldGFkYXRhPzogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbW9kZXJhdG9yID0gYXdhaXQgdGhpcy5mZXRjaE1vZGVyYXRvcihtb2RlcmF0b3JQZGEpO1xuICAgIGNvbnN0IHByb3Bvc2FsSWQgPSBtb2RlcmF0b3IucHJvcG9zYWxJZENvdW50ZXI7XG4gICAgY29uc3QgW3Byb3Bvc2FsUGRhXSA9IHRoaXMuZGVyaXZlUHJvcG9zYWxQREEobW9kZXJhdG9yUGRhLCBwcm9wb3NhbElkKTtcblxuICAgIC8vIERlcml2ZSB2YXVsdCBQREEgKHByb3Bvc2FsIGlzIHRoZSBvd25lciwgbm9uY2U9cHJvcG9zYWxJZClcbiAgICBjb25zdCBbdmF1bHRQZGFdID0gZGVyaXZlVmF1bHRQREEocHJvcG9zYWxQZGEsIHByb3Bvc2FsSWQsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcblxuICAgIC8vIERlcml2ZSBjb25kaXRpb25hbCBtaW50cyBmb3IgaW5pdGlhbCAyIG9wdGlvbnNcbiAgICBjb25zdCBbY29uZEJhc2VNaW50MF0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5CYXNlLCAwLCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG4gICAgY29uc3QgW2NvbmRCYXNlTWludDFdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuQmFzZSwgMSwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtjb25kUXVvdGVNaW50MF0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5RdW90ZSwgMCwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtjb25kUXVvdGVNaW50MV0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5RdW90ZSwgMSwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuXG4gICAgLy8gRGVyaXZlIHBvb2wgUERBcyBmb3IgaW5pdGlhbCAyIG9wdGlvbnMgKHByb3Bvc2FsIGlzIGFkbWluLCBtaW50QT1jb25kUXVvdGUsIG1pbnRCPWNvbmRCYXNlKVxuICAgIGNvbnN0IFtwb29sMF0gPSBkZXJpdmVQb29sUERBKHByb3Bvc2FsUGRhLCBjb25kUXVvdGVNaW50MCwgY29uZEJhc2VNaW50MCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcG9vbDFdID0gZGVyaXZlUG9vbFBEQShwcm9wb3NhbFBkYSwgY29uZFF1b3RlTWludDEsIGNvbmRCYXNlTWludDEsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgcmVzZXJ2ZXMgYW5kIGZlZSB2YXVsdHNcbiAgICBjb25zdCBbcmVzZXJ2ZUEwXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbDAsIGNvbmRRdW90ZU1pbnQwLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQjBdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sMCwgY29uZEJhc2VNaW50MCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbZmVlVmF1bHQwXSA9IGRlcml2ZUZlZVZhdWx0UERBKHBvb2wwLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQTFdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sMSwgY29uZFF1b3RlTWludDEsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW3Jlc2VydmVCMV0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wxLCBjb25kQmFzZU1pbnQxLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtmZWVWYXVsdDFdID0gZGVyaXZlRmVlVmF1bHRQREEocG9vbDEsIHRoaXMuYW1tLnByb2dyYW1JZCk7XG5cbiAgICAvLyBWYXVsdCB0b2tlbiBhY2NvdW50c1xuICAgIGNvbnN0IGJhc2VUb2tlbkFjYyA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG1vZGVyYXRvci5iYXNlTWludCwgdmF1bHRQZGEsIHRydWUpO1xuICAgIGNvbnN0IHF1b3RlVG9rZW5BY2MgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtb2RlcmF0b3IucXVvdGVNaW50LCB2YXVsdFBkYSwgdHJ1ZSk7XG5cbiAgICAvLyBCdWlsZCByZW1haW5pbmcgYWNjb3VudHMgaW4gZXhwZWN0ZWQgb3JkZXIgKHNlZSBpbml0aWFsaXplX3Byb3Bvc2FsLnJzKVxuICAgIGNvbnN0IHJlbWFpbmluZ0FjY291bnRzID0gW1xuICAgICAgeyBwdWJrZXk6IG1vZGVyYXRvci5iYXNlTWludCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCAgICAgIC8vIDA6IGJhc2VfbWludFxuICAgICAgeyBwdWJrZXk6IG1vZGVyYXRvci5xdW90ZU1pbnQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSwgICAgIC8vIDE6IHF1b3RlX21pbnRcbiAgICAgIHsgcHVia2V5OiB2YXVsdFBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgICAvLyAyOiB2YXVsdFxuICAgICAgeyBwdWJrZXk6IGJhc2VUb2tlbkFjYywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgIC8vIDM6IGJhc2VfdG9rZW5fYWNjXG4gICAgICB7IHB1YmtleTogcXVvdGVUb2tlbkFjYywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgLy8gNDogcXVvdGVfdG9rZW5fYWNjXG4gICAgICB7IHB1YmtleTogY29uZEJhc2VNaW50MCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgLy8gNTogY29uZF9iYXNlX21pbnRfMFxuICAgICAgeyBwdWJrZXk6IGNvbmRCYXNlTWludDEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgIC8vIDY6IGNvbmRfYmFzZV9taW50XzFcbiAgICAgIHsgcHVia2V5OiBjb25kUXVvdGVNaW50MCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAvLyA3OiBjb25kX3F1b3RlX21pbnRfMFxuICAgICAgeyBwdWJrZXk6IGNvbmRRdW90ZU1pbnQxLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgIC8vIDg6IGNvbmRfcXVvdGVfbWludF8xXG4gICAgICB7IHB1YmtleTogcG9vbDAsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgICAgLy8gOTogcG9vbF8wXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUEwLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTA6IHJlc2VydmVfYV8wXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUIwLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTE6IHJlc2VydmVfYl8wXG4gICAgICB7IHB1YmtleTogRkVFX0FVVEhPUklUWSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCAgICAgICAgICAgLy8gMTI6IGZlZV9hdXRob3JpdHlcbiAgICAgIHsgcHVia2V5OiBmZWVWYXVsdDAsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAvLyAxMzogZmVlX3ZhdWx0XzBcbiAgICAgIHsgcHVia2V5OiBwb29sMSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgICAgICAvLyAxNDogcG9vbF8xXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUExLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTU6IHJlc2VydmVfYV8xXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUIxLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTY6IHJlc2VydmVfYl8xXG4gICAgICB7IHB1YmtleTogZmVlVmF1bHQxLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgICAgICAgICAgICAgICAgLy8gMTc6IGZlZV92YXVsdF8xXG4gICAgXTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0aWFsaXplUHJvcG9zYWwoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBjcmVhdG9yLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICBwcm9wb3NhbFBhcmFtcyxcbiAgICAgIG1ldGFkYXRhID8/IG51bGwsXG4gICAgICByZW1haW5pbmdBY2NvdW50c1xuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZGVyLFxuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICBwcm9wb3NhbElkLFxuICAgICAgdmF1bHRQZGEsXG4gICAgICBwb29sczogW3Bvb2wwLCBwb29sMV0sXG4gICAgICBjb25kQmFzZU1pbnRzOiBbY29uZEJhc2VNaW50MCwgY29uZEJhc2VNaW50MV0sXG4gICAgICBjb25kUXVvdGVNaW50czogW2NvbmRRdW90ZU1pbnQwLCBjb25kUXVvdGVNaW50MV0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFkZE9wdGlvbihjcmVhdG9yOiBQdWJsaWNLZXksIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXksIG9wdGlvbnM/OiBUeE9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9wb3NhbCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9wb3NhbChwcm9wb3NhbFBkYSk7XG4gICAgY29uc3Qgb3B0aW9uSW5kZXggPSBwcm9wb3NhbC5udW1PcHRpb25zO1xuXG4gICAgLy8gRGVyaXZlIG5ldyBjb25kaXRpb25hbCBtaW50c1xuICAgIGNvbnN0IFtjb25kQmFzZU1pbnRdID0gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHByb3Bvc2FsLnZhdWx0LCBWYXVsdFR5cGUuQmFzZSwgb3B0aW9uSW5kZXgsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbY29uZFF1b3RlTWludF0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQocHJvcG9zYWwudmF1bHQsIFZhdWx0VHlwZS5RdW90ZSwgb3B0aW9uSW5kZXgsIHRoaXMudmF1bHQucHJvZ3JhbUlkKTtcblxuICAgIC8vIERlcml2ZSBwb29sIFBEQVxuICAgIGNvbnN0IFtwb29sXSA9IGRlcml2ZVBvb2xQREEocHJvcG9zYWxQZGEsIGNvbmRRdW90ZU1pbnQsIGNvbmRCYXNlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUFdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sLCBjb25kUXVvdGVNaW50LCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQl0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wsIGNvbmRCYXNlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICBjb25zdCBbZmVlVmF1bHRdID0gZGVyaXZlRmVlVmF1bHRQREEocG9vbCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcblxuICAgIC8vIEJ1aWxkIHJlbWFpbmluZyBhY2NvdW50cyAoc2VlIGFkZF9vcHRpb24ucnMpXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHMgPSBbXG4gICAgICB7IHB1YmtleTogcHJvcG9zYWwudmF1bHQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgLy8gMDogdmF1bHRcbiAgICAgIHsgcHVia2V5OiBjb25kQmFzZU1pbnQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAvLyAxOiBjb25kX2Jhc2VfbWludFxuICAgICAgeyBwdWJrZXk6IGNvbmRRdW90ZU1pbnQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgIC8vIDI6IGNvbmRfcXVvdGVfbWludFxuICAgICAgeyBwdWJrZXk6IHBvb2wsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgICAgIC8vIDM6IHBvb2xcbiAgICAgIHsgcHVia2V5OiByZXNlcnZlQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgICAvLyA0OiByZXNlcnZlX2FcbiAgICAgIHsgcHVia2V5OiByZXNlcnZlQiwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgICAgICAgICAgICAgICAvLyA1OiByZXNlcnZlX2JcbiAgICAgIHsgcHVia2V5OiBGRUVfQVVUSE9SSVRZLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sICAgICAgICAgICAvLyA2OiBmZWVfYXV0aG9yaXR5XG4gICAgICB7IHB1YmtleTogZmVlVmF1bHQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAgLy8gNzogZmVlX3ZhdWx0XG4gICAgXTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBhZGRPcHRpb24odGhpcy5wcm9ncmFtLCBjcmVhdG9yLCBwcm9wb3NhbFBkYSwgcmVtYWluaW5nQWNjb3VudHMpXG4gICAgICAucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGJ1aWxkZXIsIG9wdGlvbkluZGV4LCBwb29sLCBjb25kQmFzZU1pbnQsIGNvbmRRdW90ZU1pbnQgfTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFByb3Bvc2FsKFxuICAgIGNyZWF0b3I6IFB1YmxpY0tleSxcbiAgICBwcm9wb3NhbFBkYTogUHVibGljS2V5LFxuICAgIGJhc2VBbW91bnQ6IEJOIHwgbnVtYmVyLFxuICAgIHF1b3RlQW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogVHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHByb3Bvc2FsID0gYXdhaXQgdGhpcy5mZXRjaFByb3Bvc2FsKHByb3Bvc2FsUGRhKTtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMudmF1bHQuZmV0Y2hWYXVsdChwcm9wb3NhbC52YXVsdCk7XG4gICAgY29uc3QgbnVtT3B0aW9ucyA9IHByb3Bvc2FsLm51bU9wdGlvbnM7XG5cbiAgICAvLyBTbGljZSBhcnJheXMgdG8gbnVtT3B0aW9ucyAoZml4ZWQtc2l6ZSBhcnJheXMgZnJvbSBSdXN0IGluY2x1ZGUgZW1wdHkgc2xvdHMpXG4gICAgY29uc3QgY29uZEJhc2VNaW50cyA9IHZhdWx0LmNvbmRCYXNlTWludHMuc2xpY2UoMCwgbnVtT3B0aW9ucyk7XG4gICAgY29uc3QgY29uZFF1b3RlTWludHMgPSB2YXVsdC5jb25kUXVvdGVNaW50cy5zbGljZSgwLCBudW1PcHRpb25zKTtcblxuICAgIC8vIFByZS1jcmVhdGUgY29uZGl0aW9uYWwgQVRBcyBmb3IgMysgb3B0aW9ucyB0byBhdm9pZCBleGNlZWRpbmcgdGhlXG4gICAgLy8gNjQgaW5zdHJ1Y3Rpb24gdHJhY2UgbGltaXQuIEVhY2ggQVRBIGNyZWF0aW9uIHZpYSB2YXVsdCBkZXBvc2l0IGFkZHNcbiAgICAvLyA1IGlubmVyIGluc3RydWN0aW9uczsgd2l0aCA0IG9wdGlvbnMgdGhhdCdzIDQwIGV4dHJhIGluc3RydWN0aW9ucy5cbiAgICBjb25zdCBzaG91bGRFbnN1cmVBVEFzID0gb3B0aW9ucz8uZW5zdXJlQVRBcyA/PyAobnVtT3B0aW9ucyA+PSAzKTtcbiAgICBpZiAoc2hvdWxkRW5zdXJlQVRBcykge1xuICAgICAgYXdhaXQgdGhpcy5fY3JlYXRlQ29uZGl0aW9uYWxBVEFzKGNyZWF0b3IsIGNvbmRCYXNlTWludHMsIGNvbmRRdW90ZU1pbnRzKTtcbiAgICB9XG4gICAgY29uc3QgcG9vbHMgPSBwcm9wb3NhbC5wb29scy5zbGljZSgwLCBudW1PcHRpb25zKTtcblxuICAgIC8vIERlcml2ZSBhbGwgdXNlciBjb25kaXRpb25hbCB0b2tlbiBBVEFzXG4gICAgY29uc3QgdXNlckNvbmRCYXNlQVRBcyA9IGNvbmRCYXNlTWludHMubWFwKChtKSA9PiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtLCBjcmVhdG9yKSk7XG4gICAgY29uc3QgdXNlckNvbmRRdW90ZUFUQXMgPSBjb25kUXVvdGVNaW50cy5tYXAoKG0pID0+IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG0sIGNyZWF0b3IpKTtcblxuICAgIC8vIERlcml2ZSByZXNlcnZlIGFjY291bnRzIGZvciBlYWNoIHBvb2xcbiAgICBjb25zdCByZXNlcnZlc0E6IFB1YmxpY0tleVtdID0gW107XG4gICAgY29uc3QgcmVzZXJ2ZXNCOiBQdWJsaWNLZXlbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT3B0aW9uczsgaSsrKSB7XG4gICAgICBjb25zdCBbcmVzQV0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2xzW2ldLCBjb25kUXVvdGVNaW50c1tpXSwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtyZXNCXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbHNbaV0sIGNvbmRCYXNlTWludHNbaV0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgICByZXNlcnZlc0EucHVzaChyZXNBKTtcbiAgICAgIHJlc2VydmVzQi5wdXNoKHJlc0IpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJlbWFpbmluZyBhY2NvdW50cyAoc2VlIGxhdW5jaF9wcm9wb3NhbC5ycylcbiAgICAvLyBMYXlvdXQ6IDYgZml4ZWQgKyA3Kk4gdmFyaWFibGVcbiAgICBjb25zdCByZW1haW5pbmdBY2NvdW50czogeyBwdWJrZXk6IFB1YmxpY0tleTsgaXNTaWduZXI6IGJvb2xlYW47IGlzV3JpdGFibGU6IGJvb2xlYW4gfVtdID0gW1xuICAgICAgeyBwdWJrZXk6IHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwOiBiYXNlX21pbnRcbiAgICAgIHsgcHVia2V5OiB2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogcXVvdGVfbWludFxuICAgICAgeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIHByb3Bvc2FsLnZhdWx0LCB0cnVlKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sICAgLy8gMjogdmF1bHRfYmFzZV9hdGFcbiAgICAgIHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgcHJvcG9zYWwudmF1bHQsIHRydWUpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgIC8vIDM6IHZhdWx0X3F1b3RlX2F0YVxuICAgICAgeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIGNyZWF0b3IpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSwgIC8vIDQ6IHVzZXJfYmFzZV9hdGFcbiAgICAgIHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcywgY3JlYXRvciksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LCAvLyA1OiB1c2VyX3F1b3RlX2F0YVxuICAgIF07XG5cbiAgICAvLyA2Li42K046IGNvbmRfYmFzZV9taW50c1xuICAgIGZvciAoY29uc3QgbWludCBvZiBjb25kQmFzZU1pbnRzKSB7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBtaW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIC8vIDYrTi4uNisyTjogY29uZF9xdW90ZV9taW50c1xuICAgIGZvciAoY29uc3QgbWludCBvZiBjb25kUXVvdGVNaW50cykge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogbWludCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyA2KzJOLi42KzNOOiB1c2VyX2NvbmRfYmFzZV9hdGFzXG4gICAgZm9yIChjb25zdCBhdGEgb2YgdXNlckNvbmRCYXNlQVRBcykge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogYXRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIC8vIDYrM04uLjYrNE46IHVzZXJfY29uZF9xdW90ZV9hdGFzXG4gICAgZm9yIChjb25zdCBhdGEgb2YgdXNlckNvbmRRdW90ZUFUQXMpIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IGF0YSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyA2KzROLi42KzVOOiBwb29sc1xuICAgIGZvciAoY29uc3QgcG9vbCBvZiBwb29scykge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogcG9vbCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyA2KzVOLi42KzZOOiByZXNlcnZlc19hXG4gICAgZm9yIChjb25zdCByZXMgb2YgcmVzZXJ2ZXNBKSB7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiByZXMsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gNis2Ti4uNis3TjogcmVzZXJ2ZXNfYlxuICAgIGZvciAoY29uc3QgcmVzIG9mIHJlc2VydmVzQikge1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogcmVzLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlciA9IGxhdW5jaFByb3Bvc2FsKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgY3JlYXRvcixcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgcHJvcG9zYWwudmF1bHQsXG4gICAgICBiYXNlQW1vdW50LFxuICAgICAgcXVvdGVBbW91bnQsXG4gICAgICByZW1haW5pbmdBY2NvdW50c1xuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGJ1aWxkZXIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmUtY3JlYXRlcyBhbGwgY29uZGl0aW9uYWwgdG9rZW4gQVRBcyBmb3IgYSB1c2VyIGJlZm9yZSBsYXVuY2hpbmcgYSBwcm9wb3NhbC5cbiAgICpcbiAgICogVGhpcyBpcyBSRVFVSVJFRCBmb3IgcHJvcG9zYWxzIHdpdGggMysgb3B0aW9ucyB0byBhdm9pZCBleGNlZWRpbmcgU29sYW5hJ3NcbiAgICogbWF4IGluc3RydWN0aW9uIHRyYWNlIGxlbmd0aCBsaW1pdCAoNjQgaW5zdHJ1Y3Rpb25zKS4gVGhlIHZhdWx0J3MgZGVwb3NpdCBDUElcbiAgICogY3JlYXRlcyBBVEFzIG9uLXRoZS1mbHksIGVhY2ggcmVxdWlyaW5nIDUgaW5uZXIgaW5zdHJ1Y3Rpb25zLiBGb3IgNCBvcHRpb25zOlxuICAgKiA4IEFUQXMgw5cgNSA9IDQwIGV4dHJhIGluc3RydWN0aW9ucywgcHVzaGluZyB0aGUgdG90YWwgb3ZlciA2NC5cbiAgICpcbiAgICogUHJlLWNyZWF0aW5nIEFUQXMgZWxpbWluYXRlcyB0aGlzIG92ZXJoZWFkLCByZWR1Y2luZyB0aGUgdHJhY2UgdG8gfjMyIGluc3RydWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNyZWF0b3IgLSBUaGUgdXNlciB3aG8gd2lsbCByZWNlaXZlIGNvbmRpdGlvbmFsIHRva2Vuc1xuICAgKiBAcGFyYW0gcHJvcG9zYWxQZGEgLSBUaGUgcHJvcG9zYWwgUERBIChtdXN0IGJlIGluaXRpYWxpemVkIGJ1dCBub3QgbGF1bmNoZWQpXG4gICAqIEByZXR1cm5zIFRyYW5zYWN0aW9uIHNpZ25hdHVyZVxuICAgKi9cbiAgYXN5bmMgZW5zdXJlQ29uZGl0aW9uYWxBVEFzKFxuICAgIGNyZWF0b3I6IFB1YmxpY0tleSxcbiAgICBwcm9wb3NhbFBkYTogUHVibGljS2V5LFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByb3Bvc2FsID0gYXdhaXQgdGhpcy5mZXRjaFByb3Bvc2FsKHByb3Bvc2FsUGRhKTtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMudmF1bHQuZmV0Y2hWYXVsdChwcm9wb3NhbC52YXVsdCk7XG4gICAgY29uc3QgY29uZEJhc2VNaW50cyA9IHZhdWx0LmNvbmRCYXNlTWludHMuc2xpY2UoMCwgcHJvcG9zYWwubnVtT3B0aW9ucyk7XG4gICAgY29uc3QgY29uZFF1b3RlTWludHMgPSB2YXVsdC5jb25kUXVvdGVNaW50cy5zbGljZSgwLCBwcm9wb3NhbC5udW1PcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ29uZGl0aW9uYWxBVEFzKGNyZWF0b3IsIGNvbmRCYXNlTWludHMsIGNvbmRRdW90ZU1pbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGNvbmRpdGlvbmFsIEFUQXMgZ2l2ZW4gbWludCBhcnJheXMuXG4gICAqIFVzZWQgYnkgYm90aCBlbnN1cmVDb25kaXRpb25hbEFUQXMgYW5kIGxhdW5jaFByb3Bvc2FsIHRvIGF2b2lkIHJlZHVuZGFudCBmZXRjaGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlQ29uZGl0aW9uYWxBVEFzKFxuICAgIGNyZWF0b3I6IFB1YmxpY0tleSxcbiAgICBjb25kQmFzZU1pbnRzOiBQdWJsaWNLZXlbXSxcbiAgICBjb25kUXVvdGVNaW50czogUHVibGljS2V5W10sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb2dyYW0ucHJvdmlkZXIgYXMgQW5jaG9yUHJvdmlkZXI7XG5cbiAgICAvLyBCdWlsZCBBVEEgY3JlYXRpb24gaW5zdHJ1Y3Rpb25zIChpZGVtcG90ZW50IC0gd29uJ3QgZmFpbCBpZiBleGlzdHMpXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmRCYXNlTWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVzZXJDb25kQmFzZUF0YSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGNvbmRCYXNlTWludHNbaV0sIGNyZWF0b3IpO1xuICAgICAgY29uc3QgdXNlckNvbmRRdW90ZUF0YSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGNvbmRRdW90ZU1pbnRzW2ldLCBjcmVhdG9yKTtcblxuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goXG4gICAgICAgIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24oXG4gICAgICAgICAgY3JlYXRvcixcbiAgICAgICAgICB1c2VyQ29uZEJhc2VBdGEsXG4gICAgICAgICAgY3JlYXRvcixcbiAgICAgICAgICBjb25kQmFzZU1pbnRzW2ldXG4gICAgICAgICksXG4gICAgICAgIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24oXG4gICAgICAgICAgY3JlYXRvcixcbiAgICAgICAgICB1c2VyQ29uZFF1b3RlQXRhLFxuICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgY29uZFF1b3RlTWludHNbaV1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoLi4uaW5zdHJ1Y3Rpb25zKTtcbiAgICByZXR1cm4gcHJvdmlkZXIuc2VuZEFuZENvbmZpcm0odHgpO1xuICB9XG5cbiAgYXN5bmMgZmluYWxpemVQcm9wb3NhbChzaWduZXI6IFB1YmxpY0tleSwgcHJvcG9zYWxQZGE6IFB1YmxpY0tleSwgb3B0aW9ucz86IFR4T3B0aW9ucykge1xuICAgIGNvbnN0IHByb3Bvc2FsID0gYXdhaXQgdGhpcy5mZXRjaFByb3Bvc2FsKHByb3Bvc2FsUGRhKTtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMudmF1bHQuZmV0Y2hWYXVsdChwcm9wb3NhbC52YXVsdCk7XG4gICAgY29uc3QgbnVtT3B0aW9ucyA9IHByb3Bvc2FsLm51bU9wdGlvbnM7XG5cbiAgICAvLyBCdWlsZCByZW1haW5pbmcgYWNjb3VudHMgKDMgcGVyIHBvb2w6IHBvb2wsIHJlc2VydmVfYSwgcmVzZXJ2ZV9iKVxuICAgIGNvbnN0IHJlbWFpbmluZ0FjY291bnRzOiB7IHB1YmtleTogUHVibGljS2V5OyBpc1NpZ25lcjogYm9vbGVhbjsgaXNXcml0YWJsZTogYm9vbGVhbiB9W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT3B0aW9uczsgaSsrKSB7XG4gICAgICBjb25zdCBwb29sID0gcHJvcG9zYWwucG9vbHNbaV07XG4gICAgICBjb25zdCBbcmVzZXJ2ZUFdID0gZGVyaXZlUmVzZXJ2ZVBEQShwb29sLCB2YXVsdC5jb25kUXVvdGVNaW50c1tpXSwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtyZXNlcnZlQl0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wsIHZhdWx0LmNvbmRCYXNlTWludHNbaV0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG5cbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHBvb2wsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHJlc2VydmVBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0pO1xuICAgICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogcmVzZXJ2ZUIsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlciA9IGZpbmFsaXplUHJvcG9zYWwoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBzaWduZXIsXG4gICAgICBwcm9wb3NhbFBkYSxcbiAgICAgIHByb3Bvc2FsLnZhdWx0LFxuICAgICAgcmVtYWluaW5nQWNjb3VudHNcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4geyBidWlsZGVyIH07XG4gIH1cblxuICBhc3luYyByZWRlZW1MaXF1aWRpdHkoY3JlYXRvcjogUHVibGljS2V5LCBwcm9wb3NhbFBkYTogUHVibGljS2V5LCBvcHRpb25zPzogVHhPcHRpb25zKSB7XG4gICAgY29uc3QgcHJvcG9zYWwgPSBhd2FpdCB0aGlzLmZldGNoUHJvcG9zYWwocHJvcG9zYWxQZGEpO1xuICAgIGNvbnN0IHZhdWx0ID0gYXdhaXQgdGhpcy52YXVsdC5mZXRjaFZhdWx0KHByb3Bvc2FsLnZhdWx0KTtcbiAgICBjb25zdCBudW1PcHRpb25zID0gcHJvcG9zYWwubnVtT3B0aW9ucztcblxuICAgIGNvbnN0IHsgd2lubmluZ0lkeCB9ID0gcGFyc2VQcm9wb3NhbFN0YXRlKHByb3Bvc2FsLnN0YXRlKTtcbiAgICBpZiAod2lubmluZ0lkeCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvcG9zYWwgbm90IGZpbmFsaXplZFwiKTtcbiAgICB9XG4gICAgY29uc3Qgd2lubmluZ1Bvb2wgPSBwcm9wb3NhbC5wb29sc1t3aW5uaW5nSWR4XTtcblxuICAgIC8vIERlcml2ZSB3aW5uaW5nIHBvb2wgcmVzZXJ2ZXNcbiAgICBjb25zdCBbcmVzZXJ2ZUFdID0gZGVyaXZlUmVzZXJ2ZVBEQSh3aW5uaW5nUG9vbCwgdmF1bHQuY29uZFF1b3RlTWludHNbd2lubmluZ0lkeF0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG4gICAgY29uc3QgW3Jlc2VydmVCXSA9IGRlcml2ZVJlc2VydmVQREEod2lubmluZ1Bvb2wsIHZhdWx0LmNvbmRCYXNlTWludHNbd2lubmluZ0lkeF0sIHRoaXMuYW1tLnByb2dyYW1JZCk7XG5cbiAgICAvLyBVc2VyJ3Mgd2lubmluZyBjb25kaXRpb25hbCB0b2tlbiBBVEFzXG4gICAgY29uc3QgY3JlYXRvckNvbmRRdW90ZUF0YSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmNvbmRRdW90ZU1pbnRzW3dpbm5pbmdJZHhdLCBjcmVhdG9yKTtcbiAgICBjb25zdCBjcmVhdG9yQ29uZEJhc2VBdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kQmFzZU1pbnRzW3dpbm5pbmdJZHhdLCBjcmVhdG9yKTtcblxuICAgIC8vIEJ1aWxkIHJlbWFpbmluZyBhY2NvdW50cyAoc2VlIHJlZGVlbV9saXF1aWRpdHkucnMpXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHM6IHsgcHVia2V5OiBQdWJsaWNLZXk7IGlzU2lnbmVyOiBib29sZWFuOyBpc1dyaXRhYmxlOiBib29sZWFuIH1bXSA9IFtcbiAgICAgIC8vIHJlbW92ZV9saXF1aWRpdHkgYWNjb3VudHMgKDAtMylcbiAgICAgIHsgcHVia2V5OiByZXNlcnZlQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogcmVzZXJ2ZUIsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IGNyZWF0b3JDb25kUXVvdGVBdGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IGNyZWF0b3JDb25kQmFzZUF0YSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG5cbiAgICAgIC8vIHJlZGVlbV93aW5uaW5ncyBiYXNlIGZpeGVkIGFjY291bnRzICg0LTYpXG4gICAgICB7IHB1YmtleTogdmF1bHQuYmFzZU1pbnQuYWRkcmVzcywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIHByb3Bvc2FsLnZhdWx0LCB0cnVlKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQuYmFzZU1pbnQuYWRkcmVzcywgY3JlYXRvciksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIF07XG5cbiAgICAvLyByZWRlZW1fd2lubmluZ3MgYmFzZSByZW1haW5pbmcgKDcuLjcrMk4pOiBbY29uZF9iYXNlX21pbnRfaSwgdXNlcl9jb25kX2Jhc2VfYXRhX2ldXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PcHRpb25zOyBpKyspIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHZhdWx0LmNvbmRCYXNlTWludHNbaV0sIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmNvbmRCYXNlTWludHNbaV0sIGNyZWF0b3IpLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVkZWVtX3dpbm5pbmdzIHF1b3RlIGZpeGVkIGFjY291bnRzXG4gICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogdmF1bHQucXVvdGVNaW50LmFkZHJlc3MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSk7XG4gICAgcmVtYWluaW5nQWNjb3VudHMucHVzaCh7IHB1YmtleTogZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModmF1bHQucXVvdGVNaW50LmFkZHJlc3MsIHByb3Bvc2FsLnZhdWx0LCB0cnVlKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LnF1b3RlTWludC5hZGRyZXNzLCBjcmVhdG9yKSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0pO1xuXG4gICAgLy8gcmVkZWVtX3dpbm5pbmdzIHF1b3RlIHJlbWFpbmluZzogW2NvbmRfcXVvdGVfbWludF9pLCB1c2VyX2NvbmRfcXVvdGVfYXRhX2ldXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PcHRpb25zOyBpKyspIHtcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzLnB1c2goeyBwdWJrZXk6IHZhdWx0LmNvbmRRdW90ZU1pbnRzW2ldLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSk7XG4gICAgICByZW1haW5pbmdBY2NvdW50cy5wdXNoKHsgcHVia2V5OiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kUXVvdGVNaW50c1tpXSwgY3JlYXRvciksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGVyID0gcmVkZWVtTGlxdWlkaXR5KFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgY3JlYXRvcixcbiAgICAgIHByb3Bvc2FsUGRhLFxuICAgICAgcHJvcG9zYWwudmF1bHQsXG4gICAgICB3aW5uaW5nUG9vbCxcbiAgICAgIHJlbWFpbmluZ0FjY291bnRzXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHsgYnVpbGRlciwgbnVtT3B0aW9ucyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQWRkcmVzcyBMb29rdXAgVGFibGUgZm9yIHJlZGVtcHRpb24gb3BlcmF0aW9ucy5cbiAgICogUmVxdWlyZWQgZm9yIHByb3Bvc2FscyB3aXRoIDMrIG9wdGlvbnMgdG8gYXZvaWQgZXhjZWVkaW5nIHRyYW5zYWN0aW9uIHNpemUgbGltaXRzLlxuICAgKlxuICAgKiBAcGFyYW0gY3JlYXRvciAtIFRoZSB1c2VyIHJlZGVlbWluZyAoY3JlYXRvciBvZiBwcm9wb3NhbCBvciBsaXF1aWRpdHkgcHJvdmlkZXIpXG4gICAqIEBwYXJhbSBwcm9wb3NhbFBkYSAtIFRoZSBwcm9wb3NhbCBQREFcbiAgICogQHJldHVybnMgQUxUIGFkZHJlc3NcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVJlZGVtcHRpb25BTFQoXG4gICAgY3JlYXRvcjogUHVibGljS2V5LFxuICAgIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXksXG4gICk6IFByb21pc2U8eyBhbHRBZGRyZXNzOiBQdWJsaWNLZXkgfT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyIGFzIEFuY2hvclByb3ZpZGVyO1xuICAgIGNvbnN0IHByb3Bvc2FsID0gYXdhaXQgdGhpcy5mZXRjaFByb3Bvc2FsKHByb3Bvc2FsUGRhKTtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMudmF1bHQuZmV0Y2hWYXVsdChwcm9wb3NhbC52YXVsdCk7XG4gICAgY29uc3QgbnVtT3B0aW9ucyA9IHByb3Bvc2FsLm51bU9wdGlvbnM7XG5cbiAgICBjb25zdCB7IHdpbm5pbmdJZHggfSA9IHBhcnNlUHJvcG9zYWxTdGF0ZShwcm9wb3NhbC5zdGF0ZSk7XG4gICAgaWYgKHdpbm5pbmdJZHggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3Bvc2FsIG5vdCBmaW5hbGl6ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgYWRkcmVzc2VzOiBQdWJsaWNLZXlbXSA9IFtcbiAgICAgIC8vIFByb2dyYW1zXG4gICAgICB0aGlzLnByb2dyYW1JZCxcbiAgICAgIHRoaXMudmF1bHQucHJvZ3JhbUlkLFxuICAgICAgdGhpcy5hbW0ucHJvZ3JhbUlkLFxuICAgICAgU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsXG4gICAgICBUT0tFTl9QUk9HUkFNX0lELFxuICAgICAgQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxuICAgICAgLy8gQ29yZSBhY2NvdW50c1xuICAgICAgcHJvcG9zYWxQZGEsXG4gICAgICBwcm9wb3NhbC52YXVsdCxcbiAgICAgIHByb3Bvc2FsLm1vZGVyYXRvcixcbiAgICAgIHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsXG4gICAgICB2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcyxcbiAgICAgIC8vIFdpbm5pbmcgcG9vbCBhbmQgcmVzZXJ2ZXNcbiAgICAgIHByb3Bvc2FsLnBvb2xzW3dpbm5pbmdJZHhdLFxuICAgICAgLy8gVmF1bHQgdG9rZW4gYWNjb3VudHNcbiAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmJhc2VNaW50LmFkZHJlc3MsIHByb3Bvc2FsLnZhdWx0LCB0cnVlKSxcbiAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LnF1b3RlTWludC5hZGRyZXNzLCBwcm9wb3NhbC52YXVsdCwgdHJ1ZSksXG4gICAgICAvLyBDcmVhdG9yJ3MgYmFzZS9xdW90ZSBBVEFzXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5iYXNlTWludC5hZGRyZXNzLCBjcmVhdG9yKSxcbiAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LnF1b3RlTWludC5hZGRyZXNzLCBjcmVhdG9yKSxcbiAgICBdO1xuXG4gICAgLy8gV2lubmluZyBwb29sIHJlc2VydmVzXG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IGRlcml2ZVJlc2VydmVQREEocHJvcG9zYWwucG9vbHNbd2lubmluZ0lkeF0sIHZhdWx0LmNvbmRRdW90ZU1pbnRzW3dpbm5pbmdJZHhdLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGNvbnN0IFtyZXNlcnZlQl0gPSBkZXJpdmVSZXNlcnZlUERBKHByb3Bvc2FsLnBvb2xzW3dpbm5pbmdJZHhdLCB2YXVsdC5jb25kQmFzZU1pbnRzW3dpbm5pbmdJZHhdLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgIGFkZHJlc3Nlcy5wdXNoKHJlc2VydmVBLCByZXNlcnZlQik7XG5cbiAgICAvLyBQZXItb3B0aW9uIGFjY291bnRzIChjb25kaXRpb25hbCBtaW50cyBhbmQgdXNlciBBVEFzKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT3B0aW9uczsgaSsrKSB7XG4gICAgICBhZGRyZXNzZXMucHVzaChcbiAgICAgICAgdmF1bHQuY29uZEJhc2VNaW50c1tpXSxcbiAgICAgICAgdmF1bHQuY29uZFF1b3RlTWludHNbaV0sXG4gICAgICAgIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHZhdWx0LmNvbmRCYXNlTWludHNbaV0sIGNyZWF0b3IpLFxuICAgICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh2YXVsdC5jb25kUXVvdGVNaW50c1tpXSwgY3JlYXRvciksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdldCByZWNlbnQgc2xvdCBmb3IgQUxUIGNyZWF0aW9uXG4gICAgY29uc3Qgc2xvdCA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0U2xvdChcImZpbmFsaXplZFwiKTtcblxuICAgIGNvbnN0IFtjcmVhdGVJeCwgYWx0QWRkcmVzc10gPSBBZGRyZXNzTG9va3VwVGFibGVQcm9ncmFtLmNyZWF0ZUxvb2t1cFRhYmxlKHtcbiAgICAgIGF1dGhvcml0eTogY3JlYXRvcixcbiAgICAgIHBheWVyOiBjcmVhdG9yLFxuICAgICAgcmVjZW50U2xvdDogc2xvdCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBBTFRcbiAgICBjb25zdCBjcmVhdGVUeCA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChjcmVhdGVJeCk7XG4gICAgY29uc3QgeyBibG9ja2hhc2g6IGNyZWF0ZUJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGNyZWF0ZUxhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPVxuICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5nZXRMYXRlc3RCbG9ja2hhc2goJ2NvbmZpcm1lZCcpO1xuICAgIGNyZWF0ZVR4LnJlY2VudEJsb2NraGFzaCA9IGNyZWF0ZUJsb2NraGFzaDtcbiAgICBjcmVhdGVUeC5mZWVQYXllciA9IGNyZWF0b3I7XG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBwcm92aWRlci53YWxsZXQuc2lnblRyYW5zYWN0aW9uKGNyZWF0ZVR4KTtcbiAgICBjb25zdCBzaWcgPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLnNlbmRSYXdUcmFuc2FjdGlvbihzaWduZWRUeC5zZXJpYWxpemUoKSwge1xuICAgICAgc2tpcFByZWZsaWdodDogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmNvbmZpcm1UcmFuc2FjdGlvbih7XG4gICAgICBzaWduYXR1cmU6IHNpZyxcbiAgICAgIGJsb2NraGFzaDogY3JlYXRlQmxvY2toYXNoLFxuICAgICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGNyZWF0ZUxhc3RWYWxpZEJsb2NrSGVpZ2h0LFxuICAgIH0sIFwiY29uZmlybWVkXCIpO1xuXG4gICAgLy8gRXh0ZW5kIEFMVCB3aXRoIGFkZHJlc3Nlc1xuICAgIC8vIFVzZSBza2lwUHJlZmxpZ2h0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdoZXJlIHNpbXVsYXRpb24gc2VlcyBzdGFsZSBzdGF0ZVxuICAgIC8vIGJlZm9yZSBwcmV2aW91cyBleHRlbmQgaGFzIHByb3BhZ2F0ZWQgKHNhbWUgcGF0dGVybiBhcyBDUkVBVEUgYWJvdmUpXG4gICAgY29uc3QgQ0hVTktfU0laRSA9IDIwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSBDSFVOS19TSVpFKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGFkZHJlc3Nlcy5zbGljZShpLCBpICsgQ0hVTktfU0laRSk7XG4gICAgICBjb25zdCBleHRlbmRJeCA9IEFkZHJlc3NMb29rdXBUYWJsZVByb2dyYW0uZXh0ZW5kTG9va3VwVGFibGUoe1xuICAgICAgICBwYXllcjogY3JlYXRvcixcbiAgICAgICAgYXV0aG9yaXR5OiBjcmVhdG9yLFxuICAgICAgICBsb29rdXBUYWJsZTogYWx0QWRkcmVzcyxcbiAgICAgICAgYWRkcmVzc2VzOiBjaHVuayxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5kVHggPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoZXh0ZW5kSXgpO1xuICAgICAgY29uc3QgeyBibG9ja2hhc2g6IGV4dGVuZEJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGV4dGVuZExhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPVxuICAgICAgICBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldExhdGVzdEJsb2NraGFzaCgnY29uZmlybWVkJyk7XG4gICAgICBleHRlbmRUeC5yZWNlbnRCbG9ja2hhc2ggPSBleHRlbmRCbG9ja2hhc2g7XG4gICAgICBleHRlbmRUeC5mZWVQYXllciA9IGNyZWF0b3I7XG4gICAgICBjb25zdCBzaWduZWRFeHRlbmRUeCA9IGF3YWl0IHByb3ZpZGVyLndhbGxldC5zaWduVHJhbnNhY3Rpb24oZXh0ZW5kVHgpO1xuICAgICAgY29uc3QgZXh0ZW5kU2lnID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5zZW5kUmF3VHJhbnNhY3Rpb24oc2lnbmVkRXh0ZW5kVHguc2VyaWFsaXplKCksIHtcbiAgICAgICAgc2tpcFByZWZsaWdodDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5jb25maXJtVHJhbnNhY3Rpb24oe1xuICAgICAgICBzaWduYXR1cmU6IGV4dGVuZFNpZyxcbiAgICAgICAgYmxvY2toYXNoOiBleHRlbmRCbG9ja2hhc2gsXG4gICAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBleHRlbmRMYXN0VmFsaWRCbG9ja0hlaWdodCxcbiAgICAgIH0sIFwiY29uZmlybWVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFsdEFkZHJlc3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZm9yIHJlZGVlbWluZyBsaXF1aWRpdHkgd2l0aCBBTFQuXG4gICAqIFJlcXVpcmVkIGZvciBwcm9wb3NhbHMgd2l0aCAzKyBvcHRpb25zIHRvIGF2b2lkIGV4Y2VlZGluZyB0cmFuc2FjdGlvbiBzaXplIGxpbWl0cy5cbiAgICpcbiAgICogQHBhcmFtIGNyZWF0b3IgLSBUaGUgdXNlciByZWRlZW1pbmdcbiAgICogQHBhcmFtIHByb3Bvc2FsUGRhIC0gVGhlIHByb3Bvc2FsIFBEQVxuICAgKiBAcGFyYW0gYWx0QWRkcmVzcyAtIE9wdGlvbmFsIEFMVCBhZGRyZXNzICh3aWxsIGJlIGNyZWF0ZWQgaWYgbm90IHByb3ZpZGVkIGZvciAzKyBvcHRpb25zKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHRyYW5zYWN0aW9uIG9wdGlvbnMgKHByaW9yaXR5IGZlZSwgY29tcHV0ZSB1bml0cylcbiAgICogQHJldHVybnMgVW5zaWduZWQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uLCBBTFQgYWRkcmVzcywgbnVtYmVyIG9mIG9wdGlvbnMsIGFuZCBibG9ja2hhc2ggaW5mbyBmb3IgY29uZmlybWF0aW9uXG4gICAqL1xuICBhc3luYyByZWRlZW1MaXF1aWRpdHlWZXJzaW9uZWQoXG4gICAgY3JlYXRvcjogUHVibGljS2V5LFxuICAgIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXksXG4gICAgYWx0QWRkcmVzcz86IFB1YmxpY0tleSxcbiAgICBvcHRpb25zPzogVHhPcHRpb25zLFxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uZWRUeDogVmVyc2lvbmVkVHJhbnNhY3Rpb247XG4gICAgYWx0QWRkcmVzczogUHVibGljS2V5O1xuICAgIG51bU9wdGlvbnM6IG51bWJlcjtcbiAgICBibG9ja2hhc2g6IHN0cmluZztcbiAgICBsYXN0VmFsaWRCbG9ja0hlaWdodDogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb2dyYW0ucHJvdmlkZXIgYXMgQW5jaG9yUHJvdmlkZXI7XG4gICAgY29uc3QgeyBidWlsZGVyLCBudW1PcHRpb25zIH0gPSBhd2FpdCB0aGlzLnJlZGVlbUxpcXVpZGl0eShjcmVhdG9yLCBwcm9wb3NhbFBkYSk7XG5cbiAgICAvLyBDcmVhdGUgQUxUIGlmIG5vdCBwcm92aWRlZCBhbmQgbmVlZGVkXG4gICAgbGV0IGFsdFB1YmtleSA9IGFsdEFkZHJlc3M7XG4gICAgbGV0IHZlcmlmaWVkQUxUOiBBZGRyZXNzTG9va3VwVGFibGVBY2NvdW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoIWFsdFB1YmtleSAmJiBudW1PcHRpb25zID49IDMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgIENyZWF0aW5nIHJlZGVtcHRpb24gQUxUIGZvciAke251bU9wdGlvbnN9IG9wdGlvbnMuLi5gKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY3JlYXRlUmVkZW1wdGlvbkFMVChjcmVhdG9yLCBwcm9wb3NhbFBkYSk7XG4gICAgICBhbHRQdWJrZXkgPSByZXN1bHQuYWx0QWRkcmVzcztcbiAgICAgIGNvbnNvbGUubG9nKGAgIOKckyBSZWRlbXB0aW9uIEFMVCBjcmVhdGVkOiAke2FsdFB1YmtleS50b0Jhc2U1OCgpfWApO1xuXG4gICAgICAvLyBXYWl0IGZvciBBTFQgdG8gYmUgZnVsbHkgYXZhaWxhYmxlIHdpdGggYWxsIGFkZHJlc3Nlc1xuICAgICAgLy8gVXNlIGxvbmdlciBkZWxheXMgYWZ0ZXIgZXh0ZW5kaW5nIHRvIGVuc3VyZSBwcm9wYWdhdGlvblxuICAgICAgY29uc29sZS5sb2coYCAgV2FpdGluZyBmb3IgQUxUIHByb3BhZ2F0aW9uLi4uYCk7XG4gICAgICBjb25zdCBleHBlY3RlZEFkZHJlc3NlcyA9IDE4ICsgKG51bU9wdGlvbnMgKiA0KTsgLy8gQmFzZSBhY2NvdW50cyArIHBlci1vcHRpb24gYWNjb3VudHNcbiAgICAgIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgICAgIC8vIEluaXRpYWwgZGVsYXkgYWZ0ZXIgZXh0ZW5zaW9uXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkpO1xuXG4gICAgICB3aGlsZSAoYXR0ZW1wdHMgPCAzMCkge1xuICAgICAgICBjb25zdCBhbHRBY2NvdW50ID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5nZXRBZGRyZXNzTG9va3VwVGFibGUoYWx0UHVia2V5LCB7XG4gICAgICAgICAgY29tbWl0bWVudDogJ2NvbmZpcm1lZCcsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYWx0QWNjb3VudC52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3NDb3VudCA9IGFsdEFjY291bnQudmFsdWUuc3RhdGUuYWRkcmVzc2VzLmxlbmd0aDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBBdHRlbXB0ICR7YXR0ZW1wdHMgKyAxfTogQUxUIGhhcyAke2FkZHJlc3NDb3VudH0vJHtleHBlY3RlZEFkZHJlc3Nlc30gYWRkcmVzc2VzYCk7XG4gICAgICAgICAgaWYgKGFkZHJlc3NDb3VudCA+PSBleHBlY3RlZEFkZHJlc3Nlcykge1xuICAgICAgICAgICAgdmVyaWZpZWRBTFQgPSBhbHRBY2NvdW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAg4pyTIEFMVCB2ZXJpZmllZCB3aXRoICR7YWRkcmVzc0NvdW50fSBhZGRyZXNzZXNgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZlcmlmaWVkQUxUKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQUxUIGZhaWxlZCB0byBwb3B1bGF0ZSB3aXRoIGV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzZXN9IGFkZHJlc3NlcyBhZnRlciAke2F0dGVtcHRzfSBhdHRlbXB0c2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYWx0UHVia2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBTFQgYWRkcmVzcyByZXF1aXJlZCBmb3IgbXVsdGktb3B0aW9uIHJlZGVtcHRpb25cIik7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggQUxUIGlmIHdlIGRvbid0IGhhdmUgaXQgdmVyaWZpZWQgYWxyZWFkeVxuICAgIGlmICghdmVyaWZpZWRBTFQpIHtcbiAgICAgIHZlcmlmaWVkQUxUID0gYXdhaXQgdGhpcy5mZXRjaEFMVChhbHRQdWJrZXkpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGluc3RydWN0aW9uXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBhd2FpdCBidWlsZGVyLmluc3RydWN0aW9uKCk7XG4gICAgY29uc3QgY29tcHV0ZUJ1ZGdldEl4ID0gQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRMaW1pdCh7IHVuaXRzOiA1MDBfMDAwIH0pO1xuXG4gICAgLy8gQnVpbGQgcHJlLWluc3RydWN0aW9ucyBhcnJheSB3aXRoIG9wdGlvbmFsIHByaW9yaXR5IGZlZVxuICAgIGNvbnN0IHByZUluc3RydWN0aW9ucyA9IFtjb21wdXRlQnVkZ2V0SXhdO1xuICAgIGlmIChvcHRpb25zPy5wcmlvcml0eUZlZU1pY3JvTGFtcG9ydHMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnByaW9yaXR5RmVlTWljcm9MYW1wb3J0cyA+IDApIHtcbiAgICAgIHByZUluc3RydWN0aW9ucy5wdXNoKENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0UHJpY2UoeyBtaWNyb0xhbXBvcnRzOiBvcHRpb25zLnByaW9yaXR5RmVlTWljcm9MYW1wb3J0cyB9KSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZyZXNoIGJsb2NraGFzaCB3aXRoIGxhc3RWYWxpZEJsb2NrSGVpZ2h0IGZvciBjb25maXJtYXRpb24gdHJhY2tpbmdcbiAgICBjb25zdCB7IGJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQgfSA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0TGF0ZXN0QmxvY2toYXNoKCdjb25maXJtZWQnKTtcblxuICAgIC8vIEJ1aWxkIHZlcnNpb25lZCB0cmFuc2FjdGlvbiB1c2luZyB0aGUgdmVyaWZpZWQgQUxUIChubyByZS1mZXRjaClcbiAgICBjb25zdCB2ZXJzaW9uZWRUeCA9IHRoaXMuYnVpbGRWZXJzaW9uZWRUeFdpdGhBTFQoXG4gICAgICBjcmVhdG9yLFxuICAgICAgWy4uLnByZUluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25dLFxuICAgICAgdmVyaWZpZWRBTFQsXG4gICAgICBibG9ja2hhc2gsXG4gICAgKTtcblxuICAgIC8vIFJldHVybiB0aGUgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIGFsb25nIHdpdGggYmxvY2toYXNoIGluZm8gZm9yIHByb3BlciBjb25maXJtYXRpb25cbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGVpciBvd24gc2lnbmluZyBtZWNoYW5pc20gKGUuZy4sIGtleXBhaXIuc2lnbilcbiAgICByZXR1cm4geyB2ZXJzaW9uZWRUeCwgYWx0QWRkcmVzczogYWx0UHVia2V5LCBudW1PcHRpb25zLCBibG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0IH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIHNlbmQgYSBzaWduZWQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIHdpdGggcm9idXN0IGNvbmZpcm1hdGlvbiBoYW5kbGluZy5cbiAgICogVXNlcyBibG9ja2hhc2gtYmFzZWQgY29uZmlybWF0aW9uIHRvIHByb3Blcmx5IGRldGVjdCB0cmFuc2FjdGlvbiBleHBpcmF0aW9uXG4gICAqIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGZpeGVkIHRpbWVvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBzaWduZWRUeCAtIFRoZSBzaWduZWQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIHRvIHNlbmRcbiAgICogQHBhcmFtIGNvbmZpcm1hdGlvbkluZm8gLSBPcHRpb25hbCBibG9ja2hhc2ggaW5mbyBmcm9tIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcyBidWlsdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgYSBmcmVzaCBibG9ja2hhc2ggd2lsbCBiZSBmZXRjaGVkIChsZXNzIGFjY3VyYXRlKS5cbiAgICovXG4gIGFzeW5jIHNlbmRWZXJzaW9uZWRUcmFuc2FjdGlvbihcbiAgICBzaWduZWRUeDogVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG4gICAgY29uZmlybWF0aW9uSW5mbz86IHsgYmxvY2toYXNoOiBzdHJpbmc7IGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBudW1iZXIgfSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvZ3JhbS5wcm92aWRlciBhcyBBbmNob3JQcm92aWRlcjtcblxuICAgIC8vIFVzZSBwcm92aWRlZCBibG9ja2hhc2ggaW5mbyBvciBmZXRjaCBmcmVzaCBvbmVcbiAgICAvLyBVc2luZyB0aGUgb3JpZ2luYWwgYmxvY2toYXNoIGlzIG1vcmUgYWNjdXJhdGUgZm9yIGRldGVjdGluZyBleHBpcmF0aW9uXG4gICAgbGV0IGJsb2NraGFzaDogc3RyaW5nO1xuICAgIGxldCBsYXN0VmFsaWRCbG9ja0hlaWdodDogbnVtYmVyO1xuXG4gICAgaWYgKGNvbmZpcm1hdGlvbkluZm8pIHtcbiAgICAgIGJsb2NraGFzaCA9IGNvbmZpcm1hdGlvbkluZm8uYmxvY2toYXNoO1xuICAgICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQgPSBjb25maXJtYXRpb25JbmZvLmxhc3RWYWxpZEJsb2NrSGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZ2V0IGZyZXNoIGJsb2NraGFzaCAobWF5IHdhaXQgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IGlmIHR4IGFscmVhZHkgZXhwaXJlZClcbiAgICAgIGNvbnN0IGxhdGVzdEJsb2NraGFzaCA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0TGF0ZXN0QmxvY2toYXNoKCdjb25maXJtZWQnKTtcbiAgICAgIGJsb2NraGFzaCA9IGxhdGVzdEJsb2NraGFzaC5ibG9ja2hhc2g7XG4gICAgICBsYXN0VmFsaWRCbG9ja0hlaWdodCA9IGxhdGVzdEJsb2NraGFzaC5sYXN0VmFsaWRCbG9ja0hlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLnNlbmRUcmFuc2FjdGlvbihzaWduZWRUeCwge1xuICAgICAgc2tpcFByZWZsaWdodDogZmFsc2UsXG4gICAgICBwcmVmbGlnaHRDb21taXRtZW50OiAnY29uZmlybWVkJyxcbiAgICB9KTtcblxuICAgIC8vIFVzZSBibG9ja2hhc2gtYmFzZWQgY29uZmlybWF0aW9uIHdoaWNoIHdhaXRzIHVudGlsIGVpdGhlcjpcbiAgICAvLyAxLiBUcmFuc2FjdGlvbiBpcyBjb25maXJtZWRcbiAgICAvLyAyLiBCbG9ja2hhc2ggZXhwaXJlcyAobGFzdFZhbGlkQmxvY2tIZWlnaHQgcGFzc2VkKVxuICAgIC8vIFRoaXMgaXMgbW9yZSByb2J1c3QgdGhhbiBhIGZpeGVkIHRpbWVvdXQgb24gY29uZ2VzdGVkIG5ldHdvcmtzXG4gICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5jb25maXJtVHJhbnNhY3Rpb24oe1xuICAgICAgc2lnbmF0dXJlLFxuICAgICAgYmxvY2toYXNoLFxuICAgICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQsXG4gICAgfSwgJ2NvbmZpcm1lZCcpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgfVxuXG4gIC8qIEFkZHJlc3MgTG9va3VwIFRhYmxlICovXG5cbiAgYXN5bmMgY3JlYXRlUHJvcG9zYWxBTFQoXG4gICAgY3JlYXRvcjogUHVibGljS2V5LFxuICAgIG1vZGVyYXRvclBkYTogUHVibGljS2V5LFxuICAgIG51bU9wdGlvbnM6IG51bWJlciA9IDIsXG4gICk6IFByb21pc2U8eyBhbHRBZGRyZXNzOiBQdWJsaWNLZXkgfT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyIGFzIEFuY2hvclByb3ZpZGVyO1xuICAgIGNvbnN0IG1vZGVyYXRvciA9IGF3YWl0IHRoaXMuZmV0Y2hNb2RlcmF0b3IobW9kZXJhdG9yUGRhKTtcbiAgICBjb25zdCBwcm9wb3NhbElkID0gbW9kZXJhdG9yLnByb3Bvc2FsSWRDb3VudGVyO1xuICAgIGNvbnN0IFtwcm9wb3NhbFBkYV0gPSB0aGlzLmRlcml2ZVByb3Bvc2FsUERBKG1vZGVyYXRvclBkYSwgcHJvcG9zYWxJZCk7XG4gICAgY29uc3QgW3ZhdWx0UGRhXSA9IGRlcml2ZVZhdWx0UERBKHByb3Bvc2FsUGRhLCBwcm9wb3NhbElkLCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG5cbiAgICBjb25zdCBhZGRyZXNzZXM6IFB1YmxpY0tleVtdID0gW1xuICAgICAgLy8gUHJvZ3JhbXNcbiAgICAgIHRoaXMucHJvZ3JhbUlkLFxuICAgICAgdGhpcy52YXVsdC5wcm9ncmFtSWQsXG4gICAgICB0aGlzLmFtbS5wcm9ncmFtSWQsXG4gICAgICBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgIFRPS0VOX1BST0dSQU1fSUQsXG4gICAgICBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQsXG4gICAgICAvLyBDb3JlIGFjY291bnRzXG4gICAgICBtb2RlcmF0b3JQZGEsXG4gICAgICBwcm9wb3NhbFBkYSxcbiAgICAgIHZhdWx0UGRhLFxuICAgICAgbW9kZXJhdG9yLmJhc2VNaW50LFxuICAgICAgbW9kZXJhdG9yLnF1b3RlTWludCxcbiAgICAgIEZFRV9BVVRIT1JJVFksXG4gICAgICAvLyBWYXVsdCB0b2tlbiBhY2NvdW50c1xuICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobW9kZXJhdG9yLmJhc2VNaW50LCB2YXVsdFBkYSwgdHJ1ZSksXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtb2RlcmF0b3IucXVvdGVNaW50LCB2YXVsdFBkYSwgdHJ1ZSksXG4gICAgICAvLyBDcmVhdG9yJ3MgYmFzZS9xdW90ZSBBVEFzXG4gICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtb2RlcmF0b3IuYmFzZU1pbnQsIGNyZWF0b3IpLFxuICAgICAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobW9kZXJhdG9yLnF1b3RlTWludCwgY3JlYXRvciksXG4gICAgXTtcblxuICAgIC8vIFBlci1vcHRpb24gYWNjb3VudHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9wdGlvbnM7IGkrKykge1xuICAgICAgY29uc3QgW2NvbmRCYXNlTWludF0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5CYXNlLCBpLCB0aGlzLnZhdWx0LnByb2dyYW1JZCk7XG4gICAgICBjb25zdCBbY29uZFF1b3RlTWludF0gPSBkZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5RdW90ZSwgaSwgdGhpcy52YXVsdC5wcm9ncmFtSWQpO1xuICAgICAgY29uc3QgW3Bvb2xdID0gZGVyaXZlUG9vbFBEQShwcm9wb3NhbFBkYSwgY29uZFF1b3RlTWludCwgY29uZEJhc2VNaW50LCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuICAgICAgY29uc3QgW3Jlc2VydmVBXSA9IGRlcml2ZVJlc2VydmVQREEocG9vbCwgY29uZFF1b3RlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtyZXNlcnZlQl0gPSBkZXJpdmVSZXNlcnZlUERBKHBvb2wsIGNvbmRCYXNlTWludCwgdGhpcy5hbW0ucHJvZ3JhbUlkKTtcbiAgICAgIGNvbnN0IFtmZWVWYXVsdF0gPSBkZXJpdmVGZWVWYXVsdFBEQShwb29sLCB0aGlzLmFtbS5wcm9ncmFtSWQpO1xuXG4gICAgICBhZGRyZXNzZXMucHVzaChcbiAgICAgICAgY29uZEJhc2VNaW50LFxuICAgICAgICBjb25kUXVvdGVNaW50LFxuICAgICAgICBwb29sLFxuICAgICAgICByZXNlcnZlQSxcbiAgICAgICAgcmVzZXJ2ZUIsXG4gICAgICAgIGZlZVZhdWx0LFxuICAgICAgICAvLyBDcmVhdG9yJ3MgY29uZGl0aW9uYWwgdG9rZW4gQVRBc1xuICAgICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhjb25kQmFzZU1pbnQsIGNyZWF0b3IpLFxuICAgICAgICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhjb25kUXVvdGVNaW50LCBjcmVhdG9yKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBtb3N0IHJlY2VudCBzbG90IHVzaW5nIFwiZmluYWxpemVkXCIgY29tbWl0bWVudCBmb3Igc3RhYmlsaXR5XG4gICAgY29uc3Qgc2xvdCA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0U2xvdChcImZpbmFsaXplZFwiKTtcblxuICAgIGNvbnN0IFtjcmVhdGVJeCwgYWx0QWRkcmVzc10gPSBBZGRyZXNzTG9va3VwVGFibGVQcm9ncmFtLmNyZWF0ZUxvb2t1cFRhYmxlKHtcbiAgICAgIGF1dGhvcml0eTogY3JlYXRvcixcbiAgICAgIHBheWVyOiBjcmVhdG9yLFxuICAgICAgcmVjZW50U2xvdDogc2xvdCxcbiAgICB9KTtcblxuICAgIC8vIFNlbmQgY3JlYXRlIHRyYW5zYWN0aW9uIGltbWVkaWF0ZWx5LCBza2lwIHByZWZsaWdodCB0byBhdm9pZCBzbG90IHRpbWluZyBpc3N1ZXNcbiAgICBjb25zdCBjcmVhdGVUeCA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChjcmVhdGVJeCk7XG4gICAgY29uc3QgeyBibG9ja2hhc2g6IGNyZWF0ZUJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGNyZWF0ZUxhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPVxuICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5nZXRMYXRlc3RCbG9ja2hhc2goJ2NvbmZpcm1lZCcpO1xuICAgIGNyZWF0ZVR4LnJlY2VudEJsb2NraGFzaCA9IGNyZWF0ZUJsb2NraGFzaDtcbiAgICBjcmVhdGVUeC5mZWVQYXllciA9IGNyZWF0b3I7XG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBwcm92aWRlci53YWxsZXQuc2lnblRyYW5zYWN0aW9uKGNyZWF0ZVR4KTtcbiAgICBjb25zdCBzaWcgPSBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLnNlbmRSYXdUcmFuc2FjdGlvbihzaWduZWRUeC5zZXJpYWxpemUoKSwge1xuICAgICAgc2tpcFByZWZsaWdodDogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmNvbmZpcm1UcmFuc2FjdGlvbih7XG4gICAgICBzaWduYXR1cmU6IHNpZyxcbiAgICAgIGJsb2NraGFzaDogY3JlYXRlQmxvY2toYXNoLFxuICAgICAgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGNyZWF0ZUxhc3RWYWxpZEJsb2NrSGVpZ2h0LFxuICAgIH0sIFwiY29uZmlybWVkXCIpO1xuXG4gICAgLy8gU3BsaXQgYWRkcmVzc2VzIGludG8gY2h1bmtzIHRvIGF2b2lkIHRyYW5zYWN0aW9uIHNpemUgbGltaXRzXG4gICAgLy8gRWFjaCBhZGRyZXNzIGlzIDMyIGJ5dGVzLCB+MjAgYWRkcmVzc2VzIHBlciBleHRlbmQgaW5zdHJ1Y3Rpb24gaXMgc2FmZVxuICAgIC8vIFVzZSBza2lwUHJlZmxpZ2h0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdoZXJlIHNpbXVsYXRpb24gc2VlcyBzdGFsZSBzdGF0ZVxuICAgIC8vIGJlZm9yZSBwcmV2aW91cyBleHRlbmQgaGFzIHByb3BhZ2F0ZWQgKHNhbWUgcGF0dGVybiBhcyBDUkVBVEUgYWJvdmUpXG4gICAgY29uc3QgQ0hVTktfU0laRSA9IDIwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSBDSFVOS19TSVpFKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGFkZHJlc3Nlcy5zbGljZShpLCBpICsgQ0hVTktfU0laRSk7XG4gICAgICBjb25zdCBleHRlbmRJeCA9IEFkZHJlc3NMb29rdXBUYWJsZVByb2dyYW0uZXh0ZW5kTG9va3VwVGFibGUoe1xuICAgICAgICBwYXllcjogY3JlYXRvcixcbiAgICAgICAgYXV0aG9yaXR5OiBjcmVhdG9yLFxuICAgICAgICBsb29rdXBUYWJsZTogYWx0QWRkcmVzcyxcbiAgICAgICAgYWRkcmVzc2VzOiBjaHVuayxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5kVHggPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoZXh0ZW5kSXgpO1xuICAgICAgY29uc3QgeyBibG9ja2hhc2g6IGV4dGVuZEJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQ6IGV4dGVuZExhc3RWYWxpZEJsb2NrSGVpZ2h0IH0gPVxuICAgICAgICBhd2FpdCBwcm92aWRlci5jb25uZWN0aW9uLmdldExhdGVzdEJsb2NraGFzaCgnY29uZmlybWVkJyk7XG4gICAgICBleHRlbmRUeC5yZWNlbnRCbG9ja2hhc2ggPSBleHRlbmRCbG9ja2hhc2g7XG4gICAgICBleHRlbmRUeC5mZWVQYXllciA9IGNyZWF0b3I7XG4gICAgICBjb25zdCBzaWduZWRFeHRlbmRUeCA9IGF3YWl0IHByb3ZpZGVyLndhbGxldC5zaWduVHJhbnNhY3Rpb24oZXh0ZW5kVHgpO1xuICAgICAgY29uc3QgZXh0ZW5kU2lnID0gYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5zZW5kUmF3VHJhbnNhY3Rpb24oc2lnbmVkRXh0ZW5kVHguc2VyaWFsaXplKCksIHtcbiAgICAgICAgc2tpcFByZWZsaWdodDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuY29ubmVjdGlvbi5jb25maXJtVHJhbnNhY3Rpb24oe1xuICAgICAgICBzaWduYXR1cmU6IGV4dGVuZFNpZyxcbiAgICAgICAgYmxvY2toYXNoOiBleHRlbmRCbG9ja2hhc2gsXG4gICAgICAgIGxhc3RWYWxpZEJsb2NrSGVpZ2h0OiBleHRlbmRMYXN0VmFsaWRCbG9ja0hlaWdodCxcbiAgICAgIH0sIFwiY29uZmlybWVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFsdEFkZHJlc3MgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQUxUKGFsdEFkZHJlc3M6IFB1YmxpY0tleSk6IFByb21pc2U8QWRkcmVzc0xvb2t1cFRhYmxlQWNjb3VudD4ge1xuICAgIGNvbnN0IGFsdCA9IGF3YWl0IHRoaXMucHJvZ3JhbS5wcm92aWRlci5jb25uZWN0aW9uLmdldEFkZHJlc3NMb29rdXBUYWJsZShhbHRBZGRyZXNzKTtcbiAgICBpZiAoIWFsdC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQUxUIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsdC52YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkVmVyc2lvbmVkVHgoXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgICBhbHRBZGRyZXNzOiBQdWJsaWNLZXksXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb25lZFR4OiBWZXJzaW9uZWRUcmFuc2FjdGlvbjtcbiAgICBibG9ja2hhc2g6IHN0cmluZztcbiAgICBsYXN0VmFsaWRCbG9ja0hlaWdodDogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb2dyYW0ucHJvdmlkZXIgYXMgQW5jaG9yUHJvdmlkZXI7XG4gICAgY29uc3QgYWx0ID0gYXdhaXQgdGhpcy5mZXRjaEFMVChhbHRBZGRyZXNzKTtcbiAgICBjb25zdCB7IGJsb2NraGFzaCwgbGFzdFZhbGlkQmxvY2tIZWlnaHQgfSA9IGF3YWl0IHByb3ZpZGVyLmNvbm5lY3Rpb24uZ2V0TGF0ZXN0QmxvY2toYXNoKCdjb25maXJtZWQnKTtcbiAgICBjb25zdCB2ZXJzaW9uZWRUeCA9IHRoaXMuYnVpbGRWZXJzaW9uZWRUeFdpdGhBTFQocGF5ZXIsIGluc3RydWN0aW9ucywgYWx0LCBibG9ja2hhc2gpO1xuICAgIHJldHVybiB7IHZlcnNpb25lZFR4LCBibG9ja2hhc2gsIGxhc3RWYWxpZEJsb2NrSGVpZ2h0IH07XG4gIH1cblxuICBidWlsZFZlcnNpb25lZFR4V2l0aEFMVChcbiAgICBwYXllcjogUHVibGljS2V5LFxuICAgIGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLFxuICAgIGFsdDogQWRkcmVzc0xvb2t1cFRhYmxlQWNjb3VudCxcbiAgICBibG9ja2hhc2g6IHN0cmluZyxcbiAgKTogVmVyc2lvbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVHJhbnNhY3Rpb25NZXNzYWdlKHtcbiAgICAgIHBheWVyS2V5OiBwYXllcixcbiAgICAgIHJlY2VudEJsb2NraGFzaDogYmxvY2toYXNoLFxuICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgIH0pLmNvbXBpbGVUb1YwTWVzc2FnZShbYWx0XSk7XG5cbiAgICByZXR1cm4gbmV3IFZlcnNpb25lZFRyYW5zYWN0aW9uKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyogREFPIE1ldGhvZHMgKi9cblxuICBkZXJpdmVNaW50Q3JlYXRlS2V5UERBKGRhb1BkYTogUHVibGljS2V5LCBuYW1lOiBzdHJpbmcpOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlTWludENyZWF0ZUtleVBEQShkYW9QZGEsIG5hbWUsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hTcXVhZHNQcm9ncmFtQ29uZmlnKCkge1xuICAgIGNvbnN0IFtwcm9ncmFtQ29uZmlnUGRhXSA9IG11bHRpc2lnLmdldFByb2dyYW1Db25maWdQZGEoe1xuICAgICAgcHJvZ3JhbUlkOiBTUVVBRFNfUFJPR1JBTV9JRCxcbiAgICB9KTtcbiAgICBjb25zdCBwcm9ncmFtQ29uZmlnID0gYXdhaXQgbXVsdGlzaWcuYWNjb3VudHMuUHJvZ3JhbUNvbmZpZy5mcm9tQWNjb3VudEFkZHJlc3MoXG4gICAgICB0aGlzLnByb2dyYW0ucHJvdmlkZXIuY29ubmVjdGlvbixcbiAgICAgIHByb2dyYW1Db25maWdQZGFcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9ncmFtQ29uZmlnOiBwcm9ncmFtQ29uZmlnUGRhLFxuICAgICAgcHJvZ3JhbUNvbmZpZ1RyZWFzdXJ5OiBwcm9ncmFtQ29uZmlnLnRyZWFzdXJ5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGRlcml2ZU11bHRpc2lnUGRhKGNyZWF0ZUtleTogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgICBjb25zdCBbbXVsdGlzaWdQZGFdID0gbXVsdGlzaWcuZ2V0TXVsdGlzaWdQZGEoe1xuICAgICAgY3JlYXRlS2V5LFxuICAgICAgcHJvZ3JhbUlkOiBTUVVBRFNfUFJPR1JBTV9JRCxcbiAgICB9KTtcbiAgICByZXR1cm4gbXVsdGlzaWdQZGE7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplUGFyZW50REFPKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgcGFyZW50QWRtaW46IFB1YmxpY0tleSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYmFzZU1pbnQ6IFB1YmxpY0tleSxcbiAgICBxdW90ZU1pbnQ6IFB1YmxpY0tleSxcbiAgICB0cmVhc3VyeUNvc2lnbmVyOiBQdWJsaWNLZXksXG4gICAgcG9vbDogUHVibGljS2V5LFxuICAgIHBvb2xUeXBlOiBQb29sVHlwZSxcbiAgICBvcHRpb25zPzogVHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IFtkYW9QZGFdID0gdGhpcy5kZXJpdmVEQU9QREEobmFtZSk7XG4gICAgY29uc3QgW21vZGVyYXRvclBkYV0gPSB0aGlzLmRlcml2ZU1vZGVyYXRvclBEQShuYW1lKTtcbiAgICBjb25zdCBbbWludENyZWF0ZUtleVBkYV0gPSB0aGlzLmRlcml2ZU1pbnRDcmVhdGVLZXlQREEoZGFvUGRhLCBuYW1lKTtcblxuICAgIC8vIERlcml2ZSBTcXVhZHMgYWNjb3VudHMgKHNpbmdsZSBSUEMgY2FsbClcbiAgICBjb25zdCBzcXVhZHNDb25maWcgPSBhd2FpdCB0aGlzLmZldGNoU3F1YWRzUHJvZ3JhbUNvbmZpZygpO1xuICAgIGNvbnN0IHRyZWFzdXJ5TXVsdGlzaWdQZGEgPSB0aGlzLmRlcml2ZU11bHRpc2lnUGRhKGRhb1BkYSk7XG4gICAgY29uc3QgbWludE11bHRpc2lnUGRhID0gdGhpcy5kZXJpdmVNdWx0aXNpZ1BkYShtaW50Q3JlYXRlS2V5UGRhKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0aWFsaXplUGFyZW50REFPKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICBwYXJlbnRBZG1pbixcbiAgICAgIGRhb1BkYSxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICAgIGJhc2VNaW50LFxuICAgICAgcXVvdGVNaW50LFxuICAgICAgc3F1YWRzQ29uZmlnLnByb2dyYW1Db25maWcsXG4gICAgICBzcXVhZHNDb25maWcucHJvZ3JhbUNvbmZpZ1RyZWFzdXJ5LFxuICAgICAgdHJlYXN1cnlNdWx0aXNpZ1BkYSxcbiAgICAgIG1pbnRNdWx0aXNpZ1BkYSxcbiAgICAgIG1pbnRDcmVhdGVLZXlQZGEsXG4gICAgICBTUVVBRFNfUFJPR1JBTV9JRCxcbiAgICAgIG5hbWUsXG4gICAgICB0cmVhc3VyeUNvc2lnbmVyLFxuICAgICAgcG9vbCxcbiAgICAgIHBvb2xUeXBlXG4gICAgKS5wcmVJbnN0cnVjdGlvbnModGhpcy5tYXliZUFkZENvbXB1dGVCdWRnZXQob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBkYW9QZGEsXG4gICAgICBtb2RlcmF0b3JQZGEsXG4gICAgICB0cmVhc3VyeU11bHRpc2lnOiB0cmVhc3VyeU11bHRpc2lnUGRhLFxuICAgICAgbWludE11bHRpc2lnOiBtaW50TXVsdGlzaWdQZGEsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVDaGlsZERBTyhcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIHBhcmVudEFkbWluOiBQdWJsaWNLZXksXG4gICAgcGFyZW50RGFvTmFtZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgICB0cmVhc3VyeUNvc2lnbmVyOiBQdWJsaWNLZXksXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbZGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKG5hbWUpO1xuICAgIGNvbnN0IFtwYXJlbnREYW9QZGFdID0gdGhpcy5kZXJpdmVEQU9QREEocGFyZW50RGFvTmFtZSk7XG4gICAgY29uc3QgW21pbnRDcmVhdGVLZXlQZGFdID0gdGhpcy5kZXJpdmVNaW50Q3JlYXRlS2V5UERBKGRhb1BkYSwgbmFtZSk7XG5cbiAgICAvLyBEZXJpdmUgU3F1YWRzIGFjY291bnRzIChzaW5nbGUgUlBDIGNhbGwpXG4gICAgY29uc3Qgc3F1YWRzQ29uZmlnID0gYXdhaXQgdGhpcy5mZXRjaFNxdWFkc1Byb2dyYW1Db25maWcoKTtcbiAgICBjb25zdCB0cmVhc3VyeU11bHRpc2lnUGRhID0gdGhpcy5kZXJpdmVNdWx0aXNpZ1BkYShkYW9QZGEpO1xuICAgIGNvbnN0IG1pbnRNdWx0aXNpZ1BkYSA9IHRoaXMuZGVyaXZlTXVsdGlzaWdQZGEobWludENyZWF0ZUtleVBkYSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gaW5pdGlhbGl6ZUNoaWxkREFPKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICBwYXJlbnRBZG1pbixcbiAgICAgIGRhb1BkYSxcbiAgICAgIHBhcmVudERhb1BkYSxcbiAgICAgIHRva2VuTWludCxcbiAgICAgIHNxdWFkc0NvbmZpZy5wcm9ncmFtQ29uZmlnLFxuICAgICAgc3F1YWRzQ29uZmlnLnByb2dyYW1Db25maWdUcmVhc3VyeSxcbiAgICAgIHRyZWFzdXJ5TXVsdGlzaWdQZGEsXG4gICAgICBtaW50TXVsdGlzaWdQZGEsXG4gICAgICBtaW50Q3JlYXRlS2V5UGRhLFxuICAgICAgU1FVQURTX1BST0dSQU1fSUQsXG4gICAgICBuYW1lLFxuICAgICAgdHJlYXN1cnlDb3NpZ25lclxuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZGVyLFxuICAgICAgZGFvUGRhLFxuICAgICAgcGFyZW50RGFvUGRhLFxuICAgICAgdHJlYXN1cnlNdWx0aXNpZzogdHJlYXN1cnlNdWx0aXNpZ1BkYSxcbiAgICAgIG1pbnRNdWx0aXNpZzogbWludE11bHRpc2lnUGRhLFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGdyYWRlREFPKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgcGFyZW50QWRtaW46IFB1YmxpY0tleSxcbiAgICBkYW9OYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50RGFvTmFtZTogc3RyaW5nLFxuICAgIGJhc2VNaW50OiBQdWJsaWNLZXksXG4gICAgcXVvdGVNaW50OiBQdWJsaWNLZXksXG4gICAgcG9vbDogUHVibGljS2V5LFxuICAgIHBvb2xUeXBlOiBQb29sVHlwZSxcbiAgICBvcHRpb25zPzogVHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IFtkYW9QZGFdID0gdGhpcy5kZXJpdmVEQU9QREEoZGFvTmFtZSk7XG4gICAgY29uc3QgW3BhcmVudERhb1BkYV0gPSB0aGlzLmRlcml2ZURBT1BEQShwYXJlbnREYW9OYW1lKTtcbiAgICBjb25zdCBbbW9kZXJhdG9yUGRhXSA9IHRoaXMuZGVyaXZlTW9kZXJhdG9yUERBKGRhb05hbWUpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IHVwZ3JhZGVEQU8oXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIHBhcmVudEFkbWluLFxuICAgICAgZGFvUGRhLFxuICAgICAgcGFyZW50RGFvUGRhLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgYmFzZU1pbnQsXG4gICAgICBxdW90ZU1pbnQsXG4gICAgICBwb29sLFxuICAgICAgcG9vbFR5cGVcbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4geyBidWlsZGVyLCBkYW9QZGEsIG1vZGVyYXRvclBkYSB9O1xuICB9XG5cbiAgYXN5bmMgYWRkSGlzdG9yaWNhbFBhcmVudERBTyhcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBiYXNlTWludDogUHVibGljS2V5LFxuICAgIHF1b3RlTWludDogUHVibGljS2V5LFxuICAgIHRyZWFzdXJ5TXVsdGlzaWc6IFB1YmxpY0tleSxcbiAgICBtaW50QXV0aE11bHRpc2lnOiBQdWJsaWNLZXksXG4gICAgY29zaWduZXI6IFB1YmxpY0tleSxcbiAgICBwb29sOiBQdWJsaWNLZXksXG4gICAgcG9vbFR5cGU6IFBvb2xUeXBlLFxuICAgIHByb3Bvc2FsSWRDb3VudGVyOiBudW1iZXIsXG4gICAgYWRtaW5QdWJrZXk6IFB1YmxpY0tleSxcbiAgICBvcHRpb25zPzogVHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IFtkYW9QZGFdID0gdGhpcy5kZXJpdmVEQU9QREEobmFtZSk7XG4gICAgY29uc3QgW21vZGVyYXRvclBkYV0gPSB0aGlzLmRlcml2ZU1vZGVyYXRvclBEQShuYW1lKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBhZGRIaXN0b3JpY2FsUGFyZW50REFPKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICBkYW9QZGEsXG4gICAgICBtb2RlcmF0b3JQZGEsXG4gICAgICB0cmVhc3VyeU11bHRpc2lnLFxuICAgICAgbWludEF1dGhNdWx0aXNpZyxcbiAgICAgIGJhc2VNaW50LFxuICAgICAgcXVvdGVNaW50LFxuICAgICAgbmFtZSxcbiAgICAgIGNvc2lnbmVyLFxuICAgICAgcG9vbCxcbiAgICAgIHBvb2xUeXBlLFxuICAgICAgcHJvcG9zYWxJZENvdW50ZXIsXG4gICAgICBhZG1pblB1YmtleVxuICAgICkucHJlSW5zdHJ1Y3Rpb25zKHRoaXMubWF5YmVBZGRDb21wdXRlQnVkZ2V0KG9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZGVyLFxuICAgICAgZGFvUGRhLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgIH07XG4gIH1cblxuICBhc3luYyB0cmFuc2ZlckFkbWluKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld0FkbWluOiBQdWJsaWNLZXksXG4gICAgb3B0aW9ucz86IFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBbZGFvUGRhXSA9IHRoaXMuZGVyaXZlREFPUERBKG5hbWUpO1xuICAgIGNvbnN0IFttb2RlcmF0b3JQZGFdID0gdGhpcy5kZXJpdmVNb2RlcmF0b3JQREEobmFtZSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gdHJhbnNmZXJBZG1pbihcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGFkbWluLFxuICAgICAgZGFvUGRhLFxuICAgICAgbW9kZXJhdG9yUGRhLFxuICAgICAgbmV3QWRtaW5cbiAgICApLnByZUluc3RydWN0aW9ucyh0aGlzLm1heWJlQWRkQ29tcHV0ZUJ1ZGdldChvcHRpb25zKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVpbGRlcixcbiAgICAgIGRhb1BkYSxcbiAgICAgIG1vZGVyYXRvclBkYSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
package/dist/futarchy/utils.js
CHANGED
|
@@ -59,12 +59,12 @@ async function fetchProposalAccount(program, proposalPda) {
|
|
|
59
59
|
/* Proposal Helpers */
|
|
60
60
|
function isProposalExpired(proposal, currentTime) {
|
|
61
61
|
const now = currentTime ?? Math.floor(Date.now() / 1000);
|
|
62
|
-
const endTime = proposal.createdAt.toNumber() + proposal.config.length;
|
|
62
|
+
const endTime = proposal.createdAt.toNumber() + proposal.config.length * 60; // length is in minutes
|
|
63
63
|
return now >= endTime;
|
|
64
64
|
}
|
|
65
65
|
function getTimeRemaining(proposal, currentTime) {
|
|
66
66
|
const now = currentTime ?? Math.floor(Date.now() / 1000);
|
|
67
|
-
const endTime = proposal.createdAt.toNumber() + proposal.config.length;
|
|
67
|
+
const endTime = proposal.createdAt.toNumber() + proposal.config.length * 60; // length is in minutes
|
|
68
68
|
return Math.max(0, endTime - now);
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnV0YXJjaHkvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFTSCxvQ0FRQztBQUVELGdEQVFDO0FBRUQsOENBV0M7QUFFRCx3REFTQztBQUlELGdEQVlDO0FBSUQsMENBS0M7QUFFRCxzREFLQztBQUVELG9EQUtDO0FBSUQsOENBSUM7QUFFRCw0Q0FJQztBQXJHRCw2Q0FBNEM7QUFDNUMsMkNBQXdHO0FBQ3hHLG1DQUFpRztBQUVqRyxvQkFBb0I7QUFFcEIsU0FBZ0IsWUFBWSxDQUMxQixJQUFZLEVBQ1osWUFBdUIsc0JBQVU7SUFFakMsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLG9CQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUM3QixTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLFlBQXVCLHNCQUFVO0lBRWpDLE9BQU8sbUJBQVMsQ0FBQyxzQkFBc0IsQ0FDckMsQ0FBQywwQkFBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDbkMsU0FBUyxDQUNWLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLFNBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLFlBQXVCLHNCQUFVO0lBRWpDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLHlCQUFhLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixDQUFDLEVBQ3ZELFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHNCQUFzQixDQUNwQyxNQUFpQixFQUNqQixJQUFZLEVBQ1osWUFBdUIsc0JBQVU7SUFFakMsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxnQ0FBb0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzVELFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELGFBQWE7QUFFYixTQUFnQixrQkFBa0IsQ0FBQyxLQUFVO0lBQzNDLElBQUksT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLHFCQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxVQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQWEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsY0FBYztBQUVQLEtBQUssVUFBVSxlQUFlLENBQ25DLE9BQTBCLEVBQzFCLE1BQWlCO0lBRWpCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLE9BQTBCLEVBQzFCLFlBQXVCO0lBRXZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsT0FBMEIsRUFDMUIsV0FBc0I7SUFFdEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELHNCQUFzQjtBQUV0QixTQUFnQixpQkFBaUIsQ0FBQyxRQUF5QixFQUFFLFdBQW9CO0lBQy9FLE1BQU0sR0FBRyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtJQUNwRyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFFBQXlCLEVBQUUsV0FBb0I7SUFDOUUsTUFBTSxHQUFHLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsdUJBQXVCO0lBQ3BHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBGdXRhcmNoeSBwcm9ncmFtLlxuICogSW5jbHVkZXMgUERBIGRlcml2YXRpb24sIHBhcnNlcnMsIGFuZCBmZXRjaCBoZWxwZXJzLlxuICovXG5cbmltcG9ydCB7IFByb2dyYW0gfSBmcm9tIFwiQGNvcmFsLXh5ei9hbmNob3JcIjtcbmltcG9ydCB7IFB1YmxpY0tleSB9IGZyb20gXCJAc29sYW5hL3dlYjMuanNcIjtcbmltcG9ydCB7IERBT19TRUVELCBNT0RFUkFUT1JfU0VFRCwgUFJPUE9TQUxfU0VFRCwgTUlOVF9DUkVBVEVfS0VZX1NFRUQsIFBST0dSQU1fSUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZ1dGFyY2h5LCBEQU9BY2NvdW50LCBNb2RlcmF0b3JBY2NvdW50LCBQcm9wb3NhbEFjY291bnQsIFByb3Bvc2FsU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKiBQREEgRGVyaXZhdGlvbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlREFPUERBKFxuICBuYW1lOiBzdHJpbmcsXG4gIHByb2dyYW1JZDogUHVibGljS2V5ID0gUFJPR1JBTV9JRFxuKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gIHJldHVybiBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbREFPX1NFRUQsIEJ1ZmZlci5mcm9tKG5hbWUpXSxcbiAgICBwcm9ncmFtSWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZU1vZGVyYXRvclBEQShcbiAgbmFtZTogc3RyaW5nLFxuICBwcm9ncmFtSWQ6IFB1YmxpY0tleSA9IFBST0dSQU1fSURcbik6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICByZXR1cm4gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW01PREVSQVRPUl9TRUVELCBCdWZmZXIuZnJvbShuYW1lKV0sXG4gICAgcHJvZ3JhbUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVQcm9wb3NhbFBEQShcbiAgbW9kZXJhdG9yOiBQdWJsaWNLZXksXG4gIHByb3Bvc2FsSWQ6IG51bWJlcixcbiAgcHJvZ3JhbUlkOiBQdWJsaWNLZXkgPSBQUk9HUkFNX0lEXG4pOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgY29uc3QgcHJvcG9zYWxJZEJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgcHJvcG9zYWxJZEJ1ZmZlci53cml0ZVVJbnQxNkxFKHByb3Bvc2FsSWQpO1xuICByZXR1cm4gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW1BST1BPU0FMX1NFRUQsIG1vZGVyYXRvci50b0J1ZmZlcigpLCBwcm9wb3NhbElkQnVmZmVyXSxcbiAgICBwcm9ncmFtSWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZU1pbnRDcmVhdGVLZXlQREEoXG4gIGRhb1BkYTogUHVibGljS2V5LFxuICBuYW1lOiBzdHJpbmcsXG4gIHByb2dyYW1JZDogUHVibGljS2V5ID0gUFJPR1JBTV9JRFxuKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gIHJldHVybiBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbZGFvUGRhLnRvQnVmZmVyKCksIE1JTlRfQ1JFQVRFX0tFWV9TRUVELCBCdWZmZXIuZnJvbShuYW1lKV0sXG4gICAgcHJvZ3JhbUlkXG4gICk7XG59XG5cbi8qIFBhcnNlcnMgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvcG9zYWxTdGF0ZShzdGF0ZTogYW55KTogeyBzdGF0ZTogUHJvcG9zYWxTdGF0ZTsgd2lubmluZ0lkeDogbnVtYmVyIHwgbnVsbCB9IHtcbiAgaWYgKFwic2V0dXBcIiBpbiBzdGF0ZSkge1xuICAgIHJldHVybiB7IHN0YXRlOiBQcm9wb3NhbFN0YXRlLlNldHVwLCB3aW5uaW5nSWR4OiBudWxsIH07XG4gIH1cbiAgaWYgKFwicGVuZGluZ1wiIGluIHN0YXRlKSB7XG4gICAgcmV0dXJuIHsgc3RhdGU6IFByb3Bvc2FsU3RhdGUuUGVuZGluZywgd2lubmluZ0lkeDogbnVsbCB9O1xuICB9XG4gIGlmIChcInJlc29sdmVkXCIgaW4gc3RhdGUpIHtcbiAgICBjb25zdCB3aW5uaW5nSWR4ID0gc3RhdGUucmVzb2x2ZWRbMF0gPz8gc3RhdGUucmVzb2x2ZWQ7XG4gICAgcmV0dXJuIHsgc3RhdGU6IFByb3Bvc2FsU3RhdGUuUmVzb2x2ZWQsIHdpbm5pbmdJZHggfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByb3Bvc2FsIHN0YXRlXCIpO1xufVxuXG4vKiBGZXRjaGVycyAqL1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEQU9BY2NvdW50KFxuICBwcm9ncmFtOiBQcm9ncmFtPEZ1dGFyY2h5PixcbiAgZGFvUGRhOiBQdWJsaWNLZXlcbik6IFByb21pc2U8REFPQWNjb3VudD4ge1xuICByZXR1cm4gcHJvZ3JhbS5hY2NvdW50LmRhb0FjY291bnQuZmV0Y2goZGFvUGRhKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoTW9kZXJhdG9yQWNjb3VudChcbiAgcHJvZ3JhbTogUHJvZ3JhbTxGdXRhcmNoeT4sXG4gIG1vZGVyYXRvclBkYTogUHVibGljS2V5XG4pOiBQcm9taXNlPE1vZGVyYXRvckFjY291bnQ+IHtcbiAgcmV0dXJuIHByb2dyYW0uYWNjb3VudC5tb2RlcmF0b3JBY2NvdW50LmZldGNoKG1vZGVyYXRvclBkYSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByb3Bvc2FsQWNjb3VudChcbiAgcHJvZ3JhbTogUHJvZ3JhbTxGdXRhcmNoeT4sXG4gIHByb3Bvc2FsUGRhOiBQdWJsaWNLZXlcbik6IFByb21pc2U8UHJvcG9zYWxBY2NvdW50PiB7XG4gIHJldHVybiBwcm9ncmFtLmFjY291bnQucHJvcG9zYWxBY2NvdW50LmZldGNoKHByb3Bvc2FsUGRhKTtcbn1cblxuLyogUHJvcG9zYWwgSGVscGVycyAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wb3NhbEV4cGlyZWQocHJvcG9zYWw6IFByb3Bvc2FsQWNjb3VudCwgY3VycmVudFRpbWU/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgbm93ID0gY3VycmVudFRpbWUgPz8gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IGVuZFRpbWUgPSBwcm9wb3NhbC5jcmVhdGVkQXQudG9OdW1iZXIoKSArIHByb3Bvc2FsLmNvbmZpZy5sZW5ndGggKiA2MDsgLy8gbGVuZ3RoIGlzIGluIG1pbnV0ZXNcbiAgcmV0dXJuIG5vdyA+PSBlbmRUaW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVJlbWFpbmluZyhwcm9wb3NhbDogUHJvcG9zYWxBY2NvdW50LCBjdXJyZW50VGltZT86IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lID8/IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCBlbmRUaW1lID0gcHJvcG9zYWwuY3JlYXRlZEF0LnRvTnVtYmVyKCkgKyBwcm9wb3NhbC5jb25maWcubGVuZ3RoICogNjA7IC8vIGxlbmd0aCBpcyBpbiBtaW51dGVzXG4gIHJldHVybiBNYXRoLm1heCgwLCBlbmRUaW1lIC0gbm93KTtcbn1cbiJdfQ==
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export interface TxOptions {
|
|
2
2
|
includeCuBudget?: boolean;
|
|
3
3
|
computeUnits?: number;
|
|
4
|
+
/**
|
|
5
|
+
* Priority fee in microlamports per compute unit.
|
|
6
|
+
* If provided, adds a setComputeUnitPrice instruction to the transaction.
|
|
7
|
+
* Higher values increase likelihood of inclusion during network congestion.
|
|
8
|
+
*/
|
|
9
|
+
priorityFeeMicroLamports?: number;
|
|
4
10
|
/**
|
|
5
11
|
* Pre-create conditional token ATAs before launch to avoid exceeding
|
|
6
12
|
* Solana's 64 instruction trace limit. Default: true for 3+ options.
|
package/dist/utils.js
CHANGED
|
@@ -25,4 +25,4 @@ function getIdlConstant(idl, name) {
|
|
|
25
25
|
}
|
|
26
26
|
return constant.value;
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUF5Qkgsc0NBR0M7QUFNRCx3Q0FTQztBQXRCRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTtJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBYSxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixHQUEwRCxFQUMxRCxJQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2hhcmVkIHV0aWxpdGllcyBmb3IgcGFyc2luZyBJREwgdmFsdWVzIGFuZCBjb21tb24gdHlwZXMuXG4gKiBVc2VkIGFjcm9zcyBwcm9ncmFtIFNES3MuXG4gKi9cblxuLyogVHJhbnNhY3Rpb24gT3B0aW9ucyAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFR4T3B0aW9ucyB7XG4gIGluY2x1ZGVDdUJ1ZGdldD86IGJvb2xlYW47ICAvLyBJbmNsdWRlIGNvbXB1dGUgYnVkZ2V0IGluc3RydWN0aW9uIChkZWZhdWx0OiB0cnVlKVxuICBjb21wdXRlVW5pdHM/OiBudW1iZXI7ICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBjb21wdXRlIHVuaXRzXG4gIC8qKlxuICAgKiBQcmlvcml0eSBmZWUgaW4gbWljcm9sYW1wb3J0cyBwZXIgY29tcHV0ZSB1bml0LlxuICAgKiBJZiBwcm92aWRlZCwgYWRkcyBhIHNldENvbXB1dGVVbml0UHJpY2UgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBIaWdoZXIgdmFsdWVzIGluY3JlYXNlIGxpa2VsaWhvb2Qgb2YgaW5jbHVzaW9uIGR1cmluZyBuZXR3b3JrIGNvbmdlc3Rpb24uXG4gICAqL1xuICBwcmlvcml0eUZlZU1pY3JvTGFtcG9ydHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQcmUtY3JlYXRlIGNvbmRpdGlvbmFsIHRva2VuIEFUQXMgYmVmb3JlIGxhdW5jaCB0byBhdm9pZCBleGNlZWRpbmdcbiAgICogU29sYW5hJ3MgNjQgaW5zdHJ1Y3Rpb24gdHJhY2UgbGltaXQuIERlZmF1bHQ6IHRydWUgZm9yIDMrIG9wdGlvbnMuXG4gICAqIFNldCB0byBmYWxzZSBpZiB5b3UndmUgYWxyZWFkeSBjcmVhdGVkIEFUQXMgb3Igd2FudCB0byBtYW5hZ2UgdGhlbSBtYW51YWxseS5cbiAgICovXG4gIGVuc3VyZUFUQXM/OiBib29sZWFuO1xufVxuXG4vKlxuICogUGFyc2UgSURMIGJ5dGVzIHZhbHVlIHN0cmluZyB0byBCdWZmZXIuXG4gKiBlLmcuLCBcIls5OSwgMTA5LCAxMDUsIDExMCwgMTE2XVwiIOKGkiBCdWZmZXIuZnJvbShbOTksIDEwOSwgMTA1LCAxMTAsIDExNl0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlkbEJ5dGVzKHZhbHVlOiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBieXRlcyA9IEpTT04ucGFyc2UodmFsdWUpIGFzIG51bWJlcltdO1xuICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpO1xufVxuXG4vKlxuICogR2V0IGEgY29uc3RhbnQgZnJvbSBhbiBJREwgYnkgbmFtZS5cbiAqIFRocm93cyBpZiB0aGUgY29uc3RhbnQgaXMgbm90IGZvdW5kIChoZWxwcyBjYXRjaCBtaXNtYXRjaGVzIGFmdGVyIElETCBzeW5jKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkbENvbnN0YW50KFxuICBpZGw6IHsgY29uc3RhbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9LFxuICBuYW1lOiBzdHJpbmdcbikge1xuICBjb25zdCBjb25zdGFudCA9IGlkbC5jb25zdGFudHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lKTtcbiAgaWYgKCFjb25zdGFudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSURMIG1pc3NpbmcgY29uc3RhbnQ6ICR7bmFtZX1gKTtcbiAgfVxuICByZXR1cm4gY29uc3RhbnQudmFsdWU7XG59XG4iXX0=
|