@bitgo-beta/sdk-coin-sol 7.6.4-beta.650 → 7.6.4-beta.651
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/cjs/src/lib/ataInitializationBuilder.d.ts +12 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.js +23 -1
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/cjs/src/lib/instructionParamsFactory.js +24 -1
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +38 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/lib/ataInitializationBuilder.d.ts +12 -1
- package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -1
- package/dist/esm/lib/ataInitializationBuilder.js +23 -1
- package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/esm/lib/instructionParamsFactory.js +24 -1
- package/package.json +7 -7
|
@@ -893,6 +893,29 @@ function parseAtaInitInstructions(instructions, instructionMetadata, _useTokenAd
|
|
|
893
893
|
};
|
|
894
894
|
instructionData.push(ataInit);
|
|
895
895
|
break;
|
|
896
|
+
case constants_1.ValidInstructionTypesEnum.PermissionlessThawIdempotent:
|
|
897
|
+
const thawExtraAccounts = instruction.keys.slice(9).map((key) => ({
|
|
898
|
+
pubkey: key.pubkey.toString(),
|
|
899
|
+
isSigner: key.isSigner,
|
|
900
|
+
isWritable: key.isWritable,
|
|
901
|
+
}));
|
|
902
|
+
const permissionlessThaw = {
|
|
903
|
+
type: constants_1.InstructionBuilderTypes.PermissionlessThawIdempotent,
|
|
904
|
+
params: {
|
|
905
|
+
authority: instruction.keys[0].pubkey.toString(),
|
|
906
|
+
mint: instruction.keys[1].pubkey.toString(),
|
|
907
|
+
tokenAccount: instruction.keys[2].pubkey.toString(),
|
|
908
|
+
flagAccount: instruction.keys[3].pubkey.toString(),
|
|
909
|
+
tokenAccountOwner: instruction.keys[4].pubkey.toString(),
|
|
910
|
+
mintConfig: instruction.keys[5].pubkey.toString(),
|
|
911
|
+
tokenProgram: instruction.keys[6].pubkey.toString(),
|
|
912
|
+
systemProgram: instruction.keys[7].pubkey.toString(),
|
|
913
|
+
gatingProgram: instruction.keys[8].pubkey.toString(),
|
|
914
|
+
extraAccounts: thawExtraAccounts,
|
|
915
|
+
},
|
|
916
|
+
};
|
|
917
|
+
instructionData.push(permissionlessThaw);
|
|
918
|
+
break;
|
|
896
919
|
case constants_1.ValidInstructionTypesEnum.DepositSol:
|
|
897
920
|
// AtaInit is a part of spl-stake-pool's depositSol process
|
|
898
921
|
break;
|
|
@@ -1119,4 +1142,4 @@ function findTransferHookAccounts(fromAddress, toAddress, tokenAddress, instruct
|
|
|
1119
1142
|
});
|
|
1120
1143
|
return transferHookAccounts;
|
|
1121
1144
|
}
|
|
1122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFxRUEsNERBaUNDO0FBa3RDRCxzQ0FvQ0M7QUFFRCw0REFvQkM7QUFsM0NELGlEQVkyQjtBQUMzQiw2Q0FjeUI7QUFFekIsc0RBQXlEO0FBQ3pELG1EQUFxRTtBQUNyRSxpREFBcUQ7QUFDckQsb0RBQTRCO0FBQzVCLDJDQUErRztBQXlCL0csbUNBQTZDO0FBRTdDLHVFQUFrRjtBQUVsRjs7Ozs7O0dBTUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsSUFBcUIsRUFDckIsWUFBc0MsRUFDdEMsUUFBaUIsRUFDakIsbUJBQXlDLEVBQ3pDLHlCQUFtQztJQUVuQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSywwQkFBZSxDQUFDLG9CQUFvQjtZQUN2QyxPQUFPLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELEtBQUssMEJBQWUsQ0FBQyxJQUFJO1lBQ3ZCLE9BQU8scUJBQXFCLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDN0YsS0FBSywwQkFBZSxDQUFDLGVBQWU7WUFDbEMsT0FBTyxnQ0FBZ0MsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxLQUFLLDBCQUFlLENBQUMsaUJBQWlCO1lBQ3BDLE9BQU8sa0NBQWtDLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssMEJBQWUsQ0FBQyxlQUFlO1lBQ2xDLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsS0FBSywwQkFBZSxDQUFDLG9DQUFvQztZQUN2RCxPQUFPLHdCQUF3QixDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hHLEtBQUss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b0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlY29kZWRUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbixcbiAgZGVjb2RlVHJhbnNmZXJDaGVja2VkSW5zdHJ1Y3Rpb24sXG4gIGRlY29kZVRyYW5zZmVyQ2hlY2tlZFdpdGhGZWVJbnN0cnVjdGlvbixcbiAgRGVjb2RlZEJ1cm5JbnN0cnVjdGlvbixcbiAgZGVjb2RlQnVybkluc3RydWN0aW9uLFxuICBEZWNvZGVkTWludFRvSW5zdHJ1Y3Rpb24sXG4gIGRlY29kZU1pbnRUb0luc3RydWN0aW9uLFxuICBUT0tFTl8yMDIyX1BST0dSQU1fSUQsXG4gIGRlY29kZUFwcHJvdmVJbnN0cnVjdGlvbixcbiAgVG9rZW5JbnN0cnVjdGlvbixcbiAgVHJhbnNmZXJGZWVJbnN0cnVjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuaW1wb3J0IHtcbiAgQWxsb2NhdGVQYXJhbXMsXG4gIEFzc2lnblBhcmFtcyxcbiAgQ3JlYXRlQWNjb3VudFBhcmFtcyxcbiAgRGVhY3RpdmF0ZVN0YWtlUGFyYW1zLFxuICBEZWNvZGVkVHJhbnNmZXJJbnN0cnVjdGlvbixcbiAgRGVsZWdhdGVTdGFrZVBhcmFtcyxcbiAgSW5pdGlhbGl6ZVN0YWtlUGFyYW1zLFxuICBTcGxpdFN0YWtlUGFyYW1zLFxuICBTdGFrZUluc3RydWN0aW9uLFxuICBTdGFrZVByb2dyYW0sXG4gIFN5c3RlbUluc3RydWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5cbmltcG9ydCB7IFNvbFN0YWtpbmdUeXBlRW51bSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgU29sQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0sIHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBdGFDbG9zZSxcbiAgQXRhSW5pdCxcbiAgQXRhUmVjb3Zlck5lc3RlZCxcbiAgQnVybixcbiAgRXh0cmFBY2NvdW50TWV0YSxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE1pbnRUbyxcbiAgTm9uY2UsXG4gIFBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gIFN0YWtpbmdBY3RpdmF0ZSxcbiAgU3Rha2luZ0F1dGhvcml6ZSxcbiAgU3Rha2luZ0RlYWN0aXZhdGUsXG4gIFN0YWtpbmdEZWxlZ2F0ZSxcbiAgU3Rha2luZ1dpdGhkcmF3LFxuICBUb2tlblRyYW5zZmVyLFxuICBUcmFuc2ZlcixcbiAgV2FsbGV0SW5pdCxcbiAgU2V0Q29tcHV0ZVVuaXRMaW1pdCxcbiAgU2V0UHJpb3JpdHlGZWUsXG4gIEN1c3RvbUluc3RydWN0aW9uLFxuICBBcHByb3ZlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGdldEluc3RydWN0aW9uVHlwZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVwb3NpdFNvbFBhcmFtcywgV2l0aGRyYXdTdGFrZVBhcmFtcyB9IGZyb20gJ0Bzb2xhbmEvc3BsLXN0YWtlLXBvb2wnO1xuaW1wb3J0IHsgZGVjb2RlRGVwb3NpdFNvbCwgZGVjb2RlV2l0aGRyYXdTdGFrZSB9IGZyb20gJy4vaml0b1N0YWtlUG9vbE9wZXJhdGlvbnMnO1xuXG4vKipcbiAqIENvbnN0cnVjdCBpbnN0cnVjdGlvbnMgcGFyYW1zIGZyb20gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0eXBlIC0gdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBzb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgY29pbk5hbWU/OiBzdHJpbmcsXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lPzogYm9vbGVhblxuKTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgcmV0dXJuIHBhcnNlV2FsbGV0SW5pdEluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICByZXR1cm4gcGFyc2VTZW5kSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25NZXRhZGF0YSwgX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMsIGNvaW5OYW1lKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb246XG4gICAgICByZXR1cm4gcGFyc2VBdGFJbml0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25NZXRhZGF0YSwgX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgcmV0dXJuIHBhcnNlQXRhQ2xvc2VJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0F1dGhvcml6ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemVSYXc6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nQXV0aG9yaXplUmF3SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg6XG4gICAgICByZXR1cm4gcGFyc2VDdXN0b21JbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zLCBpbnN0cnVjdGlvbk1ldGFkYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnSW52YWxpZCB0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBXYWxsZXQgaW5pdGlhbGl6YXRpb24gdHggaW5zdHJ1Y3Rpb25zIHBhcmFtc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBjb250YWluaW5nIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBub25jZSBzb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIFdhbGxldCBpbml0aWFsaXphdGlvbiB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVdhbGxldEluaXRJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10pOiBBcnJheTxXYWxsZXRJbml0IHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PFdhbGxldEluaXQgfCBNZW1vPiA9IFtdO1xuICBjb25zdCBjcmVhdGVJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUNyZWF0ZUFjY291bnQoaW5zdHJ1Y3Rpb25zW3dhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMuQ3JlYXRlXSk7XG4gIGNvbnN0IG5vbmNlSW5pdEluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VJbml0aWFsaXplKFxuICAgIGluc3RydWN0aW9uc1t3YWxsZXRJbml0SW5zdHJ1Y3Rpb25JbmRleGVzLkluaXRpYWxpemVOb25jZUFjY291bnRdXG4gICk7XG5cbiAgY29uc3Qgd2FsbGV0SW5pdDogV2FsbGV0SW5pdCA9IHtcbiAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVOb25jZUFjY291bnQsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmcm9tQWRkcmVzczogY3JlYXRlSW5zdHJ1Y3Rpb24uZnJvbVB1YmtleS50b1N0cmluZygpLFxuICAgICAgbm9uY2VBZGRyZXNzOiBub25jZUluaXRJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgYXV0aEFkZHJlc3M6IG5vbmNlSW5pdEluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGFtb3VudDogY3JlYXRlSW5zdHJ1Y3Rpb24ubGFtcG9ydHMudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9O1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaCh3YWxsZXRJbml0KTtcblxuICBjb25zdCBtZW1vID0gZ2V0TWVtbyhpbnN0cnVjdGlvbnMsIHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMpO1xuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBTZW5kIHR4IGluc3RydWN0aW9ucyBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgTWVtbywgVHJhbnNmZXIgYW5kIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBTZW5kIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2VuZEluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lPzogYm9vbGVhblxuKTogQXJyYXk8XG4gIHwgTm9uY2VcbiAgfCBNZW1vXG4gIHwgVHJhbnNmZXJcbiAgfCBUb2tlblRyYW5zZmVyXG4gIHwgQXRhSW5pdFxuICB8IEF0YUNsb3NlXG4gIHwgU2V0Q29tcHV0ZVVuaXRMaW1pdFxuICB8IFNldFByaW9yaXR5RmVlXG4gIHwgTWludFRvXG4gIHwgQnVyblxuICB8IEFwcHJvdmVcbiAgfCBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50XG4+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxcbiAgICB8IE5vbmNlXG4gICAgfCBNZW1vXG4gICAgfCBUcmFuc2ZlclxuICAgIHwgVG9rZW5UcmFuc2ZlclxuICAgIHwgQXRhSW5pdFxuICAgIHwgQXRhQ2xvc2VcbiAgICB8IFNldENvbXB1dGVVbml0TGltaXRcbiAgICB8IFNldFByaW9yaXR5RmVlXG4gICAgfCBNaW50VG9cbiAgICB8IEJ1cm5cbiAgICB8IEFwcHJvdmVcbiAgICB8IFBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnRcbiAgPiA9IFtdO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIGNvbnN0IG1lbW86IE1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlRyYW5zZmVyOlxuICAgICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlVHJhbnNmZXIoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCB0cmFuc2ZlcjogVHJhbnNmZXIgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXIsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBmcm9tQWRkcmVzczogdHJhbnNmZXJJbnN0cnVjdGlvbi5mcm9tUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b0FkZHJlc3M6IHRyYW5zZmVySW5zdHJ1Y3Rpb24udG9QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnN0cnVjdGlvbi5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHRyYW5zZmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uVG9rZW5UcmFuc2ZlcjpcbiAgICAgICAgY29uc3QgaXNUb2tlbjIwMjJUcmFuc2ZlciA9IGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXNUcmFuc2ZlcldpdGhGZWUgPVxuICAgICAgICAgIGlzVG9rZW4yMDIyVHJhbnNmZXIgJiZcbiAgICAgICAgICBpbnN0cnVjdGlvbi5kYXRhLmxlbmd0aCA+PSAyICYmXG4gICAgICAgICAgaW5zdHJ1Y3Rpb24uZGF0YVswXSA9PT0gVG9rZW5JbnN0cnVjdGlvbi5UcmFuc2ZlckZlZUV4dGVuc2lvbiAmJlxuICAgICAgICAgIGluc3RydWN0aW9uLmRhdGFbMV0gPT09IFRyYW5zZmVyRmVlSW5zdHJ1Y3Rpb24uVHJhbnNmZXJDaGVja2VkV2l0aEZlZTtcbiAgICAgICAgbGV0IHR0S2V5czogRGVjb2RlZFRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uWydrZXlzJ107XG4gICAgICAgIGxldCB0dEFtb3VudDogYmlnaW50O1xuICAgICAgICBsZXQgdHREZWNpbWFsczogbnVtYmVyO1xuICAgICAgICBsZXQgdHRGZWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzVHJhbnNmZXJXaXRoRmVlKSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVRyYW5zZmVyQ2hlY2tlZFdpdGhGZWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcbiAgICAgICAgICAvLyBXaXRoRmVlIGV4cG9zZXMgYGF1dGhvcml0eWAgd2hlcmUgVHJhbnNmZXJDaGVja2VkIGV4cG9zZXMgYG93bmVyYDsgbm9ybWFsaXplIHRvIG93bmVyLlxuICAgICAgICAgIHR0S2V5cyA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogZGVjb2RlZC5rZXlzLnNvdXJjZSxcbiAgICAgICAgICAgIG1pbnQ6IGRlY29kZWQua2V5cy5taW50LFxuICAgICAgICAgICAgZGVzdGluYXRpb246IGRlY29kZWQua2V5cy5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIG93bmVyOiBkZWNvZGVkLmtleXMuYXV0aG9yaXR5LFxuICAgICAgICAgIH0gYXMgRGVjb2RlZFRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uWydrZXlzJ107XG4gICAgICAgICAgdHRBbW91bnQgPSBkZWNvZGVkLmRhdGEuYW1vdW50O1xuICAgICAgICAgIHR0RGVjaW1hbHMgPSBkZWNvZGVkLmRhdGEuZGVjaW1hbHM7XG4gICAgICAgICAgdHRGZWUgPSBkZWNvZGVkLmRhdGEuZmVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgICBpc1Rva2VuMjAyMlRyYW5zZmVyID8gVE9LRU5fMjAyMl9QUk9HUkFNX0lEIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0dEtleXMgPSBkZWNvZGVkLmtleXM7XG4gICAgICAgICAgdHRBbW91bnQgPSBkZWNvZGVkLmRhdGEuYW1vdW50O1xuICAgICAgICAgIHR0RGVjaW1hbHMgPSBkZWNvZGVkLmRhdGEuZGVjaW1hbHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gdHRLZXlzLm1pbnQucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9IGZpbmRUb2tlbk5hbWUodG9rZW5BZGRyZXNzLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JREZvclRva2VuVHJhbnNmZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZCkge1xuICAgICAgICAgIHByb2dyYW1JREZvclRva2VuVHJhbnNmZXIgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2Zlckhvb2tBY2NvdW50cyA9IGZpbmRUcmFuc2Zlckhvb2tBY2NvdW50cyhcbiAgICAgICAgICB0dEtleXMub3duZXIucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgdHRLZXlzLmRlc3RpbmF0aW9uLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBpbnN0cnVjdGlvbk1ldGFkYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRva2VuVHJhbnNmZXI6IFRva2VuVHJhbnNmZXIgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcixcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGZyb21BZGRyZXNzOiB0dEtleXMub3duZXIucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b0FkZHJlc3M6IHR0S2V5cy5kZXN0aW5hdGlvbi5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdHRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHR0S2V5cy5zb3VyY2UucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbkFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbUlERm9yVG9rZW5UcmFuc2ZlcixcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IHR0RGVjaW1hbHMsXG4gICAgICAgICAgICAuLi4odHRGZWUgIT09IHVuZGVmaW5lZCA/IHsgZmVlOiB0dEZlZSB9IDoge30pLFxuICAgICAgICAgICAgLi4uKHRyYW5zZmVySG9va0FjY291bnRzID8geyB0cmFuc2Zlckhvb2tBY2NvdW50cyB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHRva2VuVHJhbnNmZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BcHByb3ZlOlxuICAgICAgICBjb25zdCBwcm9ncmFtSWQgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQuZXF1YWxzKFRPS0VOXzIwMjJfUFJPR1JBTV9JRCkgPyBUT0tFTl8yMDIyX1BST0dSQU1fSUQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFwcHJvdmVJbnN0cnVjdGlvbiA9IGRlY29kZUFwcHJvdmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgcHJvZ3JhbUlkKTtcbiAgICAgICAgY29uc3QgYXBwcm92ZTogQXBwcm92ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHByb3ZlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgYWNjb3VudEFkZHJlc3M6IGFwcHJvdmVJbnN0cnVjdGlvbi5rZXlzLmFjY291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlbGVnYXRlQWRkcmVzczogYXBwcm92ZUluc3RydWN0aW9uLmtleXMuZGVsZWdhdGUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG93bmVyQWRkcmVzczogYXBwcm92ZUluc3RydWN0aW9uLmtleXMub3duZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogYXBwcm92ZUluc3RydWN0aW9uLmRhdGEuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9ncmFtSWQ6IHByb2dyYW1JZCAmJiBwcm9ncmFtSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChhcHByb3ZlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIGNvbnN0IG1pbnRBZGRyZXNzID0gaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5NaW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IG1pbnRUb2tlbk5hbWUgPSBmaW5kVG9rZW5OYW1lKG1pbnRBZGRyZXNzLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JRDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgcHJvZ3JhbUlEID0gaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdGFJbml0OiBBdGFJbml0ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgICAgIGF0YUFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuQVRBQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvd25lckFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuT3duZXJBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHBheWVyQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5QYXllckFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5OYW1lOiBtaW50VG9rZW5OYW1lLFxuICAgICAgICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtSUQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhSW5pdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWNjb3VudEFkZHJlc3MgPSBpbnN0cnVjdGlvbi5rZXlzW2Nsb3NlQXRhSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BY2NvdW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9XG4gICAgICAgICAgaW5zdHJ1Y3Rpb24ua2V5c1tjbG9zZUF0YUluc3RydWN0aW9uS2V5c0luZGV4ZXMuRGVzdGluYXRpb25BZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5QWRkcmVzcyA9IGluc3RydWN0aW9uLmtleXNbY2xvc2VBdGFJbnN0cnVjdGlvbktleXNJbmRleGVzLkF1dGhvcml0eUFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGF0YUNsb3NlOiBBdGFDbG9zZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhY2NvdW50QWRkcmVzcyxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhQ2xvc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TZXRDb21wdXRlVW5pdExpbWl0OlxuICAgICAgICBjb25zdCBzZXRDb21wdXRlVW5pdExpbWl0UGFyYW1zID0gQ29tcHV0ZUJ1ZGdldEluc3RydWN0aW9uLmRlY29kZVNldENvbXB1dGVVbml0TGltaXQoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBzZXRDb21wdXRlVW5pdExpbWl0OiBTZXRDb21wdXRlVW5pdExpbWl0ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB1bml0czogc2V0Q29tcHV0ZVVuaXRMaW1pdFBhcmFtcy51bml0cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChzZXRDb21wdXRlVW5pdExpbWl0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU2V0UHJpb3JpdHlGZWU6XG4gICAgICAgIGNvbnN0IHNldENvbXB1dGVVbml0UHJpY2VQYXJhbXMgPSBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24uZGVjb2RlU2V0Q29tcHV0ZVVuaXRQcmljZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IHNldFByaW9yaXR5RmVlOiBTZXRQcmlvcml0eUZlZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGZlZTogc2V0Q29tcHV0ZVVuaXRQcmljZVBhcmFtcy5taWNyb0xhbXBvcnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHNldFByaW9yaXR5RmVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uTWludFRvOlxuICAgICAgICBsZXQgbWludFRvSW5zdHJ1Y3Rpb246IERlY29kZWRNaW50VG9JbnN0cnVjdGlvbjtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpICE9PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgICAgICAgIG1pbnRUb0luc3RydWN0aW9uID0gZGVjb2RlTWludFRvSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pbnRUb0luc3RydWN0aW9uID0gZGVjb2RlTWludFRvSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWludEFkZHJlc3NGb3JNaW50ID0gbWludFRvSW5zdHJ1Y3Rpb24ua2V5cy5taW50LnB1YmtleS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCB0b2tlbk5hbWVGb3JNaW50ID0gZmluZFRva2VuTmFtZShtaW50QWRkcmVzc0Zvck1pbnQsIGluc3RydWN0aW9uTWV0YWRhdGEsIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUpO1xuICAgICAgICBsZXQgcHJvZ3JhbUlERm9yTWludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgcHJvZ3JhbUlERm9yTWludCA9IGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pbnRUbzogTWludFRvID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1pbnRUbyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG1pbnRBZGRyZXNzOiBtaW50QWRkcmVzc0Zvck1pbnQsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IG1pbnRUb0luc3RydWN0aW9uLmtleXMuZGVzdGluYXRpb24ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzOiBtaW50VG9JbnN0cnVjdGlvbi5rZXlzLmF1dGhvcml0eS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogbWludFRvSW5zdHJ1Y3Rpb24uZGF0YS5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lRm9yTWludCxcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbUlERm9yTWludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtaW50VG8pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5CdXJuOlxuICAgICAgICBsZXQgYnVybkluc3RydWN0aW9uOiBEZWNvZGVkQnVybkluc3RydWN0aW9uO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCkgIT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKSB7XG4gICAgICAgICAgYnVybkluc3RydWN0aW9uID0gZGVjb2RlQnVybkluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidXJuSW5zdHJ1Y3Rpb24gPSBkZWNvZGVCdXJuSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWludEFkZHJlc3NGb3JCdXJuID0gYnVybkluc3RydWN0aW9uLmtleXMubWludC5wdWJrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lRm9yQnVybiA9IGZpbmRUb2tlbk5hbWUobWludEFkZHJlc3NGb3JCdXJuLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JREZvckJ1cm46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZCkge1xuICAgICAgICAgIHByb2dyYW1JREZvckJ1cm4gPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidXJuOiBCdXJuID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkJ1cm4sXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzczogbWludEFkZHJlc3NGb3JCdXJuLFxuICAgICAgICAgICAgYWNjb3VudEFkZHJlc3M6IGJ1cm5JbnN0cnVjdGlvbi5rZXlzLmFjY291bnQucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzOiBidXJuSW5zdHJ1Y3Rpb24ua2V5cy5vd25lci5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogYnVybkluc3RydWN0aW9uLmRhdGEuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuTmFtZUZvckJ1cm4sXG4gICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBwcm9ncmFtSWQ6IHByb2dyYW1JREZvckJ1cm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYnVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQ6XG4gICAgICAgIC8vIEFjY291bnQgb3JkZXIgbWF0Y2hlcyB0aGUgZml4ZWQgbGF5b3V0IGVtaXR0ZWQgYnkgc29sSW5zdHJ1Y3Rpb25GYWN0b3J5OlxuICAgICAgICAvLyBbYXV0aG9yaXR5LCBtaW50LCB0b2tlbkFjY291bnQsIGZsYWdBY2NvdW50LCB0b2tlbkFjY291bnRPd25lciwgbWludENvbmZpZyxcbiAgICAgICAgLy8gIHRva2VuUHJvZ3JhbSwgc3lzdGVtUHJvZ3JhbSwgZ2F0aW5nUHJvZ3JhbSwgLi4uZXh0cmFBY2NvdW50c10uXG4gICAgICAgIGNvbnN0IHRoYXdFeHRyYUFjY291bnRzOiBFeHRyYUFjY291bnRNZXRhW10gPSBpbnN0cnVjdGlvbi5rZXlzLnNsaWNlKDkpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgIHB1YmtleToga2V5LnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGlzU2lnbmVyOiBrZXkuaXNTaWduZXIsXG4gICAgICAgICAgaXNXcml0YWJsZToga2V5LmlzV3JpdGFibGUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbmxlc3NUaGF3OiBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhdXRob3JpdHk6IGluc3RydWN0aW9uLmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtaW50OiBpbnN0cnVjdGlvbi5rZXlzWzFdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5BY2NvdW50OiBpbnN0cnVjdGlvbi5rZXlzWzJdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZmxhZ0FjY291bnQ6IGluc3RydWN0aW9uLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbkFjY291bnRPd25lcjogaW5zdHJ1Y3Rpb24ua2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1pbnRDb25maWc6IGluc3RydWN0aW9uLmtleXNbNV0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlblByb2dyYW06IGluc3RydWN0aW9uLmtleXNbNl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBpbnN0cnVjdGlvbi5rZXlzWzddLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZ2F0aW5nUHJvZ3JhbTogaW5zdHJ1Y3Rpb24ua2V5c1s4XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGV4dHJhQWNjb3VudHM6IHRoYXdFeHRyYUFjY291bnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHBlcm1pc3Npb25sZXNzVGhhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbiwgaW5zdHJ1Y3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG50eXBlIFN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7XG4gIGRlcG9zaXRTb2w/OiBEZXBvc2l0U29sUGFyYW1zO1xuICBjcmVhdGU/OiBDcmVhdGVBY2NvdW50UGFyYW1zO1xuICBpbml0aWFsaXplPzogSW5pdGlhbGl6ZVN0YWtlUGFyYW1zO1xuICBkZWxlZ2F0ZT86IERlbGVnYXRlU3Rha2VQYXJhbXM7XG4gIGhhc0F0YUluaXQ/OiBib29sZWFuO1xufTtcblxudHlwZSBKaXRvU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGRlcG9zaXRTb2w6IE5vbk51bGxhYmxlPFN0YWtpbmdJbnN0cnVjdGlvbnNbJ2RlcG9zaXRTb2wnXT47XG59O1xuXG5mdW5jdGlvbiBpc0ppdG9TdGFraW5nSW5zdHJ1Y3Rpb25zKHNpOiBTdGFraW5nSW5zdHJ1Y3Rpb25zKTogc2kgaXMgSml0b1N0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gc2kuZGVwb3NpdFNvbCAhPT0gdW5kZWZpbmVkO1xufVxuXG50eXBlIE1hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGNyZWF0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snY3JlYXRlJ10+O1xuICBpbml0aWFsaXplOiBOb25OdWxsYWJsZTxTdGFraW5nSW5zdHJ1Y3Rpb25zWydpbml0aWFsaXplJ10+O1xufTtcblxuZnVuY3Rpb24gaXNNYXJpbmFkZVN0YWtpbmdJbnN0cnVjdGlvbnMoc2k6IFN0YWtpbmdJbnN0cnVjdGlvbnMpOiBzaSBpcyBNYXJpbmFkZVN0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gc2kuY3JlYXRlICE9PSB1bmRlZmluZWQgJiYgc2kuaW5pdGlhbGl6ZSAhPT0gdW5kZWZpbmVkICYmIHNpLmRlbGVnYXRlID09PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTmF0aXZlU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGNyZWF0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snY3JlYXRlJ10+O1xuICBpbml0aWFsaXplOiBOb25OdWxsYWJsZTxTdGFraW5nSW5zdHJ1Y3Rpb25zWydpbml0aWFsaXplJ10+O1xuICBkZWxlZ2F0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snZGVsZWdhdGUnXT47XG59O1xuXG5mdW5jdGlvbiBpc05hdGl2ZVN0YWtpbmdJbnN0cnVjdGlvbnMoc2k6IFN0YWtpbmdJbnN0cnVjdGlvbnMpOiBzaSBpcyBOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHNpLmNyZWF0ZSAhPT0gdW5kZWZpbmVkICYmIHNpLmluaXRpYWxpemUgIT09IHVuZGVmaW5lZCAmJiBzaS5kZWxlZ2F0ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFraW5nVHlwZUZyb21TdGFraW5nSW5zdHJ1Y3Rpb25zKHNpOiBTdGFraW5nSW5zdHJ1Y3Rpb25zKTogU29sU3Rha2luZ1R5cGVFbnVtIHtcbiAgY29uc3QgaXNKaXRvID0gaXNKaXRvU3Rha2luZ0luc3RydWN0aW9ucyhzaSk7XG4gIGNvbnN0IGlzTWFyaW5hZGUgPSBpc01hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyhzaSk7XG4gIGNvbnN0IGlzTmF0aXZlID0gaXNOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zKHNpKTtcbiAgYXNzZXJ0KFtpc0ppdG8sIGlzTWFyaW5hZGUsIGlzTmF0aXZlXS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCA9PT0gMSwgJ1N0YWtpbmdUeXBlIGlzIGFtYmlndW91cycpO1xuICBpZiAoaXNKaXRvKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLkpJVE87XG4gIGlmIChpc01hcmluYWRlKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLk1BUklOQURFO1xuICBpZiAoaXNOYXRpdmUpIHJldHVybiBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFO1xuICBhc3NlcnQoZmFsc2UsICdObyBTdGFraW5nVHlwZSBmb3VuZCcpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBzdGFraW5nIHR4IGFuZCBkZWxlZ2F0ZSB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBTdGFraW5nQWN0aXZhdGUgYW5kIE1lbW8gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGFjdGl2YXRlIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXVxuKTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nQWN0aXZhdGUgfCBNZW1vIHwgQXRhSW5pdD4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0FjdGl2YXRlIHwgTWVtbyB8IEF0YUluaXQ+ID0gW107XG4gIGNvbnN0IHN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7fSBhcyBTdGFraW5nSW5zdHJ1Y3Rpb25zO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFkdmFuY2VOb25jZUFjY291bnQ6XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VBZHZhbmNlKGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgbm9uY2U6IE5vbmNlID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobm9uY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIGNvbnN0IG1lbW86IE1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5DcmVhdGU6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuY3JlYXRlID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQ3JlYXRlQWNjb3VudChpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU3Rha2luZ0luaXRpYWxpemU6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuaW5pdGlhbGl6ZSA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlSW5pdGlhbGl6ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgICBzdGFraW5nSW5zdHJ1Y3Rpb25zLmRlbGVnYXRlID0gU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVEZWxlZ2F0ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uRGVwb3NpdFNvbDpcbiAgICAgICAgc3Rha2luZ0luc3RydWN0aW9ucy5kZXBvc2l0U29sID0gZGVjb2RlRGVwb3NpdFNvbChpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuaGFzQXRhSW5pdCA9IHRydWU7XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbWludEFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuTWludEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXRhQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BVEFBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG93bmVyQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5Pd25lckFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgcGF5ZXJBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUluaXRJbnN0cnVjdGlvbktleXNJbmRleGVzLlBheWVyQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWUoaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5NaW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVN0YWtpbmdJbnN0cnVjdGlvbnMoc3Rha2luZ0luc3RydWN0aW9ucyk7XG4gIGNvbnN0IHN0YWtpbmdUeXBlID0gZ2V0U3Rha2luZ1R5cGVGcm9tU3Rha2luZ0luc3RydWN0aW9ucyhzdGFraW5nSW5zdHJ1Y3Rpb25zKTtcblxuICBsZXQgc3Rha2luZ0FjdGl2YXRlOiBTdGFraW5nQWN0aXZhdGUgfCB1bmRlZmluZWQ7XG5cbiAgc3dpdGNoIChzdGFraW5nVHlwZSkge1xuICAgIGNhc2UgU29sU3Rha2luZ1R5cGVFbnVtLkpJVE86IHtcbiAgICAgIGFzc2VydChpc0ppdG9TdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IHsgZGVwb3NpdFNvbCwgaGFzQXRhSW5pdCB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogZGVwb3NpdFNvbC5mdW5kaW5nQWNjb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBkZXBvc2l0U29sLnN0YWtlUG9vbC50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogZGVwb3NpdFNvbC5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIHZhbGlkYXRvcjogZGVwb3NpdFNvbC5zdGFrZVBvb2wudG9TdHJpbmcoKSxcbiAgICAgICAgICBleHRyYVBhcmFtczoge1xuICAgICAgICAgICAgc3Rha2VQb29sRGF0YToge1xuICAgICAgICAgICAgICBtYW5hZ2VyRmVlQWNjb3VudDogZGVwb3NpdFNvbC5tYW5hZ2VyRmVlQWNjb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgICBwb29sTWludDogZGVwb3NpdFNvbC5wb29sTWludC50b1N0cmluZygpLFxuICAgICAgICAgICAgICByZXNlcnZlU3Rha2U6IGRlcG9zaXRTb2wucmVzZXJ2ZVN0YWtlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDogISFoYXNBdGFJbml0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTUFSSU5BREU6IHtcbiAgICAgIGFzc2VydChpc01hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyhzdGFraW5nSW5zdHJ1Y3Rpb25zKSk7XG4gICAgICBjb25zdCB7IGNyZWF0ZSwgaW5pdGlhbGl6ZSB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogY3JlYXRlLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICBzdGFraW5nQWRkcmVzczogaW5pdGlhbGl6ZS5zdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogY3JlYXRlLmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsaWRhdG9yOiBpbml0aWFsaXplLmF1dGhvcml6ZWQuc3Rha2VyLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFOiB7XG4gICAgICBhc3NlcnQoaXNOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IHsgY3JlYXRlLCBpbml0aWFsaXplLCBkZWxlZ2F0ZSB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogY3JlYXRlLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICBzdGFraW5nQWRkcmVzczogaW5pdGlhbGl6ZS5zdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogY3JlYXRlLmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsaWRhdG9yOiBkZWxlZ2F0ZS52b3RlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgdW5yZWFjaGFibGU6IG5ldmVyID0gc3Rha2luZ1R5cGU7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3Rha2luZyB0eXBlICR7dW5yZWFjaGFibGV9YCk7XG4gICAgfVxuICB9XG5cbiAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goc3Rha2luZ0FjdGl2YXRlKTtcblxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBjcmVhdGUgZGVsZWdhdGUgdHhcbiAqIE9ubHkgc3VwcG9ydHMgTm9uY2UsIFN0YWtpbmdEZWxlZ2F0ZVxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGRlbGVnYXRlIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdKTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nRGVsZWdhdGU+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxOb25jZSB8IFN0YWtpbmdEZWxlZ2F0ZT4gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nRGVsZWdhdGU6XG4gICAgICAgIGNvbnN0IHN0YWtpbmdEZWxlZ2F0ZVBhcmFtcyA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlRGVsZWdhdGUoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBzdGFraW5nRGVsZWdhdGU6IFN0YWtpbmdEZWxlZ2F0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVsZWdhdGUsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBmcm9tQWRkcmVzczogc3Rha2luZ0RlbGVnYXRlUGFyYW1zLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBzdGFraW5nRGVsZWdhdGVQYXJhbXMuc3Rha2VQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcjogc3Rha2luZ0RlbGVnYXRlUGFyYW1zLnZvdGVQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChzdGFraW5nRGVsZWdhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnM6IFN0YWtpbmdJbnN0cnVjdGlvbnMpIHtcbiAgaWYgKHN0YWtpbmdJbnN0cnVjdGlvbnMuZGVsZWdhdGUgPT09IHVuZGVmaW5lZCAmJiBzdGFraW5nSW5zdHJ1Y3Rpb25zLmRlcG9zaXRTb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3Rha2luZ0luc3RydWN0aW9ucy5jcmVhdGUpIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdJbnZhbGlkIHN0YWtpbmcgYWN0aXZhdGUgdHJhbnNhY3Rpb24sIG1pc3NpbmcgY3JlYXRlIHN0YWtlIGFjY291bnQgaW5zdHJ1Y3Rpb24nKTtcbiAgfVxuXG4gIGlmICghc3Rha2luZ0luc3RydWN0aW9ucy5kZWxlZ2F0ZSAmJiAhc3Rha2luZ0luc3RydWN0aW9ucy5pbml0aWFsaXplKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICdJbnZhbGlkIHN0YWtpbmcgYWN0aXZhdGUgdHJhbnNhY3Rpb24sIG1pc3NpbmcgaW5pdGlhbGl6ZSBzdGFrZSBhY2NvdW50L2RlbGVnYXRlIGluc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbn1cblxudHlwZSBVbnN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7XG4gIGFsbG9jYXRlPzogQWxsb2NhdGVQYXJhbXM7XG4gIGFzc2lnbj86IEFzc2lnblBhcmFtcztcbiAgc3BsaXQ/OiBTcGxpdFN0YWtlUGFyYW1zO1xuICBkZWFjdGl2YXRlPzogRGVhY3RpdmF0ZVN0YWtlUGFyYW1zO1xuICB0cmFuc2Zlcj86IERlY29kZWRUcmFuc2Zlckluc3RydWN0aW9uO1xuICB3aXRoZHJhd1N0YWtlPzogV2l0aGRyYXdTdGFrZVBhcmFtcztcbn07XG5cbnR5cGUgSml0b1Vuc3Rha2luZ0luc3RydWN0aW9ucyA9IFVuc3Rha2luZ0luc3RydWN0aW9ucyAmIHtcbiAgd2l0aGRyYXdTdGFrZTogTm9uTnVsbGFibGU8VW5zdGFraW5nSW5zdHJ1Y3Rpb25zWyd3aXRoZHJhd1N0YWtlJ10+O1xufTtcblxuZnVuY3Rpb24gaXNKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpOiBVbnN0YWtpbmdJbnN0cnVjdGlvbnMpOiB1aSBpcyBKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHVpLndpdGhkcmF3U3Rha2UgIT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlICE9PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnMgPSBVbnN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIHRyYW5zZmVyOiBOb25OdWxsYWJsZTxVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ3RyYW5zZmVyJ10+O1xufTtcblxuZnVuY3Rpb24gaXNNYXJpbmFkZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogdWkgaXMgTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gdWkudHJhbnNmZXIgIT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlID09PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zID0gVW5zdGFraW5nSW5zdHJ1Y3Rpb25zICYge1xuICBkZWFjdGl2YXRlOiBOb25OdWxsYWJsZTxVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ2RlYWN0aXZhdGUnXT47XG4gIHNwbGl0OiBVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ3NwbGl0J107XG59O1xuXG5mdW5jdGlvbiBpc05hdGl2ZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogdWkgaXMgTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHVpLndpdGhkcmF3U3Rha2UgPT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YWtpbmdUeXBlRnJvbVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogU29sU3Rha2luZ1R5cGVFbnVtIHtcbiAgY29uc3QgaXNKaXRvID0gaXNKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpKTtcbiAgY29uc3QgaXNNYXJpbmFkZSA9IGlzTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModWkpO1xuICBjb25zdCBpc05hdGl2ZSA9IGlzTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpKTtcbiAgYXNzZXJ0KFtpc0ppdG8sIGlzTWFyaW5hZGUsIGlzTmF0aXZlXS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCA9PT0gMSwgJ1N0YWtpbmdUeXBlIGlzIGFtYmlndW91cycpO1xuICBpZiAoaXNKaXRvKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLkpJVE87XG4gIGlmIChpc01hcmluYWRlKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLk1BUklOQURFO1xuICBpZiAoaXNOYXRpdmUpIHJldHVybiBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFO1xuICBhc3NlcnQoZmFsc2UsICdObyBTdGFraW5nVHlwZSBmb3VuZCcpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBkZWFjdGl2YXRlIHN0YWtlIHR4IGluc3RydWN0aW9ucyBwYXJhbXMuIFN1cHBvcnRzIGZ1bGwgc3Rha2VcbiAqIGFjY291bnQgZGVhY3RpdmF0aW9uIGFuZCBwYXJ0aWFsIHN0YWtlIGFjY291bnQgZGVhY3RpdmF0aW9uLlxuICpcbiAqIFdoZW4gcGFydGlhbGx5IGRlYWN0aXZhdGluZyBhIHN0YWtlIGFjY291bnQgdGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uczogQWxsb2NhdGUsXG4gKiB0byBhbGxvY2F0ZSBhIG5ldyBzdGFraW5nIGFjY291bnQsIEFzc2lnbiwgdG8gYXNzaWduIHRoZSBuZXdseSBjcmVhdGVkIHN0YWtpbmcgYWNjb3VudCB0byB0aGVcbiAqIFN0YWtlIFByb2dyYW0sIFNwbGl0LCB0byBzcGxpdCB0aGUgY3VycmVudCBzdGFrZSBhY2NvdW50LCBhbmQgU3Rha2luZ0RlYWN0aXZhdGUgdG8gZGVhY3RpdmF0ZSB0aGVcbiAqIG5ld2x5IGNyZWF0ZWQgc3Rha2UgYWNjb3VudC5cbiAqXG4gKiBTdXBwb3J0cyBOb25jZSwgU3Rha2luZ0RlYWN0aXZhdGUsIE1lbW8sIEFsbG9jYXRlLCBBc3NpZ24sIGFuZCBTcGxpdCBTb2xhbmEgaW5zdHJ1Y3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGRlYWN0aXZhdGUgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gIGNvaW5OYW1lPzogc3RyaW5nXG4pOiBBcnJheTxOb25jZSB8IFN0YWtpbmdEZWFjdGl2YXRlIHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0RlYWN0aXZhdGUgfCBNZW1vPiA9IFtdO1xuICBjb25zdCB1bnN0YWtpbmdJbnN0cnVjdGlvbnM6IFVuc3Rha2luZ0luc3RydWN0aW9uc1tdID0gW107XG4gIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbik7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uTWVtbzpcbiAgICAgICAgY29uc3QgbWVtbzogTWVtbyA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgICAgIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobWVtbyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWxsb2NhdGU6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uYWxsb2NhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmFsbG9jYXRlID1cbiAgICAgICAgICAgIFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUFsbG9jYXRlKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBhbGxvY2F0ZTogU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQWxsb2NhdGUoaW5zdHJ1Y3Rpb24pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQXNzaWduOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmFzc2lnbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uYXNzaWduID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQXNzaWduKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBhc3NpZ246IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUFzc2lnbihpbnN0cnVjdGlvbiksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TcGxpdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5zcGxpdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uc3BsaXQgPSBTdGFrZUluc3RydWN0aW9uLmRlY29kZVNwbGl0KGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBzcGxpdDogU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVTcGxpdChpbnN0cnVjdGlvbiksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5kZWFjdGl2YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5kZWFjdGl2YXRlID1cbiAgICAgICAgICAgIFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlRGVhY3RpdmF0ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgZGVhY3RpdmF0ZTogU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVEZWFjdGl2YXRlKGluc3RydWN0aW9uKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlRyYW5zZmVyOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLnRyYW5zZmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS50cmFuc2ZlciA9XG4gICAgICAgICAgICBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVUcmFuc2ZlcihpbnN0cnVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgdHJhbnNmZXI6IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZVRyYW5zZmVyKGluc3RydWN0aW9uKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLldpdGhkcmF3U3Rha2U6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0ud2l0aGRyYXdTdGFrZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0ud2l0aGRyYXdTdGFrZSA9IGRlY29kZVdpdGhkcmF3U3Rha2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHdpdGhkcmF3U3Rha2U6IGRlY29kZVdpdGhkcmF3U3Rha2UoaW5zdHJ1Y3Rpb24pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdW5zdGFraW5nSW5zdHJ1Y3Rpb24gb2YgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zKSB7XG4gICAgdmFsaWRhdGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb24pO1xuICAgIGNvbnN0IHN0YWtpbmdUeXBlID0gZ2V0U3Rha2luZ1R5cGVGcm9tVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVuc3Rha2luZ0luc3RydWN0aW9uKTtcblxuICAgIGxldCBzdGFraW5nRGVhY3RpdmF0ZTogU3Rha2luZ0RlYWN0aXZhdGUgfCB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKHN0YWtpbmdUeXBlKSB7XG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPOiB7XG4gICAgICAgIGFzc2VydChpc0ppdG9VbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb24pKTtcbiAgICAgICAgY29uc3QgeyB3aXRoZHJhd1N0YWtlIH0gPSB1bnN0YWtpbmdJbnN0cnVjdGlvbjtcbiAgICAgICAgc3Rha2luZ0RlYWN0aXZhdGUgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGUsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICAgIGZyb21BZGRyZXNzOiB3aXRoZHJhd1N0YWtlLmRlc3RpbmF0aW9uU3Rha2VBdXRob3JpdHkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiB3aXRoZHJhd1N0YWtlLnN0YWtlUG9vbC50b1N0cmluZygpLFxuICAgICAgICAgICAgYW1vdW50OiB3aXRoZHJhd1N0YWtlLnBvb2xUb2tlbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHVuc3Rha2luZ0FkZHJlc3M6IHdpdGhkcmF3U3Rha2UuZGVzdGluYXRpb25TdGFrZS50b1N0cmluZygpLFxuICAgICAgICAgICAgZXh0cmFQYXJhbXM6IHtcbiAgICAgICAgICAgICAgc3Rha2VQb29sRGF0YToge1xuICAgICAgICAgICAgICAgIG1hbmFnZXJGZWVBY2NvdW50OiB3aXRoZHJhd1N0YWtlLm1hbmFnZXJGZWVBY2NvdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcG9vbE1pbnQ6IHdpdGhkcmF3U3Rha2UucG9vbE1pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JMaXN0QWNjb3VudDogd2l0aGRyYXdTdGFrZS52YWxpZGF0b3JMaXN0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IHdpdGhkcmF3U3Rha2UudmFsaWRhdG9yU3Rha2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgdHJhbnNmZXJBdXRob3JpdHlBZGRyZXNzOiB3aXRoZHJhd1N0YWtlLnNvdXJjZVRyYW5zZmVyQXV0aG9yaXR5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgICBhc3NlcnQoaXNNYXJpbmFkZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1bnN0YWtpbmdJbnN0cnVjdGlvbikpO1xuICAgICAgICBjb25zdCB7IHRyYW5zZmVyIH0gPSB1bnN0YWtpbmdJbnN0cnVjdGlvbjtcblxuICAgICAgICBzdGFraW5nRGVhY3RpdmF0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVhY3RpdmF0ZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHN0YWtpbmdUeXBlLFxuICAgICAgICAgICAgZnJvbUFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6ICcnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogdHJhbnNmZXIudG9QdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRyYW5zZmVyLmxhbXBvcnRzLnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5OQVRJVkU6IHtcbiAgICAgICAgYXNzZXJ0KGlzTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVuc3Rha2luZ0luc3RydWN0aW9uKSk7XG4gICAgICAgIGNvbnN0IHsgZGVhY3RpdmF0ZSwgc3BsaXQgfSA9IHVuc3Rha2luZ0luc3RydWN0aW9uO1xuICAgICAgICBzdGFraW5nRGVhY3RpdmF0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVhY3RpdmF0ZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHN0YWtpbmdUeXBlLFxuICAgICAgICAgICAgZnJvbUFkZHJlc3M6IGRlYWN0aXZhdGUuYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IHNwbGl0Py5zdGFrZVB1YmtleS50b1N0cmluZygpIHx8IGRlYWN0aXZhdGUuc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogc3BsaXQ/LmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB1bnN0YWtpbmdBZGRyZXNzOiBzcGxpdD8uc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHVucmVhY2hhYmxlOiBuZXZlciA9IHN0YWtpbmdUeXBlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3Rha2luZyB0eXBlICR7dW5yZWFjaGFibGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goc3Rha2luZ0RlYWN0aXZhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb25zOiBVbnN0YWtpbmdJbnN0cnVjdGlvbnMpIHtcbiAgLy8gQ2FzZXMgd2hlcmUgZXhhY3RseSBvbmUgZmllbGQgc2hvdWxkIGJlIHByZXNlbnRcbiAgY29uc3QgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5czogKGtleW9mIFVuc3Rha2luZ0luc3RydWN0aW9ucylbXSA9IFtcbiAgICAnYWxsb2NhdGUnLFxuICAgICdhc3NpZ24nLFxuICAgICdzcGxpdCcsXG4gICAgJ2RlYWN0aXZhdGUnLFxuICAgICd0cmFuc2ZlcicsXG4gIF0gYXMgY29uc3Q7XG4gIGlmICh1bnN0YWtpbmdJbnN0cnVjdGlvbnNLZXlzLmV2ZXJ5KChrKSA9PiAhIXVuc3Rha2luZ0luc3RydWN0aW9uc1trXSA9PT0gKGsgPT09ICd0cmFuc2ZlcicpKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5cy5ldmVyeSgoaykgPT4gISF1bnN0YWtpbmdJbnN0cnVjdGlvbnNba10gPT09IChrID09PSAnd2l0aGRyYXdTdGFrZScpKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5cy5ldmVyeSgoaykgPT4gISF1bnN0YWtpbmdJbnN0cnVjdGlvbnNba10gPT09IChrID09PSAnZGVhY3RpdmF0ZScpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENhc2VzIHdoZXJlIGRlYWN0aXZhdGUgZmllbGQgbXVzdCBiZSBwcmVzZW50IHdpdGggYW5vdGhlciBmaWVsZFxuICBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5kZWFjdGl2YXRlKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnSW52YWxpZCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtaXNzaW5nIGRlYWN0aXZhdGUgc3Rha2UgYWNjb3VudCBpbnN0cnVjdGlvbicpO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBhIHN0YWtlIHBvb2wgaW5zdHJ1Y3Rpb24sIG5vdCBhIHBhcnRpYWwgdW5zdGFrZVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zLndpdGhkcmF3U3Rha2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5hbGxvY2F0ZSkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIG1pc3NpbmcgYWxsb2NhdGUgdW5zdGFrZSBhY2NvdW50IGluc3RydWN0aW9uJ1xuICAgICk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5hc3NpZ24pIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdJbnZhbGlkIHBhcnRpYWwgZGVhY3RpdmF0ZSBzdGFrZSB0cmFuc2FjdGlvbiwgbWlzc2luZyBhc3NpZ24gdW5zdGFrZSBhY2NvdW50IGluc3RydWN0aW9uJyk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5zcGxpdCkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtaXNzaW5nIHNwbGl0IHN0YWtlIGFjY291bnQgaW5zdHJ1Y3Rpb24nKTtcbiAgfSBlbHNlIGlmIChcbiAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYWxsb2NhdGUuYWNjb3VudFB1YmtleS50b1N0cmluZygpICE9PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYXNzaWduLmFjY291bnRQdWJrZXkudG9TdHJpbmcoKVxuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKFxuICAgICAgJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtdXN0IGFsbG9jYXRlIGFuZCBhc3NpZ24gdGhlIHNhbWUgcHVibGljIGtleSdcbiAgICApO1xuICB9IGVsc2UgaWYgKHVuc3Rha2luZ0luc3RydWN0aW9ucy5hbGxvY2F0ZS5zcGFjZSAhPT0gU3Rha2VQcm9ncmFtLnNwYWNlKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgIGBJbnZhbGlkIHBhcnRpYWwgZGVhY3RpdmF0ZSBzdGFrZSB0cmFuc2FjdGlvbiwgdW5zdGFraW5nIGFjY291bnQgbXVzdCBhbGxvY2F0ZSAke1N0YWtlUHJvZ3JhbS5zcGFjZX0gYnl0ZXNgXG4gICAgKTtcbiAgfSBlbHNlIGlmICh1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYXNzaWduLnByb2dyYW1JZC50b1N0cmluZygpICE9PSBTdGFrZVByb2dyYW0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkpIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKFxuICAgICAgJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCB0aGUgdW5zdGFrZSBhY2NvdW50IG11c3QgYmUgYXNzaWduZWQgdG8gdGhlIFN0YWtlIFByb2dyYW0nXG4gICAgKTtcbiAgfSBlbHNlIGlmIChcbiAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYWxsb2NhdGUuYWNjb3VudFB1YmtleS50b1N0cmluZygpICE9PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuc3BsaXQuc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtdXN0IGFsbG9jYXRlIHRoZSB1bnN0YWtpbmcgYWNjb3VudCcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5zcGxpdC5zdGFrZVB1YmtleS50b1N0cmluZygpID09PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuc3BsaXQuc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIHRoZSB1bnN0YWtpbmcgYWNjb3VudCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBTdGFrZSBBY2NvdW50J1xuICAgICk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy50cmFuc2Zlcikge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIG1pc3NpbmcgZnVuZGluZyBvZiB1bnN0YWtlIGFkZHJlc3MgaW5zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBzdGFraW5nICB3aXRoZHJhdyB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBTdGFraW5nV2l0aGRyYXcsIGFuZCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyB3aXRoZHJhdyB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW11cbik6IEFycmF5PE5vbmNlIHwgU3Rha2luZ1dpdGhkcmF3IHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ1dpdGhkcmF3IHwgTWVtbz4gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NZW1vOlxuICAgICAgICBjb25zdCBtZW1vOiBNZW1vID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgICAgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uLmRhdGEudG9TdHJpbmcoKSB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3SW5zdHJ1Y3Rpb24gPSBTdGFrZUluc3RydWN0aW9uLmRlY29kZVdpdGhkcmF3KGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgc3Rha2luZ1dpdGhkcmF3OiBTdGFraW5nV2l0aGRyYXcgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgZnJvbUFkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogd2l0aGRyYXdJbnN0cnVjdGlvbi5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHN0YWtpbmdXaXRoZHJhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtZW1vIG9iamVjdCBmcm9tIGluc3RydWN0aW9ucyBpZiBpdCBleGlzdHNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGJlIHBhcnNlZFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSBpbnN0cnVjdGlvbkluZGV4ZXMgLSB0aGUgaW5zdHJ1Y3Rpb25zIGluZGV4ZXMgb2YgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtNZW1vIHwgdW5kZWZpbmVkfSAtIG1lbW8gb2JqZWN0IG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRNZW1vKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLCBpbnN0cnVjdGlvbkluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4pOiBNZW1vIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gT2JqZWN0LmtleXMoaW5zdHJ1Y3Rpb25JbmRleGVzKS5sZW5ndGg7XG4gIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID09PSBpbnN0cnVjdGlvbnNMZW5ndGggJiYgaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uSW5kZXhlcy5NZW1vXSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbkluZGV4ZXMuTWVtb10uZGF0YS50b1N0cmluZygpIH0sXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBhdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcyA9IHtcbiAgUGF5ZXJBZGRyZXNzOiAwLFxuICBBVEFBZGRyZXNzOiAxLFxuICBPd25lckFkZHJlc3M6IDIsXG4gIE1pbnRBZGRyZXNzOiAzLFxufTtcblxuY29uc3QgY2xvc2VBdGFJbnN0cnVjdGlvbktleXNJbmRleGVzID0ge1xuICBBY2NvdW50QWRkcmVzczogMCxcbiAgRGVzdGluYXRpb25BZGRyZXNzOiAxLFxuICBBdXRob3JpdHlBZGRyZXNzOiAyLFxufTtcblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBpbml0aWFsaXplIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGFuIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIFNlbmQgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdGFJbml0SW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgaW5zdHJ1Y3Rpb25NZXRhZGF0YT86IEluc3RydWN0aW9uUGFyYW1zW10sXG4gIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWU/OiBib29sZWFuXG4pOiBBcnJheTxBdGFJbml0IHwgTWVtbyB8IE5vbmNlPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8QXRhSW5pdCB8IE1lbW8gfCBOb25jZT4gPSBbXTtcbiAgbGV0IG1lbW86IE1lbW8gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NZW1vOlxuICAgICAgICBtZW1vID0geyB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLCBwYXJhbXM6IHsgbWVtbzogaW5zdHJ1Y3Rpb24uZGF0YS50b1N0cmluZygpIH0gfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkluaXRpYWxpemVBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICBjb25zdCBtaW50QWRkcmVzcyA9IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuTWludEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSBmaW5kVG9rZW5OYW1lKG1pbnRBZGRyZXNzLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JRDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgcHJvZ3JhbUlEID0gaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXRhSW5pdDogQXRhSW5pdCA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgICAgICBhdGFBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUluaXRJbnN0cnVjdGlvbktleXNJbmRleGVzLkFUQUFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgb3duZXJBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUluaXRJbnN0cnVjdGlvbktleXNJbmRleGVzLk93bmVyQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwYXllckFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuUGF5ZXJBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbUlELFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKGF0YUluaXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5EZXBvc2l0U29sOlxuICAgICAgICAvLyBBdGFJbml0IGlzIGEgcGFydCBvZiBzcGwtc3Rha2UtcG9vbCdzIGRlcG9zaXRTb2wgcHJvY2Vzc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb24sIGluc3RydWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZDogJyArIGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbilcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKG1lbW8pIHtcbiAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgfVxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG5jb25zdCBhdGFDbG9zZUluc3RydWN0aW9uS2V5c0luZGV4ZXMgPSB7XG4gIEFjY291bnRBZGRyZXNzOiAwLFxuICBEZXN0aW5hdGlvbkFkZHJlc3M6IDEsXG4gIEF1dGhvcml0eUFkZHJlc3M6IDIsXG59O1xuXG5jb25zdCBhdGFSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcyA9IHtcbiAgTmVzdGVkQWNjb3VudEFkZHJlc3M6IDAsXG4gIE5lc3RlZE1pbnRBZGRyZXNzOiAxLFxuICBEZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzOiAyLFxuICBPd25lckFjY291bnRBZGRyZXNzOiAzLFxuICBPd25lck1pbnRBZGRyZXNzOiA0LFxuICBXYWxsZXRBZGRyZXNzOiA1LFxufTtcblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBjbG9zZSBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgdHggaW5zdHJ1Y3Rpb25zIHBhcmFtc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBTZW5kIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXRhQ2xvc2VJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10pOiBBcnJheTxBdGFDbG9zZSB8IEF0YVJlY292ZXJOZXN0ZWQgfCBOb25jZT4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PEF0YUNsb3NlIHwgQXRhUmVjb3Zlck5lc3RlZCB8IE5vbmNlPiA9IFtdO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFkdmFuY2VOb25jZUFjY291bnQ6XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VBZHZhbmNlKGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgbm9uY2U6IE5vbmNlID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobm9uY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIGNvbnN0IGF0YUNsb3NlOiBBdGFDbG9zZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhY2NvdW50QWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFDbG9zZUluc3RydWN0aW9uS2V5c0luZGV4ZXMuQWNjb3VudEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUNsb3NlSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5EZXN0aW5hdGlvbkFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aG9yaXR5QWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFDbG9zZUluc3RydWN0aW9uS2V5c0luZGV4ZXMuQXV0aG9yaXR5QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhQ2xvc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5SZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgY29uc3QgYXRhUmVjb3Zlck5lc3RlZDogQXRhUmVjb3Zlck5lc3RlZCA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5SZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG5lc3RlZEFjY291bnRBZGRyZXNzOlxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5rZXlzW2F0YVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbktleXNJbmRleGVzLk5lc3RlZEFjY291bnRBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG5lc3RlZE1pbnRBZGRyZXNzOlxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5rZXlzW2F0YVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbktleXNJbmRleGVzLk5lc3RlZE1pbnRBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3M6XG4gICAgICAgICAgICAgIGluc3RydWN0aW9uLmtleXNbYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uS2V5c0luZGV4ZXMuRGVzdGluYXRpb25BY2NvdW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvd25lckFjY291bnRBZGRyZXNzOlxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5rZXlzW2F0YVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbktleXNJbmRleGVzLk93bmVyQWNjb3VudEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgb3duZXJNaW50QWRkcmVzczpcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ua2V5c1thdGFSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5Pd25lck1pbnRBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHdhbGxldEFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uS2V5c0luZGV4ZXMuV2FsbGV0QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhUmVjb3Zlck5lc3RlZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbiwgaW5zdHJ1Y3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGF1dGhvcml6ZWQgc3Rha2luZyBhY2NvdW50IHBhcmFtc1xuICogT25seSBzdXBwb3J0cyBOb25jZSwgQXV0aG9yaXplIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGF1dGhvcml6ZSB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWtpbmdBdXRob3JpemVJbnN0cnVjdGlvbnMoXG4gIGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdXG4pOiBBcnJheTxOb25jZSB8IFN0YWtpbmdBdXRob3JpemUgfCBNZW1vPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nQXV0aG9yaXplIHwgTWVtbz4gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NZW1vOlxuICAgICAgICBjb25zdCBtZW1vOiBNZW1vID0geyB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLCBwYXJhbXM6IHsgbWVtbzogaW5zdHJ1Y3Rpb24uZGF0YS50b1N0cmluZygpIH0gfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobWVtbyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQXV0aG9yaXplOlxuICAgICAgICBjb25zdCBhdXRob3JpemUgPSBTdGFrZUluc3RydWN0aW9uLmRlY29kZUF1dGhvcml6ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQXV0aG9yaXplLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IGF1dGhvcml6ZS5zdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgb2xkQXV0aG9yaXplQWRkcmVzczogYXV0aG9yaXplLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG5ld0F1dGhvcml6ZUFkZHJlc3M6IGF1dGhvcml6ZS5uZXdBdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBuZXdXaXRoZHJhd0FkZHJlc3M6IGF1dGhvcml6ZS5jdXN0b2RpYW5QdWJrZXk/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogUGFyc2VzIFNvbGFuYSBpbnN0cnVjdGlvbnMgdG8gYXV0aG9yaXplZCBzdGFraW5nIGFjY291bnQgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBBdXRob3JpemUgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGFuIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIHN0YWtpbmcgYXV0aG9yaXplIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0F1dGhvcml6ZVJhd0luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0F1dGhvcml6ZT4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0F1dGhvcml6ZT4gPSBbXTtcbiAgYXNzZXJ0KGluc3RydWN0aW9ucy5sZW5ndGggPT09IDIsICdJbnZhbGlkIG51bWJlciBvZiBpbnN0cnVjdGlvbnMnKTtcbiAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb25zWzBdKTtcbiAgY29uc3Qgbm9uY2U6IE5vbmNlID0ge1xuICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgfSxcbiAgfTtcbiAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobm9uY2UpO1xuICBjb25zdCBhdXRob3JpemUgPSBpbnN0cnVjdGlvbnNbMV07XG4gIGFzc2VydChhdXRob3JpemUua2V5cy5sZW5ndGggPT09IDUsICdJbnZhbGlkIG51bWJlciBvZiBrZXlzIGluIGF1dGhvcml6ZSBpbnN0cnVjdGlvbicpO1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaCh7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0F1dGhvcml6ZSxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YWtpbmdBZGRyZXNzOiBhdXRob3JpemUua2V5c1swXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIG9sZEF1dGhvcml6ZUFkZHJlc3M6IGF1dGhvcml6ZS5rZXlzWzJdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgbmV3QXV0aG9yaXplQWRkcmVzczogYXV0aG9yaXplLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICBjdXN0b2RpYW5BZGRyZXNzOiBhdXRob3JpemUua2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBjdXN0b20gaW5zdHJ1Y3Rpb24gcGFyYW1zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGNvbnRhaW5pbmcgY3VzdG9tIHNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEBwYXJhbSB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gaW5zdHJ1Y3Rpb25NZXRhZGF0YSAtIHRoZSBpbnN0cnVjdGlvbiBtZXRhZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIGN1c3RvbSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDdXN0b21JbnN0cnVjdGlvbnMoXG4gIGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLFxuICBpbnN0cnVjdGlvbk1ldGFkYXRhPzogSW5zdHJ1Y3Rpb25QYXJhbXNbXVxuKTogQ3VzdG9tSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQ3VzdG9tSW5zdHJ1Y3Rpb25bXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaV07XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIG1ldGFkYXRhIGZvciB0aGlzIGluc3RydWN0aW9uIHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgaW5zdHJ1Y3Rpb25NZXRhZGF0YSAmJlxuICAgICAgaW5zdHJ1Y3Rpb25NZXRhZGF0YVtpXSAmJlxuICAgICAgaW5zdHJ1Y3Rpb25NZXRhZGF0YVtpXS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DdXN0b21JbnN0cnVjdGlvblxuICAgICkge1xuICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goaW5zdHJ1Y3Rpb25NZXRhZGF0YVtpXSBhcyBDdXN0b21JbnN0cnVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIHJhdyBpbnN0cnVjdGlvbiB0byBDdXN0b21JbnN0cnVjdGlvbiBmb3JtYXRcbiAgICAgIGNvbnN0IGN1c3RvbUluc3RydWN0aW9uOiBDdXN0b21JbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3VzdG9tSW5zdHJ1Y3Rpb24sXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIHByb2dyYW1JZDogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAga2V5czogaW5zdHJ1Y3Rpb24ua2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIHB1YmtleToga2V5LnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgaXNTaWduZXI6IGtleS5pc1NpZ25lcixcbiAgICAgICAgICAgIGlzV3JpdGFibGU6IGtleS5pc1dyaXRhYmxlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBkYXRhOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChjdXN0b21JbnN0cnVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRUb2tlbk5hbWUoXG4gIG1pbnRBZGRyZXNzOiBzdHJpbmcsXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lPzogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29pbnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNvbENvaW4gJiYgdmFsdWUudG9rZW5BZGRyZXNzID09PSBtaW50QWRkcmVzcykge1xuICAgICAgdG9rZW4gPSB2YWx1ZS5uYW1lO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCF0b2tlbiAmJiBpbnN0cnVjdGlvbk1ldGFkYXRhKSB7XG4gICAgaW5zdHJ1Y3Rpb25NZXRhZGF0YS5mb3JFYWNoKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50ICYmXG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy5taW50QWRkcmVzcyA9PT0gbWludEFkZHJlc3NcbiAgICAgICkge1xuICAgICAgICB0b2tlbiA9IGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ub2tlblRyYW5zZmVyICYmXG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy50b2tlbkFkZHJlc3MgPT09IG1pbnRBZGRyZXNzXG4gICAgICApIHtcbiAgICAgICAgdG9rZW4gPSBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCF0b2tlbiAmJiBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKSB7XG4gICAgdG9rZW4gPSBtaW50QWRkcmVzcztcbiAgfVxuXG4gIGFzc2VydCh0b2tlbik7XG5cbiAgcmV0dXJuIHRva2VuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFRyYW5zZmVySG9va0FjY291bnRzKFxuICBmcm9tQWRkcmVzczogc3RyaW5nLFxuICB0b0FkZHJlc3M6IHN0cmluZyxcbiAgdG9rZW5BZGRyZXNzOiBzdHJpbmcsXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdXG4pOiBFeHRyYUFjY291bnRNZXRhW10gfCB1bmRlZmluZWQge1xuICBsZXQgdHJhbnNmZXJIb29rQWNjb3VudHM6IEV4dHJhQWNjb3VudE1ldGFbXSB8IHVuZGVmaW5lZDtcblxuICBpbnN0cnVjdGlvbk1ldGFkYXRhPy5mb3JFYWNoKChpbnN0cnVjdGlvbikgPT4ge1xuICAgIGlmIChcbiAgICAgIGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRva2VuVHJhbnNmZXIgJiZcbiAgICAgIGluc3RydWN0aW9uLnBhcmFtcy50b2tlbkFkZHJlc3MgPT09IHRva2VuQWRkcmVzcyAmJlxuICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLmZyb21BZGRyZXNzID09PSBmcm9tQWRkcmVzcyAmJlxuICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnRvQWRkcmVzcyA9PT0gdG9BZGRyZXNzXG4gICAgKSB7XG4gICAgICB0cmFuc2Zlckhvb2tBY2NvdW50cyA9IGluc3RydWN0aW9uLnBhcmFtcy50cmFuc2Zlckhvb2tBY2NvdW50cztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0cmFuc2Zlckhvb2tBY2NvdW50cztcbn1cbiJdfQ==
|
|
1145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFxRUEsNERBaUNDO0FBeXVDRCxzQ0FvQ0M7QUFFRCw0REFvQkM7QUF6NENELGlEQVkyQjtBQUMzQiw2Q0FjeUI7QUFFekIsc0RBQXlEO0FBQ3pELG1EQUFxRTtBQUNyRSxpREFBcUQ7QUFDckQsb0RBQTRCO0FBQzVCLDJDQUErRztBQXlCL0csbUNBQTZDO0FBRTdDLHVFQUFrRjtBQUVsRjs7Ozs7O0dBTUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsSUFBcUIsRUFDckIsWUFBc0MsRUFDdEMsUUFBaUIsRUFDakIsbUJBQXlDLEVBQ3pDLHlCQUFtQztJQUVuQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSywwQkFBZSxDQUFDLG9CQUFvQjtZQUN2QyxPQUFPLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELEtBQUssMEJBQWUsQ0FBQyxJQUFJO1lBQ3ZCLE9BQU8scUJBQXFCLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDN0YsS0FBSywwQkFBZSxDQUFDLGVBQWU7WUFDbEMsT0FBTyxnQ0FBZ0MsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxLQUFLLDBCQUFlLENBQUMsaUJBQWlCO1lBQ3BDLE9BQU8sa0NBQWtDLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssMEJBQWUsQ0FBQyxlQUFlO1lBQ2xDLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsS0FBSywwQkFBZSxDQUFDLG9DQUFvQztZQUN2RCxPQUFPLHdCQUF3QixDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hHLEtBQUss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QUFFO1FBQzNDLElBQ0UsV0FBVyxDQUFDLElBQUksS0FBSyxtQ0FBdUIsQ0FBQyxhQUFhO1lBQzFELFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLFlBQVk7WUFDaEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVztZQUM5QyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQzFDLENBQUM7WUFDRCxvQkFBb0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlY29kZWRUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbixcbiAgZGVjb2RlVHJhbnNmZXJDaGVja2VkSW5zdHJ1Y3Rpb24sXG4gIGRlY29kZVRyYW5zZmVyQ2hlY2tlZFdpdGhGZWVJbnN0cnVjdGlvbixcbiAgRGVjb2RlZEJ1cm5JbnN0cnVjdGlvbixcbiAgZGVjb2RlQnVybkluc3RydWN0aW9uLFxuICBEZWNvZGVkTWludFRvSW5zdHJ1Y3Rpb24sXG4gIGRlY29kZU1pbnRUb0luc3RydWN0aW9uLFxuICBUT0tFTl8yMDIyX1BST0dSQU1fSUQsXG4gIGRlY29kZUFwcHJvdmVJbnN0cnVjdGlvbixcbiAgVG9rZW5JbnN0cnVjdGlvbixcbiAgVHJhbnNmZXJGZWVJbnN0cnVjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuaW1wb3J0IHtcbiAgQWxsb2NhdGVQYXJhbXMsXG4gIEFzc2lnblBhcmFtcyxcbiAgQ3JlYXRlQWNjb3VudFBhcmFtcyxcbiAgRGVhY3RpdmF0ZVN0YWtlUGFyYW1zLFxuICBEZWNvZGVkVHJhbnNmZXJJbnN0cnVjdGlvbixcbiAgRGVsZWdhdGVTdGFrZVBhcmFtcyxcbiAgSW5pdGlhbGl6ZVN0YWtlUGFyYW1zLFxuICBTcGxpdFN0YWtlUGFyYW1zLFxuICBTdGFrZUluc3RydWN0aW9uLFxuICBTdGFrZVByb2dyYW0sXG4gIFN5c3RlbUluc3RydWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5cbmltcG9ydCB7IFNvbFN0YWtpbmdUeXBlRW51bSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgU29sQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0sIHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBdGFDbG9zZSxcbiAgQXRhSW5pdCxcbiAgQXRhUmVjb3Zlck5lc3RlZCxcbiAgQnVybixcbiAgRXh0cmFBY2NvdW50TWV0YSxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE1pbnRUbyxcbiAgTm9uY2UsXG4gIFBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gIFN0YWtpbmdBY3RpdmF0ZSxcbiAgU3Rha2luZ0F1dGhvcml6ZSxcbiAgU3Rha2luZ0RlYWN0aXZhdGUsXG4gIFN0YWtpbmdEZWxlZ2F0ZSxcbiAgU3Rha2luZ1dpdGhkcmF3LFxuICBUb2tlblRyYW5zZmVyLFxuICBUcmFuc2ZlcixcbiAgV2FsbGV0SW5pdCxcbiAgU2V0Q29tcHV0ZVVuaXRMaW1pdCxcbiAgU2V0UHJpb3JpdHlGZWUsXG4gIEN1c3RvbUluc3RydWN0aW9uLFxuICBBcHByb3ZlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGdldEluc3RydWN0aW9uVHlwZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVwb3NpdFNvbFBhcmFtcywgV2l0aGRyYXdTdGFrZVBhcmFtcyB9IGZyb20gJ0Bzb2xhbmEvc3BsLXN0YWtlLXBvb2wnO1xuaW1wb3J0IHsgZGVjb2RlRGVwb3NpdFNvbCwgZGVjb2RlV2l0aGRyYXdTdGFrZSB9IGZyb20gJy4vaml0b1N0YWtlUG9vbE9wZXJhdGlvbnMnO1xuXG4vKipcbiAqIENvbnN0cnVjdCBpbnN0cnVjdGlvbnMgcGFyYW1zIGZyb20gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0eXBlIC0gdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBzb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgY29pbk5hbWU/OiBzdHJpbmcsXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lPzogYm9vbGVhblxuKTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgcmV0dXJuIHBhcnNlV2FsbGV0SW5pdEluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICByZXR1cm4gcGFyc2VTZW5kSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25NZXRhZGF0YSwgX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMsIGNvaW5OYW1lKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb246XG4gICAgICByZXR1cm4gcGFyc2VBdGFJbml0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25NZXRhZGF0YSwgX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgcmV0dXJuIHBhcnNlQXRhQ2xvc2VJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0F1dGhvcml6ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemVSYXc6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nQXV0aG9yaXplUmF3SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg6XG4gICAgICByZXR1cm4gcGFyc2VDdXN0b21JbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zLCBpbnN0cnVjdGlvbk1ldGFkYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnSW52YWxpZCB0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBXYWxsZXQgaW5pdGlhbGl6YXRpb24gdHggaW5zdHJ1Y3Rpb25zIHBhcmFtc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBjb250YWluaW5nIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBub25jZSBzb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIFdhbGxldCBpbml0aWFsaXphdGlvbiB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVdhbGxldEluaXRJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10pOiBBcnJheTxXYWxsZXRJbml0IHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PFdhbGxldEluaXQgfCBNZW1vPiA9IFtdO1xuICBjb25zdCBjcmVhdGVJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUNyZWF0ZUFjY291bnQoaW5zdHJ1Y3Rpb25zW3dhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMuQ3JlYXRlXSk7XG4gIGNvbnN0IG5vbmNlSW5pdEluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VJbml0aWFsaXplKFxuICAgIGluc3RydWN0aW9uc1t3YWxsZXRJbml0SW5zdHJ1Y3Rpb25JbmRleGVzLkluaXRpYWxpemVOb25jZUFjY291bnRdXG4gICk7XG5cbiAgY29uc3Qgd2FsbGV0SW5pdDogV2FsbGV0SW5pdCA9IHtcbiAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVOb25jZUFjY291bnQsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmcm9tQWRkcmVzczogY3JlYXRlSW5zdHJ1Y3Rpb24uZnJvbVB1YmtleS50b1N0cmluZygpLFxuICAgICAgbm9uY2VBZGRyZXNzOiBub25jZUluaXRJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgYXV0aEFkZHJlc3M6IG5vbmNlSW5pdEluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGFtb3VudDogY3JlYXRlSW5zdHJ1Y3Rpb24ubGFtcG9ydHMudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9O1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaCh3YWxsZXRJbml0KTtcblxuICBjb25zdCBtZW1vID0gZ2V0TWVtbyhpbnN0cnVjdGlvbnMsIHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMpO1xuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBTZW5kIHR4IGluc3RydWN0aW9ucyBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgTWVtbywgVHJhbnNmZXIgYW5kIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBTZW5kIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2VuZEluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lPzogYm9vbGVhblxuKTogQXJyYXk8XG4gIHwgTm9uY2VcbiAgfCBNZW1vXG4gIHwgVHJhbnNmZXJcbiAgfCBUb2tlblRyYW5zZmVyXG4gIHwgQXRhSW5pdFxuICB8IEF0YUNsb3NlXG4gIHwgU2V0Q29tcHV0ZVVuaXRMaW1pdFxuICB8IFNldFByaW9yaXR5RmVlXG4gIHwgTWludFRvXG4gIHwgQnVyblxuICB8IEFwcHJvdmVcbiAgfCBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50XG4+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxcbiAgICB8IE5vbmNlXG4gICAgfCBNZW1vXG4gICAgfCBUcmFuc2ZlclxuICAgIHwgVG9rZW5UcmFuc2ZlclxuICAgIHwgQXRhSW5pdFxuICAgIHwgQXRhQ2xvc2VcbiAgICB8IFNldENvbXB1dGVVbml0TGltaXRcbiAgICB8IFNldFByaW9yaXR5RmVlXG4gICAgfCBNaW50VG9cbiAgICB8IEJ1cm5cbiAgICB8IEFwcHJvdmVcbiAgICB8IFBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnRcbiAgPiA9IFtdO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIGNvbnN0IG1lbW86IE1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlRyYW5zZmVyOlxuICAgICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlVHJhbnNmZXIoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCB0cmFuc2ZlcjogVHJhbnNmZXIgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXIsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBmcm9tQWRkcmVzczogdHJhbnNmZXJJbnN0cnVjdGlvbi5mcm9tUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b0FkZHJlc3M6IHRyYW5zZmVySW5zdHJ1Y3Rpb24udG9QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnN0cnVjdGlvbi5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHRyYW5zZmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uVG9rZW5UcmFuc2ZlcjpcbiAgICAgICAgY29uc3QgaXNUb2tlbjIwMjJUcmFuc2ZlciA9IGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXNUcmFuc2ZlcldpdGhGZWUgPVxuICAgICAgICAgIGlzVG9rZW4yMDIyVHJhbnNmZXIgJiZcbiAgICAgICAgICBpbnN0cnVjdGlvbi5kYXRhLmxlbmd0aCA+PSAyICYmXG4gICAgICAgICAgaW5zdHJ1Y3Rpb24uZGF0YVswXSA9PT0gVG9rZW5JbnN0cnVjdGlvbi5UcmFuc2ZlckZlZUV4dGVuc2lvbiAmJlxuICAgICAgICAgIGluc3RydWN0aW9uLmRhdGFbMV0gPT09IFRyYW5zZmVyRmVlSW5zdHJ1Y3Rpb24uVHJhbnNmZXJDaGVja2VkV2l0aEZlZTtcbiAgICAgICAgbGV0IHR0S2V5czogRGVjb2RlZFRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uWydrZXlzJ107XG4gICAgICAgIGxldCB0dEFtb3VudDogYmlnaW50O1xuICAgICAgICBsZXQgdHREZWNpbWFsczogbnVtYmVyO1xuICAgICAgICBsZXQgdHRGZWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzVHJhbnNmZXJXaXRoRmVlKSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVRyYW5zZmVyQ2hlY2tlZFdpdGhGZWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcbiAgICAgICAgICAvLyBXaXRoRmVlIGV4cG9zZXMgYGF1dGhvcml0eWAgd2hlcmUgVHJhbnNmZXJDaGVja2VkIGV4cG9zZXMgYG93bmVyYDsgbm9ybWFsaXplIHRvIG93bmVyLlxuICAgICAgICAgIHR0S2V5cyA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogZGVjb2RlZC5rZXlzLnNvdXJjZSxcbiAgICAgICAgICAgIG1pbnQ6IGRlY29kZWQua2V5cy5taW50LFxuICAgICAgICAgICAgZGVzdGluYXRpb246IGRlY29kZWQua2V5cy5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIG93bmVyOiBkZWNvZGVkLmtleXMuYXV0aG9yaXR5LFxuICAgICAgICAgIH0gYXMgRGVjb2RlZFRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uWydrZXlzJ107XG4gICAgICAgICAgdHRBbW91bnQgPSBkZWNvZGVkLmRhdGEuYW1vdW50O1xuICAgICAgICAgIHR0RGVjaW1hbHMgPSBkZWNvZGVkLmRhdGEuZGVjaW1hbHM7XG4gICAgICAgICAgdHRGZWUgPSBkZWNvZGVkLmRhdGEuZmVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgICBpc1Rva2VuMjAyMlRyYW5zZmVyID8gVE9LRU5fMjAyMl9QUk9HUkFNX0lEIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0dEtleXMgPSBkZWNvZGVkLmtleXM7XG4gICAgICAgICAgdHRBbW91bnQgPSBkZWNvZGVkLmRhdGEuYW1vdW50O1xuICAgICAgICAgIHR0RGVjaW1hbHMgPSBkZWNvZGVkLmRhdGEuZGVjaW1hbHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gdHRLZXlzLm1pbnQucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9IGZpbmRUb2tlbk5hbWUodG9rZW5BZGRyZXNzLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JREZvclRva2VuVHJhbnNmZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZCkge1xuICAgICAgICAgIHByb2dyYW1JREZvclRva2VuVHJhbnNmZXIgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2Zlckhvb2tBY2NvdW50cyA9IGZpbmRUcmFuc2Zlckhvb2tBY2NvdW50cyhcbiAgICAgICAgICB0dEtleXMub3duZXIucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgdHRLZXlzLmRlc3RpbmF0aW9uLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBpbnN0cnVjdGlvbk1ldGFkYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRva2VuVHJhbnNmZXI6IFRva2VuVHJhbnNmZXIgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcixcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGZyb21BZGRyZXNzOiB0dEtleXMub3duZXIucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b0FkZHJlc3M6IHR0S2V5cy5kZXN0aW5hdGlvbi5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdHRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHR0S2V5cy5zb3VyY2UucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbkFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbUlERm9yVG9rZW5UcmFuc2ZlcixcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IHR0RGVjaW1hbHMsXG4gICAgICAgICAgICAuLi4odHRGZWUgIT09IHVuZGVmaW5lZCA/IHsgZmVlOiB0dEZlZSB9IDoge30pLFxuICAgICAgICAgICAgLi4uKHRyYW5zZmVySG9va0FjY291bnRzID8geyB0cmFuc2Zlckhvb2tBY2NvdW50cyB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHRva2VuVHJhbnNmZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BcHByb3ZlOlxuICAgICAgICBjb25zdCBwcm9ncmFtSWQgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQuZXF1YWxzKFRPS0VOXzIwMjJfUFJPR1JBTV9JRCkgPyBUT0tFTl8yMDIyX1BST0dSQU1fSUQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFwcHJvdmVJbnN0cnVjdGlvbiA9IGRlY29kZUFwcHJvdmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgcHJvZ3JhbUlkKTtcbiAgICAgICAgY29uc3QgYXBwcm92ZTogQXBwcm92ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHByb3ZlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgYWNjb3VudEFkZHJlc3M6IGFwcHJvdmVJbnN0cnVjdGlvbi5rZXlzLmFjY291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlbGVnYXRlQWRkcmVzczogYXBwcm92ZUluc3RydWN0aW9uLmtleXMuZGVsZWdhdGUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG93bmVyQWRkcmVzczogYXBwcm92ZUluc3RydWN0aW9uLmtleXMub3duZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogYXBwcm92ZUluc3RydWN0aW9uLmRhdGEuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9ncmFtSWQ6IHByb2dyYW1JZCAmJiBwcm9ncmFtSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChhcHByb3ZlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIGNvbnN0IG1pbnRBZGRyZXNzID0gaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5NaW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IG1pbnRUb2tlbk5hbWUgPSBmaW5kVG9rZW5OYW1lKG1pbnRBZGRyZXNzLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JRDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgcHJvZ3JhbUlEID0gaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdGFJbml0OiBBdGFJbml0ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgICAgIGF0YUFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuQVRBQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvd25lckFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuT3duZXJBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHBheWVyQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5QYXllckFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5OYW1lOiBtaW50VG9rZW5OYW1lLFxuICAgICAgICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtSUQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhSW5pdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWNjb3VudEFkZHJlc3MgPSBpbnN0cnVjdGlvbi5rZXlzW2Nsb3NlQXRhSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BY2NvdW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9XG4gICAgICAgICAgaW5zdHJ1Y3Rpb24ua2V5c1tjbG9zZUF0YUluc3RydWN0aW9uS2V5c0luZGV4ZXMuRGVzdGluYXRpb25BZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5QWRkcmVzcyA9IGluc3RydWN0aW9uLmtleXNbY2xvc2VBdGFJbnN0cnVjdGlvbktleXNJbmRleGVzLkF1dGhvcml0eUFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGF0YUNsb3NlOiBBdGFDbG9zZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhY2NvdW50QWRkcmVzcyxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhQ2xvc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TZXRDb21wdXRlVW5pdExpbWl0OlxuICAgICAgICBjb25zdCBzZXRDb21wdXRlVW5pdExpbWl0UGFyYW1zID0gQ29tcHV0ZUJ1ZGdldEluc3RydWN0aW9uLmRlY29kZVNldENvbXB1dGVVbml0TGltaXQoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBzZXRDb21wdXRlVW5pdExpbWl0OiBTZXRDb21wdXRlVW5pdExpbWl0ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB1bml0czogc2V0Q29tcHV0ZVVuaXRMaW1pdFBhcmFtcy51bml0cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChzZXRDb21wdXRlVW5pdExpbWl0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU2V0UHJpb3JpdHlGZWU6XG4gICAgICAgIGNvbnN0IHNldENvbXB1dGVVbml0UHJpY2VQYXJhbXMgPSBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24uZGVjb2RlU2V0Q29tcHV0ZVVuaXRQcmljZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IHNldFByaW9yaXR5RmVlOiBTZXRQcmlvcml0eUZlZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGZlZTogc2V0Q29tcHV0ZVVuaXRQcmljZVBhcmFtcy5taWNyb0xhbXBvcnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHNldFByaW9yaXR5RmVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uTWludFRvOlxuICAgICAgICBsZXQgbWludFRvSW5zdHJ1Y3Rpb246IERlY29kZWRNaW50VG9JbnN0cnVjdGlvbjtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpICE9PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgICAgICAgIG1pbnRUb0luc3RydWN0aW9uID0gZGVjb2RlTWludFRvSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pbnRUb0luc3RydWN0aW9uID0gZGVjb2RlTWludFRvSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWludEFkZHJlc3NGb3JNaW50ID0gbWludFRvSW5zdHJ1Y3Rpb24ua2V5cy5taW50LnB1YmtleS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCB0b2tlbk5hbWVGb3JNaW50ID0gZmluZFRva2VuTmFtZShtaW50QWRkcmVzc0Zvck1pbnQsIGluc3RydWN0aW9uTWV0YWRhdGEsIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUpO1xuICAgICAgICBsZXQgcHJvZ3JhbUlERm9yTWludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgcHJvZ3JhbUlERm9yTWludCA9IGluc3RydWN0aW9uLnByb2dyYW1JZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pbnRUbzogTWludFRvID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1pbnRUbyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG1pbnRBZGRyZXNzOiBtaW50QWRkcmVzc0Zvck1pbnQsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IG1pbnRUb0luc3RydWN0aW9uLmtleXMuZGVzdGluYXRpb24ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzOiBtaW50VG9JbnN0cnVjdGlvbi5rZXlzLmF1dGhvcml0eS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogbWludFRvSW5zdHJ1Y3Rpb24uZGF0YS5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lRm9yTWludCxcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbUlERm9yTWludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtaW50VG8pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5CdXJuOlxuICAgICAgICBsZXQgYnVybkluc3RydWN0aW9uOiBEZWNvZGVkQnVybkluc3RydWN0aW9uO1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCkgIT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKSB7XG4gICAgICAgICAgYnVybkluc3RydWN0aW9uID0gZGVjb2RlQnVybkluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidXJuSW5zdHJ1Y3Rpb24gPSBkZWNvZGVCdXJuSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWludEFkZHJlc3NGb3JCdXJuID0gYnVybkluc3RydWN0aW9uLmtleXMubWludC5wdWJrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lRm9yQnVybiA9IGZpbmRUb2tlbk5hbWUobWludEFkZHJlc3NGb3JCdXJuLCBpbnN0cnVjdGlvbk1ldGFkYXRhLCBfdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lKTtcbiAgICAgICAgbGV0IHByb2dyYW1JREZvckJ1cm46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnByb2dyYW1JZCkge1xuICAgICAgICAgIHByb2dyYW1JREZvckJ1cm4gPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidXJuOiBCdXJuID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkJ1cm4sXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzczogbWludEFkZHJlc3NGb3JCdXJuLFxuICAgICAgICAgICAgYWNjb3VudEFkZHJlc3M6IGJ1cm5JbnN0cnVjdGlvbi5rZXlzLmFjY291bnQucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzOiBidXJuSW5zdHJ1Y3Rpb24ua2V5cy5vd25lci5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogYnVybkluc3RydWN0aW9uLmRhdGEuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuTmFtZUZvckJ1cm4sXG4gICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBwcm9ncmFtSWQ6IHByb2dyYW1JREZvckJ1cm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYnVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQ6XG4gICAgICAgIC8vIEFjY291bnQgb3JkZXIgbWF0Y2hlcyB0aGUgZml4ZWQgbGF5b3V0IGVtaXR0ZWQgYnkgc29sSW5zdHJ1Y3Rpb25GYWN0b3J5OlxuICAgICAgICAvLyBbYXV0aG9yaXR5LCBtaW50LCB0b2tlbkFjY291bnQsIGZsYWdBY2NvdW50LCB0b2tlbkFjY291bnRPd25lciwgbWludENvbmZpZyxcbiAgICAgICAgLy8gIHRva2VuUHJvZ3JhbSwgc3lzdGVtUHJvZ3JhbSwgZ2F0aW5nUHJvZ3JhbSwgLi4uZXh0cmFBY2NvdW50c10uXG4gICAgICAgIGNvbnN0IHRoYXdFeHRyYUFjY291bnRzOiBFeHRyYUFjY291bnRNZXRhW10gPSBpbnN0cnVjdGlvbi5rZXlzLnNsaWNlKDkpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgIHB1YmtleToga2V5LnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGlzU2lnbmVyOiBrZXkuaXNTaWduZXIsXG4gICAgICAgICAgaXNXcml0YWJsZToga2V5LmlzV3JpdGFibGUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbmxlc3NUaGF3OiBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhdXRob3JpdHk6IGluc3RydWN0aW9uLmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtaW50OiBpbnN0cnVjdGlvbi5rZXlzWzFdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5BY2NvdW50OiBpbnN0cnVjdGlvbi5rZXlzWzJdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZmxhZ0FjY291bnQ6IGluc3RydWN0aW9uLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbkFjY291bnRPd25lcjogaW5zdHJ1Y3Rpb24ua2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1pbnRDb25maWc6IGluc3RydWN0aW9uLmtleXNbNV0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlblByb2dyYW06IGluc3RydWN0aW9uLmtleXNbNl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBpbnN0cnVjdGlvbi5rZXlzWzddLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZ2F0aW5nUHJvZ3JhbTogaW5zdHJ1Y3Rpb24ua2V5c1s4XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGV4dHJhQWNjb3VudHM6IHRoYXdFeHRyYUFjY291bnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHBlcm1pc3Npb25sZXNzVGhhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbiwgaW5zdHJ1Y3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG50eXBlIFN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7XG4gIGRlcG9zaXRTb2w/OiBEZXBvc2l0U29sUGFyYW1zO1xuICBjcmVhdGU/OiBDcmVhdGVBY2NvdW50UGFyYW1zO1xuICBpbml0aWFsaXplPzogSW5pdGlhbGl6ZVN0YWtlUGFyYW1zO1xuICBkZWxlZ2F0ZT86IERlbGVnYXRlU3Rha2VQYXJhbXM7XG4gIGhhc0F0YUluaXQ/OiBib29sZWFuO1xufTtcblxudHlwZSBKaXRvU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGRlcG9zaXRTb2w6IE5vbk51bGxhYmxlPFN0YWtpbmdJbnN0cnVjdGlvbnNbJ2RlcG9zaXRTb2wnXT47XG59O1xuXG5mdW5jdGlvbiBpc0ppdG9TdGFraW5nSW5zdHJ1Y3Rpb25zKHNpOiBTdGFraW5nSW5zdHJ1Y3Rpb25zKTogc2kgaXMgSml0b1N0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gc2kuZGVwb3NpdFNvbCAhPT0gdW5kZWZpbmVkO1xufVxuXG50eXBlIE1hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGNyZWF0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snY3JlYXRlJ10+O1xuICBpbml0aWFsaXplOiBOb25OdWxsYWJsZTxTdGFraW5nSW5zdHJ1Y3Rpb25zWydpbml0aWFsaXplJ10+O1xufTtcblxuZnVuY3Rpb24gaXNNYXJpbmFkZVN0YWtpbmdJbnN0cnVjdGlvbnMoc2k6IFN0YWtpbmdJbnN0cnVjdGlvbnMpOiBzaSBpcyBNYXJpbmFkZVN0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gc2kuY3JlYXRlICE9PSB1bmRlZmluZWQgJiYgc2kuaW5pdGlhbGl6ZSAhPT0gdW5kZWZpbmVkICYmIHNpLmRlbGVnYXRlID09PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTmF0aXZlU3Rha2luZ0luc3RydWN0aW9ucyA9IFN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIGNyZWF0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snY3JlYXRlJ10+O1xuICBpbml0aWFsaXplOiBOb25OdWxsYWJsZTxTdGFraW5nSW5zdHJ1Y3Rpb25zWydpbml0aWFsaXplJ10+O1xuICBkZWxlZ2F0ZTogTm9uTnVsbGFibGU8U3Rha2luZ0luc3RydWN0aW9uc1snZGVsZWdhdGUnXT47XG59O1xuXG5mdW5jdGlvbiBpc05hdGl2ZVN0YWtpbmdJbnN0cnVjdGlvbnMoc2k6IFN0YWtpbmdJbnN0cnVjdGlvbnMpOiBzaSBpcyBOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHNpLmNyZWF0ZSAhPT0gdW5kZWZpbmVkICYmIHNpLmluaXRpYWxpemUgIT09IHVuZGVmaW5lZCAmJiBzaS5kZWxlZ2F0ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFraW5nVHlwZUZyb21TdGFraW5nSW5zdHJ1Y3Rpb25zKHNpOiBTdGFraW5nSW5zdHJ1Y3Rpb25zKTogU29sU3Rha2luZ1R5cGVFbnVtIHtcbiAgY29uc3QgaXNKaXRvID0gaXNKaXRvU3Rha2luZ0luc3RydWN0aW9ucyhzaSk7XG4gIGNvbnN0IGlzTWFyaW5hZGUgPSBpc01hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyhzaSk7XG4gIGNvbnN0IGlzTmF0aXZlID0gaXNOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zKHNpKTtcbiAgYXNzZXJ0KFtpc0ppdG8sIGlzTWFyaW5hZGUsIGlzTmF0aXZlXS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCA9PT0gMSwgJ1N0YWtpbmdUeXBlIGlzIGFtYmlndW91cycpO1xuICBpZiAoaXNKaXRvKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLkpJVE87XG4gIGlmIChpc01hcmluYWRlKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLk1BUklOQURFO1xuICBpZiAoaXNOYXRpdmUpIHJldHVybiBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFO1xuICBhc3NlcnQoZmFsc2UsICdObyBTdGFraW5nVHlwZSBmb3VuZCcpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBzdGFraW5nIHR4IGFuZCBkZWxlZ2F0ZSB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBTdGFraW5nQWN0aXZhdGUgYW5kIE1lbW8gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGFjdGl2YXRlIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXVxuKTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nQWN0aXZhdGUgfCBNZW1vIHwgQXRhSW5pdD4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0FjdGl2YXRlIHwgTWVtbyB8IEF0YUluaXQ+ID0gW107XG4gIGNvbnN0IHN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7fSBhcyBTdGFraW5nSW5zdHJ1Y3Rpb25zO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFkdmFuY2VOb25jZUFjY291bnQ6XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VBZHZhbmNlKGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgbm9uY2U6IE5vbmNlID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobm9uY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIGNvbnN0IG1lbW86IE1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5DcmVhdGU6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuY3JlYXRlID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQ3JlYXRlQWNjb3VudChpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU3Rha2luZ0luaXRpYWxpemU6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuaW5pdGlhbGl6ZSA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlSW5pdGlhbGl6ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgICBzdGFraW5nSW5zdHJ1Y3Rpb25zLmRlbGVnYXRlID0gU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVEZWxlZ2F0ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uRGVwb3NpdFNvbDpcbiAgICAgICAgc3Rha2luZ0luc3RydWN0aW9ucy5kZXBvc2l0U29sID0gZGVjb2RlRGVwb3NpdFNvbChpbnN0cnVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIHN0YWtpbmdJbnN0cnVjdGlvbnMuaGFzQXRhSW5pdCA9IHRydWU7XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbWludEFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuTWludEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXRhQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BVEFBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG93bmVyQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5Pd25lckFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgcGF5ZXJBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUluaXRJbnN0cnVjdGlvbktleXNJbmRleGVzLlBheWVyQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWUoaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5NaW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVN0YWtpbmdJbnN0cnVjdGlvbnMoc3Rha2luZ0luc3RydWN0aW9ucyk7XG4gIGNvbnN0IHN0YWtpbmdUeXBlID0gZ2V0U3Rha2luZ1R5cGVGcm9tU3Rha2luZ0luc3RydWN0aW9ucyhzdGFraW5nSW5zdHJ1Y3Rpb25zKTtcblxuICBsZXQgc3Rha2luZ0FjdGl2YXRlOiBTdGFraW5nQWN0aXZhdGUgfCB1bmRlZmluZWQ7XG5cbiAgc3dpdGNoIChzdGFraW5nVHlwZSkge1xuICAgIGNhc2UgU29sU3Rha2luZ1R5cGVFbnVtLkpJVE86IHtcbiAgICAgIGFzc2VydChpc0ppdG9TdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IHsgZGVwb3NpdFNvbCwgaGFzQXRhSW5pdCB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogZGVwb3NpdFNvbC5mdW5kaW5nQWNjb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBkZXBvc2l0U29sLnN0YWtlUG9vbC50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogZGVwb3NpdFNvbC5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIHZhbGlkYXRvcjogZGVwb3NpdFNvbC5zdGFrZVBvb2wudG9TdHJpbmcoKSxcbiAgICAgICAgICBleHRyYVBhcmFtczoge1xuICAgICAgICAgICAgc3Rha2VQb29sRGF0YToge1xuICAgICAgICAgICAgICBtYW5hZ2VyRmVlQWNjb3VudDogZGVwb3NpdFNvbC5tYW5hZ2VyRmVlQWNjb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgICBwb29sTWludDogZGVwb3NpdFNvbC5wb29sTWludC50b1N0cmluZygpLFxuICAgICAgICAgICAgICByZXNlcnZlU3Rha2U6IGRlcG9zaXRTb2wucmVzZXJ2ZVN0YWtlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDogISFoYXNBdGFJbml0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTUFSSU5BREU6IHtcbiAgICAgIGFzc2VydChpc01hcmluYWRlU3Rha2luZ0luc3RydWN0aW9ucyhzdGFraW5nSW5zdHJ1Y3Rpb25zKSk7XG4gICAgICBjb25zdCB7IGNyZWF0ZSwgaW5pdGlhbGl6ZSB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogY3JlYXRlLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICBzdGFraW5nQWRkcmVzczogaW5pdGlhbGl6ZS5zdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogY3JlYXRlLmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsaWRhdG9yOiBpbml0aWFsaXplLmF1dGhvcml6ZWQuc3Rha2VyLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFOiB7XG4gICAgICBhc3NlcnQoaXNOYXRpdmVTdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IHsgY3JlYXRlLCBpbml0aWFsaXplLCBkZWxlZ2F0ZSB9ID0gc3Rha2luZ0luc3RydWN0aW9ucztcbiAgICAgIHN0YWtpbmdBY3RpdmF0ZSA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICBmcm9tQWRkcmVzczogY3JlYXRlLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICBzdGFraW5nQWRkcmVzczogaW5pdGlhbGl6ZS5zdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDogY3JlYXRlLmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsaWRhdG9yOiBkZWxlZ2F0ZS52b3RlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgdW5yZWFjaGFibGU6IG5ldmVyID0gc3Rha2luZ1R5cGU7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3Rha2luZyB0eXBlICR7dW5yZWFjaGFibGV9YCk7XG4gICAgfVxuICB9XG5cbiAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goc3Rha2luZ0FjdGl2YXRlKTtcblxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBjcmVhdGUgZGVsZWdhdGUgdHhcbiAqIE9ubHkgc3VwcG9ydHMgTm9uY2UsIFN0YWtpbmdEZWxlZ2F0ZVxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGRlbGVnYXRlIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdKTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nRGVsZWdhdGU+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxOb25jZSB8IFN0YWtpbmdEZWxlZ2F0ZT4gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nRGVsZWdhdGU6XG4gICAgICAgIGNvbnN0IHN0YWtpbmdEZWxlZ2F0ZVBhcmFtcyA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlRGVsZWdhdGUoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBzdGFraW5nRGVsZWdhdGU6IFN0YWtpbmdEZWxlZ2F0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVsZWdhdGUsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBmcm9tQWRkcmVzczogc3Rha2luZ0RlbGVnYXRlUGFyYW1zLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBzdGFraW5nRGVsZWdhdGVQYXJhbXMuc3Rha2VQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcjogc3Rha2luZ0RlbGVnYXRlUGFyYW1zLnZvdGVQdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChzdGFraW5nRGVsZWdhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGFraW5nSW5zdHJ1Y3Rpb25zKHN0YWtpbmdJbnN0cnVjdGlvbnM6IFN0YWtpbmdJbnN0cnVjdGlvbnMpIHtcbiAgaWYgKHN0YWtpbmdJbnN0cnVjdGlvbnMuZGVsZWdhdGUgPT09IHVuZGVmaW5lZCAmJiBzdGFraW5nSW5zdHJ1Y3Rpb25zLmRlcG9zaXRTb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3Rha2luZ0luc3RydWN0aW9ucy5jcmVhdGUpIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdJbnZhbGlkIHN0YWtpbmcgYWN0aXZhdGUgdHJhbnNhY3Rpb24sIG1pc3NpbmcgY3JlYXRlIHN0YWtlIGFjY291bnQgaW5zdHJ1Y3Rpb24nKTtcbiAgfVxuXG4gIGlmICghc3Rha2luZ0luc3RydWN0aW9ucy5kZWxlZ2F0ZSAmJiAhc3Rha2luZ0luc3RydWN0aW9ucy5pbml0aWFsaXplKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICdJbnZhbGlkIHN0YWtpbmcgYWN0aXZhdGUgdHJhbnNhY3Rpb24sIG1pc3NpbmcgaW5pdGlhbGl6ZSBzdGFrZSBhY2NvdW50L2RlbGVnYXRlIGluc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbn1cblxudHlwZSBVbnN0YWtpbmdJbnN0cnVjdGlvbnMgPSB7XG4gIGFsbG9jYXRlPzogQWxsb2NhdGVQYXJhbXM7XG4gIGFzc2lnbj86IEFzc2lnblBhcmFtcztcbiAgc3BsaXQ/OiBTcGxpdFN0YWtlUGFyYW1zO1xuICBkZWFjdGl2YXRlPzogRGVhY3RpdmF0ZVN0YWtlUGFyYW1zO1xuICB0cmFuc2Zlcj86IERlY29kZWRUcmFuc2Zlckluc3RydWN0aW9uO1xuICB3aXRoZHJhd1N0YWtlPzogV2l0aGRyYXdTdGFrZVBhcmFtcztcbn07XG5cbnR5cGUgSml0b1Vuc3Rha2luZ0luc3RydWN0aW9ucyA9IFVuc3Rha2luZ0luc3RydWN0aW9ucyAmIHtcbiAgd2l0aGRyYXdTdGFrZTogTm9uTnVsbGFibGU8VW5zdGFraW5nSW5zdHJ1Y3Rpb25zWyd3aXRoZHJhd1N0YWtlJ10+O1xufTtcblxuZnVuY3Rpb24gaXNKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpOiBVbnN0YWtpbmdJbnN0cnVjdGlvbnMpOiB1aSBpcyBKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHVpLndpdGhkcmF3U3Rha2UgIT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlICE9PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnMgPSBVbnN0YWtpbmdJbnN0cnVjdGlvbnMgJiB7XG4gIHRyYW5zZmVyOiBOb25OdWxsYWJsZTxVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ3RyYW5zZmVyJ10+O1xufTtcblxuZnVuY3Rpb24gaXNNYXJpbmFkZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogdWkgaXMgTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnMge1xuICByZXR1cm4gdWkudHJhbnNmZXIgIT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlID09PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zID0gVW5zdGFraW5nSW5zdHJ1Y3Rpb25zICYge1xuICBkZWFjdGl2YXRlOiBOb25OdWxsYWJsZTxVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ2RlYWN0aXZhdGUnXT47XG4gIHNwbGl0OiBVbnN0YWtpbmdJbnN0cnVjdGlvbnNbJ3NwbGl0J107XG59O1xuXG5mdW5jdGlvbiBpc05hdGl2ZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogdWkgaXMgTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zIHtcbiAgcmV0dXJuIHVpLndpdGhkcmF3U3Rha2UgPT09IHVuZGVmaW5lZCAmJiB1aS5kZWFjdGl2YXRlICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YWtpbmdUeXBlRnJvbVVuc3Rha2luZ0luc3RydWN0aW9ucyh1aTogVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKTogU29sU3Rha2luZ1R5cGVFbnVtIHtcbiAgY29uc3QgaXNKaXRvID0gaXNKaXRvVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpKTtcbiAgY29uc3QgaXNNYXJpbmFkZSA9IGlzTWFyaW5hZGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModWkpO1xuICBjb25zdCBpc05hdGl2ZSA9IGlzTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVpKTtcbiAgYXNzZXJ0KFtpc0ppdG8sIGlzTWFyaW5hZGUsIGlzTmF0aXZlXS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCA9PT0gMSwgJ1N0YWtpbmdUeXBlIGlzIGFtYmlndW91cycpO1xuICBpZiAoaXNKaXRvKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLkpJVE87XG4gIGlmIChpc01hcmluYWRlKSByZXR1cm4gU29sU3Rha2luZ1R5cGVFbnVtLk1BUklOQURFO1xuICBpZiAoaXNOYXRpdmUpIHJldHVybiBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFO1xuICBhc3NlcnQoZmFsc2UsICdObyBTdGFraW5nVHlwZSBmb3VuZCcpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBkZWFjdGl2YXRlIHN0YWtlIHR4IGluc3RydWN0aW9ucyBwYXJhbXMuIFN1cHBvcnRzIGZ1bGwgc3Rha2VcbiAqIGFjY291bnQgZGVhY3RpdmF0aW9uIGFuZCBwYXJ0aWFsIHN0YWtlIGFjY291bnQgZGVhY3RpdmF0aW9uLlxuICpcbiAqIFdoZW4gcGFydGlhbGx5IGRlYWN0aXZhdGluZyBhIHN0YWtlIGFjY291bnQgdGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uczogQWxsb2NhdGUsXG4gKiB0byBhbGxvY2F0ZSBhIG5ldyBzdGFraW5nIGFjY291bnQsIEFzc2lnbiwgdG8gYXNzaWduIHRoZSBuZXdseSBjcmVhdGVkIHN0YWtpbmcgYWNjb3VudCB0byB0aGVcbiAqIFN0YWtlIFByb2dyYW0sIFNwbGl0LCB0byBzcGxpdCB0aGUgY3VycmVudCBzdGFrZSBhY2NvdW50LCBhbmQgU3Rha2luZ0RlYWN0aXZhdGUgdG8gZGVhY3RpdmF0ZSB0aGVcbiAqIG5ld2x5IGNyZWF0ZWQgc3Rha2UgYWNjb3VudC5cbiAqXG4gKiBTdXBwb3J0cyBOb25jZSwgU3Rha2luZ0RlYWN0aXZhdGUsIE1lbW8sIEFsbG9jYXRlLCBBc3NpZ24sIGFuZCBTcGxpdCBTb2xhbmEgaW5zdHJ1Y3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBzdGFraW5nIGRlYWN0aXZhdGUgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gIGNvaW5OYW1lPzogc3RyaW5nXG4pOiBBcnJheTxOb25jZSB8IFN0YWtpbmdEZWFjdGl2YXRlIHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0RlYWN0aXZhdGUgfCBNZW1vPiA9IFtdO1xuICBjb25zdCB1bnN0YWtpbmdJbnN0cnVjdGlvbnM6IFVuc3Rha2luZ0luc3RydWN0aW9uc1tdID0gW107XG4gIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbik7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uTWVtbzpcbiAgICAgICAgY29uc3QgbWVtbzogTWVtbyA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgICAgIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobWVtbyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWxsb2NhdGU6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uYWxsb2NhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmFsbG9jYXRlID1cbiAgICAgICAgICAgIFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUFsbG9jYXRlKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBhbGxvY2F0ZTogU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQWxsb2NhdGUoaW5zdHJ1Y3Rpb24pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQXNzaWduOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmFzc2lnbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uYXNzaWduID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQXNzaWduKGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBhc3NpZ246IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUFzc2lnbihpbnN0cnVjdGlvbiksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TcGxpdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5zcGxpdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uc3BsaXQgPSBTdGFrZUluc3RydWN0aW9uLmRlY29kZVNwbGl0KGluc3RydWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBzcGxpdDogU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVTcGxpdChpbnN0cnVjdGlvbiksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5kZWFjdGl2YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS5kZWFjdGl2YXRlID1cbiAgICAgICAgICAgIFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlRGVhY3RpdmF0ZShpbnN0cnVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgZGVhY3RpdmF0ZTogU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVEZWFjdGl2YXRlKGluc3RydWN0aW9uKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlRyYW5zZmVyOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnNbdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLnRyYW5zZmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zW3Vuc3Rha2luZ0luc3RydWN0aW9ucy5sZW5ndGggLSAxXS50cmFuc2ZlciA9XG4gICAgICAgICAgICBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVUcmFuc2ZlcihpbnN0cnVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgdHJhbnNmZXI6IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZVRyYW5zZmVyKGluc3RydWN0aW9uKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLldpdGhkcmF3U3Rha2U6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0ud2l0aGRyYXdTdGFrZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9uc1t1bnN0YWtpbmdJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0ud2l0aGRyYXdTdGFrZSA9IGRlY29kZVdpdGhkcmF3U3Rha2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHdpdGhkcmF3U3Rha2U6IGRlY29kZVdpdGhkcmF3U3Rha2UoaW5zdHJ1Y3Rpb24pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdW5zdGFraW5nSW5zdHJ1Y3Rpb24gb2YgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zKSB7XG4gICAgdmFsaWRhdGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb24pO1xuICAgIGNvbnN0IHN0YWtpbmdUeXBlID0gZ2V0U3Rha2luZ1R5cGVGcm9tVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVuc3Rha2luZ0luc3RydWN0aW9uKTtcblxuICAgIGxldCBzdGFraW5nRGVhY3RpdmF0ZTogU3Rha2luZ0RlYWN0aXZhdGUgfCB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKHN0YWtpbmdUeXBlKSB7XG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPOiB7XG4gICAgICAgIGFzc2VydChpc0ppdG9VbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb24pKTtcbiAgICAgICAgY29uc3QgeyB3aXRoZHJhd1N0YWtlIH0gPSB1bnN0YWtpbmdJbnN0cnVjdGlvbjtcbiAgICAgICAgc3Rha2luZ0RlYWN0aXZhdGUgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGUsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBzdGFraW5nVHlwZSxcbiAgICAgICAgICAgIGZyb21BZGRyZXNzOiB3aXRoZHJhd1N0YWtlLmRlc3RpbmF0aW9uU3Rha2VBdXRob3JpdHkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiB3aXRoZHJhd1N0YWtlLnN0YWtlUG9vbC50b1N0cmluZygpLFxuICAgICAgICAgICAgYW1vdW50OiB3aXRoZHJhd1N0YWtlLnBvb2xUb2tlbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHVuc3Rha2luZ0FkZHJlc3M6IHdpdGhkcmF3U3Rha2UuZGVzdGluYXRpb25TdGFrZS50b1N0cmluZygpLFxuICAgICAgICAgICAgZXh0cmFQYXJhbXM6IHtcbiAgICAgICAgICAgICAgc3Rha2VQb29sRGF0YToge1xuICAgICAgICAgICAgICAgIG1hbmFnZXJGZWVBY2NvdW50OiB3aXRoZHJhd1N0YWtlLm1hbmFnZXJGZWVBY2NvdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcG9vbE1pbnQ6IHdpdGhkcmF3U3Rha2UucG9vbE1pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JMaXN0QWNjb3VudDogd2l0aGRyYXdTdGFrZS52YWxpZGF0b3JMaXN0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IHdpdGhkcmF3U3Rha2UudmFsaWRhdG9yU3Rha2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgdHJhbnNmZXJBdXRob3JpdHlBZGRyZXNzOiB3aXRoZHJhd1N0YWtlLnNvdXJjZVRyYW5zZmVyQXV0aG9yaXR5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgICBhc3NlcnQoaXNNYXJpbmFkZVVuc3Rha2luZ0luc3RydWN0aW9ucyh1bnN0YWtpbmdJbnN0cnVjdGlvbikpO1xuICAgICAgICBjb25zdCB7IHRyYW5zZmVyIH0gPSB1bnN0YWtpbmdJbnN0cnVjdGlvbjtcblxuICAgICAgICBzdGFraW5nRGVhY3RpdmF0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVhY3RpdmF0ZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHN0YWtpbmdUeXBlLFxuICAgICAgICAgICAgZnJvbUFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6ICcnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogdHJhbnNmZXIudG9QdWJrZXkudG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRyYW5zZmVyLmxhbXBvcnRzLnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5OQVRJVkU6IHtcbiAgICAgICAgYXNzZXJ0KGlzTmF0aXZlVW5zdGFraW5nSW5zdHJ1Y3Rpb25zKHVuc3Rha2luZ0luc3RydWN0aW9uKSk7XG4gICAgICAgIGNvbnN0IHsgZGVhY3RpdmF0ZSwgc3BsaXQgfSA9IHVuc3Rha2luZ0luc3RydWN0aW9uO1xuICAgICAgICBzdGFraW5nRGVhY3RpdmF0ZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVhY3RpdmF0ZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHN0YWtpbmdUeXBlLFxuICAgICAgICAgICAgZnJvbUFkZHJlc3M6IGRlYWN0aXZhdGUuYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IHNwbGl0Py5zdGFrZVB1YmtleS50b1N0cmluZygpIHx8IGRlYWN0aXZhdGUuc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogc3BsaXQ/LmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB1bnN0YWtpbmdBZGRyZXNzOiBzcGxpdD8uc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHVucmVhY2hhYmxlOiBuZXZlciA9IHN0YWtpbmdUeXBlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3Rha2luZyB0eXBlICR7dW5yZWFjaGFibGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goc3Rha2luZ0RlYWN0aXZhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVVbnN0YWtpbmdJbnN0cnVjdGlvbnModW5zdGFraW5nSW5zdHJ1Y3Rpb25zOiBVbnN0YWtpbmdJbnN0cnVjdGlvbnMpIHtcbiAgLy8gQ2FzZXMgd2hlcmUgZXhhY3RseSBvbmUgZmllbGQgc2hvdWxkIGJlIHByZXNlbnRcbiAgY29uc3QgdW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5czogKGtleW9mIFVuc3Rha2luZ0luc3RydWN0aW9ucylbXSA9IFtcbiAgICAnYWxsb2NhdGUnLFxuICAgICdhc3NpZ24nLFxuICAgICdzcGxpdCcsXG4gICAgJ2RlYWN0aXZhdGUnLFxuICAgICd0cmFuc2ZlcicsXG4gIF0gYXMgY29uc3Q7XG4gIGlmICh1bnN0YWtpbmdJbnN0cnVjdGlvbnNLZXlzLmV2ZXJ5KChrKSA9PiAhIXVuc3Rha2luZ0luc3RydWN0aW9uc1trXSA9PT0gKGsgPT09ICd0cmFuc2ZlcicpKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5cy5ldmVyeSgoaykgPT4gISF1bnN0YWtpbmdJbnN0cnVjdGlvbnNba10gPT09IChrID09PSAnd2l0aGRyYXdTdGFrZScpKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zS2V5cy5ldmVyeSgoaykgPT4gISF1bnN0YWtpbmdJbnN0cnVjdGlvbnNba10gPT09IChrID09PSAnZGVhY3RpdmF0ZScpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENhc2VzIHdoZXJlIGRlYWN0aXZhdGUgZmllbGQgbXVzdCBiZSBwcmVzZW50IHdpdGggYW5vdGhlciBmaWVsZFxuICBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5kZWFjdGl2YXRlKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnSW52YWxpZCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtaXNzaW5nIGRlYWN0aXZhdGUgc3Rha2UgYWNjb3VudCBpbnN0cnVjdGlvbicpO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBhIHN0YWtlIHBvb2wgaW5zdHJ1Y3Rpb24sIG5vdCBhIHBhcnRpYWwgdW5zdGFrZVxuICBpZiAodW5zdGFraW5nSW5zdHJ1Y3Rpb25zLndpdGhkcmF3U3Rha2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5hbGxvY2F0ZSkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIG1pc3NpbmcgYWxsb2NhdGUgdW5zdGFrZSBhY2NvdW50IGluc3RydWN0aW9uJ1xuICAgICk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5hc3NpZ24pIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdJbnZhbGlkIHBhcnRpYWwgZGVhY3RpdmF0ZSBzdGFrZSB0cmFuc2FjdGlvbiwgbWlzc2luZyBhc3NpZ24gdW5zdGFrZSBhY2NvdW50IGluc3RydWN0aW9uJyk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy5zcGxpdCkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtaXNzaW5nIHNwbGl0IHN0YWtlIGFjY291bnQgaW5zdHJ1Y3Rpb24nKTtcbiAgfSBlbHNlIGlmIChcbiAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYWxsb2NhdGUuYWNjb3VudFB1YmtleS50b1N0cmluZygpICE9PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYXNzaWduLmFjY291bnRQdWJrZXkudG9TdHJpbmcoKVxuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKFxuICAgICAgJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtdXN0IGFsbG9jYXRlIGFuZCBhc3NpZ24gdGhlIHNhbWUgcHVibGljIGtleSdcbiAgICApO1xuICB9IGVsc2UgaWYgKHVuc3Rha2luZ0luc3RydWN0aW9ucy5hbGxvY2F0ZS5zcGFjZSAhPT0gU3Rha2VQcm9ncmFtLnNwYWNlKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgIGBJbnZhbGlkIHBhcnRpYWwgZGVhY3RpdmF0ZSBzdGFrZSB0cmFuc2FjdGlvbiwgdW5zdGFraW5nIGFjY291bnQgbXVzdCBhbGxvY2F0ZSAke1N0YWtlUHJvZ3JhbS5zcGFjZX0gYnl0ZXNgXG4gICAgKTtcbiAgfSBlbHNlIGlmICh1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYXNzaWduLnByb2dyYW1JZC50b1N0cmluZygpICE9PSBTdGFrZVByb2dyYW0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkpIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKFxuICAgICAgJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCB0aGUgdW5zdGFrZSBhY2NvdW50IG11c3QgYmUgYXNzaWduZWQgdG8gdGhlIFN0YWtlIFByb2dyYW0nXG4gICAgKTtcbiAgfSBlbHNlIGlmIChcbiAgICB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuYWxsb2NhdGUuYWNjb3VudFB1YmtleS50b1N0cmluZygpICE9PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuc3BsaXQuc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ0ludmFsaWQgcGFydGlhbCBkZWFjdGl2YXRlIHN0YWtlIHRyYW5zYWN0aW9uLCBtdXN0IGFsbG9jYXRlIHRoZSB1bnN0YWtpbmcgYWNjb3VudCcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHVuc3Rha2luZ0luc3RydWN0aW9ucy5zcGxpdC5zdGFrZVB1YmtleS50b1N0cmluZygpID09PSB1bnN0YWtpbmdJbnN0cnVjdGlvbnMuc3BsaXQuc3BsaXRTdGFrZVB1YmtleS50b1N0cmluZygpXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIHRoZSB1bnN0YWtpbmcgYWNjb3VudCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBTdGFrZSBBY2NvdW50J1xuICAgICk7XG4gIH0gZWxzZSBpZiAoIXVuc3Rha2luZ0luc3RydWN0aW9ucy50cmFuc2Zlcikge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAnSW52YWxpZCBwYXJ0aWFsIGRlYWN0aXZhdGUgc3Rha2UgdHJhbnNhY3Rpb24sIG1pc3NpbmcgZnVuZGluZyBvZiB1bnN0YWtlIGFkZHJlc3MgaW5zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNyZWF0ZSBzdGFraW5nICB3aXRoZHJhdyB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBTdGFraW5nV2l0aGRyYXcsIGFuZCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyB3aXRoZHJhdyB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW11cbik6IEFycmF5PE5vbmNlIHwgU3Rha2luZ1dpdGhkcmF3IHwgTWVtbz4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PE5vbmNlIHwgU3Rha2luZ1dpdGhkcmF3IHwgTWVtbz4gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NZW1vOlxuICAgICAgICBjb25zdCBtZW1vOiBNZW1vID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgICAgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uLmRhdGEudG9TdHJpbmcoKSB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3SW5zdHJ1Y3Rpb24gPSBTdGFrZUluc3RydWN0aW9uLmRlY29kZVdpdGhkcmF3KGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgc3Rha2luZ1dpdGhkcmF3OiBTdGFraW5nV2l0aGRyYXcgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgZnJvbUFkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogd2l0aGRyYXdJbnN0cnVjdGlvbi5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHN0YWtpbmdXaXRoZHJhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtZW1vIG9iamVjdCBmcm9tIGluc3RydWN0aW9ucyBpZiBpdCBleGlzdHNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGJlIHBhcnNlZFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSBpbnN0cnVjdGlvbkluZGV4ZXMgLSB0aGUgaW5zdHJ1Y3Rpb25zIGluZGV4ZXMgb2YgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtNZW1vIHwgdW5kZWZpbmVkfSAtIG1lbW8gb2JqZWN0IG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRNZW1vKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLCBpbnN0cnVjdGlvbkluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4pOiBNZW1vIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gT2JqZWN0LmtleXMoaW5zdHJ1Y3Rpb25JbmRleGVzKS5sZW5ndGg7XG4gIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID09PSBpbnN0cnVjdGlvbnNMZW5ndGggJiYgaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uSW5kZXhlcy5NZW1vXSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbkluZGV4ZXMuTWVtb10uZGF0YS50b1N0cmluZygpIH0sXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBhdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcyA9IHtcbiAgUGF5ZXJBZGRyZXNzOiAwLFxuICBBVEFBZGRyZXNzOiAxLFxuICBPd25lckFkZHJlc3M6IDIsXG4gIE1pbnRBZGRyZXNzOiAzLFxufTtcblxuY29uc3QgY2xvc2VBdGFJbnN0cnVjdGlvbktleXNJbmRleGVzID0ge1xuICBBY2NvdW50QWRkcmVzczogMCxcbiAgRGVzdGluYXRpb25BZGRyZXNzOiAxLFxuICBBdXRob3JpdHlBZGRyZXNzOiAyLFxufTtcblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBpbml0aWFsaXplIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGFuIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIFNlbmQgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdGFJbml0SW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgaW5zdHJ1Y3Rpb25NZXRhZGF0YT86IEluc3RydWN0aW9uUGFyYW1zW10sXG4gIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWU/OiBib29sZWFuXG4pOiBBcnJheTxBdGFJbml0IHwgUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCB8IE1lbW8gfCBOb25jZT4ge1xuICBjb25zdCBpbnN0cnVjdGlvbkRhdGE6IEFycmF5PEF0YUluaXQgfCBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50IHwgTWVtbyB8IE5vbmNlPiA9IFtdO1xuICBsZXQgbWVtbzogTWVtbyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIG1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgIGNvbnN0IG1pbnRBZGRyZXNzID0gaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5NaW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9IGZpbmRUb2tlbk5hbWUobWludEFkZHJlc3MsIGluc3RydWN0aW9uTWV0YWRhdGEsIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUpO1xuICAgICAgICBsZXQgcHJvZ3JhbUlEOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5wcm9ncmFtSWQpIHtcbiAgICAgICAgICBwcm9ncmFtSUQgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdGFJbml0OiBBdGFJbml0ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgICAgIGF0YUFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuQVRBQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvd25lckFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhSW5pdEluc3RydWN0aW9uS2V5c0luZGV4ZXMuT3duZXJBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHBheWVyQWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFJbml0SW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5QYXllckFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtSUQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goYXRhSW5pdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQ6XG4gICAgICAgIGNvbnN0IHRoYXdFeHRyYUFjY291bnRzOiBFeHRyYUFjY291bnRNZXRhW10gPSBpbnN0cnVjdGlvbi5rZXlzLnNsaWNlKDkpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgIHB1YmtleToga2V5LnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIGlzU2lnbmVyOiBrZXkuaXNTaWduZXIsXG4gICAgICAgICAgaXNXcml0YWJsZToga2V5LmlzV3JpdGFibGUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbmxlc3NUaGF3OiBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50ID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBhdXRob3JpdHk6IGluc3RydWN0aW9uLmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtaW50OiBpbnN0cnVjdGlvbi5rZXlzWzFdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG9rZW5BY2NvdW50OiBpbnN0cnVjdGlvbi5rZXlzWzJdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZmxhZ0FjY291bnQ6IGluc3RydWN0aW9uLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlbkFjY291bnRPd25lcjogaW5zdHJ1Y3Rpb24ua2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1pbnRDb25maWc6IGluc3RydWN0aW9uLmtleXNbNV0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0b2tlblByb2dyYW06IGluc3RydWN0aW9uLmtleXNbNl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBpbnN0cnVjdGlvbi5rZXlzWzddLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZ2F0aW5nUHJvZ3JhbTogaW5zdHJ1Y3Rpb24ua2V5c1s4XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGV4dHJhQWNjb3VudHM6IHRoYXdFeHRyYUFjY291bnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKHBlcm1pc3Npb25sZXNzVGhhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkRlcG9zaXRTb2w6XG4gICAgICAgIC8vIEF0YUluaXQgaXMgYSBwYXJ0IG9mIHNwbC1zdGFrZS1wb29sJ3MgZGVwb3NpdFNvbCBwcm9jZXNzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbiwgaW5zdHJ1Y3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbmNvbnN0IGF0YUNsb3NlSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcyA9IHtcbiAgQWNjb3VudEFkZHJlc3M6IDAsXG4gIERlc3RpbmF0aW9uQWRkcmVzczogMSxcbiAgQXV0aG9yaXR5QWRkcmVzczogMixcbn07XG5cbmNvbnN0IGF0YVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbktleXNJbmRleGVzID0ge1xuICBOZXN0ZWRBY2NvdW50QWRkcmVzczogMCxcbiAgTmVzdGVkTWludEFkZHJlc3M6IDEsXG4gIERlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3M6IDIsXG4gIE93bmVyQWNjb3VudEFkZHJlc3M6IDMsXG4gIE93bmVyTWludEFkZHJlc3M6IDQsXG4gIFdhbGxldEFkZHJlc3M6IDUsXG59O1xuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGNsb3NlIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGFuIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIFNlbmQgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdGFDbG9zZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PEF0YUNsb3NlIHwgQXRhUmVjb3Zlck5lc3RlZCB8IE5vbmNlPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8QXRhQ2xvc2UgfCBBdGFSZWNvdmVyTmVzdGVkIHwgTm9uY2U+ID0gW107XG4gIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbik7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQWR2YW5jZU5vbmNlQWNjb3VudDpcbiAgICAgICAgY29uc3QgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgY29uc3QgYXRhQ2xvc2U6IEF0YUNsb3NlID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGFjY291bnRBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUNsb3NlSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BY2NvdW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IGluc3RydWN0aW9uLmtleXNbYXRhQ2xvc2VJbnN0cnVjdGlvbktleXNJbmRleGVzLkRlc3RpbmF0aW9uQWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzOiBpbnN0cnVjdGlvbi5rZXlzW2F0YUNsb3NlSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5BdXRob3JpdHlBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChhdGFDbG9zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlJlY292ZXJOZXN0ZWRBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICBjb25zdCBhdGFSZWNvdmVyTmVzdGVkOiBBdGFSZWNvdmVyTmVzdGVkID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlJlY292ZXJOZXN0ZWRBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbmVzdGVkQWNjb3VudEFkZHJlc3M6XG4gICAgICAgICAgICAgIGluc3RydWN0aW9uLmtleXNbYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uS2V5c0luZGV4ZXMuTmVzdGVkQWNjb3VudEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgbmVzdGVkTWludEFkZHJlc3M6XG4gICAgICAgICAgICAgIGluc3RydWN0aW9uLmtleXNbYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uS2V5c0luZGV4ZXMuTmVzdGVkTWludEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgZGVzdGluYXRpb25BY2NvdW50QWRkcmVzczpcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ua2V5c1thdGFSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5EZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG93bmVyQWNjb3VudEFkZHJlc3M6XG4gICAgICAgICAgICAgIGluc3RydWN0aW9uLmtleXNbYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uS2V5c0luZGV4ZXMuT3duZXJBY2NvdW50QWRkcmVzc10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvd25lck1pbnRBZGRyZXNzOlxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5rZXlzW2F0YVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbktleXNJbmRleGVzLk93bmVyTWludEFkZHJlc3NdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgd2FsbGV0QWRkcmVzczogaW5zdHJ1Y3Rpb24ua2V5c1thdGFSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb25LZXlzSW5kZXhlcy5XYWxsZXRBZGRyZXNzXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChhdGFSZWNvdmVyTmVzdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uLCBpbnN0cnVjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6ICcgKyBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pXG4gICAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogUGFyc2VzIFNvbGFuYSBpbnN0cnVjdGlvbnMgdG8gYXV0aG9yaXplZCBzdGFraW5nIGFjY291bnQgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIE5vbmNlLCBBdXRob3JpemUgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGFuIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKiBAcmV0dXJucyB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gQW4gYXJyYXkgY29udGFpbmluZyBpbnN0cnVjdGlvbiBwYXJhbXMgZm9yIHN0YWtpbmcgYXV0aG9yaXplIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0F1dGhvcml6ZUluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW11cbik6IEFycmF5PE5vbmNlIHwgU3Rha2luZ0F1dGhvcml6ZSB8IE1lbW8+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxOb25jZSB8IFN0YWtpbmdBdXRob3JpemUgfCBNZW1vPiA9IFtdO1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFkdmFuY2VOb25jZUFjY291bnQ6XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VBZHZhbmNlKGluc3RydWN0aW9uKTtcbiAgICAgICAgY29uc3Qgbm9uY2U6IE5vbmNlID0ge1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2gobm9uY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLk1lbW86XG4gICAgICAgIGNvbnN0IG1lbW86IE1lbW8gPSB7IHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sIHBhcmFtczogeyBtZW1vOiBpbnN0cnVjdGlvbi5kYXRhLnRvU3RyaW5nKCkgfSB9O1xuICAgICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BdXRob3JpemU6XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZSA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlQXV0aG9yaXplKGluc3RydWN0aW9uKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goe1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdBdXRob3JpemUsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBzdGFraW5nQWRkcmVzczogYXV0aG9yaXplLnN0YWtlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBvbGRBdXRob3JpemVBZGRyZXNzOiBhdXRob3JpemUuYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgbmV3QXV0aG9yaXplQWRkcmVzczogYXV0aG9yaXplLm5ld0F1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG5ld1dpdGhkcmF3QWRkcmVzczogYXV0aG9yaXplLmN1c3RvZGlhblB1YmtleT8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBhdXRob3JpemVkIHN0YWtpbmcgYWNjb3VudCBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgTm9uY2UsIEF1dGhvcml6ZSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyBhdXRob3JpemUgdHhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGFraW5nQXV0aG9yaXplUmF3SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdKTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nQXV0aG9yaXplPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8Tm9uY2UgfCBTdGFraW5nQXV0aG9yaXplPiA9IFtdO1xuICBhc3NlcnQoaW5zdHJ1Y3Rpb25zLmxlbmd0aCA9PT0gMiwgJ0ludmFsaWQgbnVtYmVyIG9mIGluc3RydWN0aW9ucycpO1xuICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbnNbMF0pO1xuICBjb25zdCBub25jZTogTm9uY2UgPSB7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgIHBhcmFtczoge1xuICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9O1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaChub25jZSk7XG4gIGNvbnN0IGF1dGhvcml6ZSA9IGluc3RydWN0aW9uc1sxXTtcbiAgYXNzZXJ0KGF1dGhvcml6ZS5rZXlzLmxlbmd0aCA9PT0gNSwgJ0ludmFsaWQgbnVtYmVyIG9mIGtleXMgaW4gYXV0aG9yaXplIGluc3RydWN0aW9uJyk7XG4gIGluc3RydWN0aW9uRGF0YS5wdXNoKHtcbiAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQXV0aG9yaXplLFxuICAgIHBhcmFtczoge1xuICAgICAgc3Rha2luZ0FkZHJlc3M6IGF1dGhvcml6ZS5rZXlzWzBdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgb2xkQXV0aG9yaXplQWRkcmVzczogYXV0aG9yaXplLmtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICBuZXdBdXRob3JpemVBZGRyZXNzOiBhdXRob3JpemUua2V5c1szXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGN1c3RvZGlhbkFkZHJlc3M6IGF1dGhvcml6ZS5rZXlzWzRdLnB1YmtleS50b1N0cmluZygpLFxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGN1c3RvbSBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gY29udGFpbmluZyBjdXN0b20gc29sYW5hIGluc3RydWN0aW9uc1xuICogQHBhcmFtIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBpbnN0cnVjdGlvbk1ldGFkYXRhIC0gdGhlIGluc3RydWN0aW9uIG1ldGFkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3IgY3VzdG9tIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBwYXJzZUN1c3RvbUluc3RydWN0aW9ucyhcbiAgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10sXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/OiBJbnN0cnVjdGlvblBhcmFtc1tdXG4pOiBDdXN0b21JbnN0cnVjdGlvbltdIHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBDdXN0b21JbnN0cnVjdGlvbltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbWV0YWRhdGEgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24gcG9zaXRpb25cbiAgICBpZiAoXG4gICAgICBpbnN0cnVjdGlvbk1ldGFkYXRhICYmXG4gICAgICBpbnN0cnVjdGlvbk1ldGFkYXRhW2ldICYmXG4gICAgICBpbnN0cnVjdGlvbk1ldGFkYXRhW2ldLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkN1c3RvbUluc3RydWN0aW9uXG4gICAgKSB7XG4gICAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChpbnN0cnVjdGlvbk1ldGFkYXRhW2ldIGFzIEN1c3RvbUluc3RydWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCB0aGUgcmF3IGluc3RydWN0aW9uIHRvIEN1c3RvbUluc3RydWN0aW9uIGZvcm1hdFxuICAgICAgY29uc3QgY3VzdG9tSW5zdHJ1Y3Rpb246IEN1c3RvbUluc3RydWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DdXN0b21JbnN0cnVjdGlvbixcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcHJvZ3JhbUlkOiBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBrZXlzOiBpbnN0cnVjdGlvbi5rZXlzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAgcHVia2V5OiBrZXkucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpc1NpZ25lcjoga2V5LmlzU2lnbmVyLFxuICAgICAgICAgICAgaXNXcml0YWJsZToga2V5LmlzV3JpdGFibGUsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGRhdGE6IGluc3RydWN0aW9uLmRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKGN1c3RvbUluc3RydWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5zdHJ1Y3Rpb25EYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFRva2VuTmFtZShcbiAgbWludEFkZHJlc3M6IHN0cmluZyxcbiAgaW5zdHJ1Y3Rpb25NZXRhZGF0YT86IEluc3RydWN0aW9uUGFyYW1zW10sXG4gIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWU/OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICBsZXQgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb2lucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU29sQ29pbiAmJiB2YWx1ZS50b2tlbkFkZHJlc3MgPT09IG1pbnRBZGRyZXNzKSB7XG4gICAgICB0b2tlbiA9IHZhbHVlLm5hbWU7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIXRva2VuICYmIGluc3RydWN0aW9uTWV0YWRhdGEpIHtcbiAgICBpbnN0cnVjdGlvbk1ldGFkYXRhLmZvckVhY2goKGluc3RydWN0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgJiZcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLm1pbnRBZGRyZXNzID09PSBtaW50QWRkcmVzc1xuICAgICAgKSB7XG4gICAgICAgIHRva2VuID0gaW5zdHJ1Y3Rpb24ucGFyYW1zLnRva2VuTmFtZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRva2VuVHJhbnNmZXIgJiZcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnRva2VuQWRkcmVzcyA9PT0gbWludEFkZHJlc3NcbiAgICAgICkge1xuICAgICAgICB0b2tlbiA9IGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIXRva2VuICYmIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUpIHtcbiAgICB0b2tlbiA9IG1pbnRBZGRyZXNzO1xuICB9XG5cbiAgYXNzZXJ0KHRva2VuKTtcblxuICByZXR1cm4gdG9rZW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHJhbnNmZXJIb29rQWNjb3VudHMoXG4gIGZyb21BZGRyZXNzOiBzdHJpbmcsXG4gIHRvQWRkcmVzczogc3RyaW5nLFxuICB0b2tlbkFkZHJlc3M6IHN0cmluZyxcbiAgaW5zdHJ1Y3Rpb25NZXRhZGF0YT86IEluc3RydWN0aW9uUGFyYW1zW11cbik6IEV4dHJhQWNjb3VudE1ldGFbXSB8IHVuZGVmaW5lZCB7XG4gIGxldCB0cmFuc2Zlckhvb2tBY2NvdW50czogRXh0cmFBY2NvdW50TWV0YVtdIHwgdW5kZWZpbmVkO1xuXG4gIGluc3RydWN0aW9uTWV0YWRhdGE/LmZvckVhY2goKGluc3RydWN0aW9uKSA9PiB7XG4gICAgaWYgKFxuICAgICAgaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlciAmJlxuICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnRva2VuQWRkcmVzcyA9PT0gdG9rZW5BZGRyZXNzICYmXG4gICAgICBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MgPT09IGZyb21BZGRyZXNzICYmXG4gICAgICBpbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzID09PSB0b0FkZHJlc3NcbiAgICApIHtcbiAgICAgIHRyYW5zZmVySG9va0FjY291bnRzID0gaW5zdHJ1Y3Rpb24ucGFyYW1zLnRyYW5zZmVySG9va0FjY291bnRzO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRyYW5zZmVySG9va0FjY291bnRzO1xufVxuIl19
|