@bitgo-beta/sdk-core 8.2.1-beta.200 → 8.2.1-beta.2000

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 (716) hide show
  1. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
  2. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +3 -3
  4. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  5. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +4 -3
  6. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
  7. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  8. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +41 -29
  9. package/dist/src/account-lib/baseCoin/enum.d.ts +57 -5
  10. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  11. package/dist/src/account-lib/baseCoin/enum.js +107 -10
  12. package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
  13. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
  14. package/dist/src/account-lib/baseCoin/errors.js +8 -2
  15. package/dist/src/account-lib/baseCoin/iface.d.ts +19 -35
  16. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  17. package/dist/src/account-lib/baseCoin/iface.js +26 -18
  18. package/dist/src/account-lib/baseCoin/index.d.ts +1 -1
  19. package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
  20. package/dist/src/account-lib/baseCoin/index.js +8 -5
  21. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts +88 -0
  22. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  23. package/dist/src/account-lib/baseCoin/messages/baseMessage.js +154 -0
  24. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +67 -0
  25. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  26. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.js +144 -0
  27. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +33 -0
  28. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  29. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +45 -0
  30. package/dist/src/account-lib/baseCoin/messages/iface.d.ts +164 -0
  31. package/dist/src/account-lib/baseCoin/messages/iface.d.ts.map +1 -0
  32. package/dist/src/account-lib/baseCoin/messages/iface.js +3 -0
  33. package/dist/src/account-lib/baseCoin/messages/index.d.ts +6 -0
  34. package/dist/src/account-lib/baseCoin/messages/index.d.ts.map +1 -0
  35. package/dist/src/account-lib/baseCoin/messages/index.js +22 -0
  36. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts +3 -0
  37. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts.map +1 -0
  38. package/dist/src/account-lib/baseCoin/messages/simple/index.js +19 -0
  39. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts +13 -0
  40. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts.map +1 -0
  41. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.js +28 -0
  42. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts +21 -0
  43. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts.map +1 -0
  44. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.js +28 -0
  45. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
  46. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  47. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
  48. package/dist/src/account-lib/index.js +23 -9
  49. package/dist/src/account-lib/mpc/index.d.ts +1 -1
  50. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  51. package/dist/src/account-lib/mpc/index.js +6 -2
  52. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -3
  53. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  54. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +376 -354
  55. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
  56. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
  57. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  58. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
  59. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +46 -53
  60. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  61. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  62. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +0 -1
  63. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  64. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
  65. package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
  66. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
  67. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
  68. package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
  69. package/dist/src/account-lib/mpc/tss/index.js +23 -9
  70. package/dist/src/account-lib/mpc/util.d.ts +7 -1
  71. package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
  72. package/dist/src/account-lib/mpc/util.js +24 -1
  73. package/dist/src/account-lib/staking/index.js +6 -2
  74. package/dist/src/account-lib/staking/utils.js +3 -3
  75. package/dist/src/account-lib/util/crypto.d.ts +8 -2
  76. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  77. package/dist/src/account-lib/util/crypto.js +69 -38
  78. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
  79. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
  80. package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
  81. package/dist/src/api/bip32path.js +2 -3
  82. package/dist/src/api/index.js +6 -2
  83. package/dist/src/api/types.d.ts +31 -0
  84. package/dist/src/api/types.d.ts.map +1 -1
  85. package/dist/src/api/types.js +1 -1
  86. package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -1
  87. package/dist/src/bitgo/address-book/address-book.js +20 -12
  88. package/dist/src/bitgo/address-book/index.js +6 -2
  89. package/dist/src/bitgo/address-book/types.d.ts +36 -36
  90. package/dist/src/bitgo/address-book/types.d.ts.map +1 -1
  91. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +121 -12
  92. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  93. package/dist/src/bitgo/baseCoin/baseCoin.js +203 -16
  94. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +288 -27
  95. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  96. package/dist/src/bitgo/baseCoin/iBaseCoin.js +14 -3
  97. package/dist/src/bitgo/baseCoin/index.js +6 -2
  98. package/dist/src/bitgo/bip32util.d.ts +3 -16
  99. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  100. package/dist/src/bitgo/bip32util.js +4 -56
  101. package/dist/src/bitgo/bitcoin.d.ts +0 -1
  102. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  103. package/dist/src/bitgo/bitcoin.js +26 -13
  104. package/dist/src/bitgo/bitgoBase.d.ts +17 -4
  105. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  106. package/dist/src/bitgo/bitgoBase.js +1 -1
  107. package/dist/src/bitgo/coinFactory.d.ts +17 -3
  108. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  109. package/dist/src/bitgo/coinFactory.js +26 -3
  110. package/dist/src/bitgo/config.d.ts +3 -95
  111. package/dist/src/bitgo/config.d.ts.map +1 -1
  112. package/dist/src/bitgo/config.js +26 -15
  113. package/dist/src/bitgo/defi/defiVault.d.ts +137 -0
  114. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
  115. package/dist/src/bitgo/defi/defiVault.js +379 -0
  116. package/dist/src/bitgo/defi/iDefiVault.d.ts +81 -0
  117. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
  118. package/dist/src/bitgo/defi/iDefiVault.js +6 -0
  119. package/dist/src/bitgo/defi/index.d.ts +3 -0
  120. package/dist/src/bitgo/defi/index.d.ts.map +1 -0
  121. package/dist/src/bitgo/defi/index.js +22 -0
  122. package/dist/src/bitgo/ecdh.d.ts +0 -1
  123. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  124. package/dist/src/bitgo/ecdh.js +26 -13
  125. package/dist/src/bitgo/enterprise/enterprise.d.ts +9 -4
  126. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  127. package/dist/src/bitgo/enterprise/enterprise.js +47 -21
  128. package/dist/src/bitgo/enterprise/enterprises.js +27 -13
  129. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +5 -3
  130. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  131. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  132. package/dist/src/bitgo/enterprise/index.js +6 -2
  133. package/dist/src/bitgo/environments.d.ts +68 -3
  134. package/dist/src/bitgo/environments.d.ts.map +1 -1
  135. package/dist/src/bitgo/environments.js +414 -34
  136. package/dist/src/bitgo/errors.d.ts +182 -1
  137. package/dist/src/bitgo/errors.d.ts.map +1 -1
  138. package/dist/src/bitgo/errors.js +177 -3
  139. package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
  140. package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
  141. package/dist/src/bitgo/evm/evmUtils.js +50 -0
  142. package/dist/src/bitgo/index.d.ts +5 -1
  143. package/dist/src/bitgo/index.d.ts.map +1 -1
  144. package/dist/src/bitgo/index.js +31 -11
  145. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
  146. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
  147. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
  148. package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
  149. package/dist/src/bitgo/internal/index.js +6 -2
  150. package/dist/src/bitgo/internal/internal.js +5 -6
  151. package/dist/src/bitgo/internal/keycard.d.ts +12 -8
  152. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
  153. package/dist/src/bitgo/internal/keycard.js +60 -48
  154. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +14 -0
  155. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
  156. package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
  157. package/dist/src/bitgo/keychain/iKeychains.d.ts +128 -11
  158. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  159. package/dist/src/bitgo/keychain/iKeychains.js +2 -2
  160. package/dist/src/bitgo/keychain/index.d.ts +1 -0
  161. package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
  162. package/dist/src/bitgo/keychain/index.js +7 -2
  163. package/dist/src/bitgo/keychain/keychains.d.ts +55 -7
  164. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  165. package/dist/src/bitgo/keychain/keychains.js +269 -52
  166. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +3 -3
  167. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
  168. package/dist/src/bitgo/keychain/ovcJsonCodec.js +23 -9
  169. package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
  170. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
  171. package/dist/src/bitgo/legacyBitcoin.js +27 -13
  172. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts +7 -0
  173. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts.map +1 -0
  174. package/dist/src/bitgo/lightning/lightningWalletUtil.js +25 -0
  175. package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
  176. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
  177. package/dist/src/bitgo/market/index.js +6 -2
  178. package/dist/src/bitgo/market/markets.js +23 -9
  179. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +5 -1
  180. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
  181. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
  182. package/dist/src/bitgo/pendingApproval/index.js +6 -2
  183. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
  184. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  185. package/dist/src/bitgo/pendingApproval/pendingApproval.js +246 -111
  186. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
  187. package/dist/src/bitgo/proofs/WalletProofs.d.ts +19 -0
  188. package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -0
  189. package/dist/src/bitgo/proofs/WalletProofs.js +37 -0
  190. package/dist/src/bitgo/proofs/index.d.ts +2 -0
  191. package/dist/src/bitgo/proofs/index.d.ts.map +1 -0
  192. package/dist/src/bitgo/proofs/index.js +6 -0
  193. package/dist/src/bitgo/proofs/types.d.ts +80 -0
  194. package/dist/src/bitgo/proofs/types.d.ts.map +1 -0
  195. package/dist/src/bitgo/proofs/types.js +80 -0
  196. package/dist/src/bitgo/recovery/index.js +6 -2
  197. package/dist/src/bitgo/recovery/initiate.d.ts +13 -3
  198. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  199. package/dist/src/bitgo/recovery/initiate.js +49 -41
  200. package/dist/src/bitgo/safe/iSafe.d.ts +87 -0
  201. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
  202. package/dist/src/bitgo/safe/iSafe.js +3 -0
  203. package/dist/src/bitgo/safe/iSafes.d.ts +94 -0
  204. package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
  205. package/dist/src/bitgo/safe/iSafes.js +3 -0
  206. package/dist/src/bitgo/safe/index.d.ts +6 -0
  207. package/dist/src/bitgo/safe/index.d.ts.map +1 -0
  208. package/dist/src/bitgo/safe/index.js +22 -0
  209. package/dist/src/bitgo/safe/safe.d.ts +61 -0
  210. package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
  211. package/dist/src/bitgo/safe/safe.js +230 -0
  212. package/dist/src/bitgo/safe/safeDerivation.d.ts +30 -0
  213. package/dist/src/bitgo/safe/safeDerivation.d.ts.map +1 -0
  214. package/dist/src/bitgo/safe/safeDerivation.js +122 -0
  215. package/dist/src/bitgo/safe/safes.d.ts +107 -0
  216. package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
  217. package/dist/src/bitgo/safe/safes.js +306 -0
  218. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +136 -0
  219. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -0
  220. package/dist/src/bitgo/staking/goStakingInterfaces.js +3 -0
  221. package/dist/src/bitgo/staking/goStakingWallet.d.ts +62 -0
  222. package/dist/src/bitgo/staking/goStakingWallet.d.ts.map +1 -0
  223. package/dist/src/bitgo/staking/goStakingWallet.js +141 -0
  224. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts +17 -0
  225. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts.map +1 -0
  226. package/dist/src/bitgo/staking/iGoStakingWallet.js +3 -0
  227. package/dist/src/bitgo/staking/iStakingWallet.d.ts +157 -8
  228. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  229. package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
  230. package/dist/src/bitgo/staking/index.d.ts +3 -0
  231. package/dist/src/bitgo/staking/index.d.ts.map +1 -1
  232. package/dist/src/bitgo/staking/index.js +9 -2
  233. package/dist/src/bitgo/staking/stakingWallet.d.ts +21 -8
  234. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  235. package/dist/src/bitgo/staking/stakingWallet.js +140 -7
  236. package/dist/src/bitgo/trading/iTradingAccount.d.ts +13 -1
  237. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  238. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  239. package/dist/src/bitgo/trading/index.d.ts +1 -0
  240. package/dist/src/bitgo/trading/index.d.ts.map +1 -1
  241. package/dist/src/bitgo/trading/index.js +7 -2
  242. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
  243. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
  244. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
  245. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
  246. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
  247. package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
  248. package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
  249. package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
  250. package/dist/src/bitgo/trading/network/decrypt.js +23 -0
  251. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
  252. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
  253. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
  254. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
  255. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
  256. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
  257. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
  258. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
  259. package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
  260. package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
  261. package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
  262. package/dist/src/bitgo/trading/network/encrypt.js +58 -0
  263. package/dist/src/bitgo/trading/network/index.d.ts +2 -0
  264. package/dist/src/bitgo/trading/network/index.d.ts.map +1 -1
  265. package/dist/src/bitgo/trading/network/index.js +8 -2
  266. package/dist/src/bitgo/trading/network/network.d.ts +4 -3
  267. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
  268. package/dist/src/bitgo/trading/network/network.js +24 -27
  269. package/dist/src/bitgo/trading/network/types.d.ts +79 -46
  270. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
  271. package/dist/src/bitgo/trading/network/types.js +1 -1
  272. package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
  273. package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
  274. package/dist/src/bitgo/trading/network/utils.js +54 -0
  275. package/dist/src/bitgo/trading/tradingAccount.d.ts +15 -1
  276. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  277. package/dist/src/bitgo/trading/tradingAccount.js +55 -7
  278. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +49 -0
  279. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  280. package/dist/src/bitgo/tss/bitgoPubKeys.js +92 -0
  281. package/dist/src/bitgo/tss/common.d.ts +41 -6
  282. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  283. package/dist/src/bitgo/tss/common.js +124 -17
  284. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
  285. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  286. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +78 -66
  287. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
  288. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  289. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +167 -0
  290. package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
  291. package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
  292. package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
  293. package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
  294. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  295. package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
  296. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +15 -6
  297. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  298. package/dist/src/bitgo/tss/eddsa/eddsa.js +47 -40
  299. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +42 -0
  300. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  301. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +104 -0
  302. package/dist/src/bitgo/tss/eddsa/index.js +23 -9
  303. package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
  304. package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
  305. package/dist/src/bitgo/tss/index.d.ts +3 -2
  306. package/dist/src/bitgo/tss/index.d.ts.map +1 -1
  307. package/dist/src/bitgo/tss/index.js +26 -10
  308. package/dist/src/bitgo/tss/types.d.ts +3 -3
  309. package/dist/src/bitgo/tss/types.d.ts.map +1 -1
  310. package/dist/src/bitgo/tss/types.js +2 -2
  311. package/dist/src/bitgo/types.d.ts +3 -3
  312. package/dist/src/bitgo/types.d.ts.map +1 -1
  313. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +10 -0
  314. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
  315. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +76 -14
  316. package/dist/src/bitgo/utils/codecProps.js +24 -11
  317. package/dist/src/bitgo/utils/codecs.d.ts +11 -0
  318. package/dist/src/bitgo/utils/codecs.d.ts.map +1 -0
  319. package/dist/src/bitgo/utils/codecs.js +59 -0
  320. package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
  321. package/dist/src/bitgo/utils/decode.js +30 -16
  322. package/dist/src/bitgo/utils/index.d.ts +4 -2
  323. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  324. package/dist/src/bitgo/utils/index.js +27 -11
  325. package/dist/src/bitgo/utils/messageTypes.d.ts +40 -0
  326. package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -0
  327. package/dist/src/bitgo/utils/messageTypes.js +17 -0
  328. package/dist/src/bitgo/utils/mpcUtils.d.ts +4 -4
  329. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  330. package/dist/src/bitgo/utils/mpcUtils.js +160 -14
  331. package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
  332. package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
  333. package/dist/src/bitgo/utils/notEmpty.js +7 -0
  334. package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -7
  335. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  336. package/dist/src/bitgo/utils/opengpgUtils.js +79 -62
  337. package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -1
  338. package/dist/src/bitgo/utils/postWithCodec.js +4 -38
  339. package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
  340. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
  341. package/dist/src/bitgo/utils/promise-utils.js +2 -3
  342. package/dist/src/bitgo/utils/transactionUtils.d.ts +9 -0
  343. package/dist/src/bitgo/utils/transactionUtils.d.ts.map +1 -0
  344. package/dist/src/bitgo/utils/transactionUtils.js +29 -0
  345. package/dist/src/bitgo/utils/triple.d.ts +1 -1
  346. package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
  347. package/dist/src/bitgo/utils/triple.js +2 -3
  348. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +62 -0
  349. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  350. package/dist/src/bitgo/utils/tss/addressVerification.js +93 -0
  351. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +94 -17
  352. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  353. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +305 -45
  354. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +425 -55
  355. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  356. package/dist/src/bitgo/utils/tss/baseTypes.js +47 -22
  357. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
  358. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
  359. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
  360. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +28 -0
  361. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
  362. package/dist/src/bitgo/utils/tss/ecdsa/base.js +53 -0
  363. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +25 -51
  364. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  365. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +173 -246
  366. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +216 -0
  367. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  368. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1057 -0
  369. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
  370. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
  371. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +16 -0
  372. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
  373. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
  374. package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
  375. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +7 -10
  376. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  377. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  378. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
  379. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
  380. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
  381. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +21 -0
  382. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -0
  383. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +118 -0
  384. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts +18 -0
  385. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts.map +1 -0
  386. package/dist/src/bitgo/utils/tss/eddsa/base.js +64 -0
  387. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +38 -11
  388. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  389. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +254 -96
  390. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +204 -0
  391. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  392. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +862 -0
  393. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +6 -0
  394. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -0
  395. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +16 -0
  396. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +4 -0
  397. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
  398. package/dist/src/bitgo/utils/tss/eddsa/index.js +29 -8
  399. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +12 -7
  400. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  401. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  402. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -0
  403. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -0
  404. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +44 -0
  405. package/dist/src/bitgo/utils/tss/index.d.ts +5 -0
  406. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  407. package/dist/src/bitgo/utils/tss/index.js +29 -10
  408. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  409. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  410. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  411. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +41 -0
  412. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  413. package/dist/src/bitgo/utils/tss/recipientUtils.js +141 -0
  414. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts +29 -0
  415. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -0
  416. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +128 -0
  417. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts +4 -0
  418. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts.map +1 -0
  419. package/dist/src/bitgo/utils/tss/redpallas/index.js +20 -0
  420. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +30 -0
  421. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  422. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +46 -0
  423. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +46 -0
  424. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -0
  425. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.js +55 -0
  426. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
  427. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
  428. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
  429. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts +12 -0
  430. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts.map +1 -0
  431. package/dist/src/bitgo/utils/tss/signableConsistency.js +9 -0
  432. package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
  433. package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
  434. package/dist/src/bitgo/utils/txRequest.js +49 -0
  435. package/dist/src/bitgo/utils/util.js +24 -10
  436. package/dist/src/bitgo/utils/wallet.d.ts +7 -0
  437. package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
  438. package/dist/src/bitgo/utils/wallet.js +48 -0
  439. package/dist/src/bitgo/v1Wallets.d.ts +170 -0
  440. package/dist/src/bitgo/v1Wallets.d.ts.map +1 -0
  441. package/dist/src/bitgo/v1Wallets.js +3 -0
  442. package/dist/src/bitgo/wallet/BuildParams.d.ts +80 -1
  443. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  444. package/dist/src/bitgo/wallet/BuildParams.js +83 -11
  445. package/dist/src/bitgo/wallet/iWallet.d.ts +545 -31
  446. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  447. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  448. package/dist/src/bitgo/wallet/iWallets.d.ts +308 -16
  449. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  450. package/dist/src/bitgo/wallet/iWallets.js +83 -3
  451. package/dist/src/bitgo/wallet/index.d.ts +1 -0
  452. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  453. package/dist/src/bitgo/wallet/index.js +7 -2
  454. package/dist/src/bitgo/wallet/safeKeychain.d.ts +52 -0
  455. package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -0
  456. package/dist/src/bitgo/wallet/safeKeychain.js +97 -0
  457. package/dist/src/bitgo/wallet/wallet.d.ts +360 -28
  458. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  459. package/dist/src/bitgo/wallet/wallet.js +2164 -386
  460. package/dist/src/bitgo/wallet/wallets.d.ts +93 -4
  461. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  462. package/dist/src/bitgo/wallet/wallets.js +1226 -155
  463. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
  464. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
  465. package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
  466. package/dist/src/bitgo/walletUtil/index.d.ts +3 -0
  467. package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
  468. package/dist/src/bitgo/walletUtil/index.js +19 -0
  469. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
  470. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
  471. package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
  472. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
  473. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
  474. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
  475. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +15 -0
  476. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
  477. package/dist/src/bitgo/walletUtil/utxoMessageProof.js +40 -0
  478. package/dist/src/bitgo/webhook/index.js +6 -2
  479. package/dist/src/bitgo/webhook/webhooks.js +23 -9
  480. package/dist/src/coins/fiat.d.ts +45 -0
  481. package/dist/src/coins/fiat.d.ts.map +1 -0
  482. package/dist/src/coins/fiat.js +94 -0
  483. package/dist/src/coins/index.d.ts +1 -6
  484. package/dist/src/coins/index.d.ts.map +1 -1
  485. package/dist/src/coins/index.js +7 -8
  486. package/dist/src/coins/ofc.d.ts +21 -2
  487. package/dist/src/coins/ofc.d.ts.map +1 -1
  488. package/dist/src/coins/ofc.js +29 -3
  489. package/dist/src/coins/ofcToken.d.ts +15 -4
  490. package/dist/src/coins/ofcToken.d.ts.map +1 -1
  491. package/dist/src/coins/ofcToken.js +43 -5
  492. package/dist/src/coins/susd.d.ts +3 -2
  493. package/dist/src/coins/susd.d.ts.map +1 -1
  494. package/dist/src/coins/susd.js +5 -1
  495. package/dist/src/common.js +27 -13
  496. package/dist/src/index.d.ts +9 -1
  497. package/dist/src/index.d.ts.map +1 -1
  498. package/dist/src/index.js +40 -11
  499. package/dist/src/lightning.d.ts +20 -0
  500. package/dist/src/lightning.d.ts.map +1 -0
  501. package/dist/src/lightning.js +13 -0
  502. package/dist/src/units.js +5 -6
  503. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts +2 -0
  504. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  505. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.js +207 -0
  506. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +2 -0
  507. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  508. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.js +174 -0
  509. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +2 -0
  510. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  511. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +108 -0
  512. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts +46 -0
  513. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts.map +1 -0
  514. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.js +69 -0
  515. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +91 -29
  516. package/dist/test/unit/account-lib/mpc/util.d.ts +2 -0
  517. package/dist/test/unit/account-lib/mpc/util.d.ts.map +1 -0
  518. package/dist/test/unit/account-lib/mpc/util.js +53 -0
  519. package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
  520. package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
  521. package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
  522. package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
  523. package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
  524. package/dist/test/unit/bitgo/defi/defiVault.js +600 -0
  525. package/dist/test/unit/bitgo/environment.d.ts +2 -0
  526. package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
  527. package/dist/test/unit/bitgo/environment.js +38 -0
  528. package/dist/test/unit/bitgo/errors.d.ts +2 -0
  529. package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
  530. package/dist/test/unit/bitgo/errors.js +262 -0
  531. package/dist/test/unit/bitgo/recovery/initiate.d.ts +2 -0
  532. package/dist/test/unit/bitgo/recovery/initiate.d.ts.map +1 -0
  533. package/dist/test/unit/bitgo/recovery/initiate.js +159 -0
  534. package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
  535. package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
  536. package/dist/test/unit/bitgo/safe/safe.js +277 -0
  537. package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
  538. package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
  539. package/dist/test/unit/bitgo/safe/safes.js +338 -0
  540. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
  541. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
  542. package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
  543. package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
  544. package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
  545. package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
  546. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
  547. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
  548. package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
  549. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts +2 -0
  550. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  551. package/dist/test/unit/bitgo/tss/bitgoPubKeys.js +66 -0
  552. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -4
  553. package/dist/test/unit/bitgo/utils/messageTypes.d.ts +2 -0
  554. package/dist/test/unit/bitgo/utils/messageTypes.d.ts.map +1 -0
  555. package/dist/test/unit/bitgo/utils/messageTypes.js +64 -0
  556. package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
  557. package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
  558. package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
  559. package/dist/test/unit/bitgo/utils/postWithCodec.js +32 -38
  560. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
  561. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  562. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +251 -0
  563. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
  564. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
  565. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +348 -0
  566. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
  567. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
  568. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
  569. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
  570. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  571. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +999 -0
  572. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
  573. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
  574. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
  575. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
  576. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
  577. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
  578. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
  579. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  580. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1918 -0
  581. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts +2 -0
  582. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts.map +1 -0
  583. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +311 -0
  584. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  585. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  586. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  587. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
  588. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  589. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +361 -0
  590. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -0
  591. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  592. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +81 -0
  593. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts +2 -0
  594. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts.map +1 -0
  595. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +281 -0
  596. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts +2 -0
  597. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts.map +1 -0
  598. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.js +111 -0
  599. package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
  600. package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
  601. package/dist/test/unit/bitgo/utils/txRequest.js +179 -0
  602. package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
  603. package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
  604. package/dist/test/unit/bitgo/utils/wallet.js +55 -0
  605. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
  606. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
  607. package/dist/test/unit/bitgo/wallet/BuildParams.js +129 -0
  608. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +79 -9
  609. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts +2 -0
  610. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts.map +1 -0
  611. package/dist/test/unit/bitgo/wallet/getAccountResources.js +133 -0
  612. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts +2 -0
  613. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts.map +1 -0
  614. package/dist/test/unit/bitgo/wallet/getResourceDelegations.js +118 -0
  615. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  616. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  617. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  618. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
  619. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
  620. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
  621. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts +2 -0
  622. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts.map +1 -0
  623. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.js +20 -0
  624. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
  625. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
  626. package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
  627. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts +5 -0
  628. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts.map +1 -0
  629. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +671 -0
  630. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts +2 -0
  631. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts.map +1 -0
  632. package/dist/test/unit/bitgo/wallet/tokenApproval.js +201 -0
  633. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
  634. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
  635. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
  636. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
  637. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
  638. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +66 -0
  639. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
  640. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
  641. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +320 -0
  642. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
  643. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
  644. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +293 -0
  645. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
  646. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
  647. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
  648. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
  649. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
  650. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +675 -0
  651. package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts +2 -0
  652. package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts.map +1 -0
  653. package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +150 -0
  654. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts +2 -0
  655. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts.map +1 -0
  656. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +201 -0
  657. package/dist/test/unit/coins/ofc.d.ts +2 -0
  658. package/dist/test/unit/coins/ofc.d.ts.map +1 -0
  659. package/dist/test/unit/coins/ofc.js +124 -0
  660. package/dist/test/unit/lightning.d.ts +2 -0
  661. package/dist/test/unit/lightning.d.ts.map +1 -0
  662. package/dist/test/unit/lightning.js +23 -0
  663. package/dist/test/unit/units.d.ts.map +1 -1
  664. package/dist/test/unit/units.js +64 -64
  665. package/dist/tsconfig.tsbuildinfo +1 -1
  666. package/package.json +23 -21
  667. package/.eslintignore +0 -5
  668. package/CHANGELOG.md +0 -1712
  669. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -77
  670. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
  671. package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -209
  672. package/dist/src/bitgo/lightning/iLightning.d.ts +0 -186
  673. package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
  674. package/dist/src/bitgo/lightning/iLightning.js +0 -106
  675. package/dist/src/bitgo/lightning/index.d.ts +0 -5
  676. package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
  677. package/dist/src/bitgo/lightning/index.js +0 -17
  678. package/dist/src/bitgo/lightning/lightning.d.ts +0 -25
  679. package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
  680. package/dist/src/bitgo/lightning/lightning.js +0 -111
  681. package/dist/src/bitgo/lightning/lightningUtils.d.ts +0 -46
  682. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
  683. package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
  684. package/dist/src/bitgo/lightning/lnurlCodec.d.ts +0 -3
  685. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
  686. package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
  687. package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
  688. package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
  689. package/dist/src/bitgo/utils/blsUtils.js +0 -237
  690. package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
  691. package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
  692. package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
  693. package/dist/src/coins/fiateur.d.ts +0 -31
  694. package/dist/src/coins/fiateur.d.ts.map +0 -1
  695. package/dist/src/coins/fiateur.js +0 -57
  696. package/dist/src/coins/fiatgbp.d.ts +0 -31
  697. package/dist/src/coins/fiatgbp.d.ts.map +0 -1
  698. package/dist/src/coins/fiatgbp.js +0 -57
  699. package/dist/src/coins/fiatusd.d.ts +0 -31
  700. package/dist/src/coins/fiatusd.d.ts.map +0 -1
  701. package/dist/src/coins/fiatusd.js +0 -57
  702. package/dist/src/coins/tfiateur.d.ts +0 -11
  703. package/dist/src/coins/tfiateur.d.ts.map +0 -1
  704. package/dist/src/coins/tfiateur.js +0 -17
  705. package/dist/src/coins/tfiatgbp.d.ts +0 -11
  706. package/dist/src/coins/tfiatgbp.d.ts.map +0 -1
  707. package/dist/src/coins/tfiatgbp.js +0 -17
  708. package/dist/src/coins/tfiatusd.d.ts +0 -11
  709. package/dist/src/coins/tfiatusd.d.ts.map +0 -1
  710. package/dist/src/coins/tfiatusd.js +0 -17
  711. package/dist/src/openssl/index.d.ts +0 -5
  712. package/dist/src/openssl/index.d.ts.map +0 -1
  713. package/dist/src/openssl/index.js +0 -9
  714. package/dist/test/unit/openssl.d.ts +0 -2
  715. package/dist/test/unit/openssl.d.ts.map +0 -1
  716. package/dist/test/unit/openssl.js +0 -39
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,22 +15,33 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.BaseCoin = void 0;
23
37
  /**
24
38
  * @prettier
25
39
  */
26
40
  const crypto = __importStar(require("crypto"));
41
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
27
42
  const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
28
43
  const bignumber_js_1 = require("bignumber.js");
29
- const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
44
+ const statics_1 = require("@bitgo-beta/statics");
30
45
  const bip32util_1 = require("../bip32util");
31
46
  const account_lib_1 = require("../../account-lib");
32
47
  const enterprise_1 = require("../enterprise");
@@ -73,6 +88,13 @@ class BaseCoin {
73
88
  get type() {
74
89
  return this.getChain();
75
90
  }
91
+ /**
92
+ * Gets the statics coin object
93
+ * @returns {Readonly<StaticsBaseCoin>} the statics coin object
94
+ */
95
+ getConfig() {
96
+ return this._staticsCoin;
97
+ }
76
98
  /**
77
99
  * Flag for sending value of 0.
78
100
  * @returns {boolean} True if okay to send 0 value, false otherwise
@@ -102,6 +124,9 @@ class BaseCoin {
102
124
  allowsAccountConsolidations() {
103
125
  return false;
104
126
  }
127
+ supportsResourceDelegation() {
128
+ return false;
129
+ }
105
130
  /**
106
131
  * Gets config for how token enablements work for this coin
107
132
  * @returns
@@ -121,6 +146,32 @@ class BaseCoin {
121
146
  supportsTss() {
122
147
  return false;
123
148
  }
149
+ /**
150
+ * @deprecated use CoinFeature.MULTISIG from statics instead
151
+ * Flag indicating if this coin supports MultiSig wallets.
152
+ * @return {boolean} True if MultiSig wallets can be created for this coin
153
+ */
154
+ supportsMultisig() {
155
+ // Use the static coin configuration to check if MULTISIG is supported
156
+ return this._staticsCoin.features.includes(statics_1.CoinFeature.MULTISIG);
157
+ }
158
+ /**
159
+ * It will return the default multisig type value for coin
160
+ * @return {MultisigType} return 'tss' if coin supports only TSS not MultiSig
161
+ * else if coin supports MultiSig return 'onchain'
162
+ * if coin supports both return 'onchain'
163
+ * else undefined
164
+ */
165
+ getDefaultMultisigType() {
166
+ return undefined;
167
+ }
168
+ /**
169
+ * Flag indicating if the coin supports deriving a key with a seed (keyID)
170
+ * to the user/backup keys.
171
+ */
172
+ supportsDeriveKeyWithSeed() {
173
+ return true;
174
+ }
124
175
  /**
125
176
  * Flag indicating if this blockchain runs on EVM architecture.
126
177
  * @returns {boolean} True if the blockchain runs on EVM architecture.
@@ -135,6 +186,40 @@ class BaseCoin {
135
186
  supportsBlsDkg() {
136
187
  return false;
137
188
  }
189
+ /**
190
+ * Prepare a built transaction for cold (offline) signing by attaching the
191
+ * xpubs / xpub derivation paths the offline signer (OVC) needs in order to
192
+ * sign it. Coins whose tx format already carries this information inline
193
+ * (e.g. PSBT) can override this to skip attaching it.
194
+ * @param txPrebuild The built transaction JSON returned by the platform
195
+ * @param keychains The user/backup/bitgo keychains for this wallet, in that order
196
+ * @returns The txPrebuild JSON, augmented with `pubs` and `xpubsWithDerivationPath`
197
+ */
198
+ prepareColdTransaction(txPrebuild, keychains) {
199
+ const [user, backup, bitgo] = keychains;
200
+ const sources = [
201
+ ['user', user],
202
+ ['backup', backup],
203
+ ['bitgo', bitgo],
204
+ ];
205
+ const pubs = [];
206
+ const xpubsWithDerivationPath = {};
207
+ for (const [source, keychain] of sources) {
208
+ // MPC keychains only have a commonKeychain, not a pub - skip those.
209
+ if (keychain.pub) {
210
+ pubs.push(keychain.pub);
211
+ xpubsWithDerivationPath[source] = {
212
+ xpub: keychain.pub,
213
+ derivedFromParentWithSeed: keychain.derivedFromParentWithSeed,
214
+ };
215
+ }
216
+ }
217
+ return {
218
+ ...txPrebuild,
219
+ pubs,
220
+ xpubsWithDerivationPath,
221
+ };
222
+ }
138
223
  /**
139
224
  * Convert a currency amount represented in base units (satoshi, wei, atoms, drops, stroops)
140
225
  * to big units (btc, eth, xrp, xlm)
@@ -146,6 +231,17 @@ class BaseCoin {
146
231
  // set the format so commas aren't added to large coin amounts
147
232
  return bigNumber.toFormat(null, null, { groupSeparator: '', decimalSeparator: '.' });
148
233
  }
234
+ checkRecipient(recipient) {
235
+ if (recipient.amount !== 'max') {
236
+ const amount = new bignumber_js_1.BigNumber(recipient.amount);
237
+ if (amount.isNegative()) {
238
+ throw new Error('invalid argument for amount - positive number greater than zero or numeric string expected');
239
+ }
240
+ if (!this.valuelessTransferAllowed() && amount.isZero()) {
241
+ throw new Error('invalid argument for amount - positive number greater than zero or numeric string expected');
242
+ }
243
+ }
244
+ }
149
245
  /**
150
246
  * Convert a currency amount represented in big units (btc, eth, xrp, xlm)
151
247
  * to base units (satoshi, wei, atoms, drops, stroops)
@@ -159,6 +255,13 @@ class BaseCoin {
159
255
  }
160
256
  return bigNumber.toFixed(0);
161
257
  }
258
+ /**
259
+ * Preprocess the build parameters before sending to the API
260
+ * @param buildParams
261
+ */
262
+ preprocessBuildParams(buildParams) {
263
+ return buildParams;
264
+ }
162
265
  /**
163
266
  * Sign message with private key
164
267
  *
@@ -166,7 +269,7 @@ class BaseCoin {
166
269
  * @param message
167
270
  */
168
271
  async signMessage(key, message) {
169
- return bip32util_1.signMessage(message, utxo_lib_1.bip32.fromBase58(key.prv), utxolib.networks.bitcoin);
272
+ return (0, bip32util_1.signMessage)(message, utxo_lib_1.bip32.fromBase58(key.prv), utxolib.networks.bitcoin);
170
273
  }
171
274
  /**
172
275
  * Create signatures for the backup and bitgo keys using the user key.
@@ -195,6 +298,21 @@ class BaseCoin {
195
298
  verifyAddress(params) {
196
299
  return this.isWalletAddress(params);
197
300
  }
301
+ /**
302
+ * Locally derive and return a wallet receive address for the given derivation path,
303
+ * using public key material only (no private keys, no network access).
304
+ *
305
+ * This is the inverse of {@link isWalletAddress}: rather than checking a candidate
306
+ * address, it *produces* the address from the wallet's keychains and a chain/index.
307
+ *
308
+ * Coins opt in by overriding this method; the default implementation throws.
309
+ *
310
+ * @param {DeriveAddressOptions} params - parameters for address derivation (keychains, chain, index, …)
311
+ * @returns {Promise<DeriveAddressResult>} the derived address plus the path and coin-specific data
312
+ */
313
+ deriveAddress(params) {
314
+ throw new account_lib_1.NotImplementedError('deriveAddress is not supported for this coin');
315
+ }
198
316
  /**
199
317
  * convert address into desired address format.
200
318
  * @param address
@@ -224,6 +342,13 @@ class BaseCoin {
224
342
  supportsMessageSigning() {
225
343
  return false;
226
344
  }
345
+ /**
346
+ * Check whether a coin requires wallet initialization
347
+ * @returns {boolean}
348
+ */
349
+ requiresWalletInitializationTransaction() {
350
+ return false;
351
+ }
227
352
  /**
228
353
  * Check whether a coin supports signing of Typed data
229
354
  * @returns {boolean}
@@ -284,7 +409,7 @@ class BaseCoin {
284
409
  * @param seed
285
410
  * @returns {{key: string, derivationPath: string}}
286
411
  */
287
- deriveKeyWithSeed({ key, seed }) {
412
+ static deriveKeyWithSeedBip32(key, seed) {
288
413
  function sha256(input) {
289
414
  return crypto.createHash('sha256').update(input).digest();
290
415
  }
@@ -294,11 +419,17 @@ class BaseCoin {
294
419
  parseInt(derivationPathInput.slice(7, 14), 16),
295
420
  ];
296
421
  const derivationPath = 'm/999999/' + derivationPathParts.join('/');
297
- const keyNode = utxo_lib_1.bip32.fromBase58(key);
298
- const derivedKeyNode = keyNode.derivePath(derivationPath);
299
422
  return {
300
- key: derivedKeyNode.toBase58(),
301
- derivationPath: derivationPath,
423
+ key: key.derivePath(derivationPath),
424
+ derivationPath,
425
+ };
426
+ }
427
+ /** {@see deriveKeyWithSeedBip32} */
428
+ deriveKeyWithSeed(params) {
429
+ const { key, derivationPath } = BaseCoin.deriveKeyWithSeedBip32(utxo_lib_1.bip32.fromBase58(params.key), params.seed);
430
+ return {
431
+ key: key.toBase58(),
432
+ derivationPath,
302
433
  };
303
434
  }
304
435
  /**
@@ -322,6 +453,14 @@ class BaseCoin {
322
453
  initiateRecovery(params) {
323
454
  throw new Error('deprecated method');
324
455
  }
456
+ /**
457
+ * Generate a root key pair on the curve used by the coin
458
+ * @param {Buffer} seed - seed to use for key pair generation
459
+ * @returns {KeyPair} the generated key pair
460
+ */
461
+ generateRootKeyPair(seed) {
462
+ throw new account_lib_1.NotImplementedError('generateRootKeyPair is not supported for this coin');
463
+ }
325
464
  /**
326
465
  * Return wether the given m of n wallet signers/ key amounts are valid for the coin
327
466
  */
@@ -357,7 +496,55 @@ class BaseCoin {
357
496
  getHashFunction() {
358
497
  throw new account_lib_1.NotImplementedError('getHashFunction is not supported for this coin');
359
498
  }
499
+ buildNftTransferData(params) {
500
+ throw new account_lib_1.NotImplementedError('buildNftTransferData is not supported for this coin');
501
+ }
502
+ /**
503
+ * Broadcast a transaction to the network
504
+ * @param params options for broadcasting
505
+ * @returns {Promise<BaseBroadcastTransactionResult>} result of broadcast
506
+ * @throws {NotImplementedError} if not implemented
507
+ */
508
+ broadcastTransaction(params) {
509
+ throw new account_lib_1.NotImplementedError('broadcastTransaction is not supported for this coin');
510
+ }
511
+ /**
512
+ * Creates funds sweep recovery transaction(s) without BitGo
513
+ *
514
+ * @param {MPCSweepRecoveryOptions} params parameters needed to combine the signatures
515
+ * and transactions to create broadcastable transactions
516
+ *
517
+ * @returns {MPCTxs} array of the serialized transaction hex strings and indices
518
+ * of the addresses being swept
519
+ */
520
+ async createBroadcastableSweepTransaction(params) {
521
+ throw new account_lib_1.NotImplementedError('createBroadcastableSweepTransaction is not supported for this coin');
522
+ }
523
+ /**
524
+ * Sets coinspecific fields in intent from input params.
525
+ * This method should be overridden in coin-specific classes
526
+ * to configure these fields in the intent
527
+ * @param intent - intent in which coinspecific fields are to be set
528
+ * @param params
529
+ */
530
+ setCoinSpecificFieldsInIntent(intent, params) {
531
+ return;
532
+ }
533
+ /** @inheritDoc */
534
+ async assertIsValidKey(params) {
535
+ if (!params.encryptedPrv) {
536
+ throw new Error('encryptedPrv is required');
537
+ }
538
+ let decryptedKey;
539
+ try {
540
+ decryptedKey = await this.bitgo.decrypt({ password: params.walletPassphrase, input: params.encryptedPrv });
541
+ }
542
+ catch (e) {
543
+ throw new Error(`failed to decrypt prv: ${e.message}`);
544
+ }
545
+ this.auditDecryptedKey({ ...params, prv: decryptedKey });
546
+ }
360
547
  }
361
548
  exports.BaseCoin = BaseCoin;
362
549
  BaseCoin._coinTokenPatternSeparator = ':';
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vYmFzZUNvaW4vYmFzZUNvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsK0NBQWlDO0FBQ2pDLG1EQUE2QztBQUM3QywrQ0FBeUM7QUFFekMsOERBQWdEO0FBR2hELDRDQUEyQztBQUMzQyxtREFBd0Q7QUFFeEQsOENBQTRDO0FBQzVDLDBDQUFvRDtBQUNwRCxzQ0FBb0M7QUFDcEMsd0RBQXNEO0FBQ3RELHNDQUFxRDtBQUNyRCx3Q0FBc0M7QUEwQnRDLE1BQXNCLFFBQVE7SUFXNUIsWUFBc0IsS0FBZ0I7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksb0JBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksa0NBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksd0JBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQkFBTyxDQUFD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QUUsQ0FBQyxFQUFFLENBQUMsRUFBOEI7UUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQWdCRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBb0I7UUFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBaUM7UUFDbEQsTUFBTSxJQUFJLGlDQUFtQixDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWM7UUFDbEMsTUFBTSxJQUFJLGlDQUFtQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLElBQUksaUNBQW1CLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNsRixDQUFDOztBQWxjSCw0QkFtY0M7QUExYjJCLG1DQUEwQixHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCaWdOdW1iZXIgfSBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMgfSBmcm9tICcuLi9yZWNvdmVyeSc7XG5pbXBvcnQgeyBzaWduTWVzc2FnZSB9IGZyb20gJy4uL2JpcDMydXRpbCc7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWInO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEVudGVycHJpc2VzIH0gZnJvbSAnLi4vZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBLZXljaGFpbnMsIEtleUluZGljZXMgfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBNYXJrZXRzIH0gZnJvbSAnLi4vbWFya2V0JztcbmltcG9ydCB7IFBlbmRpbmdBcHByb3ZhbHMgfSBmcm9tICcuLi9wZW5kaW5nQXBwcm92YWwnO1xuaW1wb3J0IHsgV2FsbGV0cywgSVdhbGxldCwgV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IFdlYmhvb2tzIH0gZnJvbSAnLi4vd2ViaG9vayc7XG5pbXBvcnQge1xuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgRmVlRXN0aW1hdGVPcHRpb25zLFxuICBJQmFzZUNvaW4sXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBJVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlY3JlYXRlQml0R29PcHRpb25zLFxuICBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBSZWNvdmVyVG9rZW5UcmFuc2FjdGlvbixcbiAgUmVjb3ZlcldhbGxldFRva2VuT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRva2VuRW5hYmxlbWVudENvbmZpZyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi9pQmFzZUNvaW4nO1xuaW1wb3J0IHsgSUluc2NyaXB0aW9uQnVpbGRlciB9IGZyb20gJy4uL2luc2NyaXB0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb2luIGltcGxlbWVudHMgSUJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZW50ZXJwcmlzZXM6IEVudGVycHJpc2VzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3dhbGxldHM6IFdhbGxldHM7XG4gIHByb3RlY3RlZCByZWFkb25seSBfa2V5Y2hhaW5zOiBLZXljaGFpbnM7XG4gIHByb3RlY3RlZCByZWFkb25seSBfd2ViaG9va3M6IFdlYmhvb2tzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BlbmRpbmdBcHByb3ZhbHM6IFBlbmRpbmdBcHByb3ZhbHM7XG4gIHByb3RlY3RlZCByZWFkb25seSBfbWFya2V0czogTWFya2V0cztcbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBfY29pblRva2VuUGF0dGVyblNlcGFyYXRvciA9ICc6JztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgICB0aGlzLl91cmwgPSB0aGlzLmJpdGdvLnVybCgnLycsIDIpO1xuICAgIHRoaXMuX3dhbGxldHMgPSBuZXcgV2FsbGV0cyh0aGlzLmJpdGdvLCB0aGlzKTtcbiAgICB0aGlzLl9rZXljaGFpbnMgPSBuZXcgS2V5Y2hhaW5zKHRoaXMuYml0Z28sIHRoaXMpO1xuICAgIHRoaXMuX3dlYmhvb2tzID0gbmV3IFdlYmhvb2tzKHRoaXMuYml0Z28sIHRoaXMpO1xuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbHMgPSBuZXcgUGVuZGluZ0FwcHJvdmFscyh0aGlzLmJpdGdvLCB0aGlzKTtcbiAgICB0aGlzLl9lbnRlcnByaXNlcyA9IG5ldyBFbnRlcnByaXNlcyh0aGlzLmJpdGdvLCB0aGlzKTtcbiAgICB0aGlzLl9tYXJrZXRzID0gbmV3IE1hcmtldHModGhpcy5iaXRnbywgdGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdXJsKHN1ZmZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsICsgdGhpcy5nZXRDaGFpbigpICsgc3VmZml4O1xuICB9XG5cbiAgcHVibGljIHdhbGxldHMoKTogV2FsbGV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX3dhbGxldHM7XG4gIH1cblxuICBwdWJsaWMgZW50ZXJwcmlzZXMoKTogRW50ZXJwcmlzZXMge1xuICAgIHJldHVybiB0aGlzLl9lbnRlcnByaXNlcztcbiAgfVxuXG4gIHB1YmxpYyBrZXljaGFpbnMoKTogS2V5Y2hhaW5zIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Y2hhaW5zO1xuICB9XG5cbiAgcHVibGljIHdlYmhvb2tzKCk6IFdlYmhvb2tzIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViaG9va3M7XG4gIH1cblxuICBwdWJsaWMgcGVuZGluZ0FwcHJvdmFscygpOiBQZW5kaW5nQXBwcm92YWxzIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFscztcbiAgfVxuXG4gIHB1YmxpYyBtYXJrZXRzKCk6IE1hcmtldHMge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXRzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgY29pblRva2VuUGF0dGVyblNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb2luVG9rZW5QYXR0ZXJuU2VwYXJhdG9yO1xuICB9XG5cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hhaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjaGFpbiB3aGljaCBzdXBwb3J0cyB0aGlzIGNvaW4gKGVnLCAnYnRjJywgJ2V0aCcpXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDaGFpbigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvaW4gZmFtaWx5IChlZy4gZm9yIHRidGMsIHRoaXMgd291bGQgYmUgYnRjKVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RmFtaWx5KCk6IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgZnVsbCBuYW1lIGZvciB0aGUgY29pblxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RnVsbE5hbWUoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIGZvciBzZW5kaW5nIHZhbHVlIG9mIDAuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGBzZW5kTWFueSgpYCB0byBwZXJmb3JtIHdhbGxldCBzd2VlcC5cbiAgICogRklYTUUoQkctMzk3MzgpOiBhZGQgY29pbi5zd2VlcFdhbGxldCgpIGluc3RlYWRcbiAgICovXG4gIHN3ZWVwV2l0aFNlbmRNYW55KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIGZvciBzZW5kaW5nIGRhdGEgYWxvbmcgd2l0aCB0cmFuc2FjdGlvbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgb2theSB0byBzZW5kIHR4IGRhdGEgKEVUSCksIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgdHJhbnNhY3Rpb25EYXRhQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGlzIGNvaW4gc3VwcG9ydHMgYWNjb3VudCBjb25zb2xpZGF0aW9uc1xuICAgKiBmcm9tIGl0cyByZWNlaXZlIGFkZHJlc3NlcyB0byB0aGUgcm9vdCBhZGRyZXNzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBva2F5IHRvIGNvbnNvbGlkYXRlIG92ZXIgdGhpcyBjb2luOyBmYWxzZSwgb3RoZXJ3aXNlXG4gICAqL1xuICBhbGxvd3NBY2NvdW50Q29uc29saWRhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uZmlnIGZvciBob3cgdG9rZW4gZW5hYmxlbWVudHMgd29yayBmb3IgdGhpcyBjb2luXG4gICAqIEByZXR1cm5zXG4gICAqICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiBUcnVlIGlmIHRva2VucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29pblxuICAgKiAgICBzdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50czogVHJ1ZSBpZiBtdWx0aXBsZSB0b2tlbnMgY2FuIGJlIGVuYWJsZWQgaW4gb25lIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTogVG9rZW5FbmFibGVtZW50Q29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IGZhbHNlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgY29pbiBzdXBwb3J0cyBUU1Mgd2FsbGV0cy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVFNTIFdhbGxldHMgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgY29pblxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIGJsb2NrY2hhaW4gcnVucyBvbiBFVk0gYXJjaGl0ZWN0dXJlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYmxvY2tjaGFpbiBydW5zIG9uIEVWTSBhcmNoaXRlY3R1cmUuXG4gICAqL1xuICBpc0VWTSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgY29pbiBzdXBwb3J0cyBCTFMtREtHIHdhbGxldHMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIEJMUy1ES0cgV2FsbGV0cyBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBjb2luXG4gICAqL1xuICBzdXBwb3J0c0Jsc0RrZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmFjdG9yIGJldHdlZW4gdGhlIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBjdXJyZW5jeSBhbW91bnQgcmVwcmVzZW50ZWQgaW4gYmFzZSB1bml0cyAoc2F0b3NoaSwgd2VpLCBhdG9tcywgZHJvcHMsIHN0cm9vcHMpXG4gICAqIHRvIGJpZyB1bml0cyAoYnRjLCBldGgsIHhycCwgeGxtKVxuICAgKi9cbiAgYmFzZVVuaXRzVG9CaWdVbml0cyhiYXNlVW5pdHM6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgQmlnTnVtYmVyLnNldCh7IERFQ0lNQUxfUExBQ0VTOiAyNCB9KTtcbiAgICBjb25zdCBkaXZpZGVuZCA9IHRoaXMuZ2V0QmFzZUZhY3RvcigpO1xuICAgIGNvbnN0IGJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIoYmFzZVVuaXRzKS5kaXZpZGVkQnkoZGl2aWRlbmQpO1xuICAgIC8vIHNldCB0aGUgZm9ybWF0IHNvIGNvbW1hcyBhcmVuJ3QgYWRkZWQgdG8gbGFyZ2UgY29pbiBhbW91bnRzXG4gICAgcmV0dXJuIGJpZ051bWJlci50b0Zvcm1hdChudWxsIGFzIGFueSwgbnVsbCBhcyBhbnksIHsgZ3JvdXBTZXBhcmF0b3I6ICcnLCBkZWNpbWFsU2VwYXJhdG9yOiAnLicgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIGN1cnJlbmN5IGFtb3VudCByZXByZXNlbnRlZCBpbiBiaWcgdW5pdHMgKGJ0YywgZXRoLCB4cnAsIHhsbSlcbiAgICogdG8gYmFzZSB1bml0cyAoc2F0b3NoaSwgd2VpLCBhdG9tcywgZHJvcHMsIHN0cm9vcHMpXG4gICAqIEBwYXJhbSBiaWdVbml0c1xuICAgKi9cbiAgYmlnVW5pdHNUb0Jhc2VVbml0cyhiaWdVbml0czogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5nZXRCYXNlRmFjdG9yKCk7XG4gICAgY29uc3QgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihiaWdVbml0cykudGltZXMobXVsdGlwbGllcik7XG4gICAgaWYgKCFiaWdOdW1iZXIuaXNJbnRlZ2VyKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm9uLWludGVnZXIgb3V0cHV0IHJlc3VsdGVkIGZyb20gbXVsdGlwbHlpbmcgJHtiaWdVbml0c30gYnkgJHttdWx0aXBsaWVyfWApO1xuICAgIH1cbiAgICByZXR1cm4gYmlnTnVtYmVyLnRvRml4ZWQoMCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAgICpcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiB7IHBydjogc3RyaW5nIH0sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIHNpZ25NZXNzYWdlKG1lc3NhZ2UsIGJpcDMyLmZyb21CYXNlNTgoa2V5LnBydiksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNpZ25hdHVyZXMgZm9yIHRoZSBiYWNrdXAgYW5kIGJpdGdvIGtleXMgdXNpbmcgdGhlIHVzZXIga2V5LlxuICAgKiBXZSBjYW4gdmVyaWZ5IHRoZSBzaWduYXR1cmVzIHdoZW4gZmV0Y2hpbmcgdGhlIGtleXMgZnJvbSB3YWxsZXQtcGxhdGZvcm0gbGF0ZXIuXG4gICAqIEN1cnJlbnRseSBvbmx5IGBBYnN0cmFjdFV0eG9Db2luYCBpbXBsZW1lbnRzIGFuZCB1c2VzIHRoZSBjb21wbGVtZW50YXJ5IGB2ZXJpZnlLZXlTaWduYXR1cmVgIG1ldGhvZC5cbiAgICogQHBhcmFtIHBydiAtIHRoZSB1c2VyIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSBiYWNrdXBLZXljaGFpbiAtIGNvbnRhaW5zIHRoZSBiYWNrdXAgcHVibGljIGtleVxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiAtIGNvbnRhaW5zIHRoZSBiaXRnbyBwdWJsaWMga2V5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlS2V5U2lnbmF0dXJlcyhcbiAgICBwcnY6IHN0cmluZyxcbiAgICBiYWNrdXBLZXljaGFpbjogeyBwdWI6IHN0cmluZyB9LFxuICAgIGJpdGdvS2V5Y2hhaW46IHsgcHViOiBzdHJpbmcgfVxuICApOiBQcm9taXNlPHtcbiAgICBiYWNrdXA6IHN0cmluZztcbiAgICBiaXRnbzogc3RyaW5nO1xuICB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2t1cDogKGF3YWl0IHRoaXMuc2lnbk1lc3NhZ2UoeyBwcnYgfSwgYmFja3VwS2V5Y2hhaW4ucHViKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgYml0Z286IChhd2FpdCB0aGlzLnNpZ25NZXNzYWdlKHsgcHJ2IH0sIGJpdGdvS2V5Y2hhaW4ucHViKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVjb21wb3NlIGEgcmF3IHRyYW5zYWN0aW9uIGludG8gdXNlZnVsIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIGNvaW4tc3BlY2lmaWNcbiAgICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbihvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxJVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxhbnksIHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBpbXBsZW1lbnRlZGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqL1xuICBhYnN0cmFjdCB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSB7QHNlZSBpc1dhbGxldEFkZHJlc3N9IGluc3RlYWRcbiAgICovXG4gIHZlcmlmeUFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybiB0cnVlIGlmZiBhZGRyZXNzIGlzIGEgd2FsbGV0IGFkZHJlc3MuIE11c3QgcmV0dXJuIGZhbHNlIGlmIGFkZHJlc3MgaXMgb3V0c2lkZSB3YWxsZXQuXG4gICAqL1xuICBhYnN0cmFjdCBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgYWRkcmVzcyBpbnRvIGRlc2lyZWQgYWRkcmVzcyBmb3JtYXQuXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBmb3JtYXRcbiAgICovXG4gIGNhbm9uaWNhbEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBmb3JtYXQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgY29pbiBzdXBwb3J0cyBibG9ja1RhcmdldCBmb3IgdHJhbnNhY3Rpb25zIHRvIGJlIGluY2x1ZGVkIGluXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvaW4gc3VwcG9ydHMgbGlnaHRuaW5nIHRyYW5zYWN0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN1cHBvcnRzTGlnaHRuaW5nKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgY29pbiBzdXBwb3J0cyBtZXNzYWdlIHNpZ25pbmdcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c01lc3NhZ2VTaWduaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgY29pbiBzdXBwb3J0cyBzaWduaW5nIG9mIFR5cGVkIGRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c1NpZ25pbmdUeXBlZERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgdG8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgd2FsbGV0IGdlbmVyYXRpb25cbiAgICogQHBhcmFtIHdhbGxldFBhcmFtc1xuICAgKiBAcGFyYW0ga2V5Y2hhaW5zXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQod2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLCBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXQpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2FsbGV0UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXh0cmEgcGFyYW1ldGVycyBmb3IgcHJlYnVpbGRpbmcgYSB0eC4gQWRkIHRoaW5ncyBsaWtlIGhvcCB0cmFuc2FjdGlvbiBwYXJhbXNcbiAgICovXG4gIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSBwcmVidWlsZCBhZnRlciByZWNlaXZpbmcgaXQgZnJvbSB0aGUgc2VydmVyLiBBZGQgdGhpbmdzIGxpa2UgbmxvY2t0aW1lXG4gICAqL1xuICBwb3N0UHJvY2Vzc1ByZWJ1aWxkKHByZWJ1aWxkUmVzcG9uc2U6IFRyYW5zYWN0aW9uUHJlYnVpbGQpOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByZWJ1aWxkUmVzcG9uc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvaW4tc3BlY2lmaWMgdGhpbmdzIGRvbmUgYmVmb3JlIHNpZ25pbmcgYSB0cmFuc2FjdGlvbiwgaS5lLiB2ZXJpZmljYXRpb25cbiAgICovXG4gIHByZXNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnM+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHdhbGxldCBvYmplY3QgZnJvbSBhIHdhbGxldCBkYXRhIG9iamVjdFxuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqL1xuICBuZXdXYWxsZXRPYmplY3Qod2FsbGV0UGFyYW1zOiBhbnkpOiBJV2FsbGV0IHtcbiAgICByZXR1cm4gbmV3IFdhbGxldCh0aGlzLmJpdGdvLCB0aGlzLCB3YWxsZXRQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGZlZSBlc3RpbWF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1zIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHBhcmFtcy5udW1CbG9ja3MgVGhlIG51bWJlciBvZiBibG9ja3MgdG8gdGFyZ2V0IGZvciBjb25mb3JtYXRpb24gKE9ubHkgd29ya3MgZm9yIGJ0YylcbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIGluZm8gcmV0dXJuZWQgZnJvbSB0aGUgbWVyY2hhbnQgc2VydmVyXG4gICAqL1xuICBhc3luYyBmZWVFc3RpbWF0ZShwYXJhbXM6IEZlZUVzdGltYXRlT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLm51bUJsb2Nrcykge1xuICAgICAgcXVlcnkubnVtQmxvY2tzID0gcGFyYW1zLm51bUJsb2NrcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy90eC9mZWUnKSkucXVlcnkocXVlcnkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xkIHdhbGxldCB0b29sIHVzZXMgdGhpcyBmdW5jdGlvbiB0byBkZXJpdmUgYW4gZXh0ZW5kZWQga2V5IHRoYXQgaXMgYmFzZWQgb24gdGhlIHBhc3NlZCBrZXkgYW5kIHNlZWRcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7e2tleTogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nfX1cbiAgICovXG4gIGRlcml2ZUtleVdpdGhTZWVkKHsga2V5LCBzZWVkIH06IHsga2V5OiBzdHJpbmc7IHNlZWQ6IHN0cmluZyB9KTogeyBrZXk6IHN0cmluZzsgZGVyaXZhdGlvblBhdGg6IHN0cmluZyB9IHtcbiAgICBmdW5jdGlvbiBzaGEyNTYoaW5wdXQpIHtcbiAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGlucHV0KS5kaWdlc3QoKTtcbiAgICB9XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGhJbnB1dCA9IHNoYTI1NihzaGEyNTYoYCR7c2VlZH1gKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoUGFydHMgPSBbXG4gICAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDAsIDcpLCAxNiksXG4gICAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDcsIDE0KSwgMTYpLFxuICAgIF07XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS85OTk5OTkvJyArIGRlcml2YXRpb25QYXRoUGFydHMuam9pbignLycpO1xuICAgIGNvbnN0IGtleU5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleSk7XG4gICAgY29uc3QgZGVyaXZlZEtleU5vZGUgPSBrZXlOb2RlLmRlcml2ZVBhdGgoZGVyaXZhdGlvblBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IGRlcml2ZWRLZXlOb2RlLnRvQmFzZTU4KCksXG4gICAgICBkZXJpdmF0aW9uUGF0aDogZGVyaXZhdGlvblBhdGgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hhdCBrZXkgd2Ugd2lsbCBuZWVkIGZvciBzaWduaW5nIC0gcmlnaHQgbm93IHdlIGp1c3QgbmVlZCB0aGVcbiAgICogdXNlciBrZXkuXG4gICAqL1xuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUl07XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBiZWZvcmUgYWRkaW5nIGEgYml0Z28ga2V5LiBCYXNlIGNvbnRyb2xsZXJcbiAgICogaXMgYSBuby1vcCwgYnV0IGNvaW4tc3BlY2lmaWMgY29udHJvbGxlciBtYXkgZG8gc29tZXRoaW5nXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGdldEJpcDMyS2V5cygpIGluIGNvbmp1bmN0aW9uIHdpdGggaXNWYWxpZEFkZHJlc3MgaW5zdGVhZFxuICAgKi9cbiAgaW5pdGlhdGVSZWNvdmVyeShwYXJhbXM6IEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IHVzZWQgaW4gUGVuZGluZ0FwcHJvdmFsIGZvciBjb21wYXJpbmcgUEFZR28gZmVlcyBwdXJwb3NlXG4gICAqIEBwYXJhbSBwYXJhbXMgb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKi9cbiAgYWJzdHJhY3QgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEga2V5IHBhaXIgb24gdGhlIGN1cnZlIHVzZWQgYnkgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICovXG4gIGFic3RyYWN0IGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpcjtcblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBhYnN0cmFjdCBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmV0dXJuIHdldGhlciB0aGUgZ2l2ZW4gbSBvZiBuIHdhbGxldCBzaWduZXJzLyBrZXkgYW1vdW50cyBhcmUgdmFsaWQgZm9yIHRoZSBjb2luXG4gICAqL1xuICBpc1ZhbGlkTW9mTlNldHVwKHsgbSwgbiB9OiB7IG0/OiBudW1iZXI7IG4/OiBudW1iZXIgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtID09PSAyICYmIG4gPT09IDM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYGFkZHJlc3NgIGlzIGEgcGxhdXNpYmx5IHZhbGlkIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBjb2luLlxuICAgKlxuICAgKiBEb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIGEgd2FsbGV0LiBGb3IgdGhhdCxcbiAgICogdXNlIFtbdmVyaWZ5QWRkcmVzc11dXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBhYnN0cmFjdCBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb25cbiAgICovXG4gIGFic3RyYWN0IHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBzaWduZWQgaW4gQnVmZmVyIGZvcm1hdC5cbiAgICogT25seSBuZWVkZWQgZm9yIGNvaW5zIHRoYXQgc3VwcG9ydCBhZGRpbmcgc2lnbmF0dXJlcyBkaXJlY3RseSAoZS5nLiBUU1MpLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VyaWFsaXplZFR4IC0gdGhlIHVuc2lnbmVkIHRyYW5zYWN0aW9uIGluIGJyb2FkY2FzdCBmb3JtYXRcbiAgICogQHJldHVybnMge1Byb21pc2U8QnVmZmVyPn0gLSB0aGUgcG9ydGlvbiBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBzaWduZWRcbiAgICovXG4gIGFzeW5jIGdldFNpZ25hYmxlUGF5bG9hZChzZXJpYWxpemVkVHg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgTVBDIGFsZ29yaXRobSAoZWNkc2Egb3IgZWRkc2EpIHVzZWQgZm9yIGNvaW5zIHRoYXQgc3VwcG9ydCBUU1NcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gTVBDIGFsZ29yaXRobSBpcyBkZWZpbmVkIGZvciB0aGlzIGNvaW4nKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJUb2tlbihwYXJhbXM6IFJlY292ZXJXYWxsZXRUb2tlbk9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJUb2tlblRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3JlY292ZXJUb2tlbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgfVxuXG4gIGdldEluc2NyaXB0aW9uQnVpbGRlcih3YWxsZXQ6IFdhbGxldCk6IElJbnNjcmlwdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdJbnNjcmlwdGlvbiBCdWlsZGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGdldCBjb2luIHNwZWNpZmljIGhhc2ggZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0cmFuc2FjdGlvbiBkaWdlc3RzLlxuICAgKiBAcmV0dXJucyB7QHNlZSBIYXNofSBoYXNoIGZ1bmN0aW9uIGlmIGltcGxlbWVudGVkLCBvdGhlcndpc2UgdGhyb3dzIGV4Y2VwdGlvblxuICAgKi9cbiAgZ2V0SGFzaEZ1bmN0aW9uKCk6IEhhc2gge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdnZXRIYXNoRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gIH1cbn1cbiJdfQ==
550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vYmFzZUNvaW4vYmFzZUNvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwrQ0FBaUM7QUFFakMsOERBQWdEO0FBQ2hELG1EQUE2QztBQUM3QywrQ0FBeUM7QUFDekMsaURBQStFO0FBRy9FLDRDQUEyQztBQUMzQyxtREFBd0Q7QUFFeEQsOENBQTRDO0FBQzVDLDBDQUEyRTtBQUMzRSxzQ0FBb0M7QUFDcEMsd0RBQXNEO0FBQ3RELHNDQUFxRDtBQUNyRCx3Q0FBc0M7QUE0Q3RDLE1BQXNCLFFBQVE7SUFZNUIsWUFBc0IsS0FBZ0I7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksb0JBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksa0NBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksd0JBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FB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LEVBQUUsTUFBNEM7UUFDakcsT0FBTztJQUNULENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQXNCO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLFlBQW9CLENBQUM7UUFFekIsSUFBSSxDQUFDO1lBQ0gsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOztBQTVvQkgsNEJBc3BCQztBQTdvQjJCLG1DQUEwQixHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZlYXR1cmUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuaW1wb3J0IHsgSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMgfSBmcm9tICcuLi9yZWNvdmVyeSc7XG5pbXBvcnQgeyBzaWduTWVzc2FnZSB9IGZyb20gJy4uL2JpcDMydXRpbCc7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWInO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEVudGVycHJpc2VzIH0gZnJvbSAnLi4vZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBBcGlLZXlTaGFyZSwgS2V5Y2hhaW4sIEtleWNoYWlucywgS2V5SW5kaWNlcyB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IE1hcmtldHMgfSBmcm9tICcuLi9tYXJrZXQnO1xuaW1wb3J0IHsgUGVuZGluZ0FwcHJvdmFscyB9IGZyb20gJy4uL3BlbmRpbmdBcHByb3ZhbCc7XG5pbXBvcnQgeyBJV2FsbGV0LCBXYWxsZXQsIFdhbGxldHMgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgV2ViaG9va3MgfSBmcm9tICcuLi93ZWJob29rJztcbmltcG9ydCB7XG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCxcbiAgQnVpbGROZnRUcmFuc2ZlckRhdGFPcHRpb25zLFxuICBDb2xkVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgRGVyaXZlS2V5V2l0aFNlZWRPcHRpb25zLFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgRmVlRXN0aW1hdGVPcHRpb25zLFxuICBJQmFzZUNvaW4sXG4gIElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBLZXljaGFpbnNUcmlwbGV0LFxuICBLZXlQYWlyLFxuICBNUENBbGdvcml0aG0sXG4gIE11bHRpc2lnVHlwZSxcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQcmVjcmVhdGVCaXRHb09wdGlvbnMsXG4gIFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFJlY292ZXJUb2tlblRyYW5zYWN0aW9uLFxuICBSZWNvdmVyV2FsbGV0VG9rZW5PcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVG9rZW5FbmFibGVtZW50Q29uZmlnLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBBdWRpdEtleVBhcmFtcyxcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIFRzc1ZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBEZXJpdmVBZGRyZXNzT3B0aW9ucyxcbiAgRGVyaXZlQWRkcmVzc1Jlc3VsdCxcbn0gZnJvbSAnLi9pQmFzZUNvaW4nO1xuaW1wb3J0IHsgSUluc2NyaXB0aW9uQnVpbGRlciB9IGZyb20gJy4uL2luc2NyaXB0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBNUENTd2VlcFJlY292ZXJ5T3B0aW9ucyxcbiAgTVBDVHhzLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgVG9rZW5UcmFuc2ZlclJlY2lwaWVudFBhcmFtcyxcbiAgVHJpcGxlLFxufSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29pbiBpbXBsZW1lbnRzIElCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3VybDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2VudGVycHJpc2VzOiBFbnRlcnByaXNlcztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF93YWxsZXRzOiBXYWxsZXRzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2tleWNoYWluczogS2V5Y2hhaW5zO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3dlYmhvb2tzOiBXZWJob29rcztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wZW5kaW5nQXBwcm92YWxzOiBQZW5kaW5nQXBwcm92YWxzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21hcmtldHM6IE1hcmtldHM7XG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgX2NvaW5Ub2tlblBhdHRlcm5TZXBhcmF0b3IgPSAnOic7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5fdXJsID0gdGhpcy5iaXRnby51cmwoJy8nLCAyKTtcbiAgICB0aGlzLl93YWxsZXRzID0gbmV3IFdhbGxldHModGhpcy5iaXRnbywgdGhpcyk7XG4gICAgdGhpcy5fa2V5Y2hhaW5zID0gbmV3IEtleWNoYWlucyh0aGlzLmJpdGdvLCB0aGlzKTtcbiAgICB0aGlzLl93ZWJob29rcyA9IG5ldyBXZWJob29rcyh0aGlzLmJpdGdvLCB0aGlzKTtcbiAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWxzID0gbmV3IFBlbmRpbmdBcHByb3ZhbHModGhpcy5iaXRnbywgdGhpcyk7XG4gICAgdGhpcy5fZW50ZXJwcmlzZXMgPSBuZXcgRW50ZXJwcmlzZXModGhpcy5iaXRnbywgdGhpcyk7XG4gICAgdGhpcy5fbWFya2V0cyA9IG5ldyBNYXJrZXRzKHRoaXMuYml0Z28sIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIHVybChzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybCArIHRoaXMuZ2V0Q2hhaW4oKSArIHN1ZmZpeDtcbiAgfVxuXG4gIHB1YmxpYyB3YWxsZXRzKCk6IFdhbGxldHMge1xuICAgIHJldHVybiB0aGlzLl93YWxsZXRzO1xuICB9XG5cbiAgcHVibGljIGVudGVycHJpc2VzKCk6IEVudGVycHJpc2VzIHtcbiAgICByZXR1cm4gdGhpcy5fZW50ZXJwcmlzZXM7XG4gIH1cblxuICBwdWJsaWMga2V5Y2hhaW5zKCk6IEtleWNoYWlucyB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNoYWlucztcbiAgfVxuXG4gIHB1YmxpYyB3ZWJob29rcygpOiBXZWJob29rcyB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYmhvb2tzO1xuICB9XG5cbiAgcHVibGljIHBlbmRpbmdBcHByb3ZhbHMoKTogUGVuZGluZ0FwcHJvdmFscyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbHM7XG4gIH1cblxuICBwdWJsaWMgbWFya2V0cygpOiBNYXJrZXRzIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2V0cztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNvaW5Ub2tlblBhdHRlcm5TZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29pblRva2VuUGF0dGVyblNlcGFyYXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENoYWluKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGljcyBjb2luIG9iamVjdFxuICAgKiBAcmV0dXJucyB7UmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPn0gdGhlIHN0YXRpY3MgY29pbiBvYmplY3RcbiAgICovXG4gIGdldENvbmZpZygpOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW47XG4gIH1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2hhaW4gd2hpY2ggc3VwcG9ydHMgdGhpcyBjb2luIChlZywgJ2J0YycsICdldGgnKVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q2hhaW4oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb2luIGZhbWlseSAoZWcuIGZvciB0YnRjLCB0aGlzIHdvdWxkIGJlIGJ0YylcbiAgICovXG4gIGFic3RyYWN0IGdldEZhbWlseSgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuIHJlYWRhYmxlIGZ1bGwgbmFtZSBmb3IgdGhlIGNvaW5cbiAgICovXG4gIGFic3RyYWN0IGdldEZ1bGxOYW1lKCk6IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBva2F5IHRvIHNlbmQgMCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBgc2VuZE1hbnkoKWAgdG8gcGVyZm9ybSB3YWxsZXQgc3dlZXAuXG4gICAqIEZJWE1FKEJHLTM5NzM4KTogYWRkIGNvaW4uc3dlZXBXYWxsZXQoKSBpbnN0ZWFkXG4gICAqL1xuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyBkYXRhIGFsb25nIHdpdGggdHJhbnNhY3Rpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCB0eCBkYXRhIChFVEgpLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHRyYW5zYWN0aW9uRGF0YUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBjb2luIHN1cHBvcnRzIGFjY291bnQgY29uc29saWRhdGlvbnNcbiAgICogZnJvbSBpdHMgcmVjZWl2ZSBhZGRyZXNzZXMgdG8gdGhlIHJvb3QgYWRkcmVzcy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgb2theSB0byBjb25zb2xpZGF0ZSBvdmVyIHRoaXMgY29pbjsgZmFsc2UsIG90aGVyd2lzZVxuICAgKi9cbiAgYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN1cHBvcnRzUmVzb3VyY2VEZWxlZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbmZpZyBmb3IgaG93IHRva2VuIGVuYWJsZW1lbnRzIHdvcmsgZm9yIHRoaXMgY29pblxuICAgKiBAcmV0dXJuc1xuICAgKiAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogVHJ1ZSBpZiB0b2tlbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvaW5cbiAgICogICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IFRydWUgaWYgbXVsdGlwbGUgdG9rZW5zIGNhbiBiZSBlbmFibGVkIGluIG9uZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiBmYWxzZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIGNvaW4gc3VwcG9ydHMgVFNTIHdhbGxldHMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFRTUyBXYWxsZXRzIGNhbiBiZSBjcmVhdGVkIGZvciB0aGlzIGNvaW5cbiAgICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgQ29pbkZlYXR1cmUuTVVMVElTSUcgZnJvbSBzdGF0aWNzIGluc3RlYWRcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgY29pbiBzdXBwb3J0cyBNdWx0aVNpZyB3YWxsZXRzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIE11bHRpU2lnIHdhbGxldHMgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgY29pblxuICAgKi9cbiAgc3VwcG9ydHNNdWx0aXNpZygpOiBib29sZWFuIHtcbiAgICAvLyBVc2UgdGhlIHN0YXRpYyBjb2luIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2sgaWYgTVVMVElTSUcgaXMgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1VTFRJU0lHKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB3aWxsIHJldHVybiB0aGUgZGVmYXVsdCBtdWx0aXNpZyB0eXBlIHZhbHVlIGZvciBjb2luXG4gICAqIEByZXR1cm4ge011bHRpc2lnVHlwZX0gcmV0dXJuICd0c3MnIGlmIGNvaW4gc3VwcG9ydHMgb25seSBUU1Mgbm90IE11bHRpU2lnXG4gICAqIGVsc2UgaWYgY29pbiBzdXBwb3J0cyBNdWx0aVNpZyByZXR1cm4gJ29uY2hhaW4nXG4gICAqIGlmIGNvaW4gc3VwcG9ydHMgYm90aCByZXR1cm4gJ29uY2hhaW4nXG4gICAqIGVsc2UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIGNvaW4gc3VwcG9ydHMgZGVyaXZpbmcgYSBrZXkgd2l0aCBhIHNlZWQgKGtleUlEKVxuICAgKiB0byB0aGUgdXNlci9iYWNrdXAga2V5cy5cbiAgICovXG4gIHN1cHBvcnRzRGVyaXZlS2V5V2l0aFNlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgYmxvY2tjaGFpbiBydW5zIG9uIEVWTSBhcmNoaXRlY3R1cmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBibG9ja2NoYWluIHJ1bnMgb24gRVZNIGFyY2hpdGVjdHVyZS5cbiAgICovXG4gIGlzRVZNKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhpcyBjb2luIHN1cHBvcnRzIEJMUy1ES0cgd2FsbGV0cy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgQkxTLURLRyBXYWxsZXRzIGNhbiBiZSBjcmVhdGVkIGZvciB0aGlzIGNvaW5cbiAgICovXG4gIHN1cHBvcnRzQmxzRGtnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGEgYnVpbHQgdHJhbnNhY3Rpb24gZm9yIGNvbGQgKG9mZmxpbmUpIHNpZ25pbmcgYnkgYXR0YWNoaW5nIHRoZVxuICAgKiB4cHVicyAvIHhwdWIgZGVyaXZhdGlvbiBwYXRocyB0aGUgb2ZmbGluZSBzaWduZXIgKE9WQykgbmVlZHMgaW4gb3JkZXIgdG9cbiAgICogc2lnbiBpdC4gQ29pbnMgd2hvc2UgdHggZm9ybWF0IGFscmVhZHkgY2FycmllcyB0aGlzIGluZm9ybWF0aW9uIGlubGluZVxuICAgKiAoZS5nLiBQU0JUKSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBza2lwIGF0dGFjaGluZyBpdC5cbiAgICogQHBhcmFtIHR4UHJlYnVpbGQgVGhlIGJ1aWx0IHRyYW5zYWN0aW9uIEpTT04gcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtXG4gICAqIEBwYXJhbSBrZXljaGFpbnMgVGhlIHVzZXIvYmFja3VwL2JpdGdvIGtleWNoYWlucyBmb3IgdGhpcyB3YWxsZXQsIGluIHRoYXQgb3JkZXJcbiAgICogQHJldHVybnMgVGhlIHR4UHJlYnVpbGQgSlNPTiwgYXVnbWVudGVkIHdpdGggYHB1YnNgIGFuZCBgeHB1YnNXaXRoRGVyaXZhdGlvblBhdGhgXG4gICAqL1xuICBwcmVwYXJlQ29sZFRyYW5zYWN0aW9uPFQgZXh0ZW5kcyBUcmFuc2FjdGlvblByZWJ1aWxkPihcbiAgICB0eFByZWJ1aWxkOiBULFxuICAgIGtleWNoYWluczogVHJpcGxlPEtleWNoYWluPlxuICApOiBUICYgQ29sZFRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICAgIGNvbnN0IFt1c2VyLCBiYWNrdXAsIGJpdGdvXSA9IGtleWNoYWlucztcbiAgICBjb25zdCBzb3VyY2VzOiBBcnJheTxbQXBpS2V5U2hhcmVbJ2Zyb20nXSwgS2V5Y2hhaW5dPiA9IFtcbiAgICAgIFsndXNlcicsIHVzZXJdLFxuICAgICAgWydiYWNrdXAnLCBiYWNrdXBdLFxuICAgICAgWydiaXRnbycsIGJpdGdvXSxcbiAgICBdO1xuICAgIGNvbnN0IHB1YnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgeHB1YnNXaXRoRGVyaXZhdGlvblBhdGg6IE5vbk51bGxhYmxlPENvbGRUcmFuc2FjdGlvblByZWJ1aWxkWyd4cHVic1dpdGhEZXJpdmF0aW9uUGF0aCddPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW3NvdXJjZSwga2V5Y2hhaW5dIG9mIHNvdXJjZXMpIHtcbiAgICAgIC8vIE1QQyBrZXljaGFpbnMgb25seSBoYXZlIGEgY29tbW9uS2V5Y2hhaW4sIG5vdCBhIHB1YiAtIHNraXAgdGhvc2UuXG4gICAgICBpZiAoa2V5Y2hhaW4ucHViKSB7XG4gICAgICAgIHB1YnMucHVzaChrZXljaGFpbi5wdWIpO1xuICAgICAgICB4cHVic1dpdGhEZXJpdmF0aW9uUGF0aFtzb3VyY2VdID0ge1xuICAgICAgICAgIHhwdWI6IGtleWNoYWluLnB1YixcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBrZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udHhQcmVidWlsZCxcbiAgICAgIHB1YnMsXG4gICAgICB4cHVic1dpdGhEZXJpdmF0aW9uUGF0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGFic3RyYWN0IGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgY3VycmVuY3kgYW1vdW50IHJlcHJlc2VudGVkIGluIGJhc2UgdW5pdHMgKHNhdG9zaGksIHdlaSwgYXRvbXMsIGRyb3BzLCBzdHJvb3BzKVxuICAgKiB0byBiaWcgdW5pdHMgKGJ0YywgZXRoLCB4cnAsIHhsbSlcbiAgICovXG4gIGJhc2VVbml0c1RvQmlnVW5pdHMoYmFzZVVuaXRzOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIEJpZ051bWJlci5zZXQoeyBERUNJTUFMX1BMQUNFUzogMjQgfSk7XG4gICAgY29uc3QgZGl2aWRlbmQgPSB0aGlzLmdldEJhc2VGYWN0b3IoKTtcbiAgICBjb25zdCBiaWdOdW1iZXIgPSBuZXcgQmlnTnVtYmVyKGJhc2VVbml0cykuZGl2aWRlZEJ5KGRpdmlkZW5kKTtcbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBzbyBjb21tYXMgYXJlbid0IGFkZGVkIHRvIGxhcmdlIGNvaW4gYW1vdW50c1xuICAgIHJldHVybiBiaWdOdW1iZXIudG9Gb3JtYXQobnVsbCBhcyBhbnksIG51bGwgYXMgYW55LCB7IGdyb3VwU2VwYXJhdG9yOiAnJywgZGVjaW1hbFNlcGFyYXRvcjogJy4nIH0pO1xuICB9XG5cbiAgY2hlY2tSZWNpcGllbnQocmVjaXBpZW50OiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBzdHJpbmcgfCBudW1iZXIgfSk6IHZvaWQge1xuICAgIGlmIChyZWNpcGllbnQuYW1vdW50ICE9PSAnbWF4Jykge1xuICAgICAgY29uc3QgYW1vdW50ID0gbmV3IEJpZ051bWJlcihyZWNpcGllbnQuYW1vdW50KTtcbiAgICAgIGlmIChhbW91bnQuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gcG9zaXRpdmUgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsdWVsZXNzVHJhbnNmZXJBbGxvd2VkKCkgJiYgYW1vdW50LmlzWmVybygpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gcG9zaXRpdmUgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBjdXJyZW5jeSBhbW91bnQgcmVwcmVzZW50ZWQgaW4gYmlnIHVuaXRzIChidGMsIGV0aCwgeHJwLCB4bG0pXG4gICAqIHRvIGJhc2UgdW5pdHMgKHNhdG9zaGksIHdlaSwgYXRvbXMsIGRyb3BzLCBzdHJvb3BzKVxuICAgKiBAcGFyYW0gYmlnVW5pdHNcbiAgICovXG4gIGJpZ1VuaXRzVG9CYXNlVW5pdHMoYmlnVW5pdHM6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IHRoaXMuZ2V0QmFzZUZhY3RvcigpO1xuICAgIGNvbnN0IGJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIoYmlnVW5pdHMpLnRpbWVzKG11bHRpcGxpZXIpO1xuICAgIGlmICghYmlnTnVtYmVyLmlzSW50ZWdlcigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vbi1pbnRlZ2VyIG91dHB1dCByZXN1bHRlZCBmcm9tIG11bHRpcGx5aW5nICR7YmlnVW5pdHN9IGJ5ICR7bXVsdGlwbGllcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpZ051bWJlci50b0ZpeGVkKDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXByb2Nlc3MgdGhlIGJ1aWxkIHBhcmFtZXRlcnMgYmVmb3JlIHNlbmRpbmcgdG8gdGhlIEFQSVxuICAgKiBAcGFyYW0gYnVpbGRQYXJhbXNcbiAgICovXG4gIHByZXByb2Nlc3NCdWlsZFBhcmFtcyhidWlsZFBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBidWlsZFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IHsgcHJ2OiBzdHJpbmcgfSwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4gc2lnbk1lc3NhZ2UobWVzc2FnZSwgYmlwMzIuZnJvbUJhc2U1OChrZXkucHJ2KSwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgc2lnbmF0dXJlcyBmb3IgdGhlIGJhY2t1cCBhbmQgYml0Z28ga2V5cyB1c2luZyB0aGUgdXNlciBrZXkuXG4gICAqIFdlIGNhbiB2ZXJpZnkgdGhlIHNpZ25hdHVyZXMgd2hlbiBmZXRjaGluZyB0aGUga2V5cyBmcm9tIHdhbGxldC1wbGF0Zm9ybSBsYXRlci5cbiAgICogQ3VycmVudGx5IG9ubHkgYEFic3RyYWN0VXR4b0NvaW5gIGltcGxlbWVudHMgYW5kIHVzZXMgdGhlIGNvbXBsZW1lbnRhcnkgYHZlcmlmeUtleVNpZ25hdHVyZWAgbWV0aG9kLlxuICAgKiBAcGFyYW0gcHJ2IC0gdGhlIHVzZXIgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIGJhY2t1cEtleWNoYWluIC0gY29udGFpbnMgdGhlIGJhY2t1cCBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gY29udGFpbnMgdGhlIGJpdGdvIHB1YmxpYyBrZXlcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVLZXlTaWduYXR1cmVzKFxuICAgIHBydjogc3RyaW5nLFxuICAgIGJhY2t1cEtleWNoYWluOiB7IHB1Yjogc3RyaW5nIH0sXG4gICAgYml0Z29LZXljaGFpbjogeyBwdWI6IHN0cmluZyB9XG4gICk6IFByb21pc2U8e1xuICAgIGJhY2t1cDogc3RyaW5nO1xuICAgIGJpdGdvOiBzdHJpbmc7XG4gIH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja3VwOiAoYXdhaXQgdGhpcy5zaWduTWVzc2FnZSh7IHBydiB9LCBiYWNrdXBLZXljaGFpbi5wdWIpKS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnbzogKGF3YWl0IHRoaXMuc2lnbk1lc3NhZ2UoeyBwcnYgfSwgYml0Z29LZXljaGFpbi5wdWIpKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgdHJhbnNhY3Rpb24gaW50byB1c2VmdWwgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gY29pbi1zcGVjaWZpY1xuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPGFueSwgc3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICovXG4gIGFic3RyYWN0IHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHtAc2VlIGlzV2FsbGV0QWRkcmVzc30gaW5zdGVhZFxuICAgKi9cbiAgdmVyaWZ5QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuIHRydWUgaWZmIGFkZHJlc3MgaXMgYSB3YWxsZXQgYWRkcmVzcy4gTXVzdCByZXR1cm4gZmFsc2UgaWYgYWRkcmVzcyBpcyBvdXRzaWRlIHdhbGxldC5cbiAgICovXG4gIGFic3RyYWN0IGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zIHwgVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBMb2NhbGx5IGRlcml2ZSBhbmQgcmV0dXJuIGEgd2FsbGV0IHJlY2VpdmUgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIGRlcml2YXRpb24gcGF0aCxcbiAgICogdXNpbmcgcHVibGljIGtleSBtYXRlcmlhbCBvbmx5IChubyBwcml2YXRlIGtleXMsIG5vIG5ldHdvcmsgYWNjZXNzKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiB7QGxpbmsgaXNXYWxsZXRBZGRyZXNzfTogcmF0aGVyIHRoYW4gY2hlY2tpbmcgYSBjYW5kaWRhdGVcbiAgICogYWRkcmVzcywgaXQgKnByb2R1Y2VzKiB0aGUgYWRkcmVzcyBmcm9tIHRoZSB3YWxsZXQncyBrZXljaGFpbnMgYW5kIGEgY2hhaW4vaW5kZXguXG4gICAqXG4gICAqIENvaW5zIG9wdCBpbiBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kOyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSB7RGVyaXZlQWRkcmVzc09wdGlvbnN9IHBhcmFtcyAtIHBhcmFtZXRlcnMgZm9yIGFkZHJlc3MgZGVyaXZhdGlvbiAoa2V5Y2hhaW5zLCBjaGFpbiwgaW5kZXgsIOKApilcbiAgICogQHJldHVybnMge1Byb21pc2U8RGVyaXZlQWRkcmVzc1Jlc3VsdD59IHRoZSBkZXJpdmVkIGFkZHJlc3MgcGx1cyB0aGUgcGF0aCBhbmQgY29pbi1zcGVjaWZpYyBkYXRhXG4gICAqL1xuICBkZXJpdmVBZGRyZXNzKHBhcmFtczogRGVyaXZlQWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPERlcml2ZUFkZHJlc3NSZXN1bHQ+IHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignZGVyaXZlQWRkcmVzcyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IGFkZHJlc3MgaW50byBkZXNpcmVkIGFkZHJlc3MgZm9ybWF0LlxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcGFyYW0gZm9ybWF0XG4gICAqL1xuICBjYW5vbmljYWxBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZm9ybWF0PzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvaW4gc3VwcG9ydHMgYmxvY2tUYXJnZXQgZm9yIHRyYW5zYWN0aW9ucyB0byBiZSBpbmNsdWRlZCBpblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN1cHBvcnRzQmxvY2tUYXJnZXQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgYSBjb2luIHN1cHBvcnRzIGxpZ2h0bmluZyB0cmFuc2FjdGlvbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c0xpZ2h0bmluZygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvaW4gc3VwcG9ydHMgbWVzc2FnZSBzaWduaW5nXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3VwcG9ydHNNZXNzYWdlU2lnbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvaW4gcmVxdWlyZXMgd2FsbGV0IGluaXRpYWxpemF0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcmVxdWlyZXNXYWxsZXRJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgY29pbiBzdXBwb3J0cyBzaWduaW5nIG9mIFR5cGVkIGRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c1NpZ25pbmdUeXBlZERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgdG8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgd2FsbGV0IGdlbmVyYXRpb25cbiAgICogQHBhcmFtIHdhbGxldFBhcmFtc1xuICAgKiBAcGFyYW0ga2V5Y2hhaW5zXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQod2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLCBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXQpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2FsbGV0UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXh0cmEgcGFyYW1ldGVycyBmb3IgcHJlYnVpbGRpbmcgYSB0eC4gQWRkIHRoaW5ncyBsaWtlIGhvcCB0cmFuc2FjdGlvbiBwYXJhbXNcbiAgICovXG4gIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSBwcmVidWlsZCBhZnRlciByZWNlaXZpbmcgaXQgZnJvbSB0aGUgc2VydmVyLiBBZGQgdGhpbmdzIGxpa2UgbmxvY2t0aW1lXG4gICAqL1xuICBwb3N0UHJvY2Vzc1ByZWJ1aWxkKHByZWJ1aWxkUmVzcG9uc2U6IFRyYW5zYWN0aW9uUHJlYnVpbGQpOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByZWJ1aWxkUmVzcG9uc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvaW4tc3BlY2lmaWMgdGhpbmdzIGRvbmUgYmVmb3JlIHNpZ25pbmcgYSB0cmFuc2FjdGlvbiwgaS5lLiB2ZXJpZmljYXRpb25cbiAgICovXG4gIHByZXNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnM+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHdhbGxldCBvYmplY3QgZnJvbSBhIHdhbGxldCBkYXRhIG9iamVjdFxuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqL1xuICBuZXdXYWxsZXRPYmplY3Qod2FsbGV0UGFyYW1zOiBhbnkpOiBJV2FsbGV0IHtcbiAgICByZXR1cm4gbmV3IFdhbGxldCh0aGlzLmJpdGdvLCB0aGlzLCB3YWxsZXRQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGZlZSBlc3RpbWF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1zIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHBhcmFtcy5udW1CbG9ja3MgVGhlIG51bWJlciBvZiBibG9ja3MgdG8gdGFyZ2V0IGZvciBjb25mb3JtYXRpb24gKE9ubHkgd29ya3MgZm9yIGJ0YylcbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIGluZm8gcmV0dXJuZWQgZnJvbSB0aGUgbWVyY2hhbnQgc2VydmVyXG4gICAqL1xuICBhc3luYyBmZWVFc3RpbWF0ZShwYXJhbXM6IEZlZUVzdGltYXRlT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLm51bUJsb2Nrcykge1xuICAgICAgcXVlcnkubnVtQmxvY2tzID0gcGFyYW1zLm51bUJsb2NrcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy90eC9mZWUnKSkucXVlcnkocXVlcnkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xkIHdhbGxldCB0b29sIHVzZXMgdGhpcyBmdW5jdGlvbiB0byBkZXJpdmUgYW4gZXh0ZW5kZWQga2V5IHRoYXQgaXMgYmFzZWQgb24gdGhlIHBhc3NlZCBrZXkgYW5kIHNlZWRcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7e2tleTogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nfX1cbiAgICovXG4gIHN0YXRpYyBkZXJpdmVLZXlXaXRoU2VlZEJpcDMyKFxuICAgIGtleTogdXR4b2xpYi5CSVAzMkludGVyZmFjZSxcbiAgICBzZWVkOiBzdHJpbmdcbiAgKToge1xuICAgIGtleTogdXR4b2xpYi5CSVAzMkludGVyZmFjZTtcbiAgICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICB9IHtcbiAgICBmdW5jdGlvbiBzaGEyNTYoaW5wdXQpIHtcbiAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGlucHV0KS5kaWdlc3QoKTtcbiAgICB9XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGhJbnB1dCA9IHNoYTI1NihzaGEyNTYoYCR7c2VlZH1gKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoUGFydHMgPSBbXG4gICAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDAsIDcpLCAxNiksXG4gICAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDcsIDE0KSwgMTYpLFxuICAgIF07XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS85OTk5OTkvJyArIGRlcml2YXRpb25QYXRoUGFydHMuam9pbignLycpO1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IGtleS5kZXJpdmVQYXRoKGRlcml2YXRpb25QYXRoKSxcbiAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgIH07XG4gIH1cblxuICAvKioge0BzZWUgZGVyaXZlS2V5V2l0aFNlZWRCaXAzMn0gKi9cbiAgZGVyaXZlS2V5V2l0aFNlZWQocGFyYW1zOiBEZXJpdmVLZXlXaXRoU2VlZE9wdGlvbnMpOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgfSB7XG4gICAgY29uc3QgeyBrZXksIGRlcml2YXRpb25QYXRoIH0gPSBCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZEJpcDMyKGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleSksIHBhcmFtcy5zZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBrZXkudG9CYXNlNTgoKSxcbiAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQga2V5IHdlIHdpbGwgbmVlZCBmb3Igc2lnbmluZyAtIHJpZ2h0IG5vdyB3ZSBqdXN0IG5lZWQgdGhlXG4gICAqIHVzZXIga2V5LlxuICAgKi9cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVJdO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYmVmb3JlIGFkZGluZyBhIGJpdGdvIGtleS4gQmFzZSBjb250cm9sbGVyXG4gICAqIGlzIGEgbm8tb3AsIGJ1dCBjb2luLXNwZWNpZmljIGNvbnRyb2xsZXIgbWF5IGRvIHNvbWV0aGluZ1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwcmVDcmVhdGVCaXRHbyhwYXJhbXM6IFByZWNyZWF0ZUJpdEdvT3B0aW9ucyk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBnZXRCaXAzMktleXMoKSBpbiBjb25qdW5jdGlvbiB3aXRoIGlzVmFsaWRBZGRyZXNzIGluc3RlYWRcbiAgICovXG4gIGluaXRpYXRlUmVjb3ZlcnkocGFyYW1zOiBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgbWV0aG9kJyk7XG4gIH1cblxuICAvKipcbiAgICogT25seSB1c2VkIGluIFBlbmRpbmdBcHByb3ZhbCBmb3IgY29tcGFyaW5nIFBBWUdvIGZlZXMgcHVycG9zZVxuICAgKiBAcGFyYW0gcGFyYW1zIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICovXG4gIGFic3RyYWN0IHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIGtleSBwYWlyIG9uIHRoZSBjdXJ2ZSB1c2VkIGJ5IHRoZSBjb2luXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gc2VlZCB0byB1c2UgZm9yIGtleSBwYWlyIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMge0tleVBhaXJ9IHRoZSBnZW5lcmF0ZWQga2V5IHBhaXJcbiAgICovXG4gIGFic3RyYWN0IGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpcjtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSByb290IGtleSBwYWlyIG9uIHRoZSBjdXJ2ZSB1c2VkIGJ5IHRoZSBjb2luXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gc2VlZCB0byB1c2UgZm9yIGtleSBwYWlyIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMge0tleVBhaXJ9IHRoZSBnZW5lcmF0ZWQga2V5IHBhaXJcbiAgICovXG4gIGdlbmVyYXRlUm9vdEtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdnZW5lcmF0ZVJvb3RLZXlQYWlyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgYWJzdHJhY3QgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldHVybiB3ZXRoZXIgdGhlIGdpdmVuIG0gb2YgbiB3YWxsZXQgc2lnbmVycy8ga2V5IGFtb3VudHMgYXJlIHZhbGlkIGZvciB0aGUgY29pblxuICAgKi9cbiAgaXNWYWxpZE1vZk5TZXR1cCh7IG0sIG4gfTogeyBtPzogbnVtYmVyOyBuPzogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbSA9PT0gMiAmJiBuID09PSAzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGBhZGRyZXNzYCBpcyBhIHBsYXVzaWJseSB2YWxpZCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gY29pbi5cbiAgICpcbiAgICogRG9lcyBub3QgdmVyaWZ5IHRoYXQgdGhlIGFkZHJlc3MgYmVsb25ncyB0byBhIHdhbGxldC4gRm9yIHRoYXQsXG4gICAqIHVzZSBbW3ZlcmlmeUFkZHJlc3NdXVxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgYWJzdHJhY3QgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2lnbiBhIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhYnN0cmFjdCBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc2lnbmVkIGluIEJ1ZmZlciBmb3JtYXQuXG4gICAqIE9ubHkgbmVlZGVkIGZvciBjb2lucyB0aGF0IHN1cHBvcnQgYWRkaW5nIHNpZ25hdHVyZXMgZGlyZWN0bHkgKGUuZy4gVFNTKS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcmlhbGl6ZWRUeCAtIHRoZSB1bnNpZ25lZCB0cmFuc2FjdGlvbiBpbiBicm9hZGNhc3QgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59IC0gdGhlIHBvcnRpb24gb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc2lnbmVkXG4gICAqL1xuICBhc3luYyBnZXRTaWduYWJsZVBheWxvYWQoc2VyaWFsaXplZFR4OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzZXJpYWxpemVkVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIE1QQyBhbGdvcml0aG0gKGVjZHNhIG9yIGVkZHNhKSB1c2VkIGZvciBjb2lucyB0aGF0IHN1cHBvcnQgVFNTXG4gICAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIE1QQyBhbGdvcml0aG0gaXMgZGVmaW5lZCBmb3IgdGhpcyBjb2luJyk7XG4gIH1cblxuICBhc3luYyByZWNvdmVyVG9rZW4ocGFyYW1zOiBSZWNvdmVyV2FsbGV0VG9rZW5PcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyVG9rZW5UcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdyZWNvdmVyVG9rZW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gIH1cblxuICBnZXRJbnNjcmlwdGlvbkJ1aWxkZXIod2FsbGV0OiBXYWxsZXQpOiBJSW5zY3JpcHRpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignSW5zY3JpcHRpb24gQnVpbGRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBnZXQgY29pbiBzcGVjaWZpYyBoYXNoIGZ1bmN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdHJhbnNhY3Rpb24gZGlnZXN0cy5cbiAgICogQHJldHVybnMge0BzZWUgSGFzaH0gaGFzaCBmdW5jdGlvbiBpZiBpbXBsZW1lbnRlZCwgb3RoZXJ3aXNlIHRocm93cyBleGNlcHRpb25cbiAgICovXG4gIGdldEhhc2hGdW5jdGlvbigpOiBIYXNoIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignZ2V0SGFzaEZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICB9XG5cbiAgYnVpbGROZnRUcmFuc2ZlckRhdGEocGFyYW1zOiBCdWlsZE5mdFRyYW5zZmVyRGF0YU9wdGlvbnMpOiBzdHJpbmcgfCBUb2tlblRyYW5zZmVyUmVjaXBpZW50UGFyYW1zIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignYnVpbGROZnRUcmFuc2ZlckRhdGEgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gIH1cblxuICAvKipcbiAgICogQnJvYWRjYXN0IGEgdHJhbnNhY3Rpb24gdG8gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcyBvcHRpb25zIGZvciBicm9hZGNhc3RpbmdcbiAgICogQHJldHVybnMge1Byb21pc2U8QmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0Pn0gcmVzdWx0IG9mIGJyb2FkY2FzdFxuICAgKiBAdGhyb3dzIHtOb3RJbXBsZW1lbnRlZEVycm9yfSBpZiBub3QgaW1wbGVtZW50ZWRcbiAgICovXG4gIGJyb2FkY2FzdFRyYW5zYWN0aW9uKHBhcmFtczogQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2Jyb2FkY2FzdFRyYW5zYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZnVuZHMgc3dlZXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24ocykgd2l0aG91dCBCaXRHb1xuICAgKlxuICAgKiBAcGFyYW0ge01QQ1N3ZWVwUmVjb3ZlcnlPcHRpb25zfSBwYXJhbXMgcGFyYW1ldGVycyBuZWVkZWQgdG8gY29tYmluZSB0aGUgc2lnbmF0dXJlc1xuICAgKiBhbmQgdHJhbnNhY3Rpb25zIHRvIGNyZWF0ZSBicm9hZGNhc3RhYmxlIHRyYW5zYWN0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7TVBDVHhzfSBhcnJheSBvZiB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBoZXggc3RyaW5ncyBhbmQgaW5kaWNlc1xuICAgKiBvZiB0aGUgYWRkcmVzc2VzIGJlaW5nIHN3ZXB0XG4gICAqL1xuICBhc3luYyBjcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbihwYXJhbXM6IE1QQ1N3ZWVwUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxNUENUeHM+IHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjb2luc3BlY2lmaWMgZmllbGRzIGluIGludGVudCBmcm9tIGlucHV0IHBhcmFtcy5cbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gY29pbi1zcGVjaWZpYyBjbGFzc2VzXG4gICAqIHRvIGNvbmZpZ3VyZSB0aGVzZSBmaWVsZHMgaW4gdGhlIGludGVudFxuICAgKiBAcGFyYW0gaW50ZW50IC0gaW50ZW50IGluIHdoaWNoIGNvaW5zcGVjaWZpYyBmaWVsZHMgYXJlIHRvIGJlIHNldFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBzZXRDb2luU3BlY2lmaWNGaWVsZHNJbkludGVudChpbnRlbnQ6IFBvcHVsYXRlZEludGVudCwgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXN5bmMgYXNzZXJ0SXNWYWxpZEtleShwYXJhbXM6IEF1ZGl0S2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFwYXJhbXMuZW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuY3J5cHRlZFBydiBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBsZXQgZGVjcnlwdGVkS2V5OiBzdHJpbmc7XG5cbiAgICB0cnkge1xuICAgICAgZGVjcnlwdGVkS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZFBydiB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBkZWNyeXB0IHBydjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHRoaXMuYXVkaXREZWNyeXB0ZWRLZXkoeyAuLi5wYXJhbXMsIHBydjogZGVjcnlwdGVkS2V5IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1ZGl0IGlmIGEgZGVjcnlwdGVkIGtleSBpcyB2YWxpZC5cbiAgICogQHBhcmFtIHtBdWRpdERlY3J5cHRlZEtleVBhcmFtc30gcGFyYW1zIC0gcGFyYW1ldGVycyBmb3IgYXVkaXRpbmcgdGhlIGRlY3J5cHRlZCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSB0aGUgZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHVibGljS2V5IC0gdGhlIHB1YmxpYyBrZXksIG9yIGNvbW1vbiBrZXljaGFpblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLm11bHRpU2lnVHlwZSAtIHRoZSBtdWx0aS1zaWcgdHlwZSwgaWYgYXBwbGljYWJsZVxuICAgKi9cbiAgYWJzdHJhY3QgYXVkaXREZWNyeXB0ZWRLZXkocGFyYW1zOiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQ7XG59XG4iXX0=