@bitgo/sdk-core 8.2.0 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +13 -4
  3. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  4. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +53 -8
  5. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +17 -17
  6. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  7. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +18 -18
  8. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +32 -35
  9. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  10. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  11. package/dist/src/bitgo/bitgoBase.d.ts +0 -1
  12. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  13. package/dist/src/bitgo/bitgoBase.js +1 -1
  14. package/dist/src/bitgo/enterprise/enterprise.d.ts +11 -8
  15. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  16. package/dist/src/bitgo/enterprise/enterprise.js +16 -4
  17. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +10 -3
  18. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  19. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  20. package/dist/src/bitgo/staking/stakingWallet.d.ts +8 -1
  21. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  22. package/dist/src/bitgo/staking/stakingWallet.js +26 -9
  23. package/dist/src/bitgo/tss/common.d.ts +2 -2
  24. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  25. package/dist/src/bitgo/tss/common.js +1 -1
  26. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +3 -3
  27. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  28. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +2 -2
  29. package/dist/src/bitgo/tss/ecdsa/types.d.ts +2 -2
  30. package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
  31. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +16 -22
  32. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  33. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +52 -92
  34. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +2 -21
  35. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  36. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  37. package/dist/src/bitgo/wallet/iWallet.d.ts +13 -0
  38. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  39. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  40. package/dist/src/bitgo/wallet/iWallets.d.ts +1 -1
  41. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  42. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  43. package/dist/src/bitgo/wallet/wallet.d.ts +9 -1
  44. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  45. package/dist/src/bitgo/wallet/wallet.js +26 -34
  46. package/dist/tsconfig.tsbuildinfo +903 -758
  47. package/package.json +4 -4
@@ -25,7 +25,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.verifyWalletSignature = exports.getParticipantFromIndex = exports.getParticipantIndex = exports.parseOShare = exports.convertOShare = exports.parseBShare = exports.convertBShare = exports.convertSignatureShare = exports.parseCombinedSignature = exports.convertCombinedSignature = exports.parseSignatureShare = exports.convertSDShare = exports.parseSDShare = exports.convertDShare = exports.parseDShare = exports.convertMuShare = exports.parseMuShare = exports.convertAShare = exports.parseAShare = exports.convertKShare = exports.parseKShare = exports.secondaryDelimeter = exports.delimeter = exports.getPublicKey = exports.decryptNShare = exports.buildNShareFromAPIKeyShare = exports.encryptNShare = exports.getBitgoToUserLatestShare = exports.sendShareToBitgo = exports.createUserSignatureShare = exports.createUserOmicronAndDeltaShare = exports.createUserGammaAndMuShare = exports.createUserSignShare = exports.createCombinedKey = void 0;
26
26
  const tss_1 = require("./../../../account-lib/mpc/tss");
27
27
  const types_1 = require("./types");
28
- const utils_1 = require("./../../utils");
28
+ const utils_1 = require("../../utils");
29
29
  const types_2 = require("../types");
30
30
  const common_1 = require("../common");
31
31
  const keccak_1 = __importDefault(require("keccak"));
@@ -804,4 +804,4 @@ async function verifyWalletSignature(params) {
804
804
  Buffer.from(rawNotations[publicUValueRawNotationIndex].value).toString(), 'bitgo share mismatch');
805
805
  }
806
806
  exports.verifyWalletSignature = verifyWalletSignature;
807
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBd0JpQjtBQUNqQix5Q0FBd0c7QUFDeEcsb0NBQTRDO0FBRzVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUE2QztBQUM3Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBSXhCLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLFFBQVEsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDaEMsS0FBSyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FB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QUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sR0FBRztZQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUs7UUFDTCxVQUFVO1FBQ1YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBckVELGtDQXFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTs7SUFDekMsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FDbEcsS0FBSyxDQUFDLE1BQ1IsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUNwQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEtBQUksRUFDNUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDMUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMzRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQzFCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzVGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFB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QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMxRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFDMUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDNUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsSUFBSSxLQUFJLEVBQ3hCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2xGLENBQUEs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QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDMUUsc0JBQXNCLENBQ3ZCLENBQUM7QUFDSixDQUFDO0FBckJELHNEQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVjZHNhIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7XG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBDb21iaW5lZEtleSxcbiAgU2lnbmluZ01hdGVyaWFsLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEFTaGFyZSxcbiAgQ3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJULFxuICBDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVCxcbiAgRFNoYXJlLFxuICBHU2hhcmUsXG4gIEtleVNoYXJlLFxuICBOU2hhcmUsXG4gIE9TaGFyZSxcbiAgU2VuZFNoYXJlVHlwZSxcbiAgU2lnbmF0dXJlU2hhcmUsXG4gIFNpZ25TaGFyZSxcbiAgWFNoYXJlLFxuICBXU2hhcmUsXG4gIFhTaGFyZVdpdGhOVGlsZGUsXG4gIFlTaGFyZVdpdGhOVGlsZGUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFJlcXVlc3RUeXBlLCBjcmVhdGVTaGFyZVByb29mIH0gZnJvbSAnLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtTaGFyZSwgTVVTaGFyZSwgU1NoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUsIGdldFR4UmVxdWVzdCwgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCBjcmVhdGVLZWNjYWtIYXNoIGZyb20gJ2tlY2Nhayc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBiaXAzMiwgZWNjIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgQXBpS2V5U2hhcmUgfSBmcm9tICcuLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgeyBIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUsIGVuY3J5cHRlZE5TaGFyZS5pc2JzNThFbmNvZGVkKTtcblxuICAgIHN3aXRjaCAoZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHVzZXJOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBiYWNrdXBOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBiaXRnb05TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTlNoYXJlIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgblNoYXJlcy5wdXNoKG5TaGFyZSk7XG4gIH1cblxuICBpZiAoIWJpdGdvTlNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIE4gU2hhcmUnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkS2V5ID0gTVBDLmtleUNvbWJpbmUoa2V5U2hhcmUucFNoYXJlLCBuU2hhcmVzKTtcbiAgaWYgKGNvbWJpbmVkS2V5LnhTaGFyZS55ICsgY29tYmluZWRLZXkueFNoYXJlLmNoYWluY29kZSAhPT0gY29tbW9uS2V5Y2hhaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gIH1cblxuICBjb25zdCBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICBwU2hhcmU6IGtleVNoYXJlLnBTaGFyZSxcbiAgICBiaXRnb05TaGFyZSxcbiAgICBiYWNrdXBOU2hhcmUsXG4gICAgdXNlck5TaGFyZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNpZ25pbmdNYXRlcmlhbCxcbiAgICBjb21tb25LZXljaGFpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduU2hhcmUgd2l0aCBVc2VyIFhTaGFyZSBhbmQgWVNoYXJlIENvcnJlc3BvbmRpbmcgdG8gQml0R29cbiAqIEBwYXJhbSB7WFNoYXJlfSB4U2hhcmUgVXNlciBzZWNyZXQgeFNoYXJlXG4gKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIFlTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduU2hhcmU+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25TaGFyZShcbiAgeFNoYXJlOiBYU2hhcmUgfCBYU2hhcmVXaXRoTlRpbGRlLFxuICB5U2hhcmU6IFlTaGFyZVdpdGhOVGlsZGVcbik6IFByb21pc2U8U2lnblNoYXJlPiB7XG4gIGlmICh4U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFhTaGFyZSwgWFNoYXJlIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoeVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCB5U2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZU2hhcmUgcHJvdmlkZWQgZm9yIHNpZ24nKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgTVBDLnNpZ25TaGFyZSh4U2hhcmUsIHlTaGFyZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgR2FtbWEgU2hhcmUgYW5kIE11U2hhcmUgd2l0aCBVc2VyIFdTaGFyZSBhbmQgQVNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7V1NoYXJlfSB3U2hhcmUgVXNlciBXU2hhcmVcbiAqIEBwYXJhbSB7QVNoYXJlfSBhU2hhcmUgQVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKHdTaGFyZTogV1NoYXJlLCBhU2hhcmU6IEFTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJUPiB7XG4gIGlmICh3U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICBpZiAoYVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBhU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBBU2hhcmUsIGlzIG5vdCBmcm9tIEJpdGdvIHRvIFVzZXInKTtcbiAgfVxuXG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnQoeyB3U2hhcmUsIGFTaGFyZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBPbWljcm9uIFNoYXJlIGFuZCBEZWx0YSBzaGFyZSB3aXRoIHVzZXIgR1NoYXJlXG4gKiBAcGFyYW0ge0dTaGFyZX0gZ1NoYXJlIFVzZXIgR1NoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmUoZ1NoYXJlOiBHU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPiB7XG4gIGlmIChnU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25Db21iaW5lKHtcbiAgICBnU2hhcmU6IGdTaGFyZSxcbiAgICBzaWduSW5kZXg6IHtcbiAgICAgIGk6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sXG4gICAgICBqOiBnU2hhcmUuaSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduYXR1cmUgU2hhcmUgd2l0aCBVc2VyIE9TaGFyZSBhbmQgRFNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7T1NoYXJlfSBvU2hhcmUgVXNlciBPU2hhcmVcbiAqIEBwYXJhbSB7RFNoYXJlfSBkU2hhcmUgRFNoYXJlIGZyb20gYml0Z29cbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gcGVyZm9ybSBzaWduXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxjcmVhdGVVc2VyU2lnblNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICBvU2hhcmU6IE9TaGFyZSxcbiAgZFNoYXJlOiBEU2hhcmUsXG4gIG1lc3NhZ2U6IEJ1ZmZlcixcbiAgaGFzaDogSGFzaCA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpXG4pOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlPiB7XG4gIGlmIChvU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE9TaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuXG4gIGlmIChkU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IGRTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIERTaGFyZSwgZG9lc24ndCBzZWVtIHRvIGJlIGZyb20gQml0R29gKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ24obWVzc2FnZSwgb1NoYXJlLCBkU2hhcmUsIGhhc2gpO1xufVxuXG5leHBvcnQgdHlwZSBNdURTaGFyZSA9IHsgbXVTaGFyZTogTVVTaGFyZTsgZFNoYXJlOiBEU2hhcmU7IGk6IFNoYXJlS2V5UG9zaXRpb24gfTtcblxuLyoqXG4gKiBTZW5kcyBTaGFyZSBUbyBCaXRnb1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSB0aGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0gc2hhcmVUeXBlXG4gKiBAcGFyYW0gc2hhcmVcbiAqIEBwYXJhbSBzaWduZXJTaGFyZVxuICogQHBhcmFtIHZzc1Byb29mIC0gdGhlIHYgdmFsdWUgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gcHJpdmF0ZVNoYXJlUHJvb2YgLSB0aGUgdVNpZyBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSBwdWJsaWNTaGFyZSAtIHRoZSB5IHZhbHVlIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHVzZXJQdWJsaWNHcGdLZXkgLSB0aGUgcHVibGljIGtleSBvZiB0aGUgZ3BnIGtleSB1c2VkIGZvciBjcmVhdGluZyB0aGUgcHJpdmF0ZVNoYXJlUHJvb2ZcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPn0gLSBhIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFNoYXJlVG9CaXRnbyhcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLFxuICBzaGFyZVR5cGU6IFNlbmRTaGFyZVR5cGUsXG4gIHNoYXJlOiBTU2hhcmUgfCBNdURTaGFyZSB8IEtTaGFyZSxcbiAgc2lnbmVyU2hhcmU/OiBzdHJpbmcsXG4gIHZzc1Byb29mPzogc3RyaW5nLFxuICBwcml2YXRlU2hhcmVQcm9vZj86IHN0cmluZyxcbiAgcHVibGljU2hhcmU/OiBzdHJpbmcsXG4gIHVzZXJQdWJsaWNHcGdLZXk/OiBzdHJpbmdcbik6IFByb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPiB7XG4gIGlmIChzaGFyZVR5cGUgIT09IFNlbmRTaGFyZVR5cGUuU1NoYXJlICYmIHNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU2hhcmUsIGlzIG5vdCBmcm9tIFVzZXIgdG8gQml0Z28nKTtcbiAgfVxuICBsZXQgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICBsZXQgcmVzcG9uc2VGcm9tQml0Z286IFNlbmRTaGFyZVRvQml0Z29SVDtcblxuICBzd2l0Y2ggKHNoYXJlVHlwZSkge1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5LU2hhcmU6XG4gICAgICBhc3NlcnQoc2lnbmVyU2hhcmUsIGBzaWduZXIgc2hhcmUgbXVzdCBiZSBwcmVzZW50YCk7XG4gICAgICBjb25zdCBrU2hhcmUgPSBzaGFyZSBhcyBLU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRLU2hhcmUoa1NoYXJlKTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnZzc1Byb29mID0gdnNzUHJvb2Y7XG4gICAgICBzaWduYXR1cmVTaGFyZS5wdWJsaWNTaGFyZSA9IHB1YmxpY1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YgPSBwcml2YXRlU2hhcmVQcm9vZjtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgICBzaWduZXJTaGFyZSxcbiAgICAgICAgJ2VjZHNhJyxcbiAgICAgICAgJ2Z1bGwnLFxuICAgICAgICB1c2VyUHVibGljR3BnS2V5XG4gICAgICApO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLk1VU2hhcmU6XG4gICAgICBjb25zdCBzaGFyZVRvU2VuZCA9IHNoYXJlIGFzIE11RFNoYXJlO1xuICAgICAgY29uc3QgbXVTaGFyZVJlY29yZCA9IGNvbnZlcnRNdVNoYXJlKHNoYXJlVG9TZW5kLm11U2hhcmUpO1xuICAgICAgY29uc3QgZFNoYXJlUmVjb3JkID0gY29udmVydERTaGFyZShzaGFyZVRvU2VuZC5kU2hhcmUpO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSB7XG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlVG9TZW5kLmRTaGFyZS5qKSxcbiAgICAgICAgc2hhcmU6IGAke211U2hhcmVSZWNvcmQuc2hhcmV9JHtzZWNvbmRhcnlEZWxpbWV0ZXJ9JHtkU2hhcmVSZWNvcmQuc2hhcmV9YCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUsIHJlcXVlc3RUeXBlLCBzaWduZXJTaGFyZSwgJ2VjZHNhJyk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuU1NoYXJlOlxuICAgICAgY29uc3Qgc1NoYXJlID0gc2hhcmUgYXMgU1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoc1NoYXJlLCAxLCAzKTtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBzaWduYXR1cmVTaGFyZSwgcmVxdWVzdFR5cGUsIHNpZ25lclNoYXJlLCAnZWNkc2EnKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gc1NoYXJlO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSBnaXZlbiB0byBzZW5kJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGF0ZXN0IHVzZXIncyBzaGFyZSBmcm9tIGJpdGdvIG5lZWRlZCB0byBjb250aW51ZSBzaWduaW5nIGZsb3dcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHtSZWNlaXZlZFNoYXJlVHlwZX0gc2hhcmVUeXBlIC0gdGhlIGV4Y3BlY3RlZCBzaGFyZSB0eXBlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+fSAtIHNoYXJlIGZyb20gYml0Z28gdG8gdXNlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgc2hhcmVUeXBlOiBSZWNlaXZlZFNoYXJlVHlwZSxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBsZXQgcmVzcG9uc2VGcm9tQml0Z286IFNlbmRTaGFyZVRvQml0Z29SVDtcbiAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQpO1xuICBsZXQgdXNlclNoYXJlcztcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgUmVxdWVzdFR5cGUudHg6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0LnRyYW5zYWN0aW9ucywgJ3RyYW5zYWN0aW9ucyByZXF1aXJlZCBhcyBwYXJ0IG9mIHR4UmVxdWVzdCcpO1xuICAgICAgdXNlclNoYXJlcyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS5tZXNzYWdlOlxuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC5tZXNzYWdlcywgJ21lc3NhZ2VzIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0Lm1lc3NhZ2VzWzBdLnNpZ25hdHVyZVNoYXJlcztcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdXNlclNoYXJlcyB8fCAhdXNlclNoYXJlcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXIgc2hhcmUgaXMgbm90IHByZXNlbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHNoYXJlUmVjb3JkID0gdXNlclNoYXJlc1t1c2VyU2hhcmVzLmxlbmd0aCAtIDFdO1xuICBzd2l0Y2ggKHNoYXJlVHlwZSkge1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuQVNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZUFTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VEU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5TaWduYXR1cmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaGFyZSByZWNlaXZlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlRnJvbUJpdGdvO1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgTlNoYXJlIHRvIGJlIGV4Y2hhbmdlZCB3aXRoIG90aGVyIGtleSBob2xkZXJzLlxuICogT3V0cHV0IGlzIGluIGEgZm9ybWF0IHRoYXQgaXMgdXNhYmxlIHdpdGhpbiBCaXRHbydzIGVjb3N5c3RlbS5cbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggLSBpbmRleCBvZiB0aGUgcmVjaXBpZW50ICgxLCAyLCBvciAzKVxuICogQHBhcmFtIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIC0gcmVjaXBpZW50J3MgcHVibGljIGdwZyBrZXkgaW4gYXJtb3IgZm9ybWF0XG4gKiBAcGFyYW0gc2VuZGVyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAqIEBwYXJhbSBpc2JzNThFbmNvZGVkIC0gaXMgYnM1OCBlbmNvZGVkIG9yIG5vdFxuICogQHJldHVybnMgZW5jcnlwdGVkIE4gU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHROU2hhcmUoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50R3BnUHVibGljQXJtb3I6IHN0cmluZyxcbiAgc2VuZGVyR3BnS2V5OiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgaXNiczU4RW5jb2RlZCA9IHRydWVcbik6IFByb21pc2U8RW5jcnlwdGVkTlNoYXJlPiB7XG4gIGNvbnN0IG5TaGFyZSA9IGtleVNoYXJlLm5TaGFyZXNbcmVjaXBpZW50SW5kZXhdO1xuICBpZiAoIW5TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZWNpcGllbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHB1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUucFNoYXJlLnksICdoZXgnKSxcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gIF0pLnRvU3RyaW5nKCdoZXgnKTtcblxuICBsZXQgcHJpdmF0ZVNoYXJlO1xuICBpZiAoaXNiczU4RW5jb2RlZCkge1xuICAgIHByaXZhdGVTaGFyZSA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKSkudG9CYXNlNTgoKTtcbiAgfSBlbHNlIHtcbiAgICBwcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShuU2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbShuU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyldKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiByZWNpcGllbnRHcGdQdWJsaWNBcm1vciB9KTtcblxuICBjb25zdCBlbmNyeXB0ZWRQcml2YXRlU2hhcmUgPSAoYXdhaXQgcGdwLmVuY3J5cHQoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IHByaXZhdGVTaGFyZSxcbiAgICB9KSxcbiAgICBlbmNyeXB0aW9uS2V5czogW3JlY2lwaWVudFB1YmxpY0tleV0sXG4gIH0pKSBhcyBzdHJpbmc7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBuU2hhcmUuaSxcbiAgICBqOiBuU2hhcmUuaixcbiAgICBwdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmUsXG4gICAgbjogblNoYXJlLm4sXG4gICAgdnNzUHJvb2Y6IG5TaGFyZS52LFxuICAgIHByaXZhdGVTaGFyZVByb29mOiBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHNlbmRlckdwZ0tleS5wcml2YXRlS2V5LCBuU2hhcmUudSwgJ2VjZHNhJyksXG4gIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBBbiBBUEkga2V5IHNoYXJlIHJlY2VpdmVkIGZyb20gYSB0aGlyZCBwYXJ0eSBzaG91bGQgYWxyZWFkeSBiZSBlbmNyeXB0ZWRcbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGROU2hhcmVGcm9tQVBJS2V5U2hhcmUoa2V5U2hhcmU6IEFwaUtleVNoYXJlKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLmZyb20pLFxuICAgIHB1YmxpY1NoYXJlOiBrZXlTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGtleVNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICBuOiBrZXlTaGFyZS5uID8/ICcnLCAvLyB0aGlzIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkIGZvciBrZXkgY3JlYXRpb25cbiAgICBwcml2YXRlU2hhcmVQcm9vZjoga2V5U2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgdnNzUHJvb2Y6IGtleVNoYXJlLnZzc1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIERlY3J5cHRzIGVuY3J5cHRlZCBuIHNoYXJlXG4gKiBAcGFyYW0gZW5jcnlwdGVkTlNoYXJlIC0gZGVjcnlwdGFibGUgbiBzaGFyZSB3aXRoIHJlY2lwaWVudCBwcml2YXRlIGdwZyBrZXkgYXJtb3IgYW5kIHNlbmRlciBwdWJsaWMgZ3BnIGtleVxuICogQHJldHVybnMgTiBzaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmU6IERlY3J5cHRhYmxlTlNoYXJlLCBpc2JzNThFbmNvZGVkID0gdHJ1ZSk6IFByb21pc2U8TlNoYXJlPiB7XG4gIGNvbnN0IHJlY2lwaWVudFByaXZhdGVLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGVuY3J5cHRlZE5TaGFyZS5yZWNpcGllbnRQcml2YXRlQXJtb3IgfSk7XG4gIGNvbnN0IHBydiA9IChcbiAgICBhd2FpdCBwZ3AuZGVjcnlwdCh7XG4gICAgICBtZXNzYWdlOiBhd2FpdCBwZ3AucmVhZE1lc3NhZ2UoeyBhcm1vcmVkTWVzc2FnZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5lbmNyeXB0ZWRQcml2YXRlU2hhcmUgfSksXG4gICAgICBkZWNyeXB0aW9uS2V5czogW3JlY2lwaWVudFByaXZhdGVLZXkgYXMgcGdwLlByaXZhdGVLZXldLFxuICAgIH0pXG4gICkuZGF0YSBhcyBzdHJpbmc7XG5cbiAgbGV0IHU6IHN0cmluZztcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmUgPSBiczU4LmRlY29kZShwcnYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB1ID0gcHJpdmF0ZVNoYXJlLnNsaWNlKDkyLCAxNTYpO1xuICB9IGVsc2Uge1xuICAgIHUgPSBwcnYuc2xpY2UoMCwgNjQpO1xuICB9XG5cbiAgY29uc3QgblNoYXJlOiBOU2hhcmUgPSB7XG4gICAgaTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5pLFxuICAgIGo6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaixcbiAgICBuOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLm4sXG4gICAgeTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA2NiksXG4gICAgdTogdSxcbiAgICBjaGFpbmNvZGU6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoNjYsIDEzMCksXG4gICAgdjogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS52c3NQcm9vZixcbiAgfTtcblxuICByZXR1cm4gblNoYXJlO1xufVxuXG4vKipcbiAqIEdldHMgcHVibGljIGtleSBmcm9tIGNvbW1vbiBrZXkgY2hhaW5cbiAqIEBwYXJhbSBjb21tb25LZXlDaGFpbiAtIGNvbW1vbiBrZXkgY2hhaW4gb2YgZWNkc2EgdHNzXG4gKiBAcmV0dXJucyBwdWJsaWMga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdWJsaWNLZXkoY29tbW9uS2V5Q2hhaW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tb25LZXlDaGFpbi5zbGljZSgwLCA2Nik7XG59XG5cbmV4cG9ydCBjb25zdCBkZWxpbWV0ZXIgPSAnOic7XG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5RGVsaW1ldGVyID0gJy0nO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXM6IHN0cmluZ1tdLCBleHBlY3RlZExlbmd0aDogbnVtYmVyLCBzaGFyZU5hbWU6IHN0cmluZykge1xuICBpZiAoc2hhcmVzLmxlbmd0aCA8IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7c2hhcmVOYW1lfSBzaGFyZWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzOiBzdHJpbmdbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHNoYXJlTmFtZTogc3RyaW5nLCB2YWx1ZU5hbWU6IHN0cmluZykge1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICBpZiAoc2hhcmVzW2ldKSB7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChmb3VuZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvbnNpc3RlbnQgb3B0aW9uYWwgJHt2YWx1ZU5hbWV9IHZhbHVlIGluICR7c2hhcmVOYW1lfSBzaGFyZWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbi8qKlxuICogcGFyc2VzIEsgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBLIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUtTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBLU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuXG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMTEsICdLJyk7XG4gIGNvbnN0IGhhc1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDUsIDExLCAnSycsICdwcm9vZicpO1xuXG4gIGxldCBwcm9vZjtcbiAgaWYgKGhhc1Byb29mKSB7XG4gICAgcHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbNV0sXG4gICAgICB1OiBzaGFyZXNbNl0sXG4gICAgICB3OiBzaGFyZXNbN10sXG4gICAgICBzOiBzaGFyZXNbOF0sXG4gICAgICBzMTogc2hhcmVzWzldLFxuICAgICAgczI6IHNoYXJlc1sxMF0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgbjogc2hhcmVzWzFdLFxuICAgIG50aWxkZTogc2hhcmVzWzJdLFxuICAgIGgxOiBzaGFyZXNbM10sXG4gICAgaDI6IHNoYXJlc1s0XSxcbiAgICBwcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEsgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gSyBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEtTaGFyZShzaGFyZTogS1NoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udGlsZGV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMX0ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuaDJcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy51IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMyIHx8ICcnfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEEgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBBIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBBU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDM3LCAnQScpO1xuICBjb25zdCBoYXNQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCA3LCAxMywgJ0EnLCAncHJvb2YnKTtcbiAgY29uc3QgaGFzR2FtbWFQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAxMywgMjUsICdBJywgJ2dhbW1hUHJvb2YnKTtcbiAgY29uc3QgaGFzV1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDI1LCAzNywgJ0EnLCAnd1Byb29mJyk7XG5cbiAgbGV0IHByb29mO1xuICBpZiAoaGFzUHJvb2YpIHtcbiAgICBwcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1s3XSxcbiAgICAgIHU6IHNoYXJlc1s4XSxcbiAgICAgIHc6IHNoYXJlc1s5XSxcbiAgICAgIHM6IHNoYXJlc1sxMF0sXG4gICAgICBzMTogc2hhcmVzWzExXSxcbiAgICAgIHMyOiBzaGFyZXNbMTJdLFxuICAgIH07XG4gIH1cblxuICBsZXQgZ2FtbWFQcm9vZjtcbiAgaWYgKGhhc0dhbW1hUHJvb2YpIHtcbiAgICBnYW1tYVByb29mID0ge1xuICAgICAgejogc2hhcmVzWzEzXSxcbiAgICAgIHpwcm06IHNoYXJlc1sxNF0sXG4gICAgICB0OiBzaGFyZXNbMTVdLFxuICAgICAgdjogc2hhcmVzWzE2XSxcbiAgICAgIHc6IHNoYXJlc1sxN10sXG4gICAgICBzOiBzaGFyZXNbMThdLFxuICAgICAgczE6IHNoYXJlc1sxOV0sXG4gICAgICBzMjogc2hhcmVzWzIwXSxcbiAgICAgIHQxOiBzaGFyZXNbMjFdLFxuICAgICAgdDI6IHNoYXJlc1syMl0sXG4gICAgICB1OiBzaGFyZXNbMjNdLFxuICAgICAgeDogc2hhcmVzWzI0XSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHdQcm9vZjtcbiAgaWYgKGhhc1dQcm9vZikge1xuICAgIHdQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1syNV0sXG4gICAgICB6cHJtOiBzaGFyZXNbMjZdLFxuICAgICAgdDogc2hhcmVzWzI3XSxcbiAgICAgIHY6IHNoYXJlc1syOF0sXG4gICAgICB3OiBzaGFyZXNbMjldLFxuICAgICAgczogc2hhcmVzWzMwXSxcbiAgICAgIHMxOiBzaGFyZXNbMzFdLFxuICAgICAgczI6IHNoYXJlc1szMl0sXG4gICAgICB0MTogc2hhcmVzWzMzXSxcbiAgICAgIHQyOiBzaGFyZXNbMzRdLFxuICAgICAgdTogc2hhcmVzWzM1XSxcbiAgICAgIHg6IHNoYXJlc1szNl0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgYWxwaGE6IHNoYXJlc1sxXSxcbiAgICBtdTogc2hhcmVzWzJdLFxuICAgIG46IHNoYXJlc1szXSxcbiAgICBudGlsZGU6IHNoYXJlc1s0XSxcbiAgICBoMTogc2hhcmVzWzVdLFxuICAgIGgyOiBzaGFyZXNbNl0sXG4gICAgcHJvb2YsXG4gICAgZ2FtbWFQcm9vZixcbiAgICB3UHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBBIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEEgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBU2hhcmUoc2hhcmU6IEFTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUubnRpbGRlXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMn0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy53IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy5zMSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMiB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueCB8fCAnJ31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBNdSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE11IFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11U2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogTVVTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMjYsICdNdScpO1xuICBjb25zdCBoYXNHYW1tYVByb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDIsIDE0LCAnTXUnLCAnZ2FtbWFQcm9vZicpO1xuICBjb25zdCBoYXNXUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTQsIDI2LCAnTXUnLCAnd1Byb29mJyk7XG5cbiAgbGV0IGdhbW1hUHJvb2Y7XG4gIGlmIChoYXNHYW1tYVByb29mKSB7XG4gICAgZ2FtbWFQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1syXSxcbiAgICAgIHpwcm06IHNoYXJlc1szXSxcbiAgICAgIHQ6IHNoYXJlc1s0XSxcbiAgICAgIHY6IHNoYXJlc1s1XSxcbiAgICAgIHc6IHNoYXJlc1s2XSxcbiAgICAgIHM6IHNoYXJlc1s3XSxcbiAgICAgIHMxOiBzaGFyZXNbOF0sXG4gICAgICBzMjogc2hhcmVzWzldLFxuICAgICAgdDE6IHNoYXJlc1sxMF0sXG4gICAgICB0Mjogc2hhcmVzWzExXSxcbiAgICAgIHU6IHNoYXJlc1sxMl0sXG4gICAgICB4OiBzaGFyZXNbMTNdLFxuICAgIH07XG4gIH1cblxuICBsZXQgd1Byb29mO1xuICBpZiAoaGFzV1Byb29mKSB7XG4gICAgd1Byb29mID0ge1xuICAgICAgejogc2hhcmVzWzE0XSxcbiAgICAgIHpwcm06IHNoYXJlc1sxNV0sXG4gICAgICB0OiBzaGFyZXNbMTZdLFxuICAgICAgdjogc2hhcmVzWzE3XSxcbiAgICAgIHc6IHNoYXJlc1sxOF0sXG4gICAgICBzOiBzaGFyZXNbMTldLFxuICAgICAgczE6IHNoYXJlc1syMF0sXG4gICAgICBzMjogc2hhcmVzWzIxXSxcbiAgICAgIHQxOiBzaGFyZXNbMjJdLFxuICAgICAgdDI6IHNoYXJlc1syM10sXG4gICAgICB1OiBzaGFyZXNbMjRdLFxuICAgICAgeDogc2hhcmVzWzI1XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGFscGhhOiBzaGFyZXNbMF0sXG4gICAgbXU6IHNoYXJlc1sxXSxcbiAgICBnYW1tYVByb29mLFxuICAgIHdQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IE11IHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIE11IHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TXVTaGFyZShzaGFyZTogTVVTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmFscGhhfSR7ZGVsaW1ldGVyfSR7c2hhcmUubXV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnggfHwgJyd9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IERTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ0QnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgZGVsdGE6IHNoYXJlc1swXSxcbiAgICBHYW1tYTogc2hhcmVzWzFdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgRCBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBEIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RFNoYXJlKHNoYXJlOiBEU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLkdhbW1hfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIFMgYW5kIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBTIGFuZCBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNEU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogeyBzU2hhcmU6IFNpZ25hdHVyZVNoYXJlOyBkU2hhcmU6IERTaGFyZSB9IHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoc2Vjb25kYXJ5RGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnU0QnKTtcblxuICByZXR1cm4ge1xuICAgIHNTaGFyZTogcGFyc2VTaWduYXR1cmVTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1swXSB9KSxcbiAgICBkU2hhcmU6IHBhcnNlRFNoYXJlKHsgdG86IHNoYXJlLnRvLCBmcm9tOiBzaGFyZS5mcm9tLCBzaGFyZTogc2hhcmVzWzFdIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgUyBhbmQgRCBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBTIGFuZCBEIHNoYXJlIGluIGEgb2JqZWN0XG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U0RTaGFyZShzaGFyZTogeyBzU2hhcmU6IFNTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuc1NoYXJlLlJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS55fSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLkdhbW1hfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIHNpZ25hdHVyZSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmVTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMywgJ1NpZ25hdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgUjogc2hhcmVzWzBdLFxuICAgIHM6IHNoYXJlc1sxXSxcbiAgICB5OiBzaGFyZXNbMl0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmV0cyBjb21iaW5lZCBzaWduYXR1cmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNpZ25hdHVyZSAtIGNvbWJpbmVkIHNpZ25hdHVyZSBzaGFyZVxuICogQHBhcmFtIHVzZXJJbmRleCAtIHVzZXIgaW5kZXgsIGVpdGhlciAxICh1c2VyKSBvciAyIChiYWNrdXApXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q29tYmluZWRTaWduYXR1cmUoc2lnbmF0dXJlOiBTaWduYXR1cmUsIHVzZXJJbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgodXNlckluZGV4KSxcbiAgICBzaGFyZTogYCR7c2lnbmF0dXJlLnJlY2lkfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnJ9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUuc30ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS55fWAsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbWJpbmVkU2lnbmF0dXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMywgJ1NpZ25hdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgcmVjaWQ6IE51bWJlcihzaGFyZXNbMF0pLFxuICAgIHI6IHNoYXJlc1sxXSxcbiAgICBzOiBzaGFyZXNbMl0sXG4gICAgeTogc2hhcmVzWzNdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgc2lnbmF0dXJlIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFNpZ25hdHVyZSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNpZ25hdHVyZVNoYXJlKFxuICBzaGFyZTogU2lnbmF0dXJlU2hhcmUsXG4gIHNlbmRlckluZGV4OiBudW1iZXIsXG4gIHJlY2lwaWVudEluZGV4OiBudW1iZXJcbik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgocmVjaXBpZW50SW5kZXgpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNlbmRlckluZGV4KSxcbiAgICBzaGFyZTogYCR7c2hhcmUuUn0ke2RlbGltZXRlcn0ke3NoYXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydHMgQiBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBCIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QlNoYXJlKHNoYXJlOiBCU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuYmV0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm51fSR7ZGVsaW1ldGVyfSR7c2hhcmUud30ke2RlbGltZXRlcn0ke3NoYXJlLnl9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5sfSR7ZGVsaW1ldGVyfSR7c2hhcmUubX0ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udGlsZGV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMX0ke2RlbGltZXRlcn0ke3NoYXJlLmgyfSR7ZGVsaW1ldGVyfSR7c2hhcmUuY2t9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgQiBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBCIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQiBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQlNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAxMywgJ0InKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGJldGE6IHNoYXJlc1swXSxcbiAgICBnYW1tYTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBudTogc2hhcmVzWzNdLFxuICAgIHc6IHNoYXJlc1s0XSxcbiAgICB5OiBzaGFyZXNbNV0sXG4gICAgbDogc2hhcmVzWzZdLFxuICAgIG06IHNoYXJlc1s3XSxcbiAgICBuOiBzaGFyZXNbOF0sXG4gICAgbnRpbGRlOiBzaGFyZXNbOV0sXG4gICAgaDE6IHNoYXJlc1sxMF0sXG4gICAgaDI6IHNoYXJlc1sxMV0sXG4gICAgY2s6IHNoYXJlc1sxMl0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydHMgTyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE9TaGFyZShzaGFyZTogT1NoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLkdhbW1hfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUub21pY3Jvbn0ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBPIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogT1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCA1LCAnTycpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgR2FtbWE6IHNoYXJlc1swXSxcbiAgICBkZWx0YTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBvbWljcm9uOiBzaGFyZXNbM10sXG4gICAgeTogc2hhcmVzWzRdLFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgcGFydGljaXBhbnQgaW5kZXhcbiAqIEBwYXJhbSBwYXJ0aWNpcGFudCAtIHBhcnRpY2lwYW50cyAodXNlciwgYmFja3VwLCBvciBiaXRnbylcbiAqIEByZXR1cm5zIGluZGV4ICgxLCAyLCAwciAzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRJbmRleChwYXJ0aWNpcGFudDogJ3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChwYXJ0aWNpcGFudCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAnYmFja3VwJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2JpdGdvJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignVW5rb3duIHBhcnRpY2lwYW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IG5hbWUgYnkgaW5kZXhcbiAqIEBwYXJhbSBpbmRleCBwYXJ0aWNpcGFudCBpbmRleFxuICogQHJldHVybnMgcGFydGljaXBhbnQgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoaW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIHN3aXRjaCAoaW5kZXgpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVI7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBhcnRpY2lwYW50IGluZGV4ICR7aW5kZXh9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IHUtdmFsdWUgd2FsbGV0IHNpZ25hdHVyZXMgZm9yIHRoZSBiaXRnby11c2VyIGFuZCBiaXRnby1iYWNrdXAgc2hhcmVzLlxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHBhcmFtczoge1xuICB3YWxsZXRTaWduYXR1cmU6IHBncC5LZXk7XG4gIGJpdGdvUHViOiBwZ3AuS2V5O1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICB1c2VyS2V5SWQ6IHN0cmluZztcbiAgYmFja3VwS2V5SWQ6IHN0cmluZztcbiAgZGVjcnlwdGVkU2hhcmU6IHN0cmluZztcbiAgdmVyaWZpZXJJbmRleDogMSB8IDI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJhd05vdGF0aW9ucyA9IGF3YWl0IGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXMpO1xuICBjb25zdCBwdWJsaWNVVmFsdWVSYXdOb3RhdGlvbkluZGV4ID0gMiArIHBhcmFtcy52ZXJpZmllckluZGV4O1xuXG4gIC8vIERlcml2ZSBwdWJsaWMgZm9ybSBvZiB1LXZhbHVlXG4gIGNvbnN0IHB1YmxpY1VWYWx1ZSA9IGVjYy5wb2ludEZyb21TY2FsYXIoQnVmZmVyLmZyb20ocGFyYW1zLmRlY3J5cHRlZFNoYXJlLnNsaWNlKDAsIDY0KSwgJ2hleCcpLCB0cnVlKTtcbiAgYXNzZXJ0KHB1YmxpY1VWYWx1ZSAhPT0gbnVsbCwgJ251bGwgcHVibGljIHUtdmFsdWUnKTtcbiAgLy8gVmVyaWZ5IHRoYXQgdGhlIHUgdmFsdWUgKyBjaGFpbmNvZGUgaXMgZXF1YWwgdG8gdGhlIHByb29mIHJldHJpZXZlZCBmcm9tIHRoZSByYXcgbm90YXRpb25zXG4gIGFzc2VydChcbiAgICBCdWZmZXIuZnJvbShwdWJsaWNVVmFsdWUpLnRvU3RyaW5nKCdoZXgnKSArIHBhcmFtcy5kZWNyeXB0ZWRTaGFyZS5zbGljZSg2NCkgPT09XG4gICAgICBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbcHVibGljVVZhbHVlUmF3Tm90YXRpb25JbmRleF0udmFsdWUpLnRvU3RyaW5nKCksXG4gICAgJ2JpdGdvIHNoYXJlIG1pc21hdGNoJ1xuICApO1xufVxuIl19
807
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBd0JpQjtBQUNqQix1Q0FBc0c7QUFDdEcsb0NBQTRDO0FBRzVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUE2QztBQUM3Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBSXhCLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLFFBQVEsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDaEMsS0FBSyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FB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QUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sR0FBRztZQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUs7UUFDTCxVQUFVO1FBQ1YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBckVELGtDQXFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTs7SUFDekMsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FDbEcsS0FBSyxDQUFDLE1BQ1IsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUNwQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEtBQUksRUFDNUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDMUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMzRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQzFCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzVGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDdEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLElBQUksS0FBSSxFQUN4QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNsRixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ25GLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFDdEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDcEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEVBQUU7S0FDdkMsQ0FBQztBQUNKLENBQUM7QUE1QkQsc0NBNEJDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUEyQjtJQUN0RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBUyxDQUFDLENBQUM7SUFDNUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxhQUFhLEVBQUU7UUFDakIsVUFBVSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sR0FBRztZQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixVQUFVO1FBQ1YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBbERELG9DQWtEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYzs7SUFDM0MsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDOUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLElBQUksS0FBSSxFQUM1QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMxRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFDMUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDNUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsSUFBSSxLQUFJLEVBQ3hCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2xGLENBQUEs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QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDMUUsc0JBQXNCLENBQ3ZCLENBQUM7QUFDSixDQUFDO0FBckJELHNEQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVjZHNhIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7XG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBDb21iaW5lZEtleSxcbiAgU2lnbmluZ01hdGVyaWFsLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEFTaGFyZSxcbiAgQ3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJULFxuICBDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVCxcbiAgRFNoYXJlLFxuICBHU2hhcmUsXG4gIEtleVNoYXJlLFxuICBOU2hhcmUsXG4gIE9TaGFyZSxcbiAgU2VuZFNoYXJlVHlwZSxcbiAgU2lnbmF0dXJlU2hhcmUsXG4gIFNpZ25TaGFyZSxcbiAgWFNoYXJlLFxuICBXU2hhcmUsXG4gIFhTaGFyZVdpdGhOdGlsZGUsXG4gIFlTaGFyZVdpdGhOdGlsZGUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFJlcXVlc3RUeXBlLCBjcmVhdGVTaGFyZVByb29mIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2hhcmVLZXlQb3NpdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLU2hhcmUsIE1VU2hhcmUsIFNTaGFyZSB9IGZyb20gJy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MvZWNkc2EvdHlwZXMnO1xuaW1wb3J0IHsgY29tbW9uVmVyaWZ5V2FsbGV0U2lnbmF0dXJlLCBnZXRUeFJlcXVlc3QsIHNlbmRTaWduYXR1cmVTaGFyZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgY3JlYXRlS2VjY2FrSGFzaCBmcm9tICdrZWNjYWsnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgYmlwMzIsIGVjYyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IEFwaUtleVNoYXJlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4vKipcbiAqIENvbWJpbmVzIE5TaGFyZXMgdG8gY29tYmluZSB0aGUgZmluYWwgVFNTIGtleVxuICogVGhpcyBjYW4gb25seSBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVXNlciBvciBCYWNrdXAga2V5IHNpbmNlIGl0IHJlcXVpcmVzIHRoZSBjb21tb24ga2V5Y2hhaW4gZnJvbSBCaXRHbyBmaXJzdFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmVzIC0gZW5jcnlwdGVkIE5TaGFyZXMgd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGVjcnlwdFxuICogQHBhcmFtIGNvbW1vbktleWNoYWluIC0gZXhwZWN0ZWQgY29tbW9uIGtleWNoYWluIG9mIHRoZSBjb21iaW5lZCBrZXlcbiAqIEByZXR1cm5zIHtDb21iaW5lZEtleX0gY29tYmluZWQgVFNTIGtleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tYmluZWRLZXkoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgZW5jcnlwdGVkTlNoYXJlczogRGVjcnlwdGFibGVOU2hhcmVbXSxcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZ1xuKTogUHJvbWlzZTxDb21iaW5lZEtleT4ge1xuICBjb25zdCBuU2hhcmVzOiBOU2hhcmVbXSA9IFtdO1xuXG4gIGxldCBiaXRnb05TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgdXNlck5TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgYmFja3VwTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBlbmNyeXB0ZWROU2hhcmUgb2YgZW5jcnlwdGVkTlNoYXJlcykge1xuICAgIGNvbnN0IG5TaGFyZSA9IGF3YWl0IGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlLCBlbmNyeXB0ZWROU2hhcmUuaXNiczU4RW5jb2RlZCk7XG5cbiAgICBzd2l0Y2ggKGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB1c2VyTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgYmFja3VwTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgYml0Z29OU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIE5TaGFyZSBpbmRleCcpO1xuICAgIH1cblxuICAgIG5TaGFyZXMucHVzaChuU2hhcmUpO1xuICB9XG5cbiAgaWYgKCFiaXRnb05TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBOIFNoYXJlJyk7XG4gIH1cblxuICBjb25zdCBjb21iaW5lZEtleSA9IE1QQy5rZXlDb21iaW5lKGtleVNoYXJlLnBTaGFyZSwgblNoYXJlcyk7XG4gIGlmIChjb21iaW5lZEtleS54U2hhcmUueSArIGNvbWJpbmVkS2V5LnhTaGFyZS5jaGFpbmNvZGUgIT09IGNvbW1vbktleWNoYWluKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuICB9XG5cbiAgY29uc3Qgc2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgcFNoYXJlOiBrZXlTaGFyZS5wU2hhcmUsXG4gICAgYml0Z29OU2hhcmUsXG4gICAgYmFja3VwTlNoYXJlLFxuICAgIHVzZXJOU2hhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduaW5nTWF0ZXJpYWwsXG4gICAgY29tbW9uS2V5Y2hhaW4sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnblNoYXJlIHdpdGggVXNlciBYU2hhcmUgYW5kIFlTaGFyZSBDb3JyZXNwb25kaW5nIHRvIEJpdEdvXG4gKiBAcGFyYW0ge1hTaGFyZX0geFNoYXJlIFVzZXIgc2VjcmV0IHhTaGFyZVxuICogQHBhcmFtIHtZU2hhcmV9IHlTaGFyZSBZU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnblNoYXJlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduU2hhcmUoXG4gIHhTaGFyZTogWFNoYXJlIHwgWFNoYXJlV2l0aE50aWxkZSxcbiAgeVNoYXJlOiBZU2hhcmVXaXRoTnRpbGRlXG4pOiBQcm9taXNlPFNpZ25TaGFyZT4ge1xuICBpZiAoeFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBYU2hhcmUsIFhTaGFyZSBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKHlTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgeVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgWVNoYXJlIHByb3ZpZGVkIGZvciBzaWduJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IE1QQy5zaWduU2hhcmUoeFNoYXJlLCB5U2hhcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIEdhbW1hIFNoYXJlIGFuZCBNdVNoYXJlIHdpdGggVXNlciBXU2hhcmUgYW5kIEFTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge1dTaGFyZX0gd1NoYXJlIFVzZXIgV1NoYXJlXG4gKiBAcGFyYW0ge0FTaGFyZX0gYVNoYXJlIEFTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZSh3U2hhcmU6IFdTaGFyZSwgYVNoYXJlOiBBU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD4ge1xuICBpZiAod1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBXU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgaWYgKGFTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgYVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQVNoYXJlLCBpcyBub3QgZnJvbSBCaXRnbyB0byBVc2VyJyk7XG4gIH1cblxuICByZXR1cm4gTVBDLnNpZ25Db252ZXJ0KHsgd1NoYXJlLCBhU2hhcmUgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgT21pY3JvbiBTaGFyZSBhbmQgRGVsdGEgc2hhcmUgd2l0aCB1c2VyIEdTaGFyZVxuICogQHBhcmFtIHtHU2hhcmV9IGdTaGFyZSBVc2VyIEdTaGFyZVxuICogQHJldHVybnMge1Byb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlKGdTaGFyZTogR1NoYXJlKTogUHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD4ge1xuICBpZiAoZ1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBHU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduQ29tYmluZSh7XG4gICAgZ1NoYXJlOiBnU2hhcmUsXG4gICAgc2lnbkluZGV4OiB7XG4gICAgICBpOiBTaGFyZUtleVBvc2l0aW9uLkJJVEdPLFxuICAgICAgajogZ1NoYXJlLmksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnbmF0dXJlIFNoYXJlIHdpdGggVXNlciBPU2hhcmUgYW5kIERTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge09TaGFyZX0gb1NoYXJlIFVzZXIgT1NoYXJlXG4gKiBAcGFyYW0ge0RTaGFyZX0gZFNoYXJlIERTaGFyZSBmcm9tIGJpdGdvXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIHBlcmZvcm0gc2lnblxuICogQHJldHVybnMge1Byb21pc2U8Y3JlYXRlVXNlclNpZ25TaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgb1NoYXJlOiBPU2hhcmUsXG4gIGRTaGFyZTogRFNoYXJlLFxuICBtZXNzYWdlOiBCdWZmZXIsXG4gIGhhc2g6IEhhc2ggPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKVxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZT4ge1xuICBpZiAob1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBPU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBkU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEU2hhcmUsIGRvZXNuJ3Qgc2VlbSB0byBiZSBmcm9tIEJpdEdvYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduKG1lc3NhZ2UsIG9TaGFyZSwgZFNoYXJlLCBoYXNoKTtcbn1cblxuZXhwb3J0IHR5cGUgTXVEU2hhcmUgPSB7IG11U2hhcmU6IE1VU2hhcmU7IGRTaGFyZTogRFNoYXJlOyBpOiBTaGFyZUtleVBvc2l0aW9uIH07XG5cbi8qKlxuICogU2VuZHMgU2hhcmUgVG8gQml0Z29cbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHJlcXVlc3RUeXBlIC0gdGhlIHR5cGUgb2YgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgKGVpdGhlciB0eCBvciBtZXNzYWdlIGZvciBzaWduaW5nKVxuICogQHBhcmFtIHNoYXJlVHlwZVxuICogQHBhcmFtIHNoYXJlXG4gKiBAcGFyYW0gc2lnbmVyU2hhcmVcbiAqIEBwYXJhbSB2c3NQcm9vZiAtIHRoZSB2IHZhbHVlIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHByaXZhdGVTaGFyZVByb29mIC0gdGhlIHVTaWcgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gcHVibGljU2hhcmUgLSB0aGUgeSB2YWx1ZSBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSB1c2VyUHVibGljR3BnS2V5IC0gdGhlIHB1YmxpYyBrZXkgb2YgdGhlIGdwZyBrZXkgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByaXZhdGVTaGFyZVByb29mXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaGFyZVRvQml0Z28oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgc2hhcmVUeXBlOiBTZW5kU2hhcmVUeXBlLFxuICBzaGFyZTogU1NoYXJlIHwgTXVEU2hhcmUgfCBLU2hhcmUsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nLFxuICB2c3NQcm9vZj86IHN0cmluZyxcbiAgcHJpdmF0ZVNoYXJlUHJvb2Y/OiBzdHJpbmcsXG4gIHB1YmxpY1NoYXJlPzogc3RyaW5nLFxuICB1c2VyUHVibGljR3BnS2V5Pzogc3RyaW5nXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBpZiAoc2hhcmVUeXBlICE9PSBTZW5kU2hhcmVUeXBlLlNTaGFyZSAmJiBzaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlLCBpcyBub3QgZnJvbSBVc2VyIHRvIEJpdGdvJyk7XG4gIH1cbiAgbGV0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgbGV0IHJlc3BvbnNlRnJvbUJpdGdvOiBTZW5kU2hhcmVUb0JpdGdvUlQ7XG5cbiAgc3dpdGNoIChzaGFyZVR5cGUpIHtcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuS1NoYXJlOlxuICAgICAgYXNzZXJ0KHNpZ25lclNoYXJlLCBgc2lnbmVyIHNoYXJlIG11c3QgYmUgcHJlc2VudGApO1xuICAgICAgY29uc3Qga1NoYXJlID0gc2hhcmUgYXMgS1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSBjb252ZXJ0S1NoYXJlKGtTaGFyZSk7XG4gICAgICBzaWduYXR1cmVTaGFyZS52c3NQcm9vZiA9IHZzc1Byb29mO1xuICAgICAgc2lnbmF0dXJlU2hhcmUucHVibGljU2hhcmUgPSBwdWJsaWNTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnByaXZhdGVTaGFyZVByb29mID0gcHJpdmF0ZVNoYXJlUHJvb2Y7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZSxcbiAgICAgICAgc2lnbmVyU2hhcmUsXG4gICAgICAgICdlY2RzYScsXG4gICAgICAgICdmdWxsJyxcbiAgICAgICAgdXNlclB1YmxpY0dwZ0tleVxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgUmVjZWl2ZWRTaGFyZVR5cGUuQVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5NVVNoYXJlOlxuICAgICAgY29uc3Qgc2hhcmVUb1NlbmQgPSBzaGFyZSBhcyBNdURTaGFyZTtcbiAgICAgIGNvbnN0IG11U2hhcmVSZWNvcmQgPSBjb252ZXJ0TXVTaGFyZShzaGFyZVRvU2VuZC5tdVNoYXJlKTtcbiAgICAgIGNvbnN0IGRTaGFyZVJlY29yZCA9IGNvbnZlcnREU2hhcmUoc2hhcmVUb1NlbmQuZFNoYXJlKTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0ge1xuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZVRvU2VuZC5kU2hhcmUuaiksXG4gICAgICAgIHNoYXJlOiBgJHttdVNoYXJlUmVjb3JkLnNoYXJlfSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7ZFNoYXJlUmVjb3JkLnNoYXJlfWAsXG4gICAgICB9O1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBSZWNlaXZlZFNoYXJlVHlwZS5EU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLlNTaGFyZTpcbiAgICAgIGNvbnN0IHNTaGFyZSA9IHNoYXJlIGFzIFNTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydFNpZ25hdHVyZVNoYXJlKHNTaGFyZSwgMSwgMyk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUsIHJlcXVlc3RUeXBlLCBzaWduZXJTaGFyZSwgJ2VjZHNhJyk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHNTaGFyZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU2hhcmUgZ2l2ZW4gdG8gc2VuZCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlRnJvbUJpdGdvO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxhdGVzdCB1c2VyJ3Mgc2hhcmUgZnJvbSBiaXRnbyBuZWVkZWQgdG8gY29udGludWUgc2lnbmluZyBmbG93XG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSB7UmVjZWl2ZWRTaGFyZVR5cGV9IHNoYXJlVHlwZSAtIHRoZSBleGNwZWN0ZWQgc2hhcmUgdHlwZVxuICogQHJldHVybnMge1Byb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPn0gLSBzaGFyZSBmcm9tIGJpdGdvIHRvIHVzZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHNoYXJlVHlwZTogUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZVxuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgbGV0IHJlc3BvbnNlRnJvbUJpdGdvOiBTZW5kU2hhcmVUb0JpdGdvUlQ7XG4gIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IGdldFR4UmVxdWVzdChiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkKTtcbiAgbGV0IHVzZXJTaGFyZXM7XG4gIHN3aXRjaCAocmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlIFJlcXVlc3RUeXBlLnR4OlxuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC50cmFuc2FjdGlvbnMsICd0cmFuc2FjdGlvbnMgcmVxdWlyZWQgYXMgcGFydCBvZiB0eFJlcXVlc3QnKTtcbiAgICAgIHVzZXJTaGFyZXMgPSB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVxdWVzdFR5cGUubWVzc2FnZTpcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QubWVzc2FnZXMsICdtZXNzYWdlcyByZXF1aXJlZCBhcyBwYXJ0IG9mIHR4UmVxdWVzdCcpO1xuICAgICAgdXNlclNoYXJlcyA9IHR4UmVxdWVzdC5tZXNzYWdlc1swXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICBicmVhaztcbiAgfVxuICBpZiAoIXVzZXJTaGFyZXMgfHwgIXVzZXJTaGFyZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyIHNoYXJlIGlzIG5vdCBwcmVzZW50Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZVJlY29yZCA9IHVzZXJTaGFyZXNbdXNlclNoYXJlcy5sZW5ndGggLSAxXTtcbiAgc3dpdGNoIChzaGFyZVR5cGUpIHtcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLkFTaGFyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VBU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5EU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlRFNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuU2lnbmF0dXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2hhcmUgcmVjZWl2ZWQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIE5TaGFyZSB0byBiZSBleGNoYW5nZWQgd2l0aCBvdGhlciBrZXkgaG9sZGVycy5cbiAqIE91dHB1dCBpcyBpbiBhIGZvcm1hdCB0aGF0IGlzIHVzYWJsZSB3aXRoaW4gQml0R28ncyBlY29zeXN0ZW0uXG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZSBvZiB0aGUgcGFydHkgcHJlcGFyaW5nIGV4Y2hhbmdlIG1hdGVyaWFsc1xuICogQHBhcmFtIHJlY2lwaWVudEluZGV4IC0gaW5kZXggb2YgdGhlIHJlY2lwaWVudCAoMSwgMiwgb3IgMylcbiAqIEBwYXJhbSByZWNpcGllbnRHcGdQdWJsaWNBcm1vciAtIHJlY2lwaWVudCdzIHB1YmxpYyBncGcga2V5IGluIGFybW9yIGZvcm1hdFxuICogQHBhcmFtIHNlbmRlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gKiBAcGFyYW0gaXNiczU4RW5jb2RlZCAtIGlzIGJzNTggZW5jb2RlZCBvciBub3RcbiAqIEByZXR1cm5zIGVuY3J5cHRlZCBOIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0TlNoYXJlKFxuICBrZXlTaGFyZTogS2V5U2hhcmUsXG4gIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yOiBzdHJpbmcsXG4gIHNlbmRlckdwZ0tleTogcGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gIGlzYnM1OEVuY29kZWQgPSB0cnVlXG4pOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICBjb25zdCBuU2hhcmUgPSBrZXlTaGFyZS5uU2hhcmVzW3JlY2lwaWVudEluZGV4XTtcbiAgaWYgKCFuU2hhcmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVjaXBpZW50Jyk7XG4gIH1cblxuICBjb25zdCBwdWJsaWNTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKGtleVNoYXJlLnBTaGFyZS55LCAnaGV4JyksXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUucFNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICBdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgbGV0IHByaXZhdGVTaGFyZTtcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBwcml2YXRlU2hhcmUgPSBiaXAzMi5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbShuU2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbShuU2hhcmUuY2hhaW5jb2RlLCAnaGV4JykpLnRvQmFzZTU4KCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpdmF0ZVNoYXJlID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oblNoYXJlLnUsICdoZXgnKSwgQnVmZmVyLmZyb20oblNoYXJlLmNoYWluY29kZSwgJ2hleCcpXSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcmVjaXBpZW50R3BnUHVibGljQXJtb3IgfSk7XG5cbiAgY29uc3QgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlID0gKGF3YWl0IHBncC5lbmNyeXB0KHtcbiAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7XG4gICAgICB0ZXh0OiBwcml2YXRlU2hhcmUsXG4gICAgfSksXG4gICAgZW5jcnlwdGlvbktleXM6IFtyZWNpcGllbnRQdWJsaWNLZXldLFxuICB9KSkgYXMgc3RyaW5nO1xuXG4gIHJldHVybiB7XG4gICAgaTogblNoYXJlLmksXG4gICAgajogblNoYXJlLmosXG4gICAgcHVibGljU2hhcmUsXG4gICAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgIG46IG5TaGFyZS5uLFxuICAgIHZzc1Byb29mOiBuU2hhcmUudixcbiAgICBwcml2YXRlU2hhcmVQcm9vZjogYXdhaXQgY3JlYXRlU2hhcmVQcm9vZihzZW5kZXJHcGdLZXkucHJpdmF0ZUtleSwgblNoYXJlLnUsICdlY2RzYScpLFxuICB9O1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgTlNoYXJlIHRvIGJlIGV4Y2hhbmdlZCB3aXRoIG90aGVyIGtleSBob2xkZXJzLlxuICogQW4gQVBJIGtleSBzaGFyZSByZWNlaXZlZCBmcm9tIGEgdGhpcmQgcGFydHkgc2hvdWxkIGFscmVhZHkgYmUgZW5jcnlwdGVkXG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZSBvZiB0aGUgcGFydHkgcHJlcGFyaW5nIGV4Y2hhbmdlIG1hdGVyaWFsc1xuICogQHJldHVybnMgZW5jcnlwdGVkIE4gU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTlNoYXJlRnJvbUFQSUtleVNoYXJlKGtleVNoYXJlOiBBcGlLZXlTaGFyZSk6IFByb21pc2U8RW5jcnlwdGVkTlNoYXJlPiB7XG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChrZXlTaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChrZXlTaGFyZS5mcm9tKSxcbiAgICBwdWJsaWNTaGFyZToga2V5U2hhcmUucHVibGljU2hhcmUsXG4gICAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlOiBrZXlTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgbjoga2V5U2hhcmUubiA/PyAnJywgLy8gdGhpcyBpcyBub3QgY3VycmVudGx5IG5lZWRlZCBmb3Iga2V5IGNyZWF0aW9uXG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGtleVNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgIHZzc1Byb29mOiBrZXlTaGFyZS52c3NQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0cyBlbmNyeXB0ZWQgbiBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZSAtIGRlY3J5cHRhYmxlIG4gc2hhcmUgd2l0aCByZWNpcGllbnQgcHJpdmF0ZSBncGcga2V5IGFybW9yIGFuZCBzZW5kZXIgcHVibGljIGdwZyBrZXlcbiAqIEByZXR1cm5zIE4gc2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlOiBEZWNyeXB0YWJsZU5TaGFyZSwgaXNiczU4RW5jb2RlZCA9IHRydWUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCByZWNpcGllbnRQcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBlbmNyeXB0ZWROU2hhcmUucmVjaXBpZW50UHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBwcnYgPSAoXG4gICAgYXdhaXQgcGdwLmRlY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgcGdwLnJlYWRNZXNzYWdlKHsgYXJtb3JlZE1lc3NhZ2U6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlIH0pLFxuICAgICAgZGVjcnlwdGlvbktleXM6IFtyZWNpcGllbnRQcml2YXRlS2V5IGFzIHBncC5Qcml2YXRlS2V5XSxcbiAgICB9KVxuICApLmRhdGEgYXMgc3RyaW5nO1xuXG4gIGxldCB1OiBzdHJpbmc7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlID0gYnM1OC5kZWNvZGUocHJ2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgdSA9IHByaXZhdGVTaGFyZS5zbGljZSg5MiwgMTU2KTtcbiAgfSBlbHNlIHtcbiAgICB1ID0gcHJ2LnNsaWNlKDAsIDY0KTtcbiAgfVxuXG4gIGNvbnN0IG5TaGFyZTogTlNoYXJlID0ge1xuICAgIGk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaSxcbiAgICBqOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmosXG4gICAgbjogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5uLFxuICAgIHk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgNjYpLFxuICAgIHU6IHUsXG4gICAgY2hhaW5jb2RlOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDY2LCAxMzApLFxuICAgIHY6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUudnNzUHJvb2YsXG4gIH07XG5cbiAgcmV0dXJuIG5TaGFyZTtcbn1cblxuLyoqXG4gKiBHZXRzIHB1YmxpYyBrZXkgZnJvbSBjb21tb24ga2V5IGNoYWluXG4gKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBjb21tb24ga2V5IGNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG5leHBvcnQgY29uc3QgZGVsaW1ldGVyID0gJzonO1xuZXhwb3J0IGNvbnN0IHNlY29uZGFyeURlbGltZXRlciA9ICctJztcblxuZnVuY3Rpb24gdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzOiBzdHJpbmdbXSwgZXhwZWN0ZWRMZW5ndGg6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHNoYXJlcy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlczogc3RyaW5nW10sIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzaGFyZU5hbWU6IHN0cmluZywgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKHNoYXJlc1tpXSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IG9wdGlvbmFsICR7dmFsdWVOYW1lfSB2YWx1ZSBpbiAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcblxuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDExLCAnSycpO1xuICBjb25zdCBoYXNQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCA1LCAxMSwgJ0snLCAncHJvb2YnKTtcblxuICBsZXQgcHJvb2Y7XG4gIGlmIChoYXNQcm9vZikge1xuICAgIHByb29mID0ge1xuICAgICAgejogc2hhcmVzWzVdLFxuICAgICAgdTogc2hhcmVzWzZdLFxuICAgICAgdzogc2hhcmVzWzddLFxuICAgICAgczogc2hhcmVzWzhdLFxuICAgICAgczE6IHNoYXJlc1s5XSxcbiAgICAgIHMyOiBzaGFyZXNbMTBdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgazogc2hhcmVzWzBdLFxuICAgIG46IHNoYXJlc1sxXSxcbiAgICBudGlsZGU6IHNoYXJlc1syXSxcbiAgICBoMTogc2hhcmVzWzNdLFxuICAgIGgyOiBzaGFyZXNbNF0sXG4gICAgcHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBLIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLU2hhcmUoc2hhcmU6IEtTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmgyXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMiB8fCAnJ31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBBIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzNywgJ0EnKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNywgMTMsICdBJywgJ3Byb29mJyk7XG4gIGNvbnN0IGhhc0dhbW1hUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTMsIDI1LCAnQScsICdnYW1tYVByb29mJyk7XG4gIGNvbnN0IGhhc1dQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyNSwgMzcsICdBJywgJ3dQcm9vZicpO1xuXG4gIGxldCBwcm9vZjtcbiAgaWYgKGhhc1Byb29mKSB7XG4gICAgcHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbN10sXG4gICAgICB1OiBzaGFyZXNbOF0sXG4gICAgICB3OiBzaGFyZXNbOV0sXG4gICAgICBzOiBzaGFyZXNbMTBdLFxuICAgICAgczE6IHNoYXJlc1sxMV0sXG4gICAgICBzMjogc2hhcmVzWzEyXSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IGdhbW1hUHJvb2Y7XG4gIGlmIChoYXNHYW1tYVByb29mKSB7XG4gICAgZ2FtbWFQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1sxM10sXG4gICAgICB6cHJtOiBzaGFyZXNbMTRdLFxuICAgICAgdDogc2hhcmVzWzE1XSxcbiAgICAgIHY6IHNoYXJlc1sxNl0sXG4gICAgICB3OiBzaGFyZXNbMTddLFxuICAgICAgczogc2hhcmVzWzE4XSxcbiAgICAgIHMxOiBzaGFyZXNbMTldLFxuICAgICAgczI6IHNoYXJlc1syMF0sXG4gICAgICB0MTogc2hhcmVzWzIxXSxcbiAgICAgIHQyOiBzaGFyZXNbMjJdLFxuICAgICAgdTogc2hhcmVzWzIzXSxcbiAgICAgIHg6IHNoYXJlc1syNF0sXG4gICAgfTtcbiAgfVxuXG4gIGxldCB3UHJvb2Y7XG4gIGlmIChoYXNXUHJvb2YpIHtcbiAgICB3UHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMjVdLFxuICAgICAgenBybTogc2hhcmVzWzI2XSxcbiAgICAgIHQ6IHNoYXJlc1syN10sXG4gICAgICB2OiBzaGFyZXNbMjhdLFxuICAgICAgdzogc2hhcmVzWzI5XSxcbiAgICAgIHM6IHNoYXJlc1szMF0sXG4gICAgICBzMTogc2hhcmVzWzMxXSxcbiAgICAgIHMyOiBzaGFyZXNbMzJdLFxuICAgICAgdDE6IHNoYXJlc1szM10sXG4gICAgICB0Mjogc2hhcmVzWzM0XSxcbiAgICAgIHU6IHNoYXJlc1szNV0sXG4gICAgICB4OiBzaGFyZXNbMzZdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgazogc2hhcmVzWzBdLFxuICAgIGFscGhhOiBzaGFyZXNbMV0sXG4gICAgbXU6IHNoYXJlc1syXSxcbiAgICBuOiBzaGFyZXNbM10sXG4gICAgbnRpbGRlOiBzaGFyZXNbNF0sXG4gICAgaDE6IHNoYXJlc1s1XSxcbiAgICBoMjogc2hhcmVzWzZdLFxuICAgIHByb29mLFxuICAgIGdhbW1hUHJvb2YsXG4gICAgd1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgQSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBBIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QVNoYXJlKHNoYXJlOiBBU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLm50aWxkZVxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8uczEgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnggfHwgJyd9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTXUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBNdSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE1VU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDI2LCAnTXUnKTtcbiAgY29uc3QgaGFzR2FtbWFQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyLCAxNCwgJ011JywgJ2dhbW1hUHJvb2YnKTtcbiAgY29uc3QgaGFzV1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDE0LCAyNiwgJ011JywgJ3dQcm9vZicpO1xuXG4gIGxldCBnYW1tYVByb29mO1xuICBpZiAoaGFzR2FtbWFQcm9vZikge1xuICAgIGdhbW1hUHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMl0sXG4gICAgICB6cHJtOiBzaGFyZXNbM10sXG4gICAgICB0OiBzaGFyZXNbNF0sXG4gICAgICB2OiBzaGFyZXNbNV0sXG4gICAgICB3OiBzaGFyZXNbNl0sXG4gICAgICBzOiBzaGFyZXNbN10sXG4gICAgICBzMTogc2hhcmVzWzhdLFxuICAgICAgczI6IHNoYXJlc1s5XSxcbiAgICAgIHQxOiBzaGFyZXNbMTBdLFxuICAgICAgdDI6IHNoYXJlc1sxMV0sXG4gICAgICB1OiBzaGFyZXNbMTJdLFxuICAgICAgeDogc2hhcmVzWzEzXSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHdQcm9vZjtcbiAgaWYgKGhhc1dQcm9vZikge1xuICAgIHdQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1sxNF0sXG4gICAgICB6cHJtOiBzaGFyZXNbMTVdLFxuICAgICAgdDogc2hhcmVzWzE2XSxcbiAgICAgIHY6IHNoYXJlc1sxN10sXG4gICAgICB3OiBzaGFyZXNbMThdLFxuICAgICAgczogc2hhcmVzWzE5XSxcbiAgICAgIHMxOiBzaGFyZXNbMjBdLFxuICAgICAgczI6IHNoYXJlc1syMV0sXG4gICAgICB0MTogc2hhcmVzWzIyXSxcbiAgICAgIHQyOiBzaGFyZXNbMjNdLFxuICAgICAgdTogc2hhcmVzWzI0XSxcbiAgICAgIHg6IHNoYXJlc1syNV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBhbHBoYTogc2hhcmVzWzBdLFxuICAgIG11OiBzaGFyZXNbMV0sXG4gICAgZ2FtbWFQcm9vZixcbiAgICB3UHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBNdSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBNdSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE11U2hhcmUoc2hhcmU6IE1VU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy54IHx8ICcnfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBEU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGRlbHRhOiBzaGFyZXNbMF0sXG4gICAgR2FtbWE6IHNoYXJlc1sxXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gRCBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERTaGFyZShzaGFyZTogRFNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBTIGFuZCBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgUyBhbmQgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IHsgc1NoYXJlOiBTaWduYXR1cmVTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KHNlY29uZGFyeURlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ1NEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzU2hhcmU6IHBhcnNlU2lnbmF0dXJlU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMF0gfSksXG4gICAgZFNoYXJlOiBwYXJzZURTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1sxXSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IFMgYW5kIEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gUyBhbmQgRCBzaGFyZSBpbiBhIG9iamVjdFxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNEU2hhcmUoc2hhcmU6IHsgc1NoYXJlOiBTU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLnNTaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUueX0ke3NlY29uZGFyeURlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBzaWduYXR1cmUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIFI6IHNoYXJlc1swXSxcbiAgICBzOiBzaGFyZXNbMV0sXG4gICAgeTogc2hhcmVzWzJdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZldHMgY29tYmluZWQgc2lnbmF0dXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBjb21iaW5lZCBzaWduYXR1cmUgc2hhcmVcbiAqIEBwYXJhbSB1c2VySW5kZXggLSB1c2VyIGluZGV4LCBlaXRoZXIgMSAodXNlcikgb3IgMiAoYmFja3VwKVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbWJpbmVkU2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlLCB1c2VySW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHVzZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NpZ25hdHVyZS5yZWNpZH0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5yfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUueX1gLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb21iaW5lZFNpZ25hdHVyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIHJlY2lkOiBOdW1iZXIoc2hhcmVzWzBdKSxcbiAgICByOiBzaGFyZXNbMV0sXG4gICAgczogc2hhcmVzWzJdLFxuICAgIHk6IHNoYXJlc1szXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IHNpZ25hdHVyZSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBTaWduYXR1cmUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTaWduYXR1cmVTaGFyZShcbiAgc2hhcmU6IFNpZ25hdHVyZVNoYXJlLFxuICBzZW5kZXJJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyXG4pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHJlY2lwaWVudEluZGV4KSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzZW5kZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NoYXJlLlJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIEIgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQiBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJTaGFyZShzaGFyZTogQlNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLmJldGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udX0ke2RlbGltZXRlcn0ke3NoYXJlLnd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fSR7ZGVsaW1ldGVyfSR7c2hhcmUubH0ke2RlbGltZXRlcn0ke3NoYXJlLm19JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMn0ke2RlbGltZXRlcn0ke3NoYXJlLmNrfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEIgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgQiBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEIgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQlNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEJTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMTMsICdCJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBiZXRhOiBzaGFyZXNbMF0sXG4gICAgZ2FtbWE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgbnU6IHNoYXJlc1szXSxcbiAgICB3OiBzaGFyZXNbNF0sXG4gICAgeTogc2hhcmVzWzVdLFxuICAgIGw6IHNoYXJlc1s2XSxcbiAgICBtOiBzaGFyZXNbN10sXG4gICAgbjogc2hhcmVzWzhdLFxuICAgIG50aWxkZTogc2hhcmVzWzldLFxuICAgIGgxOiBzaGFyZXNbMTBdLFxuICAgIGgyOiBzaGFyZXNbMTFdLFxuICAgIGNrOiBzaGFyZXNbMTJdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIE8gc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPU2hhcmUoc2hhcmU6IE9TaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5HYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm9taWNyb259JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE8gc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE8gU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE9TaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgNSwgJ08nKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIEdhbW1hOiBzaGFyZXNbMF0sXG4gICAgZGVsdGE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgb21pY3Jvbjogc2hhcmVzWzNdLFxuICAgIHk6IHNoYXJlc1s0XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcGFyYW0gcGFydGljaXBhbnQgLSBwYXJ0aWNpcGFudHMgKHVzZXIsIGJhY2t1cCwgb3IgYml0Z28pXG4gKiBAcmV0dXJucyBpbmRleCAoMSwgMiwgMHIgMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50SW5kZXgocGFydGljaXBhbnQ6ICd1c2VyJyB8ICdiYWNrdXAnIHwgJ2JpdGdvJyk6IG51bWJlciB7XG4gIHN3aXRjaCAocGFydGljaXBhbnQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2JhY2t1cCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdiaXRnbyc6XG4gICAgICByZXR1cm4gMztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoJ1Vua293biBwYXJ0aWNpcGFudCcpO1xuICB9XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBuYW1lIGJ5IGluZGV4XG4gKiBAcGFyYW0gaW5kZXggcGFydGljaXBhbnQgaW5kZXhcbiAqIEByZXR1cm5zIHBhcnRpY2lwYW50IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50RnJvbUluZGV4KGluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVR5cGUge1xuICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR087XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXJ0aWNpcGFudCBpbmRleCAke2luZGV4fWApO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSB1LXZhbHVlIHdhbGxldCBzaWduYXR1cmVzIGZvciB0aGUgYml0Z28tdXNlciBhbmQgYml0Z28tYmFja3VwIHNoYXJlcy5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBwZ3AuS2V5O1xuICBiaXRnb1B1YjogcGdwLktleTtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgdXNlcktleUlkOiBzdHJpbmc7XG4gIGJhY2t1cEtleUlkOiBzdHJpbmc7XG4gIGRlY3J5cHRlZFNoYXJlOiBzdHJpbmc7XG4gIHZlcmlmaWVySW5kZXg6IDEgfCAyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByYXdOb3RhdGlvbnMgPSBhd2FpdCBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zKTtcbiAgY29uc3QgcHVibGljVVZhbHVlUmF3Tm90YXRpb25JbmRleCA9IDIgKyBwYXJhbXMudmVyaWZpZXJJbmRleDtcblxuICAvLyBEZXJpdmUgcHVibGljIGZvcm0gb2YgdS12YWx1ZVxuICBjb25zdCBwdWJsaWNVVmFsdWUgPSBlY2MucG9pbnRGcm9tU2NhbGFyKEJ1ZmZlci5mcm9tKHBhcmFtcy5kZWNyeXB0ZWRTaGFyZS5zbGljZSgwLCA2NCksICdoZXgnKSwgdHJ1ZSk7XG4gIGFzc2VydChwdWJsaWNVVmFsdWUgIT09IG51bGwsICdudWxsIHB1YmxpYyB1LXZhbHVlJyk7XG4gIC8vIFZlcmlmeSB0aGF0IHRoZSB1IHZhbHVlICsgY2hhaW5jb2RlIGlzIGVxdWFsIHRvIHRoZSBwcm9vZiByZXRyaWV2ZWQgZnJvbSB0aGUgcmF3IG5vdGF0aW9uc1xuICBhc3NlcnQoXG4gICAgQnVmZmVyLmZyb20ocHVibGljVVZhbHVlKS50b1N0cmluZygnaGV4JykgKyBwYXJhbXMuZGVjcnlwdGVkU2hhcmUuc2xpY2UoNjQpID09PVxuICAgICAgQnVmZmVyLmZyb20ocmF3Tm90YXRpb25zW3B1YmxpY1VWYWx1ZVJhd05vdGF0aW9uSW5kZXhdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICdiaXRnbyBzaGFyZSBtaXNtYXRjaCdcbiAgKTtcbn1cbiJdfQ==
@@ -2,9 +2,9 @@ import { ECDSA } from './../../../account-lib/mpc/tss';
2
2
  export declare type NShare = ECDSA.NShare;
3
3
  export declare type KeyShare = ECDSA.KeyShare;
4
4
  export declare type XShare = ECDSA.XShare;
5
- export declare type XShareWithNTilde = ECDSA.XShareWithNTilde;
5
+ export declare type XShareWithNtilde = ECDSA.XShareWithNtilde;
6
6
  export declare type YShare = ECDSA.YShare;
7
- export declare type YShareWithNTilde = ECDSA.YShareWithNTilde;
7
+ export declare type YShareWithNtilde = ECDSA.YShareWithNtilde;
8
8
  export declare type SignShare = ECDSA.SignShareRT;
9
9
  export declare type KShare = ECDSA.KShare;
10
10
  export declare type WShare = ECDSA.WShare;
@@ -13,4 +13,4 @@ var ReceivedShareType;
13
13
  ReceivedShareType["DShare"] = "DShare";
14
14
  ReceivedShareType["Signature"] = "Signature";
15
15
  })(ReceivedShareType = exports.ReceivedShareType || (exports.ReceivedShareType = {}));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVCQSxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsb0NBQW1CLENBQUE7SUFDbkIsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCO0FBRUQsSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLHNDQUFpQixDQUFBO0lBQ2pCLHNDQUFpQixDQUFBO0lBQ2pCLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFKVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUk1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVDRFNBIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcblxuZXhwb3J0IHR5cGUgTlNoYXJlID0gRUNEU0EuTlNoYXJlO1xuZXhwb3J0IHR5cGUgS2V5U2hhcmUgPSBFQ0RTQS5LZXlTaGFyZTtcbmV4cG9ydCB0eXBlIFhTaGFyZSA9IEVDRFNBLlhTaGFyZTtcbmV4cG9ydCB0eXBlIFhTaGFyZVdpdGhOVGlsZGUgPSBFQ0RTQS5YU2hhcmVXaXRoTlRpbGRlO1xuZXhwb3J0IHR5cGUgWVNoYXJlID0gRUNEU0EuWVNoYXJlO1xuZXhwb3J0IHR5cGUgWVNoYXJlV2l0aE5UaWxkZSA9IEVDRFNBLllTaGFyZVdpdGhOVGlsZGU7XG5leHBvcnQgdHlwZSBTaWduU2hhcmUgPSBFQ0RTQS5TaWduU2hhcmVSVDtcbmV4cG9ydCB0eXBlIEtTaGFyZSA9IEVDRFNBLktTaGFyZTtcbmV4cG9ydCB0eXBlIFdTaGFyZSA9IEVDRFNBLldTaGFyZTtcbmV4cG9ydCB0eXBlIEFTaGFyZSA9IEVDRFNBLkFTaGFyZTtcbmV4cG9ydCB0eXBlIEdTaGFyZSA9IEVDRFNBLkdTaGFyZTtcbmV4cG9ydCB0eXBlIE9TaGFyZSA9IEVDRFNBLk9TaGFyZTtcbmV4cG9ydCB0eXBlIERTaGFyZSA9IEVDRFNBLkRTaGFyZTtcbmV4cG9ydCB0eXBlIENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVCA9IEVDRFNBLlNpZ25Db252ZXJ0UlQ7XG5leHBvcnQgdHlwZSBDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVCA9IEVDRFNBLlNpZ25Db21iaW5lUlQ7XG5leHBvcnQgdHlwZSBTaWduYXR1cmVTaGFyZSA9IEVDRFNBLlNTaGFyZTtcbmV4cG9ydCB0eXBlIFNpZ25hdHVyZSA9IEVDRFNBLlNpZ25hdHVyZTtcbmV4cG9ydCB0eXBlIEJTaGFyZSA9IEVDRFNBLkJTaGFyZTtcbmV4cG9ydCB0eXBlIFNTaGFyZSA9IEVDRFNBLlNTaGFyZTtcbmV4cG9ydCB0eXBlIEtleUNvbWJpbmVkID0gRUNEU0EuS2V5Q29tYmluZWQ7XG5cbmV4cG9ydCBlbnVtIFNlbmRTaGFyZVR5cGUge1xuICBLU2hhcmUgPSAnS1NoYXJlJyxcbiAgTVVTaGFyZSA9ICdNVVNoYXJlJyxcbiAgU1NoYXJlID0gJ1NTaGFyZScsXG59XG5cbmV4cG9ydCBlbnVtIFJlY2VpdmVkU2hhcmVUeXBlIHtcbiAgQVNoYXJlID0gJ0FTaGFyZScsXG4gIERTaGFyZSA9ICdEU2hhcmUnLFxuICBTaWduYXR1cmUgPSAnU2lnbmF0dXJlJyxcbn1cblxuZXhwb3J0IHR5cGUgR2V0U2hhcmVGcm9tQml0Z29SVCA9IERTaGFyZSB8IEFTaGFyZTtcbi8vIE5TaGFyZSB0aGF0IGhhcyBiZWVuIGVuY3J5cHRlZCBhbmQgc2lnbmVkIHZpYSBHUEdcbmV4cG9ydCB0eXBlIEVuY3J5cHRlZE5TaGFyZSA9IHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIHB1YmxpY1NoYXJlOiBzdHJpbmc7XG4gIC8vIHNpZ25lZCBhbmQgZW5jcnlwdGVkIGdwZyBhcm1vclxuICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB2c3NQcm9vZj86IHN0cmluZztcbiAgLy8gdSB2YWx1ZSBwcm9vZlxuICBwcml2YXRlU2hhcmVQcm9vZj86IHN0cmluZztcbn07XG5cbi8vIE5TaGFyZSB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWNyeXB0IGFuZCB2ZXJpZnkgYSBHUEcgbWVzYXNnZVxuZXhwb3J0IHR5cGUgRGVjcnlwdGFibGVOU2hhcmUgPSB7XG4gIG5TaGFyZTogRW5jcnlwdGVkTlNoYXJlO1xuICByZWNpcGllbnRQcml2YXRlQXJtb3I6IHN0cmluZztcbiAgc2VuZGVyUHVibGljQXJtb3I6IHN0cmluZztcbiAgaXNiczU4RW5jb2RlZD86IGJvb2xlYW47XG59O1xuXG4vLyBGaW5hbCBUU1MgXCJLZXlwYWlyXCJcbmV4cG9ydCB0eXBlIENvbWJpbmVkS2V5ID0ge1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbDtcbn07XG5cbi8vIFByaXZhdGUgcG9ydGlvbiBvZiBhIFRTUyBrZXksIHRoaXMgbXVzdCBiZSBoYW5kbGVkIGxpa2UgYW55IG90aGVyIHByaXZhdGUga2V5XG5leHBvcnQgdHlwZSBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gIHBTaGFyZTogRUNEU0EuUFNoYXJlO1xuICBiaXRnb05TaGFyZTogRUNEU0EuTlNoYXJlO1xuICBiYWNrdXBOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG4gIHVzZXJOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVDb21iaW5lZEtleVBhcmFtcyA9IHtcbiAga2V5U2hhcmU6IEVDRFNBLktleVNoYXJlO1xuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdO1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFNoYXJlVG9CaXRnb1JUID0gQVNoYXJlIHwgRFNoYXJlIHwgU1NoYXJlIHwgU2lnbmF0dXJlO1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVCQSxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsb0NBQW1CLENBQUE7SUFDbkIsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCO0FBRUQsSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLHNDQUFpQixDQUFBO0lBQ2pCLHNDQUFpQixDQUFBO0lBQ2pCLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFKVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUk1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVDRFNBIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcblxuZXhwb3J0IHR5cGUgTlNoYXJlID0gRUNEU0EuTlNoYXJlO1xuZXhwb3J0IHR5cGUgS2V5U2hhcmUgPSBFQ0RTQS5LZXlTaGFyZTtcbmV4cG9ydCB0eXBlIFhTaGFyZSA9IEVDRFNBLlhTaGFyZTtcbmV4cG9ydCB0eXBlIFhTaGFyZVdpdGhOdGlsZGUgPSBFQ0RTQS5YU2hhcmVXaXRoTnRpbGRlO1xuZXhwb3J0IHR5cGUgWVNoYXJlID0gRUNEU0EuWVNoYXJlO1xuZXhwb3J0IHR5cGUgWVNoYXJlV2l0aE50aWxkZSA9IEVDRFNBLllTaGFyZVdpdGhOdGlsZGU7XG5leHBvcnQgdHlwZSBTaWduU2hhcmUgPSBFQ0RTQS5TaWduU2hhcmVSVDtcbmV4cG9ydCB0eXBlIEtTaGFyZSA9IEVDRFNBLktTaGFyZTtcbmV4cG9ydCB0eXBlIFdTaGFyZSA9IEVDRFNBLldTaGFyZTtcbmV4cG9ydCB0eXBlIEFTaGFyZSA9IEVDRFNBLkFTaGFyZTtcbmV4cG9ydCB0eXBlIEdTaGFyZSA9IEVDRFNBLkdTaGFyZTtcbmV4cG9ydCB0eXBlIE9TaGFyZSA9IEVDRFNBLk9TaGFyZTtcbmV4cG9ydCB0eXBlIERTaGFyZSA9IEVDRFNBLkRTaGFyZTtcbmV4cG9ydCB0eXBlIENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVCA9IEVDRFNBLlNpZ25Db252ZXJ0UlQ7XG5leHBvcnQgdHlwZSBDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVCA9IEVDRFNBLlNpZ25Db21iaW5lUlQ7XG5leHBvcnQgdHlwZSBTaWduYXR1cmVTaGFyZSA9IEVDRFNBLlNTaGFyZTtcbmV4cG9ydCB0eXBlIFNpZ25hdHVyZSA9IEVDRFNBLlNpZ25hdHVyZTtcbmV4cG9ydCB0eXBlIEJTaGFyZSA9IEVDRFNBLkJTaGFyZTtcbmV4cG9ydCB0eXBlIFNTaGFyZSA9IEVDRFNBLlNTaGFyZTtcbmV4cG9ydCB0eXBlIEtleUNvbWJpbmVkID0gRUNEU0EuS2V5Q29tYmluZWQ7XG5cbmV4cG9ydCBlbnVtIFNlbmRTaGFyZVR5cGUge1xuICBLU2hhcmUgPSAnS1NoYXJlJyxcbiAgTVVTaGFyZSA9ICdNVVNoYXJlJyxcbiAgU1NoYXJlID0gJ1NTaGFyZScsXG59XG5cbmV4cG9ydCBlbnVtIFJlY2VpdmVkU2hhcmVUeXBlIHtcbiAgQVNoYXJlID0gJ0FTaGFyZScsXG4gIERTaGFyZSA9ICdEU2hhcmUnLFxuICBTaWduYXR1cmUgPSAnU2lnbmF0dXJlJyxcbn1cblxuZXhwb3J0IHR5cGUgR2V0U2hhcmVGcm9tQml0Z29SVCA9IERTaGFyZSB8IEFTaGFyZTtcbi8vIE5TaGFyZSB0aGF0IGhhcyBiZWVuIGVuY3J5cHRlZCBhbmQgc2lnbmVkIHZpYSBHUEdcbmV4cG9ydCB0eXBlIEVuY3J5cHRlZE5TaGFyZSA9IHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIHB1YmxpY1NoYXJlOiBzdHJpbmc7XG4gIC8vIHNpZ25lZCBhbmQgZW5jcnlwdGVkIGdwZyBhcm1vclxuICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB2c3NQcm9vZj86IHN0cmluZztcbiAgLy8gdSB2YWx1ZSBwcm9vZlxuICBwcml2YXRlU2hhcmVQcm9vZj86IHN0cmluZztcbn07XG5cbi8vIE5TaGFyZSB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWNyeXB0IGFuZCB2ZXJpZnkgYSBHUEcgbWVzYXNnZVxuZXhwb3J0IHR5cGUgRGVjcnlwdGFibGVOU2hhcmUgPSB7XG4gIG5TaGFyZTogRW5jcnlwdGVkTlNoYXJlO1xuICByZWNpcGllbnRQcml2YXRlQXJtb3I6IHN0cmluZztcbiAgc2VuZGVyUHVibGljQXJtb3I6IHN0cmluZztcbiAgaXNiczU4RW5jb2RlZD86IGJvb2xlYW47XG59O1xuXG4vLyBGaW5hbCBUU1MgXCJLZXlwYWlyXCJcbmV4cG9ydCB0eXBlIENvbWJpbmVkS2V5ID0ge1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbDtcbn07XG5cbi8vIFByaXZhdGUgcG9ydGlvbiBvZiBhIFRTUyBrZXksIHRoaXMgbXVzdCBiZSBoYW5kbGVkIGxpa2UgYW55IG90aGVyIHByaXZhdGUga2V5XG5leHBvcnQgdHlwZSBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gIHBTaGFyZTogRUNEU0EuUFNoYXJlO1xuICBiaXRnb05TaGFyZTogRUNEU0EuTlNoYXJlO1xuICBiYWNrdXBOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG4gIHVzZXJOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVDb21iaW5lZEtleVBhcmFtcyA9IHtcbiAga2V5U2hhcmU6IEVDRFNBLktleVNoYXJlO1xuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdO1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFNoYXJlVG9CaXRnb1JUID0gQVNoYXJlIHwgRFNoYXJlIHwgU1NoYXJlIHwgU2lnbmF0dXJlO1xuIl19
@@ -4,12 +4,12 @@ import { Key, SerializedKeyPair } from 'openpgp';
4
4
  import { ApiKeyShare, Keychain } from '../../../keychain';
5
5
  import { IBaseCoin, KeychainsTriplet } from '../../../baseCoin';
6
6
  import baseTSSUtils from '../baseTSSUtils';
7
- import { ApiChallenges, BitGoProofSignatures, CreateEcdsaBitGoKeychainParams, CreateEcdsaKeychainParams, GetBitGoChallengesApi, KeyShare } from './types';
8
- import { BackupGpgKey, BackupKeyShare, BitgoHeldBackupKeyShare, TSSParams, TSSParamsForMessage, TxRequest } from '../baseTypes';
7
+ import { BitGoProofSignatures, CreateEcdsaBitGoKeychainParams, CreateEcdsaKeychainParams, GetBitGoChallengesApi, KeyShare } from './types';
8
+ import { BackupGpgKey, BackupKeyShare, BitgoHeldBackupKeyShare, RequestType, TSSParams, TSSParamsForMessage, TxRequest } from '../baseTypes';
9
9
  import { EncryptedNShare } from '../../../tss/ecdsa/types';
10
10
  import { BitGoBase } from '../../../bitgoBase';
11
11
  import { BackupProvider, IWallet } from '../../../wallet';
12
- import { NTilde, NTildeShare } from '../../../../account-lib/mpc/tss/ecdsa/types';
12
+ import { DeserializedNtilde, SerializedNtilde } from '../../../../account-lib/mpc/tss/ecdsa/types';
13
13
  /** @inheritdoc */
14
14
  export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
15
15
  private bitgoPublicGpgKey;
@@ -68,7 +68,7 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
68
68
  * @param {string | TxRequest} params.txRequest - transaction request object or id
69
69
  * @param {string} params.prv - decrypted private key
70
70
  * @param { string} params.reqId - request id
71
- * @returns {Promise<ECDSASigningRequestBaseResult>}
71
+ * @returns {Promise<TxRequest>}
72
72
  */
73
73
  private signRequestBase;
74
74
  /**
@@ -90,11 +90,14 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
90
90
  /**
91
91
  * Get the challenge values for enterprise and BitGo in ECDSA signing
92
92
  * Only returns the challenges if they are verified by the user's enterprise admin's ecdh key
93
- * @param bitgo
94
- * @param walletId
95
- * @param enterpriseId
93
+ * @param {string} txRequestId - transaction request id
94
+ * @param {RequestType} requestType - (0 for tx, 1 for message)
95
+ * @param {number} index - index of the requestType
96
96
  */
97
- static getChallengesForEcdsaSigning(bitgo: BitGoBase, walletId: string, enterpriseId: string): Promise<ApiChallenges>;
97
+ getEcdsaSigningChallenges(txRequestId: string, requestType: RequestType, index?: number): Promise<{
98
+ enterpriseChallenge: SerializedNtilde;
99
+ bitgoChallenge: SerializedNtilde;
100
+ }>;
98
101
  /**
99
102
  * Verifies the u-value proofs and GPG keys used in generating a TSS ECDSA wallet.
100
103
  * @param userGpgPub The user's public GPG key for encryption between user/server
@@ -110,12 +113,12 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
110
113
  * @param ecdhXprv xprv of the ecdh key
111
114
  * @param derivationPath the derived path at which the ecdh key will sign
112
115
  */
113
- static signChallenge(challenge: NTildeShare, ecdhXprv: string, derivationPath: string): Buffer;
116
+ static signChallenge(challenge: SerializedNtilde, ecdhXprv: string, derivationPath: string): Buffer;
114
117
  /**
115
118
  * Converts challenge to a common message format which can be signed.
116
119
  * @param challenge
117
120
  */
118
- static getMessageToSignFromChallenge(challenge: NTildeShare): string;
121
+ static getMessageToSignFromChallenge(challenge: SerializedNtilde): string;
119
122
  /**
120
123
  Verifies ZK proofs of BitGo's challenges for both nitro and institutional HSMs
121
124
  which are fetched from the WP API.
@@ -125,21 +128,12 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
125
128
  * Verifies ZK proof for a single BitGo challenge
126
129
  * @param bitgoChallenge
127
130
  */
128
- static verifyBitGoChallenge(bitgoChallenge: NTildeShare): Promise<boolean>;
131
+ static verifyBitGoChallenge(bitgoChallenge: SerializedNtilde): Promise<boolean>;
129
132
  /**
130
133
  * Gets the bitgo challenges for both nitro and institutional HSMs from WP API.
131
134
  * @param bitgo
132
135
  */
133
136
  static getBitGoChallenges(bitgo: BitGoBase): Promise<GetBitGoChallengesApi>;
134
- /**
135
- * Deserializes a challenge and it's proofs from hex strings to bigint
136
- */
137
- static deserializeNTilde(challenge: NTildeShare): NTilde;
138
- /**
139
- * Serializes a challenge and it's proofs from big int to hex strings.
140
- * @param challenge
141
- */
142
- static serializeNTilde(challenge: NTilde): NTildeShare;
143
137
  /**
144
138
  * Gets BitGo's proofs from API and signs them if the proofs are valid.
145
139
  * @param bitgo
@@ -158,7 +152,7 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
158
152
  * @param bitgoNitroChallengeProofSignature - signature on bitgo's nitro HSM challenge after verification
159
153
  * @param challenge - optionally use the challenge for enterprise challenge
160
154
  */
161
- static initiateChallengesForEnterprise(bitgo: BitGoBase, entId: string, userPassword: string, bitgoInstChallengeProofSignature: Buffer, bitgoNitroChallengeProofSignature: Buffer, challenge?: NTilde): Promise<void>;
155
+ static initiateChallengesForEnterprise(bitgo: BitGoBase, entId: string, userPassword: string, bitgoInstChallengeProofSignature: Buffer, bitgoNitroChallengeProofSignature: Buffer, challenge?: DeserializedNtilde): Promise<void>;
162
156
  /**
163
157
  * Uploads the signed challenges and their proofs on the enterprise.
164
158
  * This initiates ecdsa signing for the enterprise users.
@@ -169,6 +163,6 @@ export declare class EcdsaUtils extends baseTSSUtils<KeyShare> {
169
163
  * @param bitgoIntChallengeSignature - signature on BitGo's institutional HSM challenge
170
164
  * @param bitgoNitroChallengeSignature - signature on BitGo's nitro HSM challenge
171
165
  */
172
- static uploadChallengesToEnterprise(bitgo: BitGoBase, entId: string, entChallengeWithProofs: NTildeShare, entChallengeSignature: string, bitgoIntChallengeSignature: string, bitgoNitroChallengeSignature: string): Promise<void>;
166
+ static uploadChallengesToEnterprise(bitgo: BitGoBase, entId: string, entChallengeWithProofs: SerializedNtilde, entChallengeSignature: string, bitgoIntChallengeSignature: string, bitgoNitroChallengeSignature: string): Promise<void>;
173
167
  }
174
168
  //# sourceMappingURL=ecdsa.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"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"}