@bitgo/abstract-utxo 12.6.0 → 12.7.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 (180) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +7 -2
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +19 -34
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +4 -3
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -4
  10. package/dist/cjs/src/impl/bch/bch.d.ts +15 -1
  11. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/bch/bch.js +29 -5
  13. package/dist/cjs/src/impl/btc/index.d.ts +2 -0
  14. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
  15. package/dist/cjs/src/impl/btc/index.js +3 -1
  16. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +4 -4
  17. package/dist/cjs/src/impl/btc/tbtcstx.d.ts +10 -0
  18. package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
  19. package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
  20. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
  21. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  22. package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
  23. package/dist/cjs/src/impl/zec/address.d.ts +45 -0
  24. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  25. package/dist/cjs/src/impl/zec/address.js +66 -1
  26. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  27. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  28. package/dist/cjs/src/impl/zec/recipients.js +1 -1
  29. package/dist/cjs/src/impl/zec/types.d.ts +0 -2
  30. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/zec/types.js +1 -1
  32. package/dist/cjs/src/impl/zec/zec.d.ts +2 -0
  33. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/zec/zec.js +6 -3
  35. package/dist/cjs/src/names.d.ts +5 -2
  36. package/dist/cjs/src/names.d.ts.map +1 -1
  37. package/dist/cjs/src/names.js +19 -1
  38. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +2 -2
  39. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  40. package/dist/cjs/src/recovery/backupKeyRecovery.js +5 -5
  41. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  42. package/dist/cjs/src/recovery/crossChainRecovery.js +4 -4
  43. package/dist/cjs/src/transaction/decode.d.ts +2 -2
  44. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/decode.js +3 -2
  46. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  47. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +6 -5
  49. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  50. package/dist/cjs/src/transaction/descriptor/parse.js +3 -4
  51. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  52. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +2 -3
  53. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  54. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +2 -3
  55. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -2
  56. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  57. package/dist/cjs/src/transaction/explainTransaction.js +1 -1
  58. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  59. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
  60. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +4 -4
  61. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  62. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +1 -1
  63. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -2
  64. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  66. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  67. package/dist/cjs/src/transaction/parseTransaction.js +2 -3
  68. package/dist/cjs/src/transaction/recipient.d.ts +6 -3
  69. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  70. package/dist/cjs/src/transaction/recipient.js +18 -7
  71. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  72. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
  73. package/dist/cjs/src/transaction/verifyTransaction.js +2 -3
  74. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  75. package/dist/cjs/test/unit/descriptorAddress.js +24 -4
  76. package/dist/cjs/test/unit/impl/bch/unit/bch.js +9 -1
  77. package/dist/cjs/test/unit/impl/zec/unit/address.js +140 -1
  78. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -2
  79. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +2 -2
  80. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +2 -2
  81. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  82. package/dist/cjs/test/unit/recovery/mock.js +5 -3
  83. package/dist/cjs/test/unit/tbtcstx.d.ts +2 -0
  84. package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
  85. package/dist/cjs/test/unit/tbtcstx.js +60 -0
  86. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
  87. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
  88. package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
  89. package/dist/cjs/test/unit/transaction/addressCodec.d.ts +2 -0
  90. package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
  91. package/dist/cjs/test/unit/transaction/addressCodec.js +30 -0
  92. package/dist/cjs/test/unit/transaction.js +2 -2
  93. package/dist/cjs/test/unit/util/address.d.ts +2 -1
  94. package/dist/cjs/test/unit/util/address.d.ts.map +1 -1
  95. package/dist/cjs/test/unit/util/address.js +3 -2
  96. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  97. package/dist/cjs/test/unit/util/nockIndexerAPI.js +3 -4
  98. package/dist/cjs/test/unit/util/transaction.d.ts +1 -1
  99. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  100. package/dist/cjs/test/unit/util/transaction.js +5 -4
  101. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  102. package/dist/cjs/test/unit/util/unspents.js +3 -3
  103. package/dist/cjs/test/unit/util/utxoCoins.d.ts +2 -2
  104. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  105. package/dist/cjs/test/unit/util/utxoCoins.js +17 -33
  106. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  107. package/dist/esm/abstractUtxoCoin.d.ts +7 -2
  108. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  109. package/dist/esm/abstractUtxoCoin.js +21 -36
  110. package/dist/esm/address/fixedScript.d.ts +4 -4
  111. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  112. package/dist/esm/address/fixedScript.js +4 -3
  113. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  114. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  115. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -4
  116. package/dist/esm/impl/bch/bch.d.ts +15 -1
  117. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  118. package/dist/esm/impl/bch/bch.js +29 -5
  119. package/dist/esm/impl/btc/index.d.ts +2 -0
  120. package/dist/esm/impl/btc/index.d.ts.map +1 -1
  121. package/dist/esm/impl/btc/index.js +3 -1
  122. package/dist/esm/impl/btc/inscriptionBuilder.js +4 -4
  123. package/dist/esm/impl/btc/tbtcstx.d.ts +10 -0
  124. package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
  125. package/dist/esm/impl/btc/tbtcstx.js +14 -0
  126. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
  127. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  128. package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
  129. package/dist/esm/impl/zec/address.d.ts +45 -0
  130. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  131. package/dist/esm/impl/zec/address.js +65 -2
  132. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  133. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  134. package/dist/esm/impl/zec/recipients.js +1 -1
  135. package/dist/esm/impl/zec/types.d.ts +0 -2
  136. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  137. package/dist/esm/impl/zec/types.js +1 -1
  138. package/dist/esm/impl/zec/zec.d.ts +2 -0
  139. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  140. package/dist/esm/impl/zec/zec.js +6 -3
  141. package/dist/esm/names.d.ts +5 -2
  142. package/dist/esm/names.d.ts.map +1 -1
  143. package/dist/esm/names.js +18 -1
  144. package/dist/esm/recovery/backupKeyRecovery.d.ts +2 -2
  145. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  146. package/dist/esm/recovery/backupKeyRecovery.js +6 -6
  147. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  148. package/dist/esm/recovery/crossChainRecovery.js +4 -4
  149. package/dist/esm/transaction/decode.d.ts +2 -2
  150. package/dist/esm/transaction/decode.d.ts.map +1 -1
  151. package/dist/esm/transaction/decode.js +3 -2
  152. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  153. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  154. package/dist/esm/transaction/descriptor/explainPsbt.js +6 -5
  155. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  156. package/dist/esm/transaction/descriptor/parse.js +3 -4
  157. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  158. package/dist/esm/transaction/descriptor/parseToAmountType.js +2 -3
  159. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  160. package/dist/esm/transaction/descriptor/verifyTransaction.js +2 -3
  161. package/dist/esm/transaction/explainTransaction.d.ts +2 -2
  162. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  163. package/dist/esm/transaction/explainTransaction.js +1 -1
  164. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  165. package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
  166. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +4 -4
  167. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  168. package/dist/esm/transaction/fixedScript/replayProtection.js +1 -1
  169. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -2
  170. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  171. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  172. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  173. package/dist/esm/transaction/parseTransaction.js +2 -3
  174. package/dist/esm/transaction/recipient.d.ts +6 -3
  175. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  176. package/dist/esm/transaction/recipient.js +18 -7
  177. package/dist/esm/transaction/signTransaction.js +2 -2
  178. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
  179. package/dist/esm/transaction/verifyTransaction.js +2 -3
  180. package/package.json +6 -5
@@ -98,7 +98,7 @@ async function queryBlockchainUnspentsPath(coin, params, walletKeys, chain) {
98
98
  return prevTxHex;
99
99
  }
100
100
  async function gatherUnspents(addrIndex) {
101
- const formattedAddress = getFormattedAddress(coin, coin.name, walletKeys, chain, addrIndex);
101
+ const formattedAddress = getFormattedAddress(coin, coin.wasmName, walletKeys, chain, addrIndex);
102
102
  const addrInfo = await recoveryProvider.getAddressInfo(formattedAddress);
103
103
  // we use txCount here because it implies usage - having tx'es means the addr was generated and used
104
104
  if (addrInfo.txCount === 0) {
@@ -191,7 +191,7 @@ function backupKeyRecoveryWithWalletUnspents(coinName, params, unspents) {
191
191
  if (totalInputAmount <= BigInt(0)) {
192
192
  throw new sdk_core_1.ErrorNoInputToRecover();
193
193
  }
194
- let psbt = (0, psbt_1.createBackupKeyRecoveryPsbt)(coinName, walletKeys, unspents, {
194
+ let psbt = (0, psbt_1.createBackupKeyRecoveryPsbt)((0, names_1.toWasmUtxoCoinName)(coinName), walletKeys, unspents, {
195
195
  feeRateSatVB: feeRateSatVB,
196
196
  recoveryDestination: recoveryDestination,
197
197
  keyRecoveryServiceFee: krsFee ?? BigInt(0),
@@ -326,7 +326,7 @@ async function backupKeyRecovery(coin, bitgo, params) {
326
326
  derivationPrefixes: [params.userKeyPath || 'm/0/0', 'm/0/0', 'm/0/0'],
327
327
  });
328
328
  const unspents = (await Promise.all(wasm_utxo_1.fixedScriptWallet.outputScriptTypes
329
- .filter((addressType) => wasm_utxo_1.fixedScriptWallet.supportsScriptType(coin.name, addressType) &&
329
+ .filter((addressType) => wasm_utxo_1.fixedScriptWallet.supportsScriptType(coin.wasmName, addressType) &&
330
330
  !params.ignoreAddressTypes?.includes(addressType))
331
331
  .reduce((queries, addressType) => [
332
332
  ...queries,
@@ -362,7 +362,7 @@ async function backupKeyRecovery(coin, bitgo, params) {
362
362
  }
363
363
  }
364
364
  // Build and sign PSBT
365
- const psbt = backupKeyRecoveryWithWalletUnspents(coin.name, {
365
+ const psbt = backupKeyRecoveryWithWalletUnspents(coin.wasmName, {
366
366
  walletKeys,
367
367
  keys,
368
368
  recoveryDestination: params.recoveryDestination,
@@ -414,4 +414,4 @@ async function v1Sweep(coin, bitgo, params) {
414
414
  feeRate: recoveryFeePerByte,
415
415
  });
416
416
  }
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBOFNBLGtGQTBDQztBQWtDRCxzRUFxREM7QUFnQ0QsOENBNkhDO0FBcUJELGtEQW9CQztBQUVELDBCQTRCQztBQW5wQkQsb0RBQXVCO0FBQ3ZCLDhDQVF5QjtBQUN6QixnREFBeUU7QUFHekUsZ0ZBQStFO0FBQy9FLHdDQUE4RDtBQUM5RCxrREFBMEQ7QUFDMUQsa0ZBQXlGO0FBQ3pGLG9DQUE0RDtBQUM1RCx3Q0FBMkU7QUFFM0UseURBQStEO0FBQy9ELDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsaUNBQXdFO0FBUXhFLDBEQUEwRDtBQUM3QyxRQUFBLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQztBQUV4RCw2SEFBNkg7QUFDaEgsUUFBQSwyQ0FBMkMsR0FBRyxHQUFHLENBQUM7QUFFL0Qsa0ZBQWtGO0FBQ3JFLFFBQUEscUNBQXFDLEdBQUcsRUFBRSxDQUFDO0FBVXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBc0I7SUFDMUQsT0FBTyxNQUFNLElBQUksMkJBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQXNCLEVBQUUsTUFBNEI7SUFDcEYsTUFBTSxXQUFXLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksV0FB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QUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFCLEdBQUcsTUFBTTtRQUNULE9BQU8sRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIEVycm9yTm9JbnB1dFRvUmVjb3ZlcixcbiAgZ2V0S3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5cyBhcyBnZXRCaXAzMktleXNGcm9tU2RrQ29yZSxcbiAgaXNUcmlwbGUsXG4gIGtyc1Byb3ZpZGVycyxcbiAgVHJpcGxlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0LCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBzaWduQW5kVmVyaWZ5UHNidCB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgZW5jb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IGdldE1haW5uZXRDb2luTmFtZSwgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuaW1wb3J0IHsgcGFyc2VPdXRwdXRJZCwgdW5zcGVudFN1bSwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGZvckNvaW4sIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL1JlY292ZXJ5UHJvdmlkZXInO1xuaW1wb3J0IHsgTWVtcG9vbEFwaSB9IGZyb20gJy4vbWVtcG9vbEFwaSc7XG5pbXBvcnQgeyBDb2luZ2Vja29BcGkgfSBmcm9tICcuL2NvaW5nZWNrb0FwaSc7XG5pbXBvcnQgeyBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9IGZpeGVkU2NyaXB0V2FsbGV0Lk91dHB1dFNjcmlwdFR5cGU7XG50eXBlIENoYWluQ29kZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZTtcbnR5cGUgV2FsbGV0VW5zcGVudEpTT04gPSBXYWxsZXRVbnNwZW50ICYge1xuICB2YWx1ZVN0cmluZzogc3RyaW5nO1xufTtcblxuLy8gVjEgb25seSBkZWFscyB3aXRoIEJUQy4gNTAgc2F0L3ZieXRlIGlzIHZlcnkgYXJiaXRyYXJ5LlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjEgPSA1MDtcblxuLy8gRklYTUUoQlRDLTI2OTEpOiBpdCBpcyB1bmNsZWFyIHdoeSBzd2VlcHMgaGF2ZSBhIGRpZmZlcmVudCBkZWZhdWx0IHRoYW4gcmVndWxhciByZWNvdmVyeS4gMTAwIHNhdC92Ynl0ZSBpcyBleHRyZW1lbHkgaGlnaC5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxX1NXRUVQID0gMTAwO1xuXG4vLyBGSVhNRShCVEMtMjY5MSk6IGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBoYXZlIGEgc2luZ2xlIGRlZmF1bHQgZm9yIGV2ZXJ5IGNvaW4uXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMiA9IDUwO1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICB0eEluZm86IHtcbiAgICB1bnNwZW50cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIH07XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGZlZUluZm86IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgY29pbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBtYXJrZXQgcHJpY2UgZnJvbSBhIHRoaXJkIHBhcnR5IHRvIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG5vbi1iaXRnbyByZWNvdmVyeSB0cmFuc2FjdGlvbnMsIHdoZW4gaXQgaXMgbmVjZXNzYXJ5XG4gKiB0byBjYWxjdWxhdGUgdGhlIHJvdWdoIGZlZSBuZWVkZWQgdG8gcGF5IHRvIEtleXRlcm5hbC4gV2UgYXJlIG9rYXkgd2l0aCBhcHByb3hpbWF0aW5nLFxuICogYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByaWNlIG9mIHRoaXMgZnVuY3Rpb24gb25seSBoYXMgbGVzcyB0aGFuIDEgZG9sbGFyIGluZmx1ZW5jZSBvbiB0aGVcbiAqIGZlZSB0aGF0IG5lZWRzIHRvIGJlIHBhaWQgdG8gS2V5dGVybmFsLlxuICpcbiAqIFNlZSBjYWxjdWxhdGVGZWVBbW91bnQgZnVuY3Rpb246ICByZXR1cm4gTWF0aC5yb3VuZChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UgKiBzZWxmLmdldEJhc2VGYWN0b3IoKSk7XG4gKlxuICogVGhpcyBlbmQgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlIGVuZHBvaW50LCBzaW5jZSBzb21lIGNvaW5zJyBwcmljZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgcHJvdmlkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBDb2luZ2Vja29BcGkoKS5nZXRVU0RQcmljZShjb2luLmdldEZhbWlseSgpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgKGluIGJhc2UgdW5pdHMpIHRvIHBheSBhIEtSUyBwcm92aWRlciB3aGVuIGJ1aWxkaW5nIGEgcmVjb3ZlcnkgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIHtTdHJpbmd9IHRoZSBLUlMgcHJvdmlkZXIgdGhhdCBob2xkcyB0aGUgYmFja3VwIGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZlZUFtb3VudChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBwYXJhbXM6IHsgcHJvdmlkZXI6IHN0cmluZyB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qga3JzUHJvdmlkZXIgPSBrcnNQcm92aWRlcnNbcGFyYW1zLnByb3ZpZGVyXTtcblxuICBpZiAoa3JzUHJvdmlkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlIHN0cnVjdHVyZSBzcGVjaWZpZWQgZm9yIHByb3ZpZGVyICR7cGFyYW1zLnByb3ZpZGVyfWApO1xuICB9XG5cbiAgaWYgKGtyc1Byb3ZpZGVyLmZlZVR5cGUgPT09ICdmbGF0VXNkJykge1xuICAgIGNvbnN0IGZlZUFtb3VudFVzZCA9IGtyc1Byb3ZpZGVyLmZlZUFtb3VudDtcbiAgICBjb25zdCBjdXJyZW50UHJpY2U6IG51bWJlciA9IGF3YWl0IGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlKSAqIGNvaW4uZ2V0QmFzZUZhY3RvcigpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB3ZSBjYW4gYWRkIG1vcmUgZmVlIHN0cnVjdHVyZXMgaGVyZSBhcyBuZWVkZWQgZm9yIGRpZmZlcmVudCBwcm92aWRlcnMsIHN1Y2ggYXMgcGVyY2VudGFnZSBvZiByZWNvdmVyeSBhbW91bnRcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZlZSBzdHJ1Y3R1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyUGFyYW1zIHtcbiAgc2Nhbj86IG51bWJlcjtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgYml0Z29LZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgaWdub3JlQWRkcmVzc1R5cGVzOiBTY3JpcHRUeXBlMk9mM1tdO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIHVzZXJLZXlQYXRoPzogc3RyaW5nO1xuICByZWNvdmVyeVByb3ZpZGVyPzogUmVjb3ZlcnlQcm92aWRlcjtcbiAgLyoqIFNhdG9zaGkgcGVyIGJ5dGUgKi9cbiAgZmVlUmF0ZT86IG51bWJlcjtcbiAgLyoqIEJsb2NrIGhlaWdodCB1c2VkIHRvIHNlbGVjdCB0aGUgWmNhc2ggY29uc2Vuc3VzIGJyYW5jaCBJRC4gKi9cbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBsb2NrIHRpbWUgKG5Mb2NrVGltZSkuIFNldCBiZWZvcmUgc2lnbmluZyDigJQgaXQgaXMgcGFydCBvZiB0aGUgc2lnaGFzaC5cbiAgICogVXNlZCBmb3IgRUNYIHJlcGxheS1wcm90ZWN0aW9uIHN3ZWVwcyAoZS5nLiA0OTlfOTk5Xzk5OSkgYW5kIG90aGVyIGN1c3RvbSBsb2NrLXRpbWUgbmVlZHMuXG4gICAqL1xuICBsb2NrVGltZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIElucHV0IHNlcXVlbmNlIG51bWJlciBhcHBsaWVkIHRvIGV2ZXJ5IGlucHV0LiBEZWZhdWx0cyB0byAweEZGRkZGRkZFIChSQkYsIG5vbi1maW5hbClcbiAgICogd2hpY2ggYWxyZWFkeSBzYXRpc2ZpZXMgdGhlIG5vbi1maW5hbCByZXF1aXJlbWVudCBmb3IgbG9ja1RpbWUgdG8gdGFrZSBlZmZlY3QuXG4gICAqL1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGFuZCBmb3JtYXQgaXQgZm9yIEFQSSBxdWVyaWVzXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lXG4gKiBAcGFyYW0gd2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIGNoYWluIC0gVGhlIGNoYWluIGNvZGVcbiAqIEBwYXJhbSBhZGRySW5kZXggLSBUaGUgYWRkcmVzcyBpbmRleFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBhZGRyZXNzICh3aXRoIGNhc2hhZGRyIHByZWZpeCBzdHJpcHBlZCBmb3IgQkNIL0JDSEEpXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEFkZHJlc3MoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBhZGRySW5kZXg6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgZm9ybWF0ID0gY29pbi5nZXRDaGFpbigpID09PSAnYmNoJyB8fCBjb2luLmdldENoYWluKCkgPT09ICdiY2hhJyA/ICdjYXNoYWRkcicgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChjb2luTmFtZSwgd2FsbGV0S2V5cywgY2hhaW4sIGFkZHJJbmRleCwgZm9ybWF0KTtcblxuICAvLyBCbG9ja2NoYWlyIHVzZXMgY2FzaGFkZHIgZm9ybWF0IHdoZW4gcXVlcnlpbmcgdGhlIEFQSSBmb3IgYWRkcmVzcyBpbmZvcm1hdGlvbi4gU3RyaXAgdGhlIHByZWZpeCBmb3IgQkNIL0JDSEEuXG4gIHJldHVybiBmb3JtYXQgPT09ICdjYXNoYWRkcicgPyBhZGRyZXNzLnNwbGl0KCc6JylbMV0gOiBhZGRyZXNzO1xufVxuXG5mdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2NyaXB0VHlwZSAhPT0gJ3Ayc2gnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtcyxcbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGVcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+IHtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5zY3JpcHRUeXBlKGNoYWluKTtcbiAgY29uc3QgZmV0Y2hQcmV2VHggPSAhaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZSkgJiYgZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW4ubmFtZSkgIT09ICd6ZWMnO1xuICBjb25zdCByZWNvdmVyeVByb3ZpZGVyID0gcGFyYW1zLnJlY292ZXJ5UHJvdmlkZXIgPz8gZm9yQ29pbihjb2luLmdldENoYWluKCksIHBhcmFtcy5hcGlLZXkpO1xuICBjb25zdCBNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFMgPSBwYXJhbXMuc2NhbiB8fCAyMDtcbiAgbGV0IG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcbiAgY29uc3QgcHJldlR4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFByZXZUeCh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcmV2VHhIZXggPSBwcmV2VHhDYWNoZS5nZXQodHhpZCk7XG4gICAgaWYgKCFwcmV2VHhIZXgpIHtcbiAgICAgIHByZXZUeEhleCA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb25IZXgodHhpZCk7XG4gICAgICBwcmV2VHhDYWNoZS5zZXQodHhpZCwgcHJldlR4SGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUeEhleDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkQWRkcmVzcyA9IGdldEZvcm1hdHRlZEFkZHJlc3MoY29pbiwgY29pbi5uYW1lLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4KTtcbiAgICBjb25zdCBhZGRySW5mbyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0QWRkcmVzc0luZm8oZm9ybWF0dGVkQWRkcmVzcyk7XG4gICAgLy8gd2UgdXNlIHR4Q291bnQgaGVyZSBiZWNhdXNlIGl0IGltcGxpZXMgdXNhZ2UgLSBoYXZpbmcgdHgnZXMgbWVhbnMgdGhlIGFkZHIgd2FzIGdlbmVyYXRlZCBhbmQgdXNlZFxuICAgIGlmIChhZGRySW5mby50eENvdW50ID09PSAwKSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG5cbiAgICAgIGlmIChhZGRySW5mby5iYWxhbmNlID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgYW4gYWRkcmVzcyB3aXRoIGJhbGFuY2U6ICR7Zm9ybWF0dGVkQWRkcmVzc30gd2l0aCBiYWxhbmNlICR7YWRkckluZm8uYmFsYW5jZX1gKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc1Vuc3BlbnRzID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhbZm9ybWF0dGVkQWRkcmVzc10pO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRVbnNwZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGFkZHJlc3NVbnNwZW50cy5tYXAoYXN5bmMgKHUpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50Pj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSBwYXJzZU91dHB1dElkKHUuaWQpO1xuICAgICAgICAgICAgbGV0IHZhbCA9IEJpZ0ludCh1LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIC8vIGJsb2NrY2hhaXIgcmV0dXJucyB0aGUgbnVtYmVyIHdpdGggdGhlIGNvcnJlY3QgcHJlY2lzaW9uLCBidXQgaW4gbnVtYmVyIGZvcm1hdFxuICAgICAgICAgICAgICAvLyBqc29uIHBhcnNlIHdvbid0IHBhcnNlIGl0IGNvcnJlY3RseSwgc28gd2UgcmVxdWVyeSB0aGUgdHhpZCBmb3IgdGhlIHR4IGhleCB0byBkZWNvZGUgaGVyZVxuICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBnZXRQcmV2VHgodHhpZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tQnl0ZXMoQnVmZmVyLmZyb20odHhIZXgsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgdmFsID0gdHguZ2V0T3V0cHV0cygpW3ZvdXRdLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gICAgICAgICAgICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgICAgICAgICAgIHUgPSB7IC4uLnUsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MpIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICBjaGFpbjogY2hhaW4sXG4gICAgICAgICAgICAgIGluZGV4OiBhZGRySW5kZXgsXG4gICAgICAgICAgICAgIHByZXZUeDogZmV0Y2hQcmV2VHggPyBCdWZmZXIuZnJvbShhd2FpdCBnZXRQcmV2VHgodHhpZCksICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgd2FsbGV0VW5zcGVudHMucHVzaCguLi5wcm9jZXNzZWRVbnNwZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID49IE1BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYUykge1xuICAgICAgLy8gc3RvcCBzZWFyY2hpbmcgZm9yIGFkZHJlc3NlcyB3aXRoIHVuc3BlbnRzIGluIHRoZW0sIHdlJ3ZlIGZvdW5kICR7TUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTfSBpbiBhIHJvdyB3aXRoIG5vbmVcbiAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleCArIDEpO1xuICB9XG5cbiAgLy8gZ2V0IHVuc3BlbnRzIGZvciB0aGVzZSBhZGRyZXNzZXNcblxuICBjb25zdCB3YWxsZXRVbnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSBbXTtcbiAgLy8gVGhpcyB3aWxsIHBvcHVsYXRlIHdhbGxldEFkZHJlc3Nlc1xuICBhd2FpdCBnYXRoZXJVbnNwZW50cygwKTtcblxuICBpZiAod2FsbGV0VW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQ291bGRuJ3QgZmluZCBhbnkgYWRkcmVzc2VzIHdpdGggZnVuZHNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHsgZGVmYXVsdFZhbHVlIH06IHsgZGVmYXVsdFZhbHVlOiBudW1iZXIgfVxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdkb2dlJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2dlY29pbi9kb2dlY29pbi9ibG9iL21hc3Rlci9kb2MvZmVlLXJlY29tbWVuZGF0aW9uLm1kXG4gICAgLy8gMC4wMSBET0dFIHBlciBLQlxuICAgIHJldHVybiAxMDAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgTWVtcG9vbEFwaS5mb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSkuZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kaXIoZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uID0ge1xuICBpbnB1dHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB0cmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudDogbnVtYmVyO1xuICByZWNvdmVyeUFtb3VudFN0cmluZzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgY3JlYXRpb24uXG4gKiBBbGwgZmllbGRzIGFyZSBwcmUtdmFsaWRhdGVkIGFuZCBkZXJpdmVkIC0gbm8gc3RyaW5nIGtleSBwYXJzaW5nIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyV2l0aFVuc3BlbnRzUGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFZhbGlkYXRlZCByZWNvdmVyeSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIEZlZSByYXRlIGluIHNhdG9zaGkgcGVyIHZieXRlICovXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyO1xuICAvKiogS1JTIGZlZSBhbW91bnQgaW4gc2F0b3NoaXMgKDAgaWYgbm90IEtSUyByZWNvdmVyeSkgKi9cbiAga3JzRmVlPzogYmlnaW50O1xuICAvKiogS1JTIGZlZSBhZGRyZXNzIChyZXF1aXJlZCBpZiBrcnNGZWUgPiAwKSAqL1xuICBrcnNGZWVBZGRyZXNzPzogc3RyaW5nO1xuICAvKiogQmxvY2sgaGVpZ2h0IHVzZWQgdG8gc2VsZWN0IHRoZSBaY2FzaCBjb25zZW5zdXMgYnJhbmNoIElELiAqL1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgLyoqIFRyYW5zYWN0aW9uIGxvY2sgdGltZSAobkxvY2tUaW1lKSwgc2V0IG9uIHRoZSBQU0JUIGJlZm9yZSBzaWduaW5nICovXG4gIGxvY2tUaW1lPzogbnVtYmVyO1xuICAvKiogSW5wdXQgc2VxdWVuY2UgbnVtYmVyIGFwcGxpZWQgdG8gZXZlcnkgaW5wdXQgKi9cbiAgc2VxdWVuY2U/OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGhhc1ByaXZhdGVLZXkoa2V5OiBCSVAzMik6IGJvb2xlYW4ge1xuICByZXR1cm4ga2V5LnByaXZhdGVLZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSBQU0JUIHdpdGhvdXQgQml0R28sIHVzaW5nIHByb3ZpZGVkIHVuc3BlbnRzLlxuICpcbiAqIFRoaXMgaXMgdGhlIGNvcmUgdHJhbnNhY3Rpb24gYnVpbGRpbmcgbG9naWMsIHNlcGFyYXRlZCBmcm9tIHVuc3BlbnQgZ2F0aGVyaW5nXG4gKiBhbmQgb3V0cHV0IGZvcm1hdHRpbmcuIFJldHVybnMgYSBQU0JUIGF0IHRoZSBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlLlxuICpcbiAqIFNpZ25pbmcgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUga2V5czpcbiAqIC0gSWYgdXNlciBrZXkgaGFzIG5vIHByaXZhdGUga2V5OiB1bnNpZ25lZCBQU0JUXG4gKiAtIElmIHVzZXIga2V5IGhhcyBwcml2YXRlIGtleSBidXQgYmFja3VwIGRvZXNuJ3Q6IGhhbGYtc2lnbmVkIFBTQlQgKHVzZXIgc2lnbmF0dXJlIG9ubHkpXG4gKiAtIElmIGJvdGggdXNlciBhbmQgYmFja3VwIGtleXMgaGF2ZSBwcml2YXRlIGtleXM6IGZ1bGx5IHNpZ25lZCBQU0JUIChub3QgZmluYWxpemVkKVxuICpcbiAqIEBwYXJhbSBjb2luTmFtZSAtIFRoZSBjb2luIG5hbWUgZm9yIHRoZSBQU0JUXG4gKiBAcGFyYW0gcGFyYW1zIC0gUmVjb3ZlcnkgcGFyYW1ldGVycyB3aXRoIHByZS1kZXJpdmVkIGtleXNcbiAqIEBwYXJhbSB1bnNwZW50cyAtIFRoZSB3YWxsZXQgdW5zcGVudHMgdG8gcmVjb3ZlciAobXVzdCBiZSBub24tZW1wdHkpXG4gKiBAcmV0dXJucyBUaGUgUFNCVCBhdCB0aGUgYXBwcm9wcmlhdGUgc2lnbmluZyBzdGFnZSAobmV2ZXIgZmluYWxpemVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHBhcmFtczogUmVjb3ZlcldpdGhVbnNwZW50c1BhcmFtcyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiwga3JzRmVlLCBrcnNGZWVBZGRyZXNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuICBpZiAodG90YWxJbnB1dEFtb3VudCA8PSBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0lucHV0VG9SZWNvdmVyKCk7XG4gIH1cblxuICBsZXQgcHNidCA9IGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidChjb2luTmFtZSwgd2FsbGV0S2V5cywgdW5zcGVudHMsIHtcbiAgICBmZWVSYXRlU2F0VkI6IGZlZVJhdGVTYXRWQixcbiAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgIGtleVJlY292ZXJ5U2VydmljZUZlZToga3JzRmVlID8/IEJpZ0ludCgwKSxcbiAgICBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzOiBrcnNGZWVBZGRyZXNzLFxuICAgIGJsb2NrSGVpZ2h0OiBwYXJhbXMuYmxvY2tIZWlnaHQsXG4gICAgbG9ja1RpbWU6IHBhcmFtcy5sb2NrVGltZSxcbiAgICBzZXF1ZW5jZTogcGFyYW1zLnNlcXVlbmNlLFxuICB9KTtcblxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuXG4gIGlmICghdXNlckhhc1ByaXZhdGVLZXkpIHtcbiAgICAvLyBVbnNpZ25lZCBzd2VlcCAtIHJldHVybiB1bnNpZ25lZCBQU0JUXG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcblxuICAvLyBTaWduIHdpdGggdXNlciBrZXlcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIGtleXNbMF0sIHdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24pO1xuXG4gIGlmIChiYWNrdXBIYXNQcml2YXRlS2V5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIHNpZ24gd2l0aCBiYWNrdXAga2V5IHRvb1xuICAgIHBzYnQgPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCBrZXlzWzFdLCB3YWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcbiAgfVxuXG4gIC8vIFJldHVybiBQU0JUIChub3QgZmluYWxpemVkIC0gbGV0IGNhbGxlciBkZWNpZGUgaG93IHRvIGZvcm1hdClcbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgZm9ybWF0dGluZyBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgcmVzdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICAvKiogS1JTIHByb3ZpZGVyIG5hbWUgKGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlMpICovXG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICAvKiogT3JpZ2luYWwgYmFja3VwIGtleSBzdHJpbmcgKG5lZWRlZCBmb3IgS1JTIHJlY292ZXJ5IHJlc3BvbnNlKSAqL1xuICBiYWNrdXBLZXk/OiBzdHJpbmc7XG4gIC8qKiBUaGUgd2FsbGV0IHVuc3BlbnRzIChuZWVkZWQgZm9yIGlucHV0cyBhcnJheSBpbiByZXNwb25zZSkgKi9cbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgaW50byB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UgZm9ybWF0LlxuICpcbiAqIE91dHB1dCBmb3JtYXQgZGVwZW5kcyBvbiBzaWduaW5nIHN0YXRlIGFuZCBLUlMgcHJvdmlkZXI6XG4gKiAtIFVuc2lnbmVkIHN3ZWVwOiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8gd2l0aCBQU0JUIGhleFxuICogLSBLUlMga2V5dGVybmFsOiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggbGVnYWN5IGhhbGYtc2lnbmVkIHR4IGhleFxuICogLSBLUlMgb3RoZXI6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleFxuICogLSBGdWxsIHJlY292ZXJ5OiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleFxuICpcbiAqIEBwYXJhbSBjb2luIC0gVGhlIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gZm9ybWF0IChhdCBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlKVxuICogQHBhcmFtIHBhcmFtcyAtIEZvcm1hdHRpbmcgcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCByZWNvdmVyeSByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHBhcmFtczogRm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlQYXJhbXNcbik6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGtyc1Byb3ZpZGVyLCBiYWNrdXBLZXksIHVuc3BlbnRzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdXNlckhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMF0pO1xuICBjb25zdCBiYWNrdXBIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzFdKTtcblxuICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSAhdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBrcnNQcm92aWRlciAhPT0gdW5kZWZpbmVkICYmIHVzZXJIYXNQcml2YXRlS2V5ICYmICFiYWNrdXBIYXNQcml2YXRlS2V5O1xuICBjb25zdCBpc0Z1bGxSZWNvdmVyeSA9IHVzZXJIYXNQcml2YXRlS2V5ICYmIGJhY2t1cEhhc1ByaXZhdGVLZXk7XG5cbiAgLy8gVW5zaWduZWQgc3dlZXAgLSByZXR1cm4gRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvXG4gIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgICBmZWVJbmZvOiB7fSxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2VUeEZvcm1hdCA9ICFpc0tyc1JlY292ZXJ5IHx8IGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJyA/ICdsZWdhY3knIDogJ3BzYnQnO1xuICBjb25zdCB0eEluZm8gPSB7fSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gIC8vIEluY2x1ZGUgaW5wdXRzIGFycmF5IGZvciBsZWdhY3kgZm9ybWF0IHJlc3BvbnNlc1xuICB0eEluZm8uaW5wdXRzID1cbiAgICByZXNwb25zZVR4Rm9ybWF0ID09PSAnbGVnYWN5J1xuICAgICAgPyB1bnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBOdW1iZXIodS52YWx1ZSksIHZhbHVlU3RyaW5nOiB1LnZhbHVlLnRvU3RyaW5nKCksIHByZXZUeDogdW5kZWZpbmVkIH0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAvLyBLUlMgcmVjb3ZlcnkgLSBoYWxmLXNpZ25lZFxuICAgIC8vIGtleXRlcm5hbCB1c2VzIGxlZ2FjeSBmb3JtYXQsIG90aGVyIEtSUyBwcm92aWRlcnMgdXNlIFBTQlQgZm9ybWF0XG4gICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID1cbiAgICAgIGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJ1xuICAgICAgICA/IEJ1ZmZlci5mcm9tKHBzYnQuZ2V0SGFsZlNpZ25lZExlZ2FjeUZvcm1hdCgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgOiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICB0eEluZm8uY29pbiA9IGNvaW4uZ2V0Q2hhaW4oKTtcbiAgICB0eEluZm8uYmFja3VwS2V5ID0gYmFja3VwS2V5ID8/ICcnO1xuICAgIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gZ2V0UmVjb3ZlcnlBbW91bnQocHNidCwgd2FsbGV0S2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50ID0gTnVtYmVyKHJlY292ZXJ5QW1vdW50KTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnRTdHJpbmcgPSByZWNvdmVyeUFtb3VudC50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzRnVsbFJlY292ZXJ5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIGZpbmFsaXplIGFuZCBleHRyYWN0IHRyYW5zYWN0aW9uXG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHR4SW5mby50cmFuc2FjdGlvbkhleCA9IEJ1ZmZlci5mcm9tKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICByZXR1cm4gdHhJbmZvO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCaXAzMktleXMoYml0Z286IEJpdEdvQmFzZSwgcGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUHJvbWlzZTxUcmlwbGU8QklQMzI+PiB7XG4gIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXNGcm9tU2RrQ29yZShiaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfSk7XG4gIGlmICghaXNUcmlwbGUoa2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGtleSB0cmlwbGVgKTtcbiAgfVxuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IEJJUDMyLmZyb20oay50b0Jhc2U1OCgpKSkgYXMgVHJpcGxlPEJJUDMyPjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvLlxuICpcbiAqIFJldHVybnMgdHJhbnNhY3Rpb24gaGV4IGluIGxlZ2FjeSBmb3JtYXQgZm9yIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uLCBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKG9ubHkga2V5dGVybmFsKSxcbiAqIGZ1bGx5IHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBhIEtSUyBwcm92aWRlci5cbiAqXG4gKiBSZXR1cm5zIFBTQlQgaGV4IGZvciBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKGV4Y2x1ZGluZyBrZXl0ZXJuYWwpXG4gKiBGb3IgUFNCVCBoZXggY2FzZXMsIFVuc3BlbnRzIGFyZSBub3QgcmVxdWlyZWQgaW4gcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHBhcmFtc1xuICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViXG4gKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICogLSBiaXRnb0tleTogeHB1YlxuICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAqIC0gc2NhbjogdGhlIGFtb3VudCBvZiBjb25zZWN1dGl2ZSBhZGRyZXNzZXMgd2l0aG91dCB1bnNwZW50cyB0byBzY2FuIHRocm91Z2ggYmVmb3JlIHN0b3BwaW5nXG4gKiAtIGlnbm9yZUFkZHJlc3NUeXBlczogKG9wdGlvbmFsKSBzY3JpcHRzIHRvIGlnbm9yZVxuICogICAgICAgIGZvciBleGFtcGxlOiBbJ3Ayc2hQMndzaCcsICdwMndzaCddIHdpbGwgcHJldmVudCBjb2RlIGZyb20gY2hlY2tpbmcgZm9yIHdyYXBwZWQtc2Vnd2l0IGFuZCBuYXRpdmUtc2Vnd2l0IGNoYWlucyBvbiB0aGUgcHVibGljIGJsb2NrIGV4cGxvcmVyc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy51c2VyS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1c2VyS2V5Jyk7XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuYmFja3VwS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgfVxuXG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5zY2FuKSAmJiAoIV8uaXNJbnRlZ2VyKHBhcmFtcy5zY2FuKSB8fCBwYXJhbXMuc2NhbiA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2FuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShwYXJhbXMuZmVlUmF0ZSkgfHwgcGFyYW1zLmZlZVJhdGUgPD0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZlZVJhdGUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9XG5cbiAgLy8gY2hlY2sgd2hldGhlciBrZXkgbWF0ZXJpYWwgYW5kIHBhc3N3b3JkIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcnMgYW5kIHJldHVybiBwYXJlbnQga2V5cyBvZiBhbGwgdGhyZWUga2V5cyBvZiB0aGUgd2FsbGV0XG4gIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXMoYml0Z28sIHBhcmFtcyk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHtcbiAgICB0cmlwbGU6IGtleXMsXG4gICAgZGVyaXZhdGlvblByZWZpeGVzOiBbcGFyYW1zLnVzZXJLZXlQYXRoIHx8ICdtLzAvMCcsICdtLzAvMCcsICdtLzAvMCddLFxuICB9KTtcblxuICBjb25zdCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaXhlZFNjcmlwdFdhbGxldC5vdXRwdXRTY3JpcHRUeXBlc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChhZGRyZXNzVHlwZSkgPT5cbiAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LnN1cHBvcnRzU2NyaXB0VHlwZShjb2luLm5hbWUsIGFkZHJlc3NUeXBlKSAmJlxuICAgICAgICAgICAgIXBhcmFtcy5pZ25vcmVBZGRyZXNzVHlwZXM/LmluY2x1ZGVzKGFkZHJlc3NUeXBlKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHF1ZXJpZXMsIGFkZHJlc3NUeXBlKSA9PiBbXG4gICAgICAgICAgICAuLi5xdWVyaWVzLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICAgICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZShhZGRyZXNzVHlwZSwgJ2V4dGVybmFsJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gICAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKGFkZHJlc3NUeXBlLCAnaW50ZXJuYWwnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdIGFzIFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+W11cbiAgICAgICAgKVxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmVlUmF0ZVNhdFZCID1cbiAgICBwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmFtcy5mZWVSYXRlXG4gICAgICA6IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwgeyBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIEtSUyBmZWUgaWYgbmVlZGVkXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMua3JzUHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICBsZXQga3JzRmVlID0gQmlnSW50KDApO1xuICBsZXQga3JzRmVlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpc0tyc1JlY292ZXJ5ICYmIHBhcmFtcy5rcnNQcm92aWRlcikge1xuICAgIHRyeSB7XG4gICAgICBrcnNGZWUgPSBCaWdJbnQoYXdhaXQgY2FsY3VsYXRlRmVlQW1vdW50KGNvaW4sIHsgcHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBEb24ndCBsZXQgdGhpcyBlcnJvciBibG9jayB0aGUgcmVjb3ZlcnkgLVxuICAgICAgY29uc29sZS5kaXIoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoa3JzRmVlID4gQmlnSW50KDApKSB7XG4gICAgICBjb25zdCBrcnNQcm92aWRlckNvbmZpZyA9IGdldEtyc1Byb3ZpZGVyKGNvaW4sIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgICBpZiAoIWtyc1Byb3ZpZGVyQ29uZmlnLmZlZUFkZHJlc3Nlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVByb3ZpZGVyIG11c3QgZGVmaW5lIGZlZUFkZHJlc3Nlc2ApO1xuICAgICAgfVxuXG4gICAgICBrcnNGZWVBZGRyZXNzID0ga3JzUHJvdmlkZXJDb25maWcuZmVlQWRkcmVzc2VzW2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgICAgIGlmICgha3JzRmVlQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgS1JTIHByb3ZpZGVyIGhhcyBub3QgY29uZmlndXJlZCB0aGVpciBmZWUgc3RydWN0dXJlIHlldCAtIHJlY292ZXJ5IGNhbm5vdCBiZSBjb21wbGV0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBhbmQgc2lnbiBQU0JUXG4gIGNvbnN0IHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICBjb2luLm5hbWUsXG4gICAge1xuICAgICAgd2FsbGV0S2V5cyxcbiAgICAgIGtleXMsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGZlZVJhdGVTYXRWQixcbiAgICAgIGtyc0ZlZSxcbiAgICAgIGtyc0ZlZUFkZHJlc3MsXG4gICAgICBibG9ja0hlaWdodDogcGFyYW1zLmJsb2NrSGVpZ2h0LFxuICAgICAgbG9ja1RpbWU6IHBhcmFtcy5sb2NrVGltZSxcbiAgICAgIHNlcXVlbmNlOiBwYXJhbXMuc2VxdWVuY2UsXG4gICAgfSxcbiAgICB1bnNwZW50c1xuICApO1xuXG4gIC8vIEZvcm1hdCB0aGUgcmVzdWx0XG4gIHJldHVybiBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBwc2J0LCB7XG4gICAgd2FsbGV0S2V5cyxcbiAgICBrZXlzLFxuICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgIGtyc1Byb3ZpZGVyOiBwYXJhbXMua3JzUHJvdmlkZXIsXG4gICAgYmFja3VwS2V5OiBwYXJhbXMuYmFja3VwS2V5LFxuICAgIHVuc3BlbnRzLFxuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaXRHb1YxVW5zcGVudCB7XG4gIHR4X2hhc2g6IHN0cmluZztcbiAgdHhfb3V0cHV0X246IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVN3ZWVwUGFyYW1zIHtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICB1bnNwZW50czogQml0R29WMVVuc3BlbnRbXTtcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIG90cDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFYxUmVjb3ZlclBhcmFtcyBleHRlbmRzIE9taXQ8VjFTd2VlcFBhcmFtcywgJ290cCc+IHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2MUJhY2t1cEtleVJlY292ZXJ5KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFYxUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBjb25zdCByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHtcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjEsXG4gIH0pO1xuICBjb25zdCB2MXdhbGxldCA9IGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogcGFyYW1zLndhbGxldElkIH0pO1xuICByZXR1cm4gYXdhaXQgdjF3YWxsZXQucmVjb3Zlcih7XG4gICAgLi4ucGFyYW1zLFxuICAgIGZlZVJhdGU6IHJlY292ZXJ5RmVlUGVyQnl0ZSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2MVN3ZWVwKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFYxU3dlZXBQYXJhbXNcbik6IFByb21pc2U8e1xuICB0eDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xufT4ge1xuICBpZiAoXG4gICAgXy5pc1VuZGVmaW5lZChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikgfHxcbiAgICAhY29pbi5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgeyBhbnlGb3JtYXQ6IHRydWUgfSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgfVxuXG4gIGxldCByZWNvdmVyeUZlZVBlckJ5dGUgPSAxMDA7XG4gIGlmIChiaXRnby5lbnYgPT09ICdwcm9kJykge1xuICAgIHJlY292ZXJ5RmVlUGVyQnl0ZSA9IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwge1xuICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxX1NXRUVQLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnN3ZWVwKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cbiJdfQ==
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBOFNBLGtGQTBDQztBQWtDRCxzRUFxREM7QUFnQ0QsOENBNkhDO0FBcUJELGtEQW9CQztBQUVELDBCQTRCQztBQW5wQkQsb0RBQXVCO0FBQ3ZCLDhDQVF5QjtBQUN6QixnREFBeUU7QUFHekUsZ0ZBQStFO0FBQy9FLHdDQUE4RDtBQUM5RCxrREFBMEQ7QUFDMUQsa0ZBQXlGO0FBQ3pGLG9DQUFrRztBQUNsRyx3Q0FBMkU7QUFFM0UseURBQStEO0FBQy9ELDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsaUNBQXdFO0FBUXhFLDBEQUEwRDtBQUM3QyxRQUFBLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQztBQUV4RCw2SEFBNkg7QUFDaEgsUUFBQSwyQ0FBMkMsR0FBRyxHQUFHLENBQUM7QUFFL0Qsa0ZBQWtGO0FBQ3JFLFFBQUEscUNBQXFDLEdBQUcsRUFBRSxDQUFDO0FBVXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBc0I7SUFDMUQsT0FBTyxNQUFNLElBQUksMkJBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQXNCLEVBQUUsTUFBNEI7SUFDcEYsTUFBTSxXQUFXLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksV0FB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Q0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMxQixHQUFHLE1BQU07UUFDVCxPQUFPLEVBQUUsa0JBQWtCO0tBQzVCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0R29CYXNlLFxuICBFcnJvck5vSW5wdXRUb1JlY292ZXIsXG4gIGdldEtyc1Byb3ZpZGVyLFxuICBnZXRCaXAzMktleXMgYXMgZ2V0QmlwMzJLZXlzRnJvbVNka0NvcmUsXG4gIGlzVHJpcGxlLFxuICBrcnNQcm92aWRlcnMsXG4gIFRyaXBsZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXggfSBmcm9tICcuLi9hZGRyZXNzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBnZXRNYWlubmV0Q29pbk5hbWUsIHRvV2FzbVV0eG9Db2luTmFtZSwgVXR4b0NvaW5OYW1lLCBXYXNtVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuaW1wb3J0IHsgcGFyc2VPdXRwdXRJZCwgdW5zcGVudFN1bSwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGZvckNvaW4sIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL1JlY292ZXJ5UHJvdmlkZXInO1xuaW1wb3J0IHsgTWVtcG9vbEFwaSB9IGZyb20gJy4vbWVtcG9vbEFwaSc7XG5pbXBvcnQgeyBDb2luZ2Vja29BcGkgfSBmcm9tICcuL2NvaW5nZWNrb0FwaSc7XG5pbXBvcnQgeyBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9IGZpeGVkU2NyaXB0V2FsbGV0Lk91dHB1dFNjcmlwdFR5cGU7XG50eXBlIENoYWluQ29kZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZTtcbnR5cGUgV2FsbGV0VW5zcGVudEpTT04gPSBXYWxsZXRVbnNwZW50ICYge1xuICB2YWx1ZVN0cmluZzogc3RyaW5nO1xufTtcblxuLy8gVjEgb25seSBkZWFscyB3aXRoIEJUQy4gNTAgc2F0L3ZieXRlIGlzIHZlcnkgYXJiaXRyYXJ5LlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjEgPSA1MDtcblxuLy8gRklYTUUoQlRDLTI2OTEpOiBpdCBpcyB1bmNsZWFyIHdoeSBzd2VlcHMgaGF2ZSBhIGRpZmZlcmVudCBkZWZhdWx0IHRoYW4gcmVndWxhciByZWNvdmVyeS4gMTAwIHNhdC92Ynl0ZSBpcyBleHRyZW1lbHkgaGlnaC5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxX1NXRUVQID0gMTAwO1xuXG4vLyBGSVhNRShCVEMtMjY5MSk6IGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBoYXZlIGEgc2luZ2xlIGRlZmF1bHQgZm9yIGV2ZXJ5IGNvaW4uXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMiA9IDUwO1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICB0eEluZm86IHtcbiAgICB1bnNwZW50cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIH07XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGZlZUluZm86IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgY29pbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBtYXJrZXQgcHJpY2UgZnJvbSBhIHRoaXJkIHBhcnR5IHRvIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG5vbi1iaXRnbyByZWNvdmVyeSB0cmFuc2FjdGlvbnMsIHdoZW4gaXQgaXMgbmVjZXNzYXJ5XG4gKiB0byBjYWxjdWxhdGUgdGhlIHJvdWdoIGZlZSBuZWVkZWQgdG8gcGF5IHRvIEtleXRlcm5hbC4gV2UgYXJlIG9rYXkgd2l0aCBhcHByb3hpbWF0aW5nLFxuICogYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByaWNlIG9mIHRoaXMgZnVuY3Rpb24gb25seSBoYXMgbGVzcyB0aGFuIDEgZG9sbGFyIGluZmx1ZW5jZSBvbiB0aGVcbiAqIGZlZSB0aGF0IG5lZWRzIHRvIGJlIHBhaWQgdG8gS2V5dGVybmFsLlxuICpcbiAqIFNlZSBjYWxjdWxhdGVGZWVBbW91bnQgZnVuY3Rpb246ICByZXR1cm4gTWF0aC5yb3VuZChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UgKiBzZWxmLmdldEJhc2VGYWN0b3IoKSk7XG4gKlxuICogVGhpcyBlbmQgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlIGVuZHBvaW50LCBzaW5jZSBzb21lIGNvaW5zJyBwcmljZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgcHJvdmlkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBDb2luZ2Vja29BcGkoKS5nZXRVU0RQcmljZShjb2luLmdldEZhbWlseSgpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgKGluIGJhc2UgdW5pdHMpIHRvIHBheSBhIEtSUyBwcm92aWRlciB3aGVuIGJ1aWxkaW5nIGEgcmVjb3ZlcnkgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIHtTdHJpbmd9IHRoZSBLUlMgcHJvdmlkZXIgdGhhdCBob2xkcyB0aGUgYmFja3VwIGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZlZUFtb3VudChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBwYXJhbXM6IHsgcHJvdmlkZXI6IHN0cmluZyB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qga3JzUHJvdmlkZXIgPSBrcnNQcm92aWRlcnNbcGFyYW1zLnByb3ZpZGVyXTtcblxuICBpZiAoa3JzUHJvdmlkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlIHN0cnVjdHVyZSBzcGVjaWZpZWQgZm9yIHByb3ZpZGVyICR7cGFyYW1zLnByb3ZpZGVyfWApO1xuICB9XG5cbiAgaWYgKGtyc1Byb3ZpZGVyLmZlZVR5cGUgPT09ICdmbGF0VXNkJykge1xuICAgIGNvbnN0IGZlZUFtb3VudFVzZCA9IGtyc1Byb3ZpZGVyLmZlZUFtb3VudDtcbiAgICBjb25zdCBjdXJyZW50UHJpY2U6IG51bWJlciA9IGF3YWl0IGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlKSAqIGNvaW4uZ2V0QmFzZUZhY3RvcigpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB3ZSBjYW4gYWRkIG1vcmUgZmVlIHN0cnVjdHVyZXMgaGVyZSBhcyBuZWVkZWQgZm9yIGRpZmZlcmVudCBwcm92aWRlcnMsIHN1Y2ggYXMgcGVyY2VudGFnZSBvZiByZWNvdmVyeSBhbW91bnRcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZlZSBzdHJ1Y3R1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyUGFyYW1zIHtcbiAgc2Nhbj86IG51bWJlcjtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgYml0Z29LZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgaWdub3JlQWRkcmVzc1R5cGVzOiBTY3JpcHRUeXBlMk9mM1tdO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIHVzZXJLZXlQYXRoPzogc3RyaW5nO1xuICByZWNvdmVyeVByb3ZpZGVyPzogUmVjb3ZlcnlQcm92aWRlcjtcbiAgLyoqIFNhdG9zaGkgcGVyIGJ5dGUgKi9cbiAgZmVlUmF0ZT86IG51bWJlcjtcbiAgLyoqIEJsb2NrIGhlaWdodCB1c2VkIHRvIHNlbGVjdCB0aGUgWmNhc2ggY29uc2Vuc3VzIGJyYW5jaCBJRC4gKi9cbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBsb2NrIHRpbWUgKG5Mb2NrVGltZSkuIFNldCBiZWZvcmUgc2lnbmluZyDigJQgaXQgaXMgcGFydCBvZiB0aGUgc2lnaGFzaC5cbiAgICogVXNlZCBmb3IgRUNYIHJlcGxheS1wcm90ZWN0aW9uIHN3ZWVwcyAoZS5nLiA0OTlfOTk5Xzk5OSkgYW5kIG90aGVyIGN1c3RvbSBsb2NrLXRpbWUgbmVlZHMuXG4gICAqL1xuICBsb2NrVGltZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIElucHV0IHNlcXVlbmNlIG51bWJlciBhcHBsaWVkIHRvIGV2ZXJ5IGlucHV0LiBEZWZhdWx0cyB0byAweEZGRkZGRkZFIChSQkYsIG5vbi1maW5hbClcbiAgICogd2hpY2ggYWxyZWFkeSBzYXRpc2ZpZXMgdGhlIG5vbi1maW5hbCByZXF1aXJlbWVudCBmb3IgbG9ja1RpbWUgdG8gdGFrZSBlZmZlY3QuXG4gICAqL1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGFuZCBmb3JtYXQgaXQgZm9yIEFQSSBxdWVyaWVzXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lXG4gKiBAcGFyYW0gd2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIGNoYWluIC0gVGhlIGNoYWluIGNvZGVcbiAqIEBwYXJhbSBhZGRySW5kZXggLSBUaGUgYWRkcmVzcyBpbmRleFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBhZGRyZXNzICh3aXRoIGNhc2hhZGRyIHByZWZpeCBzdHJpcHBlZCBmb3IgQkNIL0JDSEEpXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEFkZHJlc3MoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGNvaW5OYW1lOiBXYXNtVXR4b0NvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgYWRkckluZGV4OiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IGZvcm1hdCA9IGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaCcgfHwgY29pbi5nZXRDaGFpbigpID09PSAnYmNoYScgPyAnY2FzaGFkZHInIDogdW5kZWZpbmVkO1xuICBjb25zdCBhZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXgoY29pbk5hbWUsIHdhbGxldEtleXMsIGNoYWluLCBhZGRySW5kZXgsIGZvcm1hdCk7XG5cbiAgLy8gQmxvY2tjaGFpciB1c2VzIGNhc2hhZGRyIGZvcm1hdCB3aGVuIHF1ZXJ5aW5nIHRoZSBBUEkgZm9yIGFkZHJlc3MgaW5mb3JtYXRpb24uIFN0cmlwIHRoZSBwcmVmaXggZm9yIEJDSC9CQ0hBLlxuICByZXR1cm4gZm9ybWF0ID09PSAnY2FzaGFkZHInID8gYWRkcmVzcy5zcGxpdCgnOicpWzFdIDogYWRkcmVzcztcbn1cblxuZnVuY3Rpb24gaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNjcmlwdFR5cGUgIT09ICdwMnNoJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXMsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50PltdPiB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuc2NyaXB0VHlwZShjaGFpbik7XG4gIGNvbnN0IGZldGNoUHJldlR4ID0gIWhhc1dpdG5lc3NEYXRhKHNjcmlwdFR5cGUpICYmIGdldE1haW5uZXRDb2luTmFtZShjb2luLm5hbWUpICE9PSAnemVjJztcbiAgY29uc3QgcmVjb3ZlcnlQcm92aWRlciA9IHBhcmFtcy5yZWNvdmVyeVByb3ZpZGVyID8/IGZvckNvaW4oY29pbi5nZXRDaGFpbigpLCBwYXJhbXMuYXBpS2V5KTtcbiAgY29uc3QgTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTID0gcGFyYW1zLnNjYW4gfHwgMjA7XG4gIGxldCBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG4gIGNvbnN0IHByZXZUeENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRQcmV2VHgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgcHJldlR4SGV4ID0gcHJldlR4Q2FjaGUuZ2V0KHR4aWQpO1xuICAgIGlmICghcHJldlR4SGV4KSB7XG4gICAgICBwcmV2VHhIZXggPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldFRyYW5zYWN0aW9uSGV4KHR4aWQpO1xuICAgICAgcHJldlR4Q2FjaGUuc2V0KHR4aWQsIHByZXZUeEhleCk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VHhIZXg7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnYXRoZXJVbnNwZW50cyhhZGRySW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGZvcm1hdHRlZEFkZHJlc3MgPSBnZXRGb3JtYXR0ZWRBZGRyZXNzKGNvaW4sIGNvaW4ud2FzbU5hbWUsIHdhbGxldEtleXMsIGNoYWluLCBhZGRySW5kZXgpO1xuICAgIGNvbnN0IGFkZHJJbmZvID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRBZGRyZXNzSW5mbyhmb3JtYXR0ZWRBZGRyZXNzKTtcbiAgICAvLyB3ZSB1c2UgdHhDb3VudCBoZXJlIGJlY2F1c2UgaXQgaW1wbGllcyB1c2FnZSAtIGhhdmluZyB0eCdlcyBtZWFucyB0aGUgYWRkciB3YXMgZ2VuZXJhdGVkIGFuZCB1c2VkXG4gICAgaWYgKGFkZHJJbmZvLnR4Q291bnQgPT09IDApIHtcbiAgICAgIG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcblxuICAgICAgaWYgKGFkZHJJbmZvLmJhbGFuY2UgPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCBhbiBhZGRyZXNzIHdpdGggYmFsYW5jZTogJHtmb3JtYXR0ZWRBZGRyZXNzfSB3aXRoIGJhbGFuY2UgJHthZGRySW5mby5iYWxhbmNlfWApO1xuICAgICAgICBjb25zdCBhZGRyZXNzVW5zcGVudHMgPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKFtmb3JtYXR0ZWRBZGRyZXNzXSk7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFVuc3BlbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgYWRkcmVzc1Vuc3BlbnRzLm1hcChhc3luYyAodSk6IFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+PiA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHR4aWQsIHZvdXQgfSA9IHBhcnNlT3V0cHV0SWQodS5pZCk7XG4gICAgICAgICAgICBsZXQgdmFsID0gQmlnSW50KHUudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgICAgLy8gYmxvY2tjaGFpciByZXR1cm5zIHRoZSBudW1iZXIgd2l0aCB0aGUgY29ycmVjdCBwcmVjaXNpb24sIGJ1dCBpbiBudW1iZXIgZm9ybWF0XG4gICAgICAgICAgICAgIC8vIGpzb24gcGFyc2Ugd29uJ3QgcGFyc2UgaXQgY29ycmVjdGx5LCBzbyB3ZSByZXF1ZXJ5IHRoZSB0eGlkIGZvciB0aGUgdHggaGV4IHRvIGRlY29kZSBoZXJlXG4gICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGdldFByZXZUeCh0eGlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eCA9IFRyYW5zYWN0aW9uLmZyb21CeXRlcyhCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgICB2YWwgPSB0eC5nZXRPdXRwdXRzKClbdm91dF0udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgICAgICAgICAgIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICAgICAgICAgICAgdSA9IHsgLi4udSwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHUuYWRkcmVzcykgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgIGNoYWluOiBjaGFpbixcbiAgICAgICAgICAgICAgaW5kZXg6IGFkZHJJbmRleCxcbiAgICAgICAgICAgICAgcHJldlR4OiBmZXRjaFByZXZUeCA/IEJ1ZmZlci5mcm9tKGF3YWl0IGdldFByZXZUeCh0eGlkKSwgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLnByb2Nlc3NlZFVuc3BlbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPj0gTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTKSB7XG4gICAgICAvLyBzdG9wIHNlYXJjaGluZyBmb3IgYWRkcmVzc2VzIHdpdGggdW5zcGVudHMgaW4gdGhlbSwgd2UndmUgZm91bmQgJHtNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFN9IGluIGEgcm93IHdpdGggbm9uZVxuICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyVW5zcGVudHMoYWRkckluZGV4ICsgMSk7XG4gIH1cblxuICAvLyBnZXQgdW5zcGVudHMgZm9yIHRoZXNlIGFkZHJlc3Nlc1xuXG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IFtdO1xuICAvLyBUaGlzIHdpbGwgcG9wdWxhdGUgd2FsbGV0QWRkcmVzc2VzXG4gIGF3YWl0IGdhdGhlclVuc3BlbnRzKDApO1xuXG4gIGlmICh3YWxsZXRVbnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBDb3VsZG4ndCBmaW5kIGFueSBhZGRyZXNzZXMgd2l0aCBmdW5kc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB3YWxsZXRVbnNwZW50cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgeyBkZWZhdWx0VmFsdWUgfTogeyBkZWZhdWx0VmFsdWU6IG51bWJlciB9XG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSA9PT0gJ2RvZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RvZ2Vjb2luL2RvZ2Vjb2luL2Jsb2IvbWFzdGVyL2RvYy9mZWUtcmVjb21tZW5kYXRpb24ubWRcbiAgICAvLyAwLjAxIERPR0UgcGVyIEtCXG4gICAgcmV0dXJuIDEwMDA7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBNZW1wb29sQXBpLmZvckNvaW4oY29pbi5nZXRDaGFpbigpKS5nZXRSZWNvdmVyeUZlZVBlckJ5dGVzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmRpcihlKTtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gPSB7XG4gIGlucHV0cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIHRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50OiBudW1iZXI7XG4gIHJlY292ZXJ5QW1vdW50U3RyaW5nOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGJhY2t1cCBrZXkgcmVjb3ZlcnkgUFNCVCBjcmVhdGlvbi5cbiAqIEFsbCBmaWVsZHMgYXJlIHByZS12YWxpZGF0ZWQgYW5kIGRlcml2ZWQgLSBubyBzdHJpbmcga2V5IHBhcnNpbmcgbmVlZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJXaXRoVW5zcGVudHNQYXJhbXMge1xuICAvKiogUHJlLWRlcml2ZWQgd2FsbGV0IGtleXMgKi9cbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gIC8qKiBQcmUtZGVyaXZlZCBrZXkgdHJpcGxlICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gQ2hlY2sgcHJpdmF0ZUtleSB0byBkZXRlcm1pbmUgc2lnbmluZyBjYXBhYmlsaXR5LiAqL1xuICBrZXlzOiBUcmlwbGU8QklQMzI+O1xuICAvKiogVmFsaWRhdGVkIHJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICAvKiogRmVlIHJhdGUgaW4gc2F0b3NoaSBwZXIgdmJ5dGUgKi9cbiAgZmVlUmF0ZVNhdFZCOiBudW1iZXI7XG4gIC8qKiBLUlMgZmVlIGFtb3VudCBpbiBzYXRvc2hpcyAoMCBpZiBub3QgS1JTIHJlY292ZXJ5KSAqL1xuICBrcnNGZWU/OiBiaWdpbnQ7XG4gIC8qKiBLUlMgZmVlIGFkZHJlc3MgKHJlcXVpcmVkIGlmIGtyc0ZlZSA+IDApICovXG4gIGtyc0ZlZUFkZHJlc3M/OiBzdHJpbmc7XG4gIC8qKiBCbG9jayBoZWlnaHQgdXNlZCB0byBzZWxlY3QgdGhlIFpjYXNoIGNvbnNlbnN1cyBicmFuY2ggSUQuICovXG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICAvKiogVHJhbnNhY3Rpb24gbG9jayB0aW1lIChuTG9ja1RpbWUpLCBzZXQgb24gdGhlIFBTQlQgYmVmb3JlIHNpZ25pbmcgKi9cbiAgbG9ja1RpbWU/OiBudW1iZXI7XG4gIC8qKiBJbnB1dCBzZXF1ZW5jZSBudW1iZXIgYXBwbGllZCB0byBldmVyeSBpbnB1dCAqL1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaGFzUHJpdmF0ZUtleShrZXk6IEJJUDMyKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkucHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IFBTQlQgd2l0aG91dCBCaXRHbywgdXNpbmcgcHJvdmlkZWQgdW5zcGVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgY29yZSB0cmFuc2FjdGlvbiBidWlsZGluZyBsb2dpYywgc2VwYXJhdGVkIGZyb20gdW5zcGVudCBnYXRoZXJpbmdcbiAqIGFuZCBvdXRwdXQgZm9ybWF0dGluZy4gUmV0dXJucyBhIFBTQlQgYXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UuXG4gKlxuICogU2lnbmluZyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBrZXlzOlxuICogLSBJZiB1c2VyIGtleSBoYXMgbm8gcHJpdmF0ZSBrZXk6IHVuc2lnbmVkIFBTQlRcbiAqIC0gSWYgdXNlciBrZXkgaGFzIHByaXZhdGUga2V5IGJ1dCBiYWNrdXAgZG9lc24ndDogaGFsZi1zaWduZWQgUFNCVCAodXNlciBzaWduYXR1cmUgb25seSlcbiAqIC0gSWYgYm90aCB1c2VyIGFuZCBiYWNrdXAga2V5cyBoYXZlIHByaXZhdGUga2V5czogZnVsbHkgc2lnbmVkIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gKlxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSBmb3IgdGhlIFBTQlRcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZWNvdmVyeSBwYXJhbWV0ZXJzIHdpdGggcHJlLWRlcml2ZWQga2V5c1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHdhbGxldCB1bnNwZW50cyB0byByZWNvdmVyIChtdXN0IGJlIG5vbi1lbXB0eSlcbiAqIEByZXR1cm5zIFRoZSBQU0JUIGF0IHRoZSBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlIChuZXZlciBmaW5hbGl6ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSB8IFdhc21VdHhvQ29pbk5hbWUsXG4gIHBhcmFtczogUmVjb3ZlcldpdGhVbnNwZW50c1BhcmFtcyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiwga3JzRmVlLCBrcnNGZWVBZGRyZXNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuICBpZiAodG90YWxJbnB1dEFtb3VudCA8PSBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0lucHV0VG9SZWNvdmVyKCk7XG4gIH1cblxuICBsZXQgcHNidCA9IGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidCh0b1dhc21VdHhvQ29pbk5hbWUoY29pbk5hbWUpLCB3YWxsZXRLZXlzLCB1bnNwZW50cywge1xuICAgIGZlZVJhdGVTYXRWQjogZmVlUmF0ZVNhdFZCLFxuICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlOiBrcnNGZWUgPz8gQmlnSW50KDApLFxuICAgIGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3M6IGtyc0ZlZUFkZHJlc3MsXG4gICAgYmxvY2tIZWlnaHQ6IHBhcmFtcy5ibG9ja0hlaWdodCxcbiAgICBsb2NrVGltZTogcGFyYW1zLmxvY2tUaW1lLFxuICAgIHNlcXVlbmNlOiBwYXJhbXMuc2VxdWVuY2UsXG4gIH0pO1xuXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG5cbiAgaWYgKCF1c2VySGFzUHJpdmF0ZUtleSkge1xuICAgIC8vIFVuc2lnbmVkIHN3ZWVwIC0gcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAgICByZXR1cm4gcHNidDtcbiAgfVxuXG4gIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuXG4gIC8vIFNpZ24gd2l0aCB1c2VyIGtleVxuICBwc2J0ID0gc2lnbkFuZFZlcmlmeVBzYnQocHNidCwga2V5c1swXSwgd2FsbGV0S2V5cywgcmVwbGF5UHJvdGVjdGlvbik7XG5cbiAgaWYgKGJhY2t1cEhhc1ByaXZhdGVLZXkpIHtcbiAgICAvLyBGdWxsIHJlY292ZXJ5IC0gc2lnbiB3aXRoIGJhY2t1cCBrZXkgdG9vXG4gICAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIGtleXNbMV0sIHdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24pO1xuICB9XG5cbiAgLy8gUmV0dXJuIFBTQlQgKG5vdCBmaW5hbGl6ZWQgLSBsZXQgY2FsbGVyIGRlY2lkZSBob3cgdG8gZm9ybWF0KVxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBmb3JtYXR0aW5nIGEgYmFja3VwIGtleSByZWNvdmVyeSByZXN1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlQYXJhbXMge1xuICAvKiogUHJlLWRlcml2ZWQgd2FsbGV0IGtleXMgKi9cbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gIC8qKiBQcmUtZGVyaXZlZCBrZXkgdHJpcGxlICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gQ2hlY2sgcHJpdmF0ZUtleSB0byBkZXRlcm1pbmUgc2lnbmluZyBjYXBhYmlsaXR5LiAqL1xuICBrZXlzOiBUcmlwbGU8QklQMzI+O1xuICAvKiogUmVjb3ZlcnkgZGVzdGluYXRpb24gYWRkcmVzcyAqL1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIC8qKiBLUlMgcHJvdmlkZXIgbmFtZSAoaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSUykgKi9cbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIC8qKiBPcmlnaW5hbCBiYWNrdXAga2V5IHN0cmluZyAobmVlZGVkIGZvciBLUlMgcmVjb3ZlcnkgcmVzcG9uc2UpICovXG4gIGJhY2t1cEtleT86IHN0cmluZztcbiAgLyoqIFRoZSB3YWxsZXQgdW5zcGVudHMgKG5lZWRlZCBmb3IgaW5wdXRzIGFycmF5IGluIHJlc3BvbnNlKSAqL1xuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgUFNCVCBpbnRvIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBmb3JtYXQuXG4gKlxuICogT3V0cHV0IGZvcm1hdCBkZXBlbmRzIG9uIHNpZ25pbmcgc3RhdGUgYW5kIEtSUyBwcm92aWRlcjpcbiAqIC0gVW5zaWduZWQgc3dlZXA6IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4XG4gKiAtIEtSUyBrZXl0ZXJuYWw6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBsZWdhY3kgaGFsZi1zaWduZWQgdHggaGV4XG4gKiAtIEtSUyBvdGhlcjogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIFBTQlQgaGV4XG4gKiAtIEZ1bGwgcmVjb3Zlcnk6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBmaW5hbGl6ZWQgdHggaGV4XG4gKlxuICogQHBhcmFtIGNvaW4gLSBUaGUgY29pbiBpbnN0YW5jZVxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCB0byBmb3JtYXQgKGF0IGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UpXG4gKiBAcGFyYW0gcGFyYW1zIC0gRm9ybWF0dGluZyBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHJlY292ZXJ5IHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgcGFyYW1zOiBGb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVBhcmFtc1xuKTogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB8IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywga2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga3JzUHJvdmlkZXIsIGJhY2t1cEtleSwgdW5zcGVudHMgfSA9IHBhcmFtcztcblxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuXG4gIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICF1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcbiAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IGtyc1Byb3ZpZGVyICE9PSB1bmRlZmluZWQgJiYgdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG4gIGNvbnN0IGlzRnVsbFJlY292ZXJ5ID0gdXNlckhhc1ByaXZhdGVLZXkgJiYgYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICAvLyBVbnNpZ25lZCBzd2VlcCAtIHJldHVybiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm9cbiAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIGZlZUluZm86IHt9LFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZXNwb25zZVR4Rm9ybWF0ID0gIWlzS3JzUmVjb3ZlcnkgfHwga3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnID8gJ2xlZ2FjeScgOiAncHNidCc7XG4gIGNvbnN0IHR4SW5mbyA9IHt9IGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgLy8gSW5jbHVkZSBpbnB1dHMgYXJyYXkgZm9yIGxlZ2FjeSBmb3JtYXQgcmVzcG9uc2VzXG4gIHR4SW5mby5pbnB1dHMgPVxuICAgIHJlc3BvbnNlVHhGb3JtYXQgPT09ICdsZWdhY3knXG4gICAgICA/IHVuc3BlbnRzLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IE51bWJlcih1LnZhbHVlKSwgdmFsdWVTdHJpbmc6IHUudmFsdWUudG9TdHJpbmcoKSwgcHJldlR4OiB1bmRlZmluZWQgfSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgIC8vIEtSUyByZWNvdmVyeSAtIGhhbGYtc2lnbmVkXG4gICAgLy8ga2V5dGVybmFsIHVzZXMgbGVnYWN5IGZvcm1hdCwgb3RoZXIgS1JTIHByb3ZpZGVycyB1c2UgUFNCVCBmb3JtYXRcbiAgICB0eEluZm8udHJhbnNhY3Rpb25IZXggPVxuICAgICAga3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnXG4gICAgICAgID8gQnVmZmVyLmZyb20ocHNidC5nZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICA6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHR4SW5mby5jb2luID0gY29pbi5nZXRDaGFpbigpO1xuICAgIHR4SW5mby5iYWNrdXBLZXkgPSBiYWNrdXBLZXkgPz8gJyc7XG4gICAgY29uc3QgcmVjb3ZlcnlBbW91bnQgPSBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnQgPSBOdW1iZXIocmVjb3ZlcnlBbW91bnQpO1xuICAgIHR4SW5mby5yZWNvdmVyeUFtb3VudFN0cmluZyA9IHJlY292ZXJ5QW1vdW50LnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNGdWxsUmVjb3ZlcnkpIHtcbiAgICAvLyBGdWxsIHJlY292ZXJ5IC0gZmluYWxpemUgYW5kIGV4dHJhY3QgdHJhbnNhY3Rpb25cbiAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID0gQnVmZmVyLmZyb20ocHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKS50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIHJldHVybiB0eEluZm87XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJpcDMyS2V5cyhiaXRnbzogQml0R29CYXNlLCBwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBQcm9taXNlPFRyaXBsZTxCSVAzMj4+IHtcbiAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5c0Zyb21TZGtDb3JlKGJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogdHJ1ZSB9KTtcbiAgaWYgKCFpc1RyaXBsZShrZXlzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQga2V5IHRyaXBsZWApO1xuICB9XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT4gQklQMzIuZnJvbShrLnRvQmFzZTU4KCkpKSBhcyBUcmlwbGU8QklQMzI+O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28uXG4gKlxuICogUmV0dXJucyB0cmFuc2FjdGlvbiBoZXggaW4gbGVnYWN5IGZvcm1hdCBmb3IgdW5zaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24sIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAob25seSBrZXl0ZXJuYWwpLFxuICogZnVsbHkgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgS1JTIHByb3ZpZGVyLlxuICpcbiAqIFJldHVybnMgUFNCVCBoZXggZm9yIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAoZXhjbHVkaW5nIGtleXRlcm5hbClcbiAqIEZvciBQU0JUIGhleCBjYXNlcywgVW5zcGVudHMgYXJlIG5vdCByZXF1aXJlZCBpbiByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIGJpdGdvXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWJcbiAqIC0gYmFja3VwS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViIGlmIHRoZSB4cHJ2IGlzIGhlbGQgYnkgYSBLUlMgcHJvdmlkZXJcbiAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgeHBydnMgaXMgZW5jcnlwdGVkXG4gKiAtIGJpdGdvS2V5OiB4cHViXG4gKiAtIGtyc1Byb3ZpZGVyOiBuZWNlc3NhcnkgaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSU1xuICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICogLSBzY2FuOiB0aGUgYW1vdW50IG9mIGNvbnNlY3V0aXZlIGFkZHJlc3NlcyB3aXRob3V0IHVuc3BlbnRzIHRvIHNjYW4gdGhyb3VnaCBiZWZvcmUgc3RvcHBpbmdcbiAqIC0gaWdub3JlQWRkcmVzc1R5cGVzOiAob3B0aW9uYWwpIHNjcmlwdHMgdG8gaWdub3JlXG4gKiAgICAgICAgZm9yIGV4YW1wbGU6IFsncDJzaFAyd3NoJywgJ3Ayd3NoJ10gd2lsbCBwcmV2ZW50IGNvZGUgZnJvbSBjaGVja2luZyBmb3Igd3JhcHBlZC1zZWd3aXQgYW5kIG5hdGl2ZS1zZWd3aXQgY2hhaW5zIG9uIHRoZSBwdWJsaWMgYmxvY2sgZXhwbG9yZXJzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8+IHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnVzZXJLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgfVxuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5iYWNrdXBLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICB9XG5cbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnNjYW4pICYmICghXy5pc0ludGVnZXIocGFyYW1zLnNjYW4pIHx8IHBhcmFtcy5zY2FuIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYW4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzRmluaXRlKHBhcmFtcy5mZWVSYXRlKSB8fCBwYXJhbXMuZmVlUmF0ZSA8PSAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmVlUmF0ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIH1cblxuICAvLyBjaGVjayB3aGV0aGVyIGtleSBtYXRlcmlhbCBhbmQgcGFzc3dvcmQgYXV0aGVudGljYXRlIHRoZSB1c2VycyBhbmQgcmV0dXJuIHBhcmVudCBrZXlzIG9mIGFsbCB0aHJlZSBrZXlzIG9mIHRoZSB3YWxsZXRcbiAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5cyhiaXRnbywgcGFyYW1zKTtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oe1xuICAgIHRyaXBsZToga2V5cyxcbiAgICBkZXJpdmF0aW9uUHJlZml4ZXM6IFtwYXJhbXMudXNlcktleVBhdGggfHwgJ20vMC8wJywgJ20vMC8wJywgJ20vMC8wJ10sXG4gIH0pO1xuXG4gIGNvbnN0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdFR5cGVzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGFkZHJlc3NUeXBlKSA9PlxuICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuc3VwcG9ydHNTY3JpcHRUeXBlKGNvaW4ud2FzbU5hbWUsIGFkZHJlc3NUeXBlKSAmJlxuICAgICAgICAgICAgIXBhcmFtcy5pZ25vcmVBZGRyZXNzVHlwZXM/LmluY2x1ZGVzKGFkZHJlc3NUeXBlKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHF1ZXJpZXMsIGFkZHJlc3NUeXBlKSA9PiBbXG4gICAgICAgICAgICAuLi5xdWVyaWVzLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICAgICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZShhZGRyZXNzVHlwZSwgJ2V4dGVybmFsJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gICAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKGFkZHJlc3NUeXBlLCAnaW50ZXJuYWwnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdIGFzIFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+W11cbiAgICAgICAgKVxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmVlUmF0ZVNhdFZCID1cbiAgICBwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmFtcy5mZWVSYXRlXG4gICAgICA6IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwgeyBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIEtSUyBmZWUgaWYgbmVlZGVkXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMua3JzUHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICBsZXQga3JzRmVlID0gQmlnSW50KDApO1xuICBsZXQga3JzRmVlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpc0tyc1JlY292ZXJ5ICYmIHBhcmFtcy5rcnNQcm92aWRlcikge1xuICAgIHRyeSB7XG4gICAgICBrcnNGZWUgPSBCaWdJbnQoYXdhaXQgY2FsY3VsYXRlRmVlQW1vdW50KGNvaW4sIHsgcHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBEb24ndCBsZXQgdGhpcyBlcnJvciBibG9jayB0aGUgcmVjb3ZlcnkgLVxuICAgICAgY29uc29sZS5kaXIoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoa3JzRmVlID4gQmlnSW50KDApKSB7XG4gICAgICBjb25zdCBrcnNQcm92aWRlckNvbmZpZyA9IGdldEtyc1Byb3ZpZGVyKGNvaW4sIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgICBpZiAoIWtyc1Byb3ZpZGVyQ29uZmlnLmZlZUFkZHJlc3Nlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVByb3ZpZGVyIG11c3QgZGVmaW5lIGZlZUFkZHJlc3Nlc2ApO1xuICAgICAgfVxuXG4gICAgICBrcnNGZWVBZGRyZXNzID0ga3JzUHJvdmlkZXJDb25maWcuZmVlQWRkcmVzc2VzW2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgICAgIGlmICgha3JzRmVlQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgS1JTIHByb3ZpZGVyIGhhcyBub3QgY29uZmlndXJlZCB0aGVpciBmZWUgc3RydWN0dXJlIHlldCAtIHJlY292ZXJ5IGNhbm5vdCBiZSBjb21wbGV0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBhbmQgc2lnbiBQU0JUXG4gIGNvbnN0IHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICBjb2luLndhc21OYW1lLFxuICAgIHtcbiAgICAgIHdhbGxldEtleXMsXG4gICAgICBrZXlzLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICBmZWVSYXRlU2F0VkIsXG4gICAgICBrcnNGZWUsXG4gICAgICBrcnNGZWVBZGRyZXNzLFxuICAgICAgYmxvY2tIZWlnaHQ6IHBhcmFtcy5ibG9ja0hlaWdodCxcbiAgICAgIGxvY2tUaW1lOiBwYXJhbXMubG9ja1RpbWUsXG4gICAgICBzZXF1ZW5jZTogcGFyYW1zLnNlcXVlbmNlLFxuICAgIH0sXG4gICAgdW5zcGVudHNcbiAgKTtcblxuICAvLyBGb3JtYXQgdGhlIHJlc3VsdFxuICByZXR1cm4gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgcHNidCwge1xuICAgIHdhbGxldEtleXMsXG4gICAga2V5cyxcbiAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICBrcnNQcm92aWRlcjogcGFyYW1zLmtyc1Byb3ZpZGVyLFxuICAgIGJhY2t1cEtleTogcGFyYW1zLmJhY2t1cEtleSxcbiAgICB1bnNwZW50cyxcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQml0R29WMVVuc3BlbnQge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIHR4X291dHB1dF9uOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjFTd2VlcFBhcmFtcyB7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgdW5zcGVudHM6IEJpdEdvVjFVbnNwZW50W107XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgdXNlcktleTogc3RyaW5nO1xuICBvdHA6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVJlY292ZXJQYXJhbXMgZXh0ZW5kcyBPbWl0PFYxU3dlZXBQYXJhbXMsICdvdHAnPiB7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFCYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgY29uc3QgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxLFxuICB9KTtcbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnJlY292ZXIoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFTd2VlcChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVN3ZWVwUGFyYW1zXG4pOiBQcm9taXNlPHtcbiAgdHg6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbn0+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBsZXQgcmVjb3ZlcnlGZWVQZXJCeXRlID0gMTAwO1xuICBpZiAoYml0Z28uZW52ID09PSAncHJvZCcpIHtcbiAgICByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMV9TV0VFUCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHYxd2FsbGV0ID0gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiBwYXJhbXMud2FsbGV0SWQgfSk7XG4gIHJldHVybiBhd2FpdCB2MXdhbGxldC5zd2VlcCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIGZlZVJhdGU6IHJlY292ZXJ5RmVlUGVyQnl0ZSxcbiAgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"crossChainRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/crossChainRecovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crossChainRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/crossChainRecovery.ts"],"names":[],"mappings":"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"}
@@ -135,7 +135,7 @@ async function getAllRecoveryOutputs(coin, txid, amountType = 'number', wallet,
135
135
  });
136
136
  }
137
137
  async function getScriptId(coin, wallet, script) {
138
- const address = wasm_utxo_1.address.fromOutputScriptWithCoin(script, coin.name);
138
+ const address = coin.addressCodec.encode(script);
139
139
  let addressData;
140
140
  if (wallet instanceof sdk_core_1.Wallet) {
141
141
  addressData = await wallet.getAddress({ address });
@@ -164,7 +164,7 @@ async function toWalletUnspents(sourceCoin, recoveryCoin, unspents, wallet) {
164
164
  for (const address of addresses) {
165
165
  let scriptId;
166
166
  try {
167
- scriptId = await getScriptId(recoveryCoin, wallet, wasm_utxo_1.address.toOutputScriptWithCoin(address, sourceCoin.name));
167
+ scriptId = await getScriptId(recoveryCoin, wallet, sourceCoin.addressCodec.decode(address));
168
168
  }
169
169
  catch (e) {
170
170
  console.error(`error getting scriptId for ${address}:`, e);
@@ -276,7 +276,7 @@ async function recoverCrossChain(bitgo, params) {
276
276
  const prv = params.xprv || params.walletPassphrase ? await getPrv(params.xprv, params.walletPassphrase, wallet) : undefined;
277
277
  const feeRateSatVB = await getFeeRateSatVB(params.sourceCoin);
278
278
  // Create PSBT for both signed and unsigned recovery
279
- let psbt = createSweepTransaction(params.sourceCoin.getChain(), walletKeys, walletUnspents, params.recoveryAddress, feeRateSatVB);
279
+ let psbt = createSweepTransaction(params.sourceCoin.wasmName, walletKeys, walletUnspents, params.recoveryAddress, feeRateSatVB);
280
280
  // For unsigned recovery, return unsigned PSBT hex
281
281
  if (!prv) {
282
282
  return {
@@ -299,4 +299,4 @@ async function recoverCrossChain(bitgo, params) {
299
299
  recoveryAmount: (0, tnumber_1.toTNumber)((0, psbt_1.getRecoveryAmount)(psbt, walletKeys, params.recoveryAddress), params.sourceCoin.amountType),
300
300
  };
301
301
  }
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FnQkM7QUFZRCwwRUFjQztBQW9QRCw4Q0FxREM7QUF0YkQsZ0RBQThGO0FBQzlGLDRDQUF5QztBQUN6Qyw4Q0FBK0U7QUFHL0UsZ0ZBQStFO0FBRS9FLGtEQUEwRDtBQUMxRCxrRkFBeUY7QUFDekYsd0NBQXVDO0FBQ3ZDLHdDQUEwRTtBQUUxRSxpQ0FBZ0g7QUF5Q3pHLEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWdCLEVBQ2hCLElBQXNCLEVBQ3RCLFFBQWdCO0lBRWhCLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCwrQ0FBK0M7UUFDL0Msa0pBQWtKO1FBQ2xKLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGFBQWEs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Q0FBQyxlQUFlLENBQUMsRUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQ2xCO0tBQ2IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMiwgQ29pbk5hbWUsIGZpeGVkU2NyaXB0V2FsbGV0LCBhZGRyZXNzIGFzIHdhc21BZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBkZWNyeXB0IH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJV2FsbGV0LCBLZXljaGFpbiwgVHJpcGxlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBUcmFuc2FjdGlvbkluZm8gfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHNpZ25BbmRWZXJpZnlQc2J0IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyB0b1ROdW1iZXIgfSBmcm9tICcuLi90bnVtYmVyJztcbmltcG9ydCB7IHVuc3BlbnRTdW0sIHR5cGUgVW5zcGVudCwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVtcHR5V2FzbVBzYnQsIGFkZFdhbGxldElucHV0c1RvV2FzbVBzYnQsIGFkZE91dHB1dFRvV2FzbVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFJlY292ZXJ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIGZhdWx0eVR4SWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG59XG5cbnR5cGUgRmVlSW5mbyA9IHtcbiAgc2l6ZTogbnVtYmVyO1xuICBmZWVSYXRlOiBudW1iZXI7XG4gIGZlZTogbnVtYmVyO1xuICBwYXlHb0ZlZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZmVlSW5mbz86IEZlZUluZm87XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHZlcnNpb246IDEgfCAyO1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHNvdXJjZUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzcz86IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ/OiBUTnVtYmVyO1xufVxuXG50eXBlIFdhbGxldFYxID0ge1xuICBrZXljaGFpbnM6IHsgeHB1Yjogc3RyaW5nIH1bXTtcbiAgYWRkcmVzcyh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8eyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH0+O1xuICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKTogUHJvbWlzZTx7IGVuY3J5cHRlZFhwcnY6IHN0cmluZyB9Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldElkOiBzdHJpbmdcbik6IFByb21pc2U8SVdhbGxldCB8IFdhbGxldFYxPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IEJHLTQ2MzY0IGhhbmRsZSBlcnJvcnMgbW9yZSBncmFjZWZ1bGx5XG4gICAgLy8gVGhlIHYyIGVuZHBvaW50IGNvaW4ud2FsbGV0cygpLmdldCgpIG1heSB0aHJvdyA0MDQgb3IgNDAwIGVycm9ycywgYnV0IHRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHVzIGZyb20gc2VhcmNoaW5nIGZvciB0aGUgd2FsbGV0SWQgaW4gdjEgd2FsbGV0cy5cbiAgICBpZiAoZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7d2FsbGV0SWR9IGZyb20gdjEgb3IgdjI6ICR7ZS50b1N0cmluZygpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXQgcHVia2V5c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0S2V5cyhcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cz4ge1xuICBsZXQgeHB1YnM6IFRyaXBsZTxzdHJpbmc+O1xuXG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSAoYXdhaXQgcmVjb3ZlcnlDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHsgd2FsbGV0IH0pKSBhcyB1bmtub3duIGFzIEtleWNoYWluW107XG4gICAgaWYgKGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgdHJpcGxlIGdvdCAke2tleWNoYWlucy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHhwdWJzID0ga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9IGVsc2Uge1xuICAgIHhwdWJzID0gKHdhbGxldCBhcyBXYWxsZXRWMSkua2V5Y2hhaW5zLm1hcCgoaykgPT4gay54cHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfVxuXG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgbGV0IGFkZHJlc3NEYXRhO1xuICAgIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRyZXNzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBMaXRlY29pbiBQMlNIIGFkZHJlc3MgZnJvbSBNLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDMyKSB0byB0aGUgbGVnYWN5IDMuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpXG4gKiBhbmQgUS4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgzMikgdG8gdGhlIGxlZ2FjeSAyLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDA1KS5cbiAqIFRoaXMgaXMgbmVlZGVkIGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeSB3aGVuIChUKUxUQyB3YXMgc2VudCB0byBhIChUKUJUQyBhZGRyZXNzLCBiZWNhdXNlIHRoZSAoVClCVEMgd2FsbGV0XG4gKiBzdG9yZXMgYWRkcmVzc2VzIGluIHRoZSAzLi4uIGZvcm1hdCB3aGlsZSB0aGUgTFRDIGJsb2NrY2hhaW4gcmV0dXJucyBhZGRyZXNzZXMgaW4gTS4uLiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIGFkZHJlc3MgLSBMVEMgYWRkcmVzcyB0byBjb252ZXJ0XG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lIChlLmcuICdsdGMnLCAndGx0YycpXG4gKiBAcmV0dXJucyBUaGUgYWRkcmVzcyBpbiBsZWdhY3kgMy4uLiBmb3JtYXQsIG9yIHRoZSBvcmlnaW5hbCBhZGRyZXNzIGlmIGl0J3Mgbm90IGEgUDJTSCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KGFkZHJlc3M6IHN0cmluZywgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHN0cmluZyB7XG4gIGlmIChjb2luTmFtZSAhPT0gJ2x0YycgJiYgY29pbk5hbWUgIT09ICd0bHRjJykge1xuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgLy8gb25seSBjb25zaWRlciBhZGRyZXNzZXMgdGhhdCBzdGFydCB3aXRoIE0gb3IgUSAobW9kZXJuIGx0YyBwMnNoIHByZWZpeGVzKVxuICBpZiAoIWFkZHJlc3Muc3RhcnRzV2l0aCgnTScpICYmICFhZGRyZXNzLnN0YXJ0c1dpdGgoJ1EnKSkge1xuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0UHViS2V5ID0gd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCBjb2luTmFtZSk7XG4gIGNvbnN0IGRzdENvaW4gPSBjb2luTmFtZSA9PT0gJ2x0YycgPyAnYnRjJyA6ICd0YnRjJztcbiAgY29uc3QgZHN0QWRkcmVzcyA9IHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihzY3JpcHRQdWJLZXksIGRzdENvaW4pO1xuICByZXR1cm4gZHN0QWRkcmVzcztcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHR4aWRcbiAqIEBwYXJhbSBhbW91bnRUeXBlXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcGFyYW0gYXBpS2V5IC0gYSBibG9ja2NoYWlyIGFwaSBrZXlcbiAqIEByZXR1cm4gYWxsIHVuc3BlbnRzIGZvciB0cmFuc2FjdGlvbiBvdXRwdXRzLCBpbmNsdWRpbmcgb3V0cHV0cyBmcm9tIG90aGVyIHRyYW5zYWN0aW9uc1xuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxSZWNvdmVyeU91dHB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHR4aWQ6IHN0cmluZyxcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSxcbiAgYXBpS2V5Pzogc3RyaW5nXG4pOiBQcm9taXNlPFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhcGkgPSBjb2luLmdldFJlY292ZXJ5UHJvdmlkZXIoYXBpS2V5KTtcbiAgY29uc3QgdHggPSBhd2FpdCBhcGkuZ2V0VHJhbnNhY3Rpb25JTyh0eGlkKTtcbiAgY29uc3Qgd2FsbGV0QWRkcmVzc2VzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHgub3V0cHV0cy5tYXAoYXN5bmMgKG91dHB1dCkgPT4ge1xuICAgICAgICAvLyBGb3Igc29tZSBjb2lucyAoYmNoKSB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIGFkZHJlc3MgdG8gbGVnYWN5IGZvcm1hdCBzaW5jZSB0aGUgYXBpIHJldHVybnMgdGhlIGFkZHJlc3NcbiAgICAgICAgLy8gaW4gbm9uIGxlZ2FjeSBmb3JtYXQuIEhvd2V2ZXIsIHdlIHdhbnQgdG8ga2VlcCB0aGUgYWRkcmVzcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIHJlc3BvbnNlIHNpbmNlIHdlXG4gICAgICAgIC8vIGFyZSBnb2luZyB0byBoaXQgdGhlIEFQSSBhZ2FpbiB0byBmZXRjaCBhZGRyZXNzIHVuc3BlbnRzLlxuICAgICAgICBjb25zdCBjYW5vbmljYWxBZGRyZXNzID0gY29pbi5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKTtcbiAgICAgICAgbGV0IGlzV2FsbGV0T3duZWQgPSBhd2FpdCBpc1dhbGxldEFkZHJlc3Mod2FsbGV0LCBjYW5vbmljYWxBZGRyZXNzKTtcblxuICAgICAgICAvLyBGb3IgTFRDIGNyb3NzLWNoYWluIHJlY292ZXJ5OiBpZiB0aGUgYWRkcmVzcyBpc24ndCBmb3VuZCwgdHJ5IHRoZSBsZWdhY3kgZm9ybWF0LlxuICAgICAgICAvLyBXaGVuIExUQyBpcyBzZW50IHRvIGEgQlRDIGFkZHJlc3MsIHRoZSBMVEMgYmxvY2tjaGFpbiByZXR1cm5zIE0uLi4gYWRkcmVzc2VzXG4gICAgICAgIC8vIGJ1dCB0aGUgQlRDIHdhbGxldCBzdG9yZXMgYWRkcmVzc2VzIGluIDMuLi4gZm9ybWF0LlxuICAgICAgICBpZiAoIWlzV2FsbGV0T3duZWQgJiYgY29pbi5nZXRGYW1pbHkoKSA9PT0gJ2x0YycpIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChvdXRwdXQuYWRkcmVzcywgY29pbi5uYW1lKTtcbiAgICAgICAgICBpZiAobGVnYWN5QWRkcmVzcyAhPT0gb3V0cHV0LmFkZHJlc3MpIHtcbiAgICAgICAgICAgIGlzV2FsbGV0T3duZWQgPSBhd2FpdCBpc1dhbGxldEFkZHJlc3Mod2FsbGV0LCBsZWdhY3lBZGRyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNXYWxsZXRPd25lZCA/IG91dHB1dC5hZGRyZXNzIDogbnVsbDtcbiAgICAgIH0pXG4gICAgKVxuICApLmZpbHRlcigoYWRkcmVzcykgPT4gYWRkcmVzcyAhPT0gbnVsbCk7XG5cbiAgY29uc3QgdW5zcGVudHMgPSBhd2FpdCBhcGkuZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMod2FsbGV0QWRkcmVzc2VzIGFzIHN0cmluZ1tdKTtcbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVjb3ZlcnkgdW5zcGVudHMgZm91bmQuYCk7XG4gIH1cbiAgLy8gdGhlIGFwaSBtYXkgcmV0dXJuIGNhc2hhZGRyJ3MgaW5zdGVhZCBvZiBsZWdhY3kgZm9yIEJDSCBhbmQgQkNIQVxuICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgcmV0dXJuIHVuc3BlbnRzLm1hcCgocmVjb3ZlcnlPdXRwdXQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVjb3ZlcnlPdXRwdXQsXG4gICAgICBhZGRyZXNzOiBjb2luLmNhbm9uaWNhbEFkZHJlc3MocmVjb3ZlcnlPdXRwdXQuYWRkcmVzcyksXG4gICAgICB2YWx1ZTogdG9UTnVtYmVyKEJpZ0ludChyZWNvdmVyeU91dHB1dC52YWx1ZSksIGFtb3VudFR5cGUpIGFzIFROdW1iZXIsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGF0YSByZXF1aXJlZCBmb3IgYWRkcmVzcyBhbmQgc2lnbmF0dXJlIGRlcml2YXRpb25cbiAqL1xudHlwZSBTY3JpcHRJZCA9IHtcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdElkKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLCBzY3JpcHQ6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPFNjcmlwdElkPiB7XG4gIGNvbnN0IGFkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0LCBjb2luLm5hbWUpO1xuICBsZXQgYWRkcmVzc0RhdGE6IHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9O1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgYWRkcmVzc0RhdGEgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzc0RhdGEgPSBhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5hZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfVxuICBpZiAodHlwZW9mIGFkZHJlc3NEYXRhLmNoYWluID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYWRkcmVzc0RhdGEuaW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHsgY2hhaW46IGFkZHJlc3NEYXRhLmNoYWluLCBpbmRleDogYWRkcmVzc0RhdGEuaW5kZXggfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhZGRyZXNzIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpfWApO1xufVxuXG4vKipcbiAqIExvb2t1cCBhZGRyZXNzIGRhdGEgZnJvbSB1bnNwZW50cyBvbiBzb3VyY2VDb2luIGluIGFkZHJlc3MgZGF0YWJhc2Ugb2YgcmVjb3ZlcnlDb2luLlxuICogUmV0dXJuIGZ1bGwgd2FsbGV0VW5zcGVudHMgaW5jbHVkaW5nIHNjcmlwdElkIGluIHNvdXJjZUNvaW4gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VDb2luXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gd2FsbGV0VW5zcGVudHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYWRkcmVzc2VzID0gbmV3IFNldCh1bnNwZW50cy5tYXAoKHUpID0+IHUuYWRkcmVzcykpO1xuICBjb25zdCB3YWxsZXRVbnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdID0gW107XG5cbiAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3Nlcykge1xuICAgIGxldCBzY3JpcHRJZDtcbiAgICB0cnkge1xuICAgICAgc2NyaXB0SWQgPSBhd2FpdCBnZXRTY3JpcHRJZChyZWNvdmVyeUNvaW4sIHdhbGxldCwgd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCBzb3VyY2VDb2luLm5hbWUpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBlcnJvciBnZXR0aW5nIHNjcmlwdElkIGZvciAke2FkZHJlc3N9OmAsIGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcmVkVW5zcGVudHMgPSB1bnNwZW50c1xuICAgICAgLmZpbHRlcigodSkgPT4gdS5hZGRyZXNzID09PSBhZGRyZXNzKVxuICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgLi4udSxcbiAgICAgICAgLi4uc2NyaXB0SWQsXG4gICAgICB9KSk7XG4gICAgd2FsbGV0VW5zcGVudHMucHVzaCguLi5maWx0ZXJlZFVuc3BlbnRzKTtcbiAgfVxuXG4gIHJldHVybiB3YWxsZXRVbnNwZW50cztcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pblxuICogQHJldHVybiBmZWVSYXRlIGZvciB0cmFuc2FjdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGZWVSYXRlU2F0VkIoY29pbjogQWJzdHJhY3RVdHhvQ29pbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIFRPRE86IHVzZSBmZWVSYXRlIEFQSVxuICBjb25zdCBmZWVSYXRlID0ge1xuICAgIGJjaDogMjAsXG4gICAgdGJjaDogMjAsXG4gICAgYmNoYTogMjAsXG4gICAgdGJjaGE6IDIwLFxuICAgIGJzdjogMjAsXG4gICAgdGJzdjogMjAsXG4gICAgYnRjOiA4MCxcbiAgICB0YnRjOiA4MCxcbiAgICB0YnRjc2lnOiA4MCxcbiAgICB0YnRjNDogODAsXG4gICAgdGJ0Y2Jnc2lnOiA4MCxcbiAgICBsdGM6IDEwMCxcbiAgICB0bHRjOiAxMDAsXG4gICAgZG9nZTogMTAwMCxcbiAgICB0ZG9nZTogMTAwMCxcbiAgfVtjb2luLmdldENoYWluKCldO1xuXG4gIGlmICghZmVlUmF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlUmF0ZSBmb3IgJHtjb2luLmdldENoYWluKCl9YCk7XG4gIH1cblxuICByZXR1cm4gZmVlUmF0ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geHBydlxuICogQHBhcmFtIHBhc3NwaHJhc2VcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gc2lnbmluZyBrZXlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHJ2KHhwcnY/OiBzdHJpbmcsIHBhc3NwaHJhc2U/OiBzdHJpbmcsIHdhbGxldD86IElXYWxsZXQgfCBXYWxsZXRWMSk6IFByb21pc2U8QklQMzI+IHtcbiAgaWYgKHhwcnYpIHtcbiAgICBjb25zdCBrZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcnYpO1xuICAgIGlmIChrZXkuaXNOZXV0ZXJlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBpZiAoIXdhbGxldCB8fCAhcGFzc3BocmFzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8geHBydiBnaXZlbjogbmVlZCB3YWxsZXQgYW5kIHBhc3NwaHJhc2UgdG8gY29udGludWVgKTtcbiAgfVxuXG4gIGxldCBlbmNyeXB0ZWRQcnY6IHN0cmluZztcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFBydjtcbiAgfSBlbHNlIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFhwcnY7XG4gIH1cblxuICByZXR1cm4gZ2V0UHJ2KGF3YWl0IGRlY3J5cHQocGFzc3BocmFzZSwgZW5jcnlwdGVkUHJ2KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3dlZXAgdHJhbnNhY3Rpb24gZm9yIGNyb3NzLWNoYWluIHJlY292ZXJ5IHVzaW5nIHdhc20tdXR4b1xuICogQHBhcmFtIGNvaW5OYW1lIC0gQml0R28gY29pbiBuYW1lIChlLmcuICdidGMnLCAndGJ0YycsICdsdGMnKVxuICogQHBhcmFtIHdhbGxldEtleXNcbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHRhcmdldEFkZHJlc3NcbiAqIEBwYXJhbSBmZWVSYXRlU2F0VkJcbiAqIEByZXR1cm4gdW5zaWduZWQgUFNCVFxuICovXG5mdW5jdGlvbiBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luTmFtZTogQ29pbk5hbWUsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdLFxuICB0YXJnZXRBZGRyZXNzOiBzdHJpbmcsXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBjb25zdCBpbnB1dFZhbHVlID0gdW5zcGVudFN1bSh1bnNwZW50cyk7XG5cbiAgLy8gQ3JlYXRlIFBTQlQgd2l0aCB3YXNtLXV0eG8gYW5kIGFkZCB3YWxsZXQgaW5wdXRzIHVzaW5nIHNoYXJlZCB1dGlsaXRpZXNcbiAgY29uc3QgdW5zcGVudHNCaWdpbnQgPSB1bnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBCaWdJbnQodS52YWx1ZSkgfSkpO1xuICBjb25zdCB3YXNtUHNidCA9IGNyZWF0ZUVtcHR5V2FzbVBzYnQoY29pbk5hbWUsIHdhbGxldEtleXMpO1xuICBhZGRXYWxsZXRJbnB1dHNUb1dhc21Qc2J0KHdhc21Qc2J0LCB1bnNwZW50c0JpZ2ludCwgd2FsbGV0S2V5cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIGRpbWVuc2lvbnMgdXNpbmcgd2FzbS11dHhvIERpbWVuc2lvbnNcbiAgY29uc3QgdnNpemUgPSBmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21Qc2J0KHdhc21Qc2J0KVxuICAgIC5wbHVzKGZpeGVkU2NyaXB0V2FsbGV0LkRpbWVuc2lvbnMuZnJvbU91dHB1dCh0YXJnZXRBZGRyZXNzLCBjb2luTmFtZSkpXG4gICAgLmdldFZTaXplKCk7XG4gIGNvbnN0IGZlZSA9IEJpZ0ludChNYXRoLnJvdW5kKHZzaXplICogZmVlUmF0ZVNhdFZCKSk7XG5cbiAgLy8gQWRkIG91dHB1dCB0byB3YXNtIFBTQlRcbiAgYWRkT3V0cHV0VG9XYXNtUHNidCh3YXNtUHNidCwgdGFyZ2V0QWRkcmVzcywgaW5wdXRWYWx1ZSAtIGZlZSwgY29pbk5hbWUpO1xuXG4gIHJldHVybiB3YXNtUHNidDtcbn1cblxudHlwZSBSZWNvdmVyUGFyYW1zID0ge1xuICAvKiogV2FsbGV0IElEIChjYW4gYmUgdjEgd2FsbGV0IG9yIHYyIHdhbGxldCkgKi9cbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgLyoqIENvaW4gdG8gY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBmb3IgKi9cbiAgc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIENvaW4gdGhhdCB3YWxsZXQga2V5cyB3ZXJlIHNldCB1cCBmb3IgKi9cbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICAvKiogU291cmNlIGNvaW4gdHJhbnNhY3Rpb24gdG8gcmVjb3ZlciBvdXRwdXRzIGZyb20gKHNvdXJjZUNvaW4pICovXG4gIHR4aWQ6IHN0cmluZztcbiAgLyoqIFNvdXJjZSBjb2luIGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG8gKi9cbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBJZiBzZXQsIGRlY3J5cHRzIHByaXZhdGUga2V5IGFuZCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB4cHJ2Pzogc3RyaW5nO1xuICAvKiogZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5ICoqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJlY292ZXIgd2FsbGV0IGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBvbiB0aGUgd3JvbmcgYmxvY2tjaGFpblxuICogKGZvciBpbnN0YW5jZSBiaXRjb2luIGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBmb3IgYSBsaXRlY29pbiB3YWxsZXQpLlxuICpcbiAqIEZldGNoZXMgdGhlIHVuc3BlbnQgZGF0YSBmcm9tIEJpdEdvJ3MgcHVibGljIGJsb2NrY2hhaW4gQVBJIGFuZCB0aGUgc2NyaXB0IGRhdGEgZnJvbSB0aGUgdXNlcidzXG4gKiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvXG4gKiBAcGFyYW0ge1JlY292ZXJQYXJhbXN9IHBhcmFtc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBnZXRXYWxsZXQoYml0Z28sIHBhcmFtcy5yZWNvdmVyeUNvaW4sIHBhcmFtcy53YWxsZXRJZCk7XG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLFxuICAgIHBhcmFtcy50eGlkLFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGUsXG4gICAgd2FsbGV0LFxuICAgIHBhcmFtcy5hcGlLZXlcbiAgKTtcbiAgY29uc3Qgd2FsbGV0VW5zcGVudHMgPSBhd2FpdCB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXI+KHBhcmFtcy5zb3VyY2VDb2luLCBwYXJhbXMucmVjb3ZlcnlDb2luLCB1bnNwZW50cywgd2FsbGV0KTtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYXdhaXQgZ2V0V2FsbGV0S2V5cyhwYXJhbXMucmVjb3ZlcnlDb2luLCB3YWxsZXQpKTtcbiAgY29uc3QgcHJ2ID1cbiAgICBwYXJhbXMueHBydiB8fCBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IGF3YWl0IGdldFBydihwYXJhbXMueHBydiwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsIHdhbGxldCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IGF3YWl0IGdldEZlZVJhdGVTYXRWQihwYXJhbXMuc291cmNlQ29pbik7XG5cbiAgLy8gQ3JlYXRlIFBTQlQgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCByZWNvdmVyeVxuICBsZXQgcHNidCA9IGNyZWF0ZVN3ZWVwVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB3YWxsZXRLZXlzLFxuICAgIHdhbGxldFVuc3BlbnRzLFxuICAgIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MsXG4gICAgZmVlUmF0ZVNhdFZCXG4gICk7XG5cbiAgLy8gRm9yIHVuc2lnbmVkIHJlY292ZXJ5LCByZXR1cm4gdW5zaWduZWQgUFNCVCBoZXhcbiAgaWYgKCFwcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICBhZGRyZXNzOiBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgY29pbjogcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRm9yIHNpZ25lZCByZWNvdmVyeSwgc2lnbiB0aGUgUFNCVCB3aXRoIHVzZXIga2V5IGFuZCByZXR1cm4gaGFsZi1zaWduZWQgUFNCVFxuICBwc2J0ID0gc2lnbkFuZFZlcmlmeVBzYnQocHNidCwgcHJ2LCB3YWxsZXRLZXlzLCB7XG4gICAgcHVibGljS2V5czogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMocGFyYW1zLnNvdXJjZUNvaW4ubmFtZSksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogd2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0ID8gMiA6IDEsXG4gICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpLFxuICAgIHNvdXJjZUNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgcmVjb3ZlcnlDb2luOiBwYXJhbXMucmVjb3ZlcnlDb2luLmdldENoYWluKCksXG4gICAgcmVjb3ZlcnlBbW91bnQ6IHRvVE51bWJlcihcbiAgICAgIGdldFJlY292ZXJ5QW1vdW50KHBzYnQsIHdhbGxldEtleXMsIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MpLFxuICAgICAgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZVxuICAgICkgYXMgVE51bWJlcixcbiAgfTtcbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FnQkM7QUFZRCwwRUFjQztBQW9QRCw4Q0FxREM7QUF0YkQsZ0RBQW9GO0FBQ3BGLDRDQUF5QztBQUN6Qyw4Q0FBK0U7QUFHL0UsZ0ZBQStFO0FBRS9FLGtEQUEwRDtBQUMxRCxrRkFBeUY7QUFDekYsd0NBQXVDO0FBQ3ZDLHdDQUEwRTtBQUUxRSxpQ0FBZ0g7QUF5Q3pHLEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWdCLEVBQ2hCLElBQXNCLEVBQ3RCLFFBQWdCO0lBRWhCLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCwrQ0FBK0M7UUFDL0Msa0pBQWtKO1FBQ2xKLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGFBQWEs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VUFBVSxDQUFDLFVBQVUsQ0FDbEI7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZGVjcnlwdCB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgSVdhbGxldCwgS2V5Y2hhaW4sIFRyaXBsZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVHJhbnNhY3Rpb25JbmZvIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBzaWduQW5kVmVyaWZ5UHNidCB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUsIFdhc21VdHhvQ29pbk5hbWUgfSBmcm9tICcuLi9uYW1lcyc7XG5pbXBvcnQgeyBlbmNvZGVUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgdG9UTnVtYmVyIH0gZnJvbSAnLi4vdG51bWJlcic7XG5pbXBvcnQgeyB1bnNwZW50U3VtLCB0eXBlIFVuc3BlbnQsIHR5cGUgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uL3Vuc3BlbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVFbXB0eVdhc21Qc2J0LCBhZGRXYWxsZXRJbnB1dHNUb1dhc21Qc2J0LCBhZGRPdXRwdXRUb1dhc21Qc2J0LCBnZXRSZWNvdmVyeUFtb3VudCB9IGZyb20gJy4vcHNidCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRSZWNvdmVyeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHdhbGxldDogc3RyaW5nO1xuICBmYXVsdHlUeElkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xufVxuXG50eXBlIEZlZUluZm8gPSB7XG4gIHNpemU6IG51bWJlcjtcbiAgZmVlUmF0ZTogbnVtYmVyO1xuICBmZWU6IG51bWJlcjtcbiAgcGF5R29GZWU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIGZlZUluZm8/OiBGZWVJbmZvO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB2ZXJzaW9uOiAxIHwgMjtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBzb3VyY2VDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5Q29pbjogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50PzogVE51bWJlcjtcbn1cblxudHlwZSBXYWxsZXRWMSA9IHtcbiAga2V5Y2hhaW5zOiB7IHhwdWI6IHN0cmluZyB9W107XG4gIGFkZHJlc3MoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9PjtcbiAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk6IFByb21pc2U8eyBlbmNyeXB0ZWRYcHJ2OiBzdHJpbmcgfT47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPElXYWxsZXQgfCBXYWxsZXRWMT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBCRy00NjM2NCBoYW5kbGUgZXJyb3JzIG1vcmUgZ3JhY2VmdWxseVxuICAgIC8vIFRoZSB2MiBlbmRwb2ludCBjb2luLndhbGxldHMoKS5nZXQoKSBtYXkgdGhyb3cgNDA0IG9yIDQwMCBlcnJvcnMsIGJ1dCB0aGlzIHNob3VsZCBub3QgcHJldmVudCB1cyBmcm9tIHNlYXJjaGluZyBmb3IgdGhlIHdhbGxldElkIGluIHYxIHdhbGxldHMuXG4gICAgaWYgKGUuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZ2V0IHdhbGxldCAke3dhbGxldElkfSBmcm9tIHYxIG9yIHYyOiAke2UudG9TdHJpbmcoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gd2FsbGV0IHB1YmtleXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldEtleXMoXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8Zml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM+IHtcbiAgbGV0IHhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcblxuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gKGF3YWl0IHJlY292ZXJ5Q29pbi5rZXljaGFpbnMoKS5nZXRLZXlzRm9yU2lnbmluZyh7IHdhbGxldCB9KSkgYXMgdW5rbm93biBhcyBLZXljaGFpbltdO1xuICAgIGlmIChrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHRyaXBsZSBnb3QgJHtrZXljaGFpbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICB4cHVicyA9IGtleWNoYWlucy5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfSBlbHNlIHtcbiAgICB4cHVicyA9ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmtleWNoYWlucy5tYXAoKGspID0+IGsueHB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH1cblxuICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc1dhbGxldEFkZHJlc3Mod2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsIGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGxldCBhZGRyZXNzRGF0YTtcbiAgICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzc0RhdGEgPSBhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5hZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkcmVzc0RhdGEgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgTGl0ZWNvaW4gUDJTSCBhZGRyZXNzIGZyb20gTS4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgzMikgdG8gdGhlIGxlZ2FjeSAzLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDA1KVxuICogYW5kIFEuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpIHRvIHRoZSBsZWdhY3kgMi4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSkuXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgY3Jvc3MtY2hhaW4gcmVjb3Zlcnkgd2hlbiAoVClMVEMgd2FzIHNlbnQgdG8gYSAoVClCVEMgYWRkcmVzcywgYmVjYXVzZSB0aGUgKFQpQlRDIHdhbGxldFxuICogc3RvcmVzIGFkZHJlc3NlcyBpbiB0aGUgMy4uLiBmb3JtYXQgd2hpbGUgdGhlIExUQyBibG9ja2NoYWluIHJldHVybnMgYWRkcmVzc2VzIGluIE0uLi4gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gTFRDIGFkZHJlc3MgdG8gY29udmVydFxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSAoZS5nLiAnbHRjJywgJ3RsdGMnKVxuICogQHJldHVybnMgVGhlIGFkZHJlc3MgaW4gbGVnYWN5IDMuLi4gZm9ybWF0LCBvciB0aGUgb3JpZ2luYWwgYWRkcmVzcyBpZiBpdCdzIG5vdCBhIFAyU0ggYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzOiBzdHJpbmcsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBzdHJpbmcge1xuICBpZiAoY29pbk5hbWUgIT09ICdsdGMnICYmIGNvaW5OYW1lICE9PSAndGx0YycpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIC8vIG9ubHkgY29uc2lkZXIgYWRkcmVzc2VzIHRoYXQgc3RhcnQgd2l0aCBNIG9yIFEgKG1vZGVybiBsdGMgcDJzaCBwcmVmaXhlcylcbiAgaWYgKCFhZGRyZXNzLnN0YXJ0c1dpdGgoJ00nKSAmJiAhYWRkcmVzcy5zdGFydHNXaXRoKCdRJykpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgY29pbk5hbWUpO1xuICBjb25zdCBkc3RDb2luID0gY29pbk5hbWUgPT09ICdsdGMnID8gJ2J0YycgOiAndGJ0Yyc7XG4gIGNvbnN0IGRzdEFkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0UHViS2V5LCBkc3RDb2luKTtcbiAgcmV0dXJuIGRzdEFkZHJlc3M7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHBhcmFtIHdhbGxldFxuICogQHBhcmFtIGFwaUtleSAtIGEgYmxvY2tjaGFpciBhcGkga2V5XG4gKiBAcmV0dXJuIGFsbCB1bnNwZW50cyBmb3IgdHJhbnNhY3Rpb24gb3V0cHV0cywgaW5jbHVkaW5nIG91dHB1dHMgZnJvbSBvdGhlciB0cmFuc2FjdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB0eGlkOiBzdHJpbmcsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJyxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsXG4gIGFwaUtleT86IHN0cmluZ1xuKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYXBpID0gY29pbi5nZXRSZWNvdmVyeVByb3ZpZGVyKGFwaUtleSk7XG4gIGNvbnN0IHR4ID0gYXdhaXQgYXBpLmdldFRyYW5zYWN0aW9uSU8odHhpZCk7XG4gIGNvbnN0IHdhbGxldEFkZHJlc3NlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHR4Lm91dHB1dHMubWFwKGFzeW5jIChvdXRwdXQpID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgY29pbnMgKGJjaCkgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGxlZ2FjeSBmb3JtYXQgc2luY2UgdGhlIGFwaSByZXR1cm5zIHRoZSBhZGRyZXNzXG4gICAgICAgIC8vIGluIG5vbiBsZWdhY3kgZm9ybWF0LiBIb3dldmVyLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGFkZHJlc3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSByZXNwb25zZSBzaW5jZSB3ZVxuICAgICAgICAvLyBhcmUgZ29pbmcgdG8gaGl0IHRoZSBBUEkgYWdhaW4gdG8gZmV0Y2ggYWRkcmVzcyB1bnNwZW50cy5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsQWRkcmVzcyA9IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGxldCBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgY2Fub25pY2FsQWRkcmVzcyk7XG5cbiAgICAgICAgLy8gRm9yIExUQyBjcm9zcy1jaGFpbiByZWNvdmVyeTogaWYgdGhlIGFkZHJlc3MgaXNuJ3QgZm91bmQsIHRyeSB0aGUgbGVnYWN5IGZvcm1hdC5cbiAgICAgICAgLy8gV2hlbiBMVEMgaXMgc2VudCB0byBhIEJUQyBhZGRyZXNzLCB0aGUgTFRDIGJsb2NrY2hhaW4gcmV0dXJucyBNLi4uIGFkZHJlc3Nlc1xuICAgICAgICAvLyBidXQgdGhlIEJUQyB3YWxsZXQgc3RvcmVzIGFkZHJlc3NlcyBpbiAzLi4uIGZvcm1hdC5cbiAgICAgICAgaWYgKCFpc1dhbGxldE93bmVkICYmIGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsdGMnKSB7XG4gICAgICAgICAgY29uc3QgbGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmFtZSk7XG4gICAgICAgICAgaWYgKGxlZ2FjeUFkZHJlc3MgIT09IG91dHB1dC5hZGRyZXNzKSB7XG4gICAgICAgICAgICBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgbGVnYWN5QWRkcmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzV2FsbGV0T3duZWQgPyBvdXRwdXQuYWRkcmVzcyA6IG51bGw7XG4gICAgICB9KVxuICAgIClcbiAgKS5maWx0ZXIoKGFkZHJlc3MpID0+IGFkZHJlc3MgIT09IG51bGwpO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgYXBpLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKHdhbGxldEFkZHJlc3NlcyBhcyBzdHJpbmdbXSk7XG4gIGlmICh1bnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY292ZXJ5IHVuc3BlbnRzIGZvdW5kLmApO1xuICB9XG4gIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHJlY292ZXJ5T3V0cHV0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlY292ZXJ5T3V0cHV0LFxuICAgICAgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHJlY292ZXJ5T3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IHRvVE51bWJlcihCaWdJbnQocmVjb3ZlcnlPdXRwdXQudmFsdWUpLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIERhdGEgcmVxdWlyZWQgZm9yIGFkZHJlc3MgYW5kIHNpZ25hdHVyZSBkZXJpdmF0aW9uXG4gKi9cbnR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRJZChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgc2NyaXB0OiBVaW50OEFycmF5KTogUHJvbWlzZTxTY3JpcHRJZD4ge1xuICBjb25zdCBhZGRyZXNzID0gY29pbi5hZGRyZXNzQ29kZWMuZW5jb2RlKHNjcmlwdCk7XG4gIGxldCBhZGRyZXNzRGF0YTogeyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9XG4gIGlmICh0eXBlb2YgYWRkcmVzc0RhdGEuY2hhaW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBhZGRyZXNzRGF0YS5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyBjaGFpbjogYWRkcmVzc0RhdGEuY2hhaW4sIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGF0YTogJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSl9YCk7XG59XG5cbi8qKlxuICogTG9va3VwIGFkZHJlc3MgZGF0YSBmcm9tIHVuc3BlbnRzIG9uIHNvdXJjZUNvaW4gaW4gYWRkcmVzcyBkYXRhYmFzZSBvZiByZWNvdmVyeUNvaW4uXG4gKiBSZXR1cm4gZnVsbCB3YWxsZXRVbnNwZW50cyBpbmNsdWRpbmcgc2NyaXB0SWQgaW4gc291cmNlQ29pbiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW5cbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXRVbnNwZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhZGRyZXNzZXMgPSBuZXcgU2V0KHVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzKSB7XG4gICAgbGV0IHNjcmlwdElkO1xuICAgIHRyeSB7XG4gICAgICBzY3JpcHRJZCA9IGF3YWl0IGdldFNjcmlwdElkKHJlY292ZXJ5Q29pbiwgd2FsbGV0LCBzb3VyY2VDb2luLmFkZHJlc3NDb2RlYy5kZWNvZGUoYWRkcmVzcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYGVycm9yIGdldHRpbmcgc2NyaXB0SWQgZm9yICR7YWRkcmVzc306YCwgZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWRVbnNwZW50cyA9IHVuc3BlbnRzXG4gICAgICAuZmlsdGVyKCh1KSA9PiB1LmFkZHJlc3MgPT09IGFkZHJlc3MpXG4gICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICAuLi5zY3JpcHRJZCxcbiAgICAgIH0pKTtcbiAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLmZpbHRlcmVkVW5zcGVudHMpO1xuICB9XG5cbiAgcmV0dXJuIHdhbGxldFVuc3BlbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcmV0dXJuIGZlZVJhdGUgZm9yIHRyYW5zYWN0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZlZVJhdGVTYXRWQihjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gVE9ETzogdXNlIGZlZVJhdGUgQVBJXG4gIGNvbnN0IGZlZVJhdGUgPSB7XG4gICAgYmNoOiAyMCxcbiAgICB0YmNoOiAyMCxcbiAgICBiY2hhOiAyMCxcbiAgICB0YmNoYTogMjAsXG4gICAgYnN2OiAyMCxcbiAgICB0YnN2OiAyMCxcbiAgICBidGM6IDgwLFxuICAgIHRidGM6IDgwLFxuICAgIHRidGNzaWc6IDgwLFxuICAgIHRidGM0OiA4MCxcbiAgICB0YnRjYmdzaWc6IDgwLFxuICAgIGx0YzogMTAwLFxuICAgIHRsdGM6IDEwMCxcbiAgICBkb2dlOiAxMDAwLFxuICAgIHRkb2dlOiAxMDAwLFxuICB9W2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgaWYgKCFmZWVSYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWVSYXRlIGZvciAke2NvaW4uZ2V0Q2hhaW4oKX1gKTtcbiAgfVxuXG4gIHJldHVybiBmZWVSYXRlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB4cHJ2XG4gKiBAcGFyYW0gcGFzc3BocmFzZVxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiBzaWduaW5nIGtleVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQcnYoeHBydj86IHN0cmluZywgcGFzc3BocmFzZT86IHN0cmluZywgd2FsbGV0PzogSVdhbGxldCB8IFdhbGxldFYxKTogUHJvbWlzZTxCSVAzMj4ge1xuICBpZiAoeHBydikge1xuICAgIGNvbnN0IGtleSA9IEJJUDMyLmZyb21CYXNlNTgoeHBydik7XG4gICAgaWYgKGtleS5pc05ldXRlcmVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghd2FsbGV0IHx8ICFwYXNzcGhyYXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyB4cHJ2IGdpdmVuOiBuZWVkIHdhbGxldCBhbmQgcGFzc3BocmFzZSB0byBjb250aW51ZWApO1xuICB9XG5cbiAgbGV0IGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkUHJ2O1xuICB9IGVsc2Uge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkWHBydjtcbiAgfVxuXG4gIHJldHVybiBnZXRQcnYoYXdhaXQgZGVjcnlwdChwYXNzcGhyYXNlLCBlbmNyeXB0ZWRQcnYpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzd2VlcCB0cmFuc2FjdGlvbiBmb3IgY3Jvc3MtY2hhaW4gcmVjb3ZlcnkgdXNpbmcgd2FzbS11dHhvXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBCaXRHbyBjb2luIG5hbWUgKGUuZy4gJ2J0YycsICd0YnRjJywgJ2x0YycpXG4gKiBAcGFyYW0gd2FsbGV0S2V5c1xuICogQHBhcmFtIHVuc3BlbnRzXG4gKiBAcGFyYW0gdGFyZ2V0QWRkcmVzc1xuICogQHBhcmFtIGZlZVJhdGVTYXRWQlxuICogQHJldHVybiB1bnNpZ25lZCBQU0JUXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN3ZWVwVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGNvaW5OYW1lOiBXYXNtVXR4b0NvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlclxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHVuc3BlbnRzQmlnaW50ID0gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogQmlnSW50KHUudmFsdWUpIH0pKTtcbiAgY29uc3Qgd2FzbVBzYnQgPSBjcmVhdGVFbXB0eVdhc21Qc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzKTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHNCaWdpbnQsIHdhbGxldEtleXMpO1xuXG4gIC8vIENhbGN1bGF0ZSBkaW1lbnNpb25zIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IHZzaXplID0gZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tUHNidCh3YXNtUHNidClcbiAgICAucGx1cyhmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21PdXRwdXQodGFyZ2V0QWRkcmVzcywgY29pbk5hbWUpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSBCaWdJbnQoTWF0aC5yb3VuZCh2c2l6ZSAqIGZlZVJhdGVTYXRWQikpO1xuXG4gIC8vIEFkZCBvdXRwdXQgdG8gd2FzbSBQU0JUXG4gIGFkZE91dHB1dFRvV2FzbVBzYnQod2FzbVBzYnQsIHRhcmdldEFkZHJlc3MsIGlucHV0VmFsdWUgLSBmZWUsIGNvaW5OYW1lKTtcblxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KSk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuXG4gIC8vIENyZWF0ZSBQU0JUIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgcmVjb3ZlcnlcbiAgbGV0IHBzYnQgPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLndhc21OYW1lLFxuICAgIHdhbGxldEtleXMsXG4gICAgd2FsbGV0VW5zcGVudHMsXG4gICAgcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICBmZWVSYXRlU2F0VkJcbiAgKTtcblxuICAvLyBGb3IgdW5zaWduZWQgcmVjb3ZlcnksIHJldHVybiB1bnNpZ25lZCBQU0JUIGhleFxuICBpZiAoIXBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MsXG4gICAgICBjb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIH07XG4gIH1cblxuICAvLyBGb3Igc2lnbmVkIHJlY292ZXJ5LCBzaWduIHRoZSBQU0JUIHdpdGggdXNlciBrZXkgYW5kIHJldHVybiBoYWxmLXNpZ25lZCBQU0JUXG4gIHBzYnQgPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCBwcnYsIHdhbGxldEtleXMsIHtcbiAgICBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhwYXJhbXMuc291cmNlQ29pbi5uYW1lKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiB3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQgPyAyIDogMSxcbiAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgc291cmNlQ29pbjogcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICByZWNvdmVyeUNvaW46IHBhcmFtcy5yZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICByZWNvdmVyeUFtb3VudDogdG9UTnVtYmVyKFxuICAgICAgZ2V0UmVjb3ZlcnlBbW91bnQocHNidCwgd2FsbGV0S2V5cywgcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyksXG4gICAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlXG4gICAgKSBhcyBUTnVtYmVyLFxuICB9O1xufVxuIl19
@@ -1,9 +1,9 @@
1
1
  import { fixedScriptWallet, Psbt as WasmPsbt } from '@bitgo/wasm-utxo';
2
- import { UtxoCoinName } from '../names';
2
+ import { UtxoCoinName, WasmUtxoCoinName } from '../names';
3
3
  import { BitGoPsbt } from './types';
4
4
  type BufferEncoding = 'hex' | 'base64';
5
5
  export declare function stringToBufferTryFormats(input: string, formats?: BufferEncoding[]): Buffer;
6
- export declare function decodePsbt(psbt: string | Buffer, coinName: UtxoCoinName): BitGoPsbt;
6
+ export declare function decodePsbt(psbt: string | Buffer, coinName: UtxoCoinName | WasmUtxoCoinName): BitGoPsbt;
7
7
  export type PrebuildLike = {
8
8
  txHex?: string;
9
9
  txBase64?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,EAAsB,GAAG,MAAM,CAa7G;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,CAKnF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAUrE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAElF"}
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,EAAsB,GAAG,MAAM,CAa7G;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAKtG;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAUrE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAElF"}
@@ -5,6 +5,7 @@ exports.decodePsbt = decodePsbt;
5
5
  exports.decodeDescriptorPsbt = decodeDescriptorPsbt;
6
6
  exports.encodeTransaction = encodeTransaction;
7
7
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const names_1 = require("../names");
8
9
  function stringToBufferTryFormats(input, formats = ['hex', 'base64']) {
9
10
  for (const format of formats) {
10
11
  const buffer = Buffer.from(input, format);
@@ -20,7 +21,7 @@ function decodePsbt(psbt, coinName) {
20
21
  if (typeof psbt === 'string') {
21
22
  psbt = Buffer.from(psbt, 'hex');
22
23
  }
23
- return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt, coinName);
24
+ return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt, (0, names_1.toWasmUtxoCoinName)(coinName));
24
25
  }
25
26
  /**
26
27
  * Decode a prebuild's PSBT bytes directly into a wasm-utxo descriptor `Psbt`.
@@ -42,4 +43,4 @@ function decodeDescriptorPsbt(prebuild) {
42
43
  function encodeTransaction(transaction) {
43
44
  return Buffer.from(transaction.serialize());
44
45
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDREQWFDO0FBRUQsZ0NBS0M7QUFjRCxvREFVQztBQUVELDhDQUVDO0FBeERELGdEQUFxRjtBQVFyRixTQUFnQix3QkFBd0IsQ0FBQyxLQUFhLEVBQUUsVUFBNEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ25HLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUNFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDO1lBQ2pELENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQzVELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQXFCLEVBQUUsUUFBc0I7SUFDdEUsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsUUFBc0I7SUFDekQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDcEUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLGdCQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxXQUF3QztJQUN4RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCBoYXNQc2J0TWFnaWMsIFBzYnQgYXMgV2FzbVBzYnQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuXG5pbXBvcnQgeyBCaXRHb1BzYnQgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBCdWZmZXJFbmNvZGluZyA9ICdoZXgnIHwgJ2Jhc2U2NCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMoaW5wdXQ6IHN0cmluZywgZm9ybWF0czogQnVmZmVyRW5jb2RpbmdbXSA9IFsnaGV4JywgJ2Jhc2U2NCddKTogQnVmZmVyIHtcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGlucHV0LCBmb3JtYXQpO1xuICAgIGNvbnN0IGJ1ZmZlclRvU3RyaW5nID0gYnVmZmVyLnRvU3RyaW5nKGZvcm1hdCk7XG4gICAgaWYgKFxuICAgICAgKGZvcm1hdCA9PT0gJ2Jhc2U2NCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0KSB8fFxuICAgICAgKGZvcm1hdCA9PT0gJ2hleCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW5wdXQgbXVzdCBiZSBhIHZhbGlkIGhleCBvciBiYXNlNjQgc3RyaW5nJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0KHBzYnQ6IHN0cmluZyB8IEJ1ZmZlciwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJpdEdvUHNidCB7XG4gIGlmICh0eXBlb2YgcHNidCA9PT0gJ3N0cmluZycpIHtcbiAgICBwc2J0ID0gQnVmZmVyLmZyb20ocHNidCwgJ2hleCcpO1xuICB9XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnQsIGNvaW5OYW1lKTtcbn1cblxuZXhwb3J0IHR5cGUgUHJlYnVpbGRMaWtlID0ge1xuICB0eEhleD86IHN0cmluZztcbiAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gIHR4SGV4UHNidD86IHN0cmluZztcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgcHJlYnVpbGQncyBQU0JUIGJ5dGVzIGRpcmVjdGx5IGludG8gYSB3YXNtLXV0eG8gZGVzY3JpcHRvciBgUHNidGAuXG4gKlxuICogU2tpcHMgdGhlIGBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnRgIGludGVybWVkaWF0ZSB0aGF0IGBkZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZGBcbiAqICsgYHRvV2FzbVBzYnRgIHdvdWxkIG90aGVyd2lzZSByb3VuZC10cmlwIHRocm91Z2ggZm9yIGRlc2NyaXB0b3IgZmxvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEZXNjcmlwdG9yUHNidChwcmVidWlsZDogUHJlYnVpbGRMaWtlKTogV2FzbVBzYnQge1xuICBjb25zdCBzID0gcHJlYnVpbGQudHhIZXhQc2J0ID8/IHByZWJ1aWxkLnR4SGV4ID8/IHByZWJ1aWxkLnR4QmFzZTY0O1xuICBpZiAoIXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggb3IgdHhCYXNlNjQgcHJvcGVydHknKTtcbiAgfVxuICBjb25zdCBieXRlcyA9IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhzLCBbJ2hleCcsICdiYXNlNjQnXSk7XG4gIGlmICghaGFzUHNidE1hZ2ljKGJ5dGVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVzY3JpcHRvciB3YWxsZXRzIHJlcXVpcmUgUFNCVCBmb3JtYXQgdHJhbnNhY3Rpb25zJyk7XG4gIH1cbiAgcmV0dXJuIFdhc21Qc2J0LmRlc2VyaWFsaXplKGJ5dGVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24uc2VyaWFsaXplKCkpO1xufVxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDREQWFDO0FBRUQsZ0NBS0M7QUFjRCxvREFVQztBQUVELDhDQUVDO0FBeERELGdEQUFxRjtBQUVyRixvQ0FBOEU7QUFNOUUsU0FBZ0Isd0JBQXdCLENBQUMsS0FBYSxFQUFFLFVBQTRCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztJQUNuRyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFDRSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQztZQUNqRCxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxJQUFxQixFQUFFLFFBQXlDO0lBQ3pGLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUEsMEJBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBUUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFzQjtJQUN6RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNwRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sZ0JBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLFdBQXdDO0lBQ3hFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYywgUHNidCBhcyBXYXNtUHNidCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyB0b1dhc21VdHhvQ29pbk5hbWUsIFV0eG9Db2luTmFtZSwgV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcblxuaW1wb3J0IHsgQml0R29Qc2J0IH0gZnJvbSAnLi90eXBlcyc7XG5cbnR5cGUgQnVmZmVyRW5jb2RpbmcgPSAnaGV4JyB8ICdiYXNlNjQnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKGlucHV0OiBzdHJpbmcsIGZvcm1hdHM6IEJ1ZmZlckVuY29kaW5nW10gPSBbJ2hleCcsICdiYXNlNjQnXSk6IEJ1ZmZlciB7XG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShpbnB1dCwgZm9ybWF0KTtcbiAgICBjb25zdCBidWZmZXJUb1N0cmluZyA9IGJ1ZmZlci50b1N0cmluZyhmb3JtYXQpO1xuICAgIGlmIChcbiAgICAgIChmb3JtYXQgPT09ICdiYXNlNjQnICYmIGJ1ZmZlclRvU3RyaW5nID09PSBpbnB1dCkgfHxcbiAgICAgIChmb3JtYXQgPT09ICdoZXgnICYmIGJ1ZmZlclRvU3RyaW5nID09PSBpbnB1dC50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IG11c3QgYmUgYSB2YWxpZCBoZXggb3IgYmFzZTY0IHN0cmluZycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUHNidChwc2J0OiBzdHJpbmcgfCBCdWZmZXIsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUgfCBXYXNtVXR4b0NvaW5OYW1lKTogQml0R29Qc2J0IHtcbiAgaWYgKHR5cGVvZiBwc2J0ID09PSAnc3RyaW5nJykge1xuICAgIHBzYnQgPSBCdWZmZXIuZnJvbShwc2J0LCAnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidCwgdG9XYXNtVXR4b0NvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCB0eXBlIFByZWJ1aWxkTGlrZSA9IHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIHR4QmFzZTY0Pzogc3RyaW5nO1xuICB0eEhleFBzYnQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHByZWJ1aWxkJ3MgUFNCVCBieXRlcyBkaXJlY3RseSBpbnRvIGEgd2FzbS11dHhvIGRlc2NyaXB0b3IgYFBzYnRgLlxuICpcbiAqIFNraXBzIHRoZSBgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0YCBpbnRlcm1lZGlhdGUgdGhhdCBgZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGRgXG4gKiArIGB0b1dhc21Qc2J0YCB3b3VsZCBvdGhlcndpc2Ugcm91bmQtdHJpcCB0aHJvdWdoIGZvciBkZXNjcmlwdG9yIGZsb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVzY3JpcHRvclBzYnQocHJlYnVpbGQ6IFByZWJ1aWxkTGlrZSk6IFdhc21Qc2J0IHtcbiAgY29uc3QgcyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgaWYgKCFzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gIH1cbiAgY29uc3QgYnl0ZXMgPSBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMocywgWydoZXgnLCAnYmFzZTY0J10pO1xuICBpZiAoIWhhc1BzYnRNYWdpYyhieXRlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2NyaXB0b3Igd2FsbGV0cyByZXF1aXJlIFBTQlQgZm9ybWF0IHRyYW5zYWN0aW9ucycpO1xuICB9XG4gIHJldHVybiBXYXNtUHNidC5kZXNlcmlhbGl6ZShieXRlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogQnVmZmVyIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnNlcmlhbGl6ZSgpKTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Psbt, descriptorWallet } from '@bitgo/wasm-utxo';
2
2
  import type { TransactionExplanationDescriptor } from '../fixedScript/explainTransaction';
3
- import { UtxoCoinName } from '../../names';
4
- export declare function explainPsbt(psbt: Psbt, descriptors: descriptorWallet.DescriptorMap, coinName: UtxoCoinName): TransactionExplanationDescriptor;
3
+ import { UtxoCoinName, WasmUtxoCoinName } from '../../names';
4
+ export declare function explainPsbt(psbt: Psbt, descriptors: descriptorWallet.DescriptorMap, coinName: UtxoCoinName | WasmUtxoCoinName): TransactionExplanationDescriptor;
5
5
  //# sourceMappingURL=explainPsbt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/explainPsbt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA6B3C,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,QAAQ,EAAE,YAAY,GACrB,gCAAgC,CAkBlC"}
1
+ {"version":3,"file":"explainPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/explainPsbt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6BjF,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GACxC,gCAAgC,CAkBlC"}
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.explainPsbt = explainPsbt;
4
4
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
+ const names_1 = require("../../names");
5
6
  function sumValues(arr) {
6
7
  return arr.reduce((sum, e) => sum + e.value, 0n);
7
8
  }
8
- function toRecipient(output, coinName) {
9
+ function toRecipient(output) {
9
10
  const address = output.address ?? `scriptPubKey:${Buffer.from(output.script).toString('hex')}`;
10
11
  return {
11
12
  address,
@@ -26,7 +27,7 @@ function getInputSignatures(psbt) {
26
27
  return Array.from({ length: psbt.inputCount() }, (_, i) => getInputSignaturesForInputIndex(psbt, i));
27
28
  }
28
29
  function explainPsbt(psbt, descriptors, coinName) {
29
- const parsedTransaction = wasm_utxo_1.descriptorWallet.parse(psbt, descriptors, coinName);
30
+ const parsedTransaction = wasm_utxo_1.descriptorWallet.parse(psbt, descriptors, (0, names_1.toWasmUtxoCoinName)(coinName));
30
31
  const { inputs, outputs } = parsedTransaction;
31
32
  const externalOutputs = outputs.filter((o) => o.scriptId === undefined);
32
33
  const changeOutputs = outputs.filter((o) => o.scriptId !== undefined);
@@ -37,11 +38,11 @@ function explainPsbt(psbt, descriptors, coinName) {
37
38
  signatures: inputSignatures.reduce((a, b) => Math.min(a, b), Infinity),
38
39
  locktime: psbt.lockTime(),
39
40
  id: psbt.unsignedTxId(),
40
- outputs: externalOutputs.map((o) => toRecipient(o, coinName)),
41
+ outputs: externalOutputs.map(toRecipient),
41
42
  outputAmount: sumValues(externalOutputs).toString(),
42
- changeOutputs: changeOutputs.map((o) => toRecipient(o, coinName)),
43
+ changeOutputs: changeOutputs.map(toRecipient),
43
44
  changeAmount: sumValues(changeOutputs).toString(),
44
45
  fee: fee.toString(),
45
46
  };
46
47
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9leHBsYWluUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlDQSxrQ0FzQkM7QUF0REQsZ0RBQTBEO0FBSzFELFNBQVMsU0FBUyxDQUFDLEdBQXdCO0lBQ3pDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFxQyxFQUFFLFFBQXNCO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQy9GLE9BQU87UUFDTCxPQUFPO1FBQ1AsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUywrQkFBK0IsQ0FBQyxJQUFVLEVBQUUsVUFBa0I7SUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBVTtJQUNwQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUN6QixJQUFVLEVBQ1YsV0FBMkMsRUFDM0MsUUFBc0I7SUFFdEIsTUFBTSxpQkFBaUIsR0FBRyw0QkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDO0lBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU87UUFDTCxlQUFlO1FBQ2YsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7UUFDdEUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDekIsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDdkIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDbkQsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDakQsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUU7S0FDcEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgUHNidCwgZGVzY3JpcHRvcldhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuZnVuY3Rpb24gc3VtVmFsdWVzKGFycjogeyB2YWx1ZTogYmlnaW50IH1bXSk6IGJpZ2ludCB7XG4gIHJldHVybiBhcnIucmVkdWNlKChzdW0sIGUpID0+IHN1bSArIGUudmFsdWUsIDBuKTtcbn1cblxuZnVuY3Rpb24gdG9SZWNpcGllbnQob3V0cHV0OiBkZXNjcmlwdG9yV2FsbGV0LlBhcnNlZE91dHB1dCwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IElUcmFuc2FjdGlvblJlY2lwaWVudCB7XG4gIGNvbnN0IGFkZHJlc3MgPSBvdXRwdXQuYWRkcmVzcyA/PyBgc2NyaXB0UHViS2V5OiR7QnVmZmVyLmZyb20ob3V0cHV0LnNjcmlwdCkudG9TdHJpbmcoJ2hleCcpfWA7XG4gIHJldHVybiB7XG4gICAgYWRkcmVzcyxcbiAgICBhbW91bnQ6IG91dHB1dC52YWx1ZS50b1N0cmluZygpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFNpZ25hdHVyZXNGb3JJbnB1dEluZGV4KHBzYnQ6IFBzYnQsIGlucHV0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghcHNidC5oYXNQYXJ0aWFsU2lnbmF0dXJlcyhpbnB1dEluZGV4KSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHBhcnRpYWxTaWdzID0gcHNidC5nZXRQYXJ0aWFsU2lnbmF0dXJlcyhpbnB1dEluZGV4KTtcbiAgcmV0dXJuIHBhcnRpYWxTaWdzLnJlZHVjZSgoYWdnLCBwKSA9PiB7XG4gICAgY29uc3QgdmFsaWQgPSBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlQXRJbnB1dChpbnB1dEluZGV4LCBwLnB1YmtleSk7XG4gICAgcmV0dXJuIGFnZyArICh2YWxpZCA/IDEgOiAwKTtcbiAgfSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldElucHV0U2lnbmF0dXJlcyhwc2J0OiBQc2J0KTogbnVtYmVyW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogcHNidC5pbnB1dENvdW50KCkgfSwgKF8sIGkpID0+IGdldElucHV0U2lnbmF0dXJlc0ZvcklucHV0SW5kZXgocHNidCwgaSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpblBzYnQoXG4gIHBzYnQ6IFBzYnQsXG4gIGRlc2NyaXB0b3JzOiBkZXNjcmlwdG9yV2FsbGV0LkRlc2NyaXB0b3JNYXAsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25EZXNjcmlwdG9yIHtcbiAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBkZXNjcmlwdG9yV2FsbGV0LnBhcnNlKHBzYnQsIGRlc2NyaXB0b3JzLCBjb2luTmFtZSk7XG4gIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzIH0gPSBwYXJzZWRUcmFuc2FjdGlvbjtcbiAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gb3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoYW5nZU91dHB1dHMgPSBvdXRwdXRzLmZpbHRlcigobykgPT4gby5zY3JpcHRJZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgZmVlID0gc3VtVmFsdWVzKGlucHV0cykgLSBzdW1WYWx1ZXMob3V0cHV0cyk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlcyA9IGdldElucHV0U2lnbmF0dXJlcyhwc2J0KTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFNpZ25hdHVyZXMsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYiksIEluZmluaXR5KSxcbiAgICBsb2NrdGltZTogcHNidC5sb2NrVGltZSgpLFxuICAgIGlkOiBwc2J0LnVuc2lnbmVkVHhJZCgpLFxuICAgIG91dHB1dHM6IGV4dGVybmFsT3V0cHV0cy5tYXAoKG8pID0+IHRvUmVjaXBpZW50KG8sIGNvaW5OYW1lKSksXG4gICAgb3V0cHV0QW1vdW50OiBzdW1WYWx1ZXMoZXh0ZXJuYWxPdXRwdXRzKS50b1N0cmluZygpLFxuICAgIGNoYW5nZU91dHB1dHM6IGNoYW5nZU91dHB1dHMubWFwKChvKSA9PiB0b1JlY2lwaWVudChvLCBjb2luTmFtZSkpLFxuICAgIGNoYW5nZUFtb3VudDogc3VtVmFsdWVzKGNoYW5nZU91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgZmVlOiBmZWUudG9TdHJpbmcoKSxcbiAgfTtcbn1cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9leHBsYWluUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlDQSxrQ0FzQkM7QUF0REQsZ0RBQTBEO0FBRzFELHVDQUFpRjtBQUVqRixTQUFTLFNBQVMsQ0FBQyxHQUF3QjtJQUN6QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBcUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDL0YsT0FBTztRQUNMLE9BQU87UUFDUCxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLElBQVUsRUFBRSxVQUFrQjtJQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFVO0lBQ3BDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQ3pCLElBQVUsRUFDVixXQUEyQyxFQUMzQyxRQUF5QztJQUV6QyxNQUFNLGlCQUFpQixHQUFHLDRCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUEsMEJBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDO0lBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU87UUFDTCxlQUFlO1FBQ2YsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7UUFDdEUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDekIsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDdkIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3pDLFlBQVksRUFBRSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ25ELGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUM3QyxZQUFZLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUNqRCxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRTtLQUNwQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBQc2J0LCBkZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgdG9XYXNtVXR4b0NvaW5OYW1lLCBVdHhvQ29pbk5hbWUsIFdhc21VdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmZ1bmN0aW9uIHN1bVZhbHVlcyhhcnI6IHsgdmFsdWU6IGJpZ2ludCB9W10pOiBiaWdpbnQge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoc3VtLCBlKSA9PiBzdW0gKyBlLnZhbHVlLCAwbik7XG59XG5cbmZ1bmN0aW9uIHRvUmVjaXBpZW50KG91dHB1dDogZGVzY3JpcHRvcldhbGxldC5QYXJzZWRPdXRwdXQpOiBJVHJhbnNhY3Rpb25SZWNpcGllbnQge1xuICBjb25zdCBhZGRyZXNzID0gb3V0cHV0LmFkZHJlc3MgPz8gYHNjcmlwdFB1YktleToke0J1ZmZlci5mcm9tKG91dHB1dC5zY3JpcHQpLnRvU3RyaW5nKCdoZXgnKX1gO1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3MsXG4gICAgYW1vdW50OiBvdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRTaWduYXR1cmVzRm9ySW5wdXRJbmRleChwc2J0OiBQc2J0LCBpbnB1dEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIXBzYnQuaGFzUGFydGlhbFNpZ25hdHVyZXMoaW5wdXRJbmRleCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBwYXJ0aWFsU2lncyA9IHBzYnQuZ2V0UGFydGlhbFNpZ25hdHVyZXMoaW5wdXRJbmRleCk7XG4gIHJldHVybiBwYXJ0aWFsU2lncy5yZWR1Y2UoKGFnZywgcCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkID0gcHNidC52YWxpZGF0ZVNpZ25hdHVyZUF0SW5wdXQoaW5wdXRJbmRleCwgcC5wdWJrZXkpO1xuICAgIHJldHVybiBhZ2cgKyAodmFsaWQgPyAxIDogMCk7XG4gIH0sIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFNpZ25hdHVyZXMocHNidDogUHNidCk6IG51bWJlcltdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHBzYnQuaW5wdXRDb3VudCgpIH0sIChfLCBpKSA9PiBnZXRJbnB1dFNpZ25hdHVyZXNGb3JJbnB1dEluZGV4KHBzYnQsIGkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Qc2J0KFxuICBwc2J0OiBQc2J0LFxuICBkZXNjcmlwdG9yczogZGVzY3JpcHRvcldhbGxldC5EZXNjcmlwdG9yTWFwLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lIHwgV2FzbVV0eG9Db2luTmFtZVxuKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkRlc2NyaXB0b3Ige1xuICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGRlc2NyaXB0b3JXYWxsZXQucGFyc2UocHNidCwgZGVzY3JpcHRvcnMsIHRvV2FzbVV0eG9Db2luTmFtZShjb2luTmFtZSkpO1xuICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gcGFyc2VkVHJhbnNhY3Rpb247XG4gIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IG91dHB1dHMuZmlsdGVyKChvKSA9PiBvLnNjcmlwdElkID09PSB1bmRlZmluZWQpO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gb3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGZlZSA9IHN1bVZhbHVlcyhpbnB1dHMpIC0gc3VtVmFsdWVzKG91dHB1dHMpO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXMgPSBnZXRJbnB1dFNpZ25hdHVyZXMocHNidCk7XG4gIHJldHVybiB7XG4gICAgaW5wdXRTaWduYXR1cmVzLFxuICAgIHNpZ25hdHVyZXM6IGlucHV0U2lnbmF0dXJlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpLCBJbmZpbml0eSksXG4gICAgbG9ja3RpbWU6IHBzYnQubG9ja1RpbWUoKSxcbiAgICBpZDogcHNidC51bnNpZ25lZFR4SWQoKSxcbiAgICBvdXRwdXRzOiBleHRlcm5hbE91dHB1dHMubWFwKHRvUmVjaXBpZW50KSxcbiAgICBvdXRwdXRBbW91bnQ6IHN1bVZhbHVlcyhleHRlcm5hbE91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgY2hhbmdlT3V0cHV0czogY2hhbmdlT3V0cHV0cy5tYXAodG9SZWNpcGllbnQpLFxuICAgIGNoYW5nZUFtb3VudDogc3VtVmFsdWVzKGNoYW5nZU91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgZmVlOiBmZWUudG9TdHJpbmcoKSxcbiAgfTtcbn1cbiJdfQ==