@bitgo/account-lib 3.0.0-hotfix.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/.mocharc.js +1 -1
  2. package/CHANGELOG.md +192 -30
  3. package/README.md +5 -7
  4. package/dist/resources/README.md +0 -22
  5. package/dist/src/index.d.ts +34 -20
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +57 -40
  8. package/dist/tsconfig.tsbuildinfo +25937 -40830
  9. package/package.json +29 -77
  10. package/resources/README.md +0 -22
  11. package/dist/browser/bitgo-account-lib.js +0 -2
  12. package/dist/browser/bitgo-account-lib.js.LICENSE.txt +0 -335
  13. package/dist/resources/hbar/protobuf/BasicTypes.proto +0 -424
  14. package/dist/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  15. package/dist/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  16. package/dist/resources/hbar/protobuf/Duration.proto +0 -28
  17. package/dist/resources/hbar/protobuf/Timestamp.proto +0 -34
  18. package/dist/resources/hbar/protobuf/Transaction.proto +0 -35
  19. package/dist/resources/hbar/protobuf/TransactionBody.proto +0 -24
  20. package/dist/resources/hbar/protobuf/TransactionContents.proto +0 -33
  21. package/dist/resources/hbar/protobuf/hedera.d.ts +0 -4612
  22. package/dist/resources/hbar/protobuf/hedera.js +0 -12192
  23. package/dist/resources/trx/protobuf/Contract.proto +0 -256
  24. package/dist/resources/trx/protobuf/Discover.proto +0 -44
  25. package/dist/resources/trx/protobuf/tron.d.ts +0 -11024
  26. package/dist/resources/trx/protobuf/tron.js +0 -31510
  27. package/dist/resources/trx/protobuf/tron.proto +0 -677
  28. package/dist/src/coin/algo/assetTransferBuilder.d.ts +0 -42
  29. package/dist/src/coin/algo/assetTransferBuilder.d.ts.map +0 -1
  30. package/dist/src/coin/algo/assetTransferBuilder.js +0 -105
  31. package/dist/src/coin/algo/errors.d.ts +0 -11
  32. package/dist/src/coin/algo/errors.d.ts.map +0 -1
  33. package/dist/src/coin/algo/errors.js +0 -27
  34. package/dist/src/coin/algo/ifaces.d.ts +0 -46
  35. package/dist/src/coin/algo/ifaces.d.ts.map +0 -1
  36. package/dist/src/coin/algo/ifaces.js +0 -3
  37. package/dist/src/coin/algo/index.d.ts +0 -13
  38. package/dist/src/coin/algo/index.d.ts.map +0 -1
  39. package/dist/src/coin/algo/index.js +0 -47
  40. package/dist/src/coin/algo/keyPair.d.ts +0 -25
  41. package/dist/src/coin/algo/keyPair.d.ts.map +0 -1
  42. package/dist/src/coin/algo/keyPair.js +0 -77
  43. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts +0 -104
  44. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts.map +0 -1
  45. package/dist/src/coin/algo/keyRegistrationBuilder.js +0 -239
  46. package/dist/src/coin/algo/seedEncoding.d.ts +0 -25
  47. package/dist/src/coin/algo/seedEncoding.d.ts.map +0 -1
  48. package/dist/src/coin/algo/seedEncoding.js +0 -97
  49. package/dist/src/coin/algo/transaction.d.ts +0 -75
  50. package/dist/src/coin/algo/transaction.d.ts.map +0 -1
  51. package/dist/src/coin/algo/transaction.js +0 -251
  52. package/dist/src/coin/algo/transactionBuilder.d.ts +0 -204
  53. package/dist/src/coin/algo/transactionBuilder.d.ts.map +0 -1
  54. package/dist/src/coin/algo/transactionBuilder.js +0 -373
  55. package/dist/src/coin/algo/transactionBuilderFactory.d.ts +0 -16
  56. package/dist/src/coin/algo/transactionBuilderFactory.d.ts.map +0 -1
  57. package/dist/src/coin/algo/transactionBuilderFactory.js +0 -52
  58. package/dist/src/coin/algo/transferBuilder.d.ts +0 -40
  59. package/dist/src/coin/algo/transferBuilder.d.ts.map +0 -1
  60. package/dist/src/coin/algo/transferBuilder.js +0 -89
  61. package/dist/src/coin/algo/txnSchema.d.ts +0 -7
  62. package/dist/src/coin/algo/txnSchema.d.ts.map +0 -1
  63. package/dist/src/coin/algo/txnSchema.js +0 -68
  64. package/dist/src/coin/algo/utils.d.ts +0 -249
  65. package/dist/src/coin/algo/utils.d.ts.map +0 -1
  66. package/dist/src/coin/algo/utils.js +0 -539
  67. package/dist/src/coin/avaxc/index.d.ts +0 -8
  68. package/dist/src/coin/avaxc/index.d.ts.map +0 -1
  69. package/dist/src/coin/avaxc/index.js +0 -35
  70. package/dist/src/coin/avaxc/keyPair.d.ts +0 -26
  71. package/dist/src/coin/avaxc/keyPair.d.ts.map +0 -1
  72. package/dist/src/coin/avaxc/keyPair.js +0 -83
  73. package/dist/src/coin/avaxc/resources.d.ts +0 -12
  74. package/dist/src/coin/avaxc/resources.d.ts.map +0 -1
  75. package/dist/src/coin/avaxc/resources.js +0 -27
  76. package/dist/src/coin/avaxc/transactionBuilder.d.ts +0 -17
  77. package/dist/src/coin/avaxc/transactionBuilder.d.ts.map +0 -1
  78. package/dist/src/coin/avaxc/transactionBuilder.js +0 -45
  79. package/dist/src/coin/avaxc/transferBuilder.d.ts +0 -17
  80. package/dist/src/coin/avaxc/transferBuilder.d.ts.map +0 -1
  81. package/dist/src/coin/avaxc/transferBuilder.js +0 -25
  82. package/dist/src/coin/avaxc/utils.d.ts +0 -39
  83. package/dist/src/coin/avaxc/utils.d.ts.map +0 -1
  84. package/dist/src/coin/avaxc/utils.js +0 -70
  85. package/dist/src/coin/avaxc/walletUtil.d.ts +0 -22
  86. package/dist/src/coin/avaxc/walletUtil.d.ts.map +0 -1
  87. package/dist/src/coin/avaxc/walletUtil.js +0 -62
  88. package/dist/src/coin/baseCoin/baseKeyPair.d.ts +0 -27
  89. package/dist/src/coin/baseCoin/baseKeyPair.d.ts.map +0 -1
  90. package/dist/src/coin/baseCoin/baseKeyPair.js +0 -3
  91. package/dist/src/coin/baseCoin/baseTransaction.d.ts +0 -71
  92. package/dist/src/coin/baseCoin/baseTransaction.d.ts.map +0 -1
  93. package/dist/src/coin/baseCoin/baseTransaction.js +0 -94
  94. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts +0 -128
  95. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +0 -1
  96. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +0 -179
  97. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts +0 -30
  98. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts.map +0 -1
  99. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.js +0 -20
  100. package/dist/src/coin/baseCoin/baseUtils.d.ts +0 -45
  101. package/dist/src/coin/baseCoin/baseUtils.d.ts.map +0 -1
  102. package/dist/src/coin/baseCoin/baseUtils.js +0 -3
  103. package/dist/src/coin/baseCoin/blsKeyPair.d.ts +0 -75
  104. package/dist/src/coin/baseCoin/blsKeyPair.d.ts.map +0 -1
  105. package/dist/src/coin/baseCoin/blsKeyPair.js +0 -232
  106. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts +0 -50
  107. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts.map +0 -1
  108. package/dist/src/coin/baseCoin/ed25519KeyPair.js +0 -141
  109. package/dist/src/coin/baseCoin/enum.d.ts +0 -43
  110. package/dist/src/coin/baseCoin/enum.d.ts.map +0 -1
  111. package/dist/src/coin/baseCoin/enum.js +0 -70
  112. package/dist/src/coin/baseCoin/errors.d.ts +0 -65
  113. package/dist/src/coin/baseCoin/errors.d.ts.map +0 -1
  114. package/dist/src/coin/baseCoin/errors.js +0 -156
  115. package/dist/src/coin/baseCoin/iface.d.ts +0 -162
  116. package/dist/src/coin/baseCoin/iface.d.ts.map +0 -1
  117. package/dist/src/coin/baseCoin/iface.js +0 -38
  118. package/dist/src/coin/baseCoin/index.d.ts +0 -12
  119. package/dist/src/coin/baseCoin/index.d.ts.map +0 -1
  120. package/dist/src/coin/baseCoin/index.js +0 -41
  121. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -55
  122. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +0 -1
  123. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.js +0 -124
  124. package/dist/src/coin/celo/index.d.ts +0 -8
  125. package/dist/src/coin/celo/index.d.ts.map +0 -1
  126. package/dist/src/coin/celo/index.js +0 -35
  127. package/dist/src/coin/celo/resources.d.ts +0 -10
  128. package/dist/src/coin/celo/resources.d.ts.map +0 -1
  129. package/dist/src/coin/celo/resources.js +0 -26
  130. package/dist/src/coin/celo/stakingBuilder.d.ts +0 -91
  131. package/dist/src/coin/celo/stakingBuilder.d.ts.map +0 -1
  132. package/dist/src/coin/celo/stakingBuilder.js +0 -277
  133. package/dist/src/coin/celo/stakingCall.d.ts +0 -7
  134. package/dist/src/coin/celo/stakingCall.d.ts.map +0 -1
  135. package/dist/src/coin/celo/stakingCall.js +0 -13
  136. package/dist/src/coin/celo/stakingUtils.d.ts +0 -15
  137. package/dist/src/coin/celo/stakingUtils.d.ts.map +0 -1
  138. package/dist/src/coin/celo/stakingUtils.js +0 -98
  139. package/dist/src/coin/celo/transaction.d.ts +0 -10
  140. package/dist/src/coin/celo/transaction.d.ts.map +0 -1
  141. package/dist/src/coin/celo/transaction.js +0 -37
  142. package/dist/src/coin/celo/transactionBuilder.d.ts +0 -86
  143. package/dist/src/coin/celo/transactionBuilder.d.ts.map +0 -1
  144. package/dist/src/coin/celo/transactionBuilder.js +0 -228
  145. package/dist/src/coin/celo/transferBuilder.d.ts +0 -19
  146. package/dist/src/coin/celo/transferBuilder.d.ts.map +0 -1
  147. package/dist/src/coin/celo/transferBuilder.js +0 -27
  148. package/dist/src/coin/celo/types.d.ts +0 -52
  149. package/dist/src/coin/celo/types.d.ts.map +0 -1
  150. package/dist/src/coin/celo/types.js +0 -222
  151. package/dist/src/coin/celo/utils.d.ts +0 -18
  152. package/dist/src/coin/celo/utils.d.ts.map +0 -1
  153. package/dist/src/coin/celo/utils.js +0 -99
  154. package/dist/src/coin/cspr/constants.d.ts +0 -19
  155. package/dist/src/coin/cspr/constants.d.ts.map +0 -1
  156. package/dist/src/coin/cspr/constants.js +0 -28
  157. package/dist/src/coin/cspr/delegateBuilder.d.ts +0 -49
  158. package/dist/src/coin/cspr/delegateBuilder.d.ts.map +0 -1
  159. package/dist/src/coin/cspr/delegateBuilder.js +0 -111
  160. package/dist/src/coin/cspr/ifaces.d.ts +0 -69
  161. package/dist/src/coin/cspr/ifaces.d.ts.map +0 -1
  162. package/dist/src/coin/cspr/ifaces.js +0 -3
  163. package/dist/src/coin/cspr/index.d.ts +0 -5
  164. package/dist/src/coin/cspr/index.d.ts.map +0 -1
  165. package/dist/src/coin/cspr/index.js +0 -29
  166. package/dist/src/coin/cspr/keyPair.d.ts +0 -18
  167. package/dist/src/coin/cspr/keyPair.d.ts.map +0 -1
  168. package/dist/src/coin/cspr/keyPair.js +0 -75
  169. package/dist/src/coin/cspr/transaction.d.ts +0 -55
  170. package/dist/src/coin/cspr/transaction.d.ts.map +0 -1
  171. package/dist/src/coin/cspr/transaction.js +0 -227
  172. package/dist/src/coin/cspr/transactionBuilder.d.ts +0 -124
  173. package/dist/src/coin/cspr/transactionBuilder.d.ts.map +0 -1
  174. package/dist/src/coin/cspr/transactionBuilder.js +0 -312
  175. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts +0 -46
  176. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts.map +0 -1
  177. package/dist/src/coin/cspr/transactionBuilderFactory.js +0 -98
  178. package/dist/src/coin/cspr/transferBuilder.d.ts +0 -39
  179. package/dist/src/coin/cspr/transferBuilder.d.ts.map +0 -1
  180. package/dist/src/coin/cspr/transferBuilder.js +0 -106
  181. package/dist/src/coin/cspr/undelegateBuilder.d.ts +0 -49
  182. package/dist/src/coin/cspr/undelegateBuilder.d.ts.map +0 -1
  183. package/dist/src/coin/cspr/undelegateBuilder.js +0 -111
  184. package/dist/src/coin/cspr/utils.d.ts +0 -188
  185. package/dist/src/coin/cspr/utils.d.ts.map +0 -1
  186. package/dist/src/coin/cspr/utils.js +0 -478
  187. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts +0 -27
  188. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts.map +0 -1
  189. package/dist/src/coin/cspr/walletInitializationBuilder.js +0 -95
  190. package/dist/src/coin/dot/addressInitializationBuilder.d.ts +0 -79
  191. package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +0 -1
  192. package/dist/src/coin/dot/addressInitializationBuilder.js +0 -182
  193. package/dist/src/coin/dot/batchTransactionBuilder.d.ts +0 -47
  194. package/dist/src/coin/dot/batchTransactionBuilder.d.ts.map +0 -1
  195. package/dist/src/coin/dot/batchTransactionBuilder.js +0 -122
  196. package/dist/src/coin/dot/claimBuilder.d.ts +0 -58
  197. package/dist/src/coin/dot/claimBuilder.d.ts.map +0 -1
  198. package/dist/src/coin/dot/claimBuilder.js +0 -117
  199. package/dist/src/coin/dot/errors.d.ts +0 -8
  200. package/dist/src/coin/dot/errors.d.ts.map +0 -1
  201. package/dist/src/coin/dot/errors.js +0 -19
  202. package/dist/src/coin/dot/iface.d.ts +0 -194
  203. package/dist/src/coin/dot/iface.d.ts.map +0 -1
  204. package/dist/src/coin/dot/iface.js +0 -39
  205. package/dist/src/coin/dot/index.d.ts +0 -17
  206. package/dist/src/coin/dot/index.d.ts.map +0 -1
  207. package/dist/src/coin/dot/index.js +0 -53
  208. package/dist/src/coin/dot/keyPair.d.ts +0 -31
  209. package/dist/src/coin/dot/keyPair.d.ts.map +0 -1
  210. package/dist/src/coin/dot/keyPair.js +0 -74
  211. package/dist/src/coin/dot/singletonRegistry.d.ts +0 -7
  212. package/dist/src/coin/dot/singletonRegistry.d.ts.map +0 -1
  213. package/dist/src/coin/dot/singletonRegistry.js +0 -20
  214. package/dist/src/coin/dot/stakingBuilder.d.ts +0 -58
  215. package/dist/src/coin/dot/stakingBuilder.d.ts.map +0 -1
  216. package/dist/src/coin/dot/stakingBuilder.js +0 -135
  217. package/dist/src/coin/dot/transaction.d.ts +0 -65
  218. package/dist/src/coin/dot/transaction.d.ts.map +0 -1
  219. package/dist/src/coin/dot/transaction.js +0 -396
  220. package/dist/src/coin/dot/transactionBuilder.d.ts +0 -131
  221. package/dist/src/coin/dot/transactionBuilder.d.ts.map +0 -1
  222. package/dist/src/coin/dot/transactionBuilder.js +0 -332
  223. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +0 -26
  224. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +0 -1
  225. package/dist/src/coin/dot/transactionBuilderFactory.js +0 -93
  226. package/dist/src/coin/dot/transferBuilder.d.ts +0 -71
  227. package/dist/src/coin/dot/transferBuilder.d.ts.map +0 -1
  228. package/dist/src/coin/dot/transferBuilder.js +0 -171
  229. package/dist/src/coin/dot/txnSchema.d.ts +0 -14
  230. package/dist/src/coin/dot/txnSchema.d.ts.map +0 -1
  231. package/dist/src/coin/dot/txnSchema.js +0 -104
  232. package/dist/src/coin/dot/unnominateBuilder.d.ts +0 -24
  233. package/dist/src/coin/dot/unnominateBuilder.d.ts.map +0 -1
  234. package/dist/src/coin/dot/unnominateBuilder.js +0 -50
  235. package/dist/src/coin/dot/unstakeBuilder.d.ts +0 -38
  236. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +0 -1
  237. package/dist/src/coin/dot/unstakeBuilder.js +0 -89
  238. package/dist/src/coin/dot/utils.d.ts +0 -138
  239. package/dist/src/coin/dot/utils.d.ts.map +0 -1
  240. package/dist/src/coin/dot/utils.js +0 -269
  241. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts +0 -38
  242. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts.map +0 -1
  243. package/dist/src/coin/dot/withdrawUnstakedBuilder.js +0 -90
  244. package/dist/src/coin/etc/index.d.ts +0 -8
  245. package/dist/src/coin/etc/index.d.ts.map +0 -1
  246. package/dist/src/coin/etc/index.js +0 -35
  247. package/dist/src/coin/etc/resources.d.ts +0 -10
  248. package/dist/src/coin/etc/resources.d.ts.map +0 -1
  249. package/dist/src/coin/etc/resources.js +0 -26
  250. package/dist/src/coin/etc/transactionBuilder.d.ts +0 -17
  251. package/dist/src/coin/etc/transactionBuilder.d.ts.map +0 -1
  252. package/dist/src/coin/etc/transactionBuilder.js +0 -45
  253. package/dist/src/coin/etc/transferBuilder.d.ts +0 -19
  254. package/dist/src/coin/etc/transferBuilder.d.ts.map +0 -1
  255. package/dist/src/coin/etc/transferBuilder.js +0 -27
  256. package/dist/src/coin/etc/utils.d.ts +0 -18
  257. package/dist/src/coin/etc/utils.d.ts.map +0 -1
  258. package/dist/src/coin/etc/utils.js +0 -42
  259. package/dist/src/coin/eth/contractCall.d.ts +0 -8
  260. package/dist/src/coin/eth/contractCall.d.ts.map +0 -1
  261. package/dist/src/coin/eth/contractCall.js +0 -17
  262. package/dist/src/coin/eth/iface.d.ts +0 -122
  263. package/dist/src/coin/eth/iface.d.ts.map +0 -1
  264. package/dist/src/coin/eth/iface.js +0 -8
  265. package/dist/src/coin/eth/index.d.ts +0 -10
  266. package/dist/src/coin/eth/index.d.ts.map +0 -1
  267. package/dist/src/coin/eth/index.js +0 -39
  268. package/dist/src/coin/eth/keyPair.d.ts +0 -26
  269. package/dist/src/coin/eth/keyPair.d.ts.map +0 -1
  270. package/dist/src/coin/eth/keyPair.js +0 -85
  271. package/dist/src/coin/eth/transaction.d.ts +0 -64
  272. package/dist/src/coin/eth/transaction.d.ts.map +0 -1
  273. package/dist/src/coin/eth/transaction.js +0 -137
  274. package/dist/src/coin/eth/transactionBuilder.d.ts +0 -194
  275. package/dist/src/coin/eth/transactionBuilder.d.ts.map +0 -1
  276. package/dist/src/coin/eth/transactionBuilder.js +0 -624
  277. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts +0 -47
  278. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts.map +0 -1
  279. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.js +0 -113
  280. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts +0 -14
  281. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts.map +0 -1
  282. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.js +0 -83
  283. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts +0 -13
  284. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts.map +0 -1
  285. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.js +0 -68
  286. package/dist/src/coin/eth/transferBuilder.d.ts +0 -65
  287. package/dist/src/coin/eth/transferBuilder.d.ts.map +0 -1
  288. package/dist/src/coin/eth/transferBuilder.js +0 -197
  289. package/dist/src/coin/eth/types.d.ts +0 -39
  290. package/dist/src/coin/eth/types.d.ts.map +0 -1
  291. package/dist/src/coin/eth/types.js +0 -135
  292. package/dist/src/coin/eth/utils.d.ts +0 -202
  293. package/dist/src/coin/eth/utils.d.ts.map +0 -1
  294. package/dist/src/coin/eth/utils.js +0 -485
  295. package/dist/src/coin/eth/walletUtil.d.ts +0 -19
  296. package/dist/src/coin/eth/walletUtil.d.ts.map +0 -1
  297. package/dist/src/coin/eth/walletUtil.js +0 -29
  298. package/dist/src/coin/eth2/index.d.ts +0 -2
  299. package/dist/src/coin/eth2/index.d.ts.map +0 -1
  300. package/dist/src/coin/eth2/index.js +0 -6
  301. package/dist/src/coin/eth2/keyPair.d.ts +0 -33
  302. package/dist/src/coin/eth2/keyPair.d.ts.map +0 -1
  303. package/dist/src/coin/eth2/keyPair.js +0 -65
  304. package/dist/src/coin/hbar/ifaces.d.ts +0 -26
  305. package/dist/src/coin/hbar/ifaces.d.ts.map +0 -1
  306. package/dist/src/coin/hbar/ifaces.js +0 -3
  307. package/dist/src/coin/hbar/index.d.ts +0 -6
  308. package/dist/src/coin/hbar/index.d.ts.map +0 -1
  309. package/dist/src/coin/hbar/index.js +0 -31
  310. package/dist/src/coin/hbar/keyPair.d.ts +0 -23
  311. package/dist/src/coin/hbar/keyPair.d.ts.map +0 -1
  312. package/dist/src/coin/hbar/keyPair.js +0 -70
  313. package/dist/src/coin/hbar/transaction.d.ts +0 -98
  314. package/dist/src/coin/hbar/transaction.d.ts.map +0 -1
  315. package/dist/src/coin/hbar/transaction.js +0 -245
  316. package/dist/src/coin/hbar/transactionBuilder.d.ts +0 -112
  317. package/dist/src/coin/hbar/transactionBuilder.d.ts.map +0 -1
  318. package/dist/src/coin/hbar/transactionBuilder.js +0 -264
  319. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts +0 -37
  320. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts.map +0 -1
  321. package/dist/src/coin/hbar/transactionBuilderFactory.js +0 -77
  322. package/dist/src/coin/hbar/transferBuilder.d.ts +0 -44
  323. package/dist/src/coin/hbar/transferBuilder.d.ts.map +0 -1
  324. package/dist/src/coin/hbar/transferBuilder.js +0 -130
  325. package/dist/src/coin/hbar/utils.d.ts +0 -139
  326. package/dist/src/coin/hbar/utils.d.ts.map +0 -1
  327. package/dist/src/coin/hbar/utils.js +0 -310
  328. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts +0 -28
  329. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts.map +0 -1
  330. package/dist/src/coin/hbar/walletInitializationBuilder.js +0 -90
  331. package/dist/src/coin/near/constants.d.ts +0 -12
  332. package/dist/src/coin/near/constants.d.ts.map +0 -1
  333. package/dist/src/coin/near/constants.js +0 -15
  334. package/dist/src/coin/near/contractCallWrapper.d.ts +0 -33
  335. package/dist/src/coin/near/contractCallWrapper.d.ts.map +0 -1
  336. package/dist/src/coin/near/contractCallWrapper.js +0 -68
  337. package/dist/src/coin/near/errors.d.ts +0 -5
  338. package/dist/src/coin/near/errors.d.ts.map +0 -1
  339. package/dist/src/coin/near/errors.js +0 -12
  340. package/dist/src/coin/near/iface.d.ts +0 -40
  341. package/dist/src/coin/near/iface.d.ts.map +0 -1
  342. package/dist/src/coin/near/iface.js +0 -8
  343. package/dist/src/coin/near/index.d.ts +0 -11
  344. package/dist/src/coin/near/index.d.ts.map +0 -1
  345. package/dist/src/coin/near/index.js +0 -41
  346. package/dist/src/coin/near/keyPair.d.ts +0 -25
  347. package/dist/src/coin/near/keyPair.d.ts.map +0 -1
  348. package/dist/src/coin/near/keyPair.js +0 -73
  349. package/dist/src/coin/near/stakingActivateBuilder.d.ts +0 -32
  350. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +0 -1
  351. package/dist/src/coin/near/stakingActivateBuilder.js +0 -90
  352. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +0 -32
  353. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +0 -1
  354. package/dist/src/coin/near/stakingDeactivateBuilder.js +0 -89
  355. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +0 -32
  356. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +0 -1
  357. package/dist/src/coin/near/stakingWithdrawBuilder.js +0 -89
  358. package/dist/src/coin/near/transaction.d.ts +0 -90
  359. package/dist/src/coin/near/transaction.d.ts.map +0 -1
  360. package/dist/src/coin/near/transaction.js +0 -368
  361. package/dist/src/coin/near/transactionBuilder.d.ts +0 -89
  362. package/dist/src/coin/near/transactionBuilder.d.ts.map +0 -1
  363. package/dist/src/coin/near/transactionBuilder.js +0 -216
  364. package/dist/src/coin/near/transactionBuilderFactory.d.ts +0 -30
  365. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +0 -1
  366. package/dist/src/coin/near/transactionBuilderFactory.js +0 -71
  367. package/dist/src/coin/near/transferBuilder.d.ts +0 -26
  368. package/dist/src/coin/near/transferBuilder.d.ts.map +0 -1
  369. package/dist/src/coin/near/transferBuilder.js +0 -72
  370. package/dist/src/coin/near/utils.d.ts +0 -42
  371. package/dist/src/coin/near/utils.d.ts.map +0 -1
  372. package/dist/src/coin/near/utils.js +0 -92
  373. package/dist/src/coin/near/walletInitializationBuilder.d.ts +0 -12
  374. package/dist/src/coin/near/walletInitializationBuilder.d.ts.map +0 -1
  375. package/dist/src/coin/near/walletInitializationBuilder.js +0 -20
  376. package/dist/src/coin/rbtc/index.d.ts +0 -8
  377. package/dist/src/coin/rbtc/index.d.ts.map +0 -1
  378. package/dist/src/coin/rbtc/index.js +0 -35
  379. package/dist/src/coin/rbtc/resources.d.ts +0 -10
  380. package/dist/src/coin/rbtc/resources.d.ts.map +0 -1
  381. package/dist/src/coin/rbtc/resources.js +0 -25
  382. package/dist/src/coin/rbtc/transactionBuilder.d.ts +0 -17
  383. package/dist/src/coin/rbtc/transactionBuilder.d.ts.map +0 -1
  384. package/dist/src/coin/rbtc/transactionBuilder.js +0 -44
  385. package/dist/src/coin/rbtc/transferBuilder.d.ts +0 -19
  386. package/dist/src/coin/rbtc/transferBuilder.d.ts.map +0 -1
  387. package/dist/src/coin/rbtc/transferBuilder.js +0 -27
  388. package/dist/src/coin/rbtc/utils.d.ts +0 -18
  389. package/dist/src/coin/rbtc/utils.d.ts.map +0 -1
  390. package/dist/src/coin/rbtc/utils.js +0 -42
  391. package/dist/src/coin/sol/ataInitializationBuilder.d.ts +0 -33
  392. package/dist/src/coin/sol/ataInitializationBuilder.d.ts.map +0 -1
  393. package/dist/src/coin/sol/ataInitializationBuilder.js +0 -93
  394. package/dist/src/coin/sol/ataInitializationTransaction.d.ts +0 -14
  395. package/dist/src/coin/sol/ataInitializationTransaction.d.ts.map +0 -1
  396. package/dist/src/coin/sol/ataInitializationTransaction.js +0 -81
  397. package/dist/src/coin/sol/constants.d.ts +0 -58
  398. package/dist/src/coin/sol/constants.d.ts.map +0 -1
  399. package/dist/src/coin/sol/constants.js +0 -76
  400. package/dist/src/coin/sol/iface.d.ts +0 -99
  401. package/dist/src/coin/sol/iface.d.ts.map +0 -1
  402. package/dist/src/coin/sol/iface.js +0 -3
  403. package/dist/src/coin/sol/index.d.ts +0 -11
  404. package/dist/src/coin/sol/index.d.ts.map +0 -1
  405. package/dist/src/coin/sol/index.js +0 -41
  406. package/dist/src/coin/sol/instructionParamsFactory.d.ts +0 -12
  407. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +0 -1
  408. package/dist/src/coin/sol/instructionParamsFactory.js +0 -260
  409. package/dist/src/coin/sol/keyPair.d.ts +0 -26
  410. package/dist/src/coin/sol/keyPair.d.ts.map +0 -1
  411. package/dist/src/coin/sol/keyPair.js +0 -63
  412. package/dist/src/coin/sol/solInstructionFactory.d.ts +0 -10
  413. package/dist/src/coin/sol/solInstructionFactory.d.ts.map +0 -1
  414. package/dist/src/coin/sol/solInstructionFactory.js +0 -213
  415. package/dist/src/coin/sol/stakingActivateBuilder.d.ts +0 -41
  416. package/dist/src/coin/sol/stakingActivateBuilder.d.ts.map +0 -1
  417. package/dist/src/coin/sol/stakingActivateBuilder.js +0 -94
  418. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts +0 -23
  419. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts.map +0 -1
  420. package/dist/src/coin/sol/stakingDeactivateBuilder.js +0 -62
  421. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts +0 -31
  422. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts.map +0 -1
  423. package/dist/src/coin/sol/stakingWithdrawBuilder.js +0 -78
  424. package/dist/src/coin/sol/tokenEncodeDecode.d.ts +0 -85
  425. package/dist/src/coin/sol/tokenEncodeDecode.d.ts.map +0 -1
  426. package/dist/src/coin/sol/tokenEncodeDecode.js +0 -133
  427. package/dist/src/coin/sol/tokenTransferBuilder.d.ts +0 -27
  428. package/dist/src/coin/sol/tokenTransferBuilder.d.ts.map +0 -1
  429. package/dist/src/coin/sol/tokenTransferBuilder.js +0 -73
  430. package/dist/src/coin/sol/transaction.d.ts +0 -61
  431. package/dist/src/coin/sol/transaction.d.ts.map +0 -1
  432. package/dist/src/coin/sol/transaction.js +0 -369
  433. package/dist/src/coin/sol/transactionBuilder.d.ts +0 -101
  434. package/dist/src/coin/sol/transactionBuilder.d.ts.map +0 -1
  435. package/dist/src/coin/sol/transactionBuilder.js +0 -261
  436. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +0 -76
  437. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +0 -1
  438. package/dist/src/coin/sol/transactionBuilderFactory.js +0 -136
  439. package/dist/src/coin/sol/transferBuilder.d.ts +0 -26
  440. package/dist/src/coin/sol/transferBuilder.d.ts.map +0 -1
  441. package/dist/src/coin/sol/transferBuilder.js +0 -67
  442. package/dist/src/coin/sol/utils.d.ts +0 -146
  443. package/dist/src/coin/sol/utils.d.ts.map +0 -1
  444. package/dist/src/coin/sol/utils.js +0 -361
  445. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +0 -26
  446. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +0 -1
  447. package/dist/src/coin/sol/walletInitializationBuilder.js +0 -71
  448. package/dist/src/coin/stx/abstractContractBuilder.d.ts +0 -19
  449. package/dist/src/coin/stx/abstractContractBuilder.d.ts.map +0 -1
  450. package/dist/src/coin/stx/abstractContractBuilder.js +0 -70
  451. package/dist/src/coin/stx/constants.d.ts +0 -8
  452. package/dist/src/coin/stx/constants.d.ts.map +0 -1
  453. package/dist/src/coin/stx/constants.js +0 -19
  454. package/dist/src/coin/stx/contractBuilder.d.ts +0 -33
  455. package/dist/src/coin/stx/contractBuilder.d.ts.map +0 -1
  456. package/dist/src/coin/stx/contractBuilder.js +0 -116
  457. package/dist/src/coin/stx/iface.d.ts +0 -48
  458. package/dist/src/coin/stx/iface.d.ts.map +0 -1
  459. package/dist/src/coin/stx/iface.js +0 -3
  460. package/dist/src/coin/stx/index.d.ts +0 -6
  461. package/dist/src/coin/stx/index.d.ts.map +0 -1
  462. package/dist/src/coin/stx/index.js +0 -32
  463. package/dist/src/coin/stx/keyPair.d.ts +0 -55
  464. package/dist/src/coin/stx/keyPair.d.ts.map +0 -1
  465. package/dist/src/coin/stx/keyPair.js +0 -140
  466. package/dist/src/coin/stx/sendmanyBuilder.d.ts +0 -23
  467. package/dist/src/coin/stx/sendmanyBuilder.d.ts.map +0 -1
  468. package/dist/src/coin/stx/sendmanyBuilder.js +0 -75
  469. package/dist/src/coin/stx/transaction.d.ts +0 -49
  470. package/dist/src/coin/stx/transaction.d.ts.map +0 -1
  471. package/dist/src/coin/stx/transaction.js +0 -225
  472. package/dist/src/coin/stx/transactionBuilder.d.ts +0 -86
  473. package/dist/src/coin/stx/transactionBuilder.d.ts.map +0 -1
  474. package/dist/src/coin/stx/transactionBuilder.js +0 -263
  475. package/dist/src/coin/stx/transactionBuilderFactory.d.ts +0 -30
  476. package/dist/src/coin/stx/transactionBuilderFactory.d.ts.map +0 -1
  477. package/dist/src/coin/stx/transactionBuilderFactory.js +0 -81
  478. package/dist/src/coin/stx/transferBuilder.d.ts +0 -30
  479. package/dist/src/coin/stx/transferBuilder.d.ts.map +0 -1
  480. package/dist/src/coin/stx/transferBuilder.js +0 -99
  481. package/dist/src/coin/stx/utils.d.ts +0 -207
  482. package/dist/src/coin/stx/utils.d.ts.map +0 -1
  483. package/dist/src/coin/stx/utils.js +0 -504
  484. package/dist/src/coin/trx/address.d.ts +0 -11
  485. package/dist/src/coin/trx/address.d.ts.map +0 -1
  486. package/dist/src/coin/trx/address.js +0 -13
  487. package/dist/src/coin/trx/contractCallBuilder.d.ts +0 -96
  488. package/dist/src/coin/trx/contractCallBuilder.d.ts.map +0 -1
  489. package/dist/src/coin/trx/contractCallBuilder.js +0 -281
  490. package/dist/src/coin/trx/enum.d.ts +0 -23
  491. package/dist/src/coin/trx/enum.d.ts.map +0 -1
  492. package/dist/src/coin/trx/enum.js +0 -28
  493. package/dist/src/coin/trx/iface.d.ts +0 -92
  494. package/dist/src/coin/trx/iface.d.ts.map +0 -1
  495. package/dist/src/coin/trx/iface.js +0 -3
  496. package/dist/src/coin/trx/index.d.ts +0 -10
  497. package/dist/src/coin/trx/index.d.ts.map +0 -1
  498. package/dist/src/coin/trx/index.js +0 -39
  499. package/dist/src/coin/trx/keyPair.d.ts +0 -44
  500. package/dist/src/coin/trx/keyPair.d.ts.map +0 -1
  501. package/dist/src/coin/trx/keyPair.js +0 -121
  502. package/dist/src/coin/trx/transaction.d.ts +0 -74
  503. package/dist/src/coin/trx/transaction.d.ts.map +0 -1
  504. package/dist/src/coin/trx/transaction.js +0 -205
  505. package/dist/src/coin/trx/transactionBuilder.d.ts +0 -65
  506. package/dist/src/coin/trx/transactionBuilder.d.ts.map +0 -1
  507. package/dist/src/coin/trx/transactionBuilder.js +0 -215
  508. package/dist/src/coin/trx/utils.d.ts +0 -127
  509. package/dist/src/coin/trx/utils.d.ts.map +0 -1
  510. package/dist/src/coin/trx/utils.js +0 -369
  511. package/dist/src/coin/trx/wrappedBuilder.d.ts +0 -52
  512. package/dist/src/coin/trx/wrappedBuilder.d.ts.map +0 -1
  513. package/dist/src/coin/trx/wrappedBuilder.js +0 -104
  514. package/dist/src/coin/xrp/index.d.ts +0 -5
  515. package/dist/src/coin/xrp/index.d.ts.map +0 -1
  516. package/dist/src/coin/xrp/index.js +0 -29
  517. package/dist/src/coin/xrp/keyPair.d.ts +0 -10
  518. package/dist/src/coin/xrp/keyPair.d.ts.map +0 -1
  519. package/dist/src/coin/xrp/keyPair.js +0 -16
  520. package/dist/src/coin/xrp/transaction.d.ts +0 -10
  521. package/dist/src/coin/xrp/transaction.d.ts.map +0 -1
  522. package/dist/src/coin/xrp/transaction.js +0 -20
  523. package/dist/src/coin/xrp/transactionBuilder.d.ts +0 -27
  524. package/dist/src/coin/xrp/transactionBuilder.d.ts.map +0 -1
  525. package/dist/src/coin/xrp/transactionBuilder.js +0 -46
  526. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts +0 -24
  527. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts.map +0 -1
  528. package/dist/src/coin/xrp/transactionBuilderFactory.js +0 -38
  529. package/dist/src/coin/xrp/transferBuilder.d.ts +0 -14
  530. package/dist/src/coin/xrp/transferBuilder.d.ts.map +0 -1
  531. package/dist/src/coin/xrp/transferBuilder.js +0 -24
  532. package/dist/src/coin/xrp/utils.d.ts +0 -16
  533. package/dist/src/coin/xrp/utils.d.ts.map +0 -1
  534. package/dist/src/coin/xrp/utils.js +0 -32
  535. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts +0 -14
  536. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts.map +0 -1
  537. package/dist/src/coin/xrp/walletInitializationBuilder.js +0 -24
  538. package/dist/src/coin/xtz/address.d.ts +0 -8
  539. package/dist/src/coin/xtz/address.d.ts.map +0 -1
  540. package/dist/src/coin/xtz/address.js +0 -10
  541. package/dist/src/coin/xtz/iface.d.ts +0 -81
  542. package/dist/src/coin/xtz/iface.d.ts.map +0 -1
  543. package/dist/src/coin/xtz/iface.js +0 -3
  544. package/dist/src/coin/xtz/index.d.ts +0 -8
  545. package/dist/src/coin/xtz/index.d.ts.map +0 -1
  546. package/dist/src/coin/xtz/index.js +0 -37
  547. package/dist/src/coin/xtz/keyPair.d.ts +0 -40
  548. package/dist/src/coin/xtz/keyPair.d.ts.map +0 -1
  549. package/dist/src/coin/xtz/keyPair.js +0 -136
  550. package/dist/src/coin/xtz/multisigUtils.d.ts +0 -134
  551. package/dist/src/coin/xtz/multisigUtils.d.ts.map +0 -1
  552. package/dist/src/coin/xtz/multisigUtils.js +0 -1180
  553. package/dist/src/coin/xtz/transaction.d.ts +0 -119
  554. package/dist/src/coin/xtz/transaction.d.ts.map +0 -1
  555. package/dist/src/coin/xtz/transaction.js +0 -315
  556. package/dist/src/coin/xtz/transactionBuilder.d.ts +0 -171
  557. package/dist/src/coin/xtz/transactionBuilder.d.ts.map +0 -1
  558. package/dist/src/coin/xtz/transactionBuilder.js +0 -453
  559. package/dist/src/coin/xtz/transferBuilder.d.ts +0 -24
  560. package/dist/src/coin/xtz/transferBuilder.d.ts.map +0 -1
  561. package/dist/src/coin/xtz/transferBuilder.js +0 -64
  562. package/dist/src/coin/xtz/utils.d.ts +0 -265
  563. package/dist/src/coin/xtz/utils.d.ts.map +0 -1
  564. package/dist/src/coin/xtz/utils.js +0 -460
  565. package/dist/src/mpc/curves/baseCurve.d.ts +0 -18
  566. package/dist/src/mpc/curves/baseCurve.d.ts.map +0 -1
  567. package/dist/src/mpc/curves/baseCurve.js +0 -6
  568. package/dist/src/mpc/curves/ed25519.d.ts +0 -17
  569. package/dist/src/mpc/curves/ed25519.d.ts.map +0 -1
  570. package/dist/src/mpc/curves/ed25519.js +0 -48
  571. package/dist/src/mpc/curves/index.d.ts +0 -5
  572. package/dist/src/mpc/curves/index.d.ts.map +0 -1
  573. package/dist/src/mpc/curves/index.js +0 -6
  574. package/dist/src/mpc/curves/secp256k1.d.ts +0 -16
  575. package/dist/src/mpc/curves/secp256k1.d.ts.map +0 -1
  576. package/dist/src/mpc/curves/secp256k1.js +0 -66
  577. package/dist/src/mpc/hdTree.d.ts +0 -24
  578. package/dist/src/mpc/hdTree.d.ts.map +0 -1
  579. package/dist/src/mpc/hdTree.js +0 -94
  580. package/dist/src/mpc/shamir.d.ts +0 -26
  581. package/dist/src/mpc/shamir.d.ts.map +0 -1
  582. package/dist/src/mpc/shamir.js +0 -86
  583. package/dist/src/mpc/tss/eddsa/eddsa.d.ts +0 -29
  584. package/dist/src/mpc/tss/eddsa/eddsa.d.ts.map +0 -1
  585. package/dist/src/mpc/tss/eddsa/eddsa.js +0 -273
  586. package/dist/src/mpc/tss/eddsa/index.d.ts +0 -4
  587. package/dist/src/mpc/tss/eddsa/index.d.ts.map +0 -1
  588. package/dist/src/mpc/tss/eddsa/index.js +0 -30
  589. package/dist/src/mpc/tss/eddsa/types.d.ts +0 -70
  590. package/dist/src/mpc/tss/eddsa/types.d.ts.map +0 -1
  591. package/dist/src/mpc/tss/eddsa/types.js +0 -3
  592. package/dist/src/mpc/tss/index.d.ts +0 -5
  593. package/dist/src/mpc/tss/index.d.ts.map +0 -1
  594. package/dist/src/mpc/tss/index.js +0 -32
  595. package/dist/src/mpc/tss.d.ts +0 -98
  596. package/dist/src/mpc/tss.d.ts.map +0 -1
  597. package/dist/src/mpc/tss.js +0 -277
  598. package/dist/src/mpc/util.d.ts +0 -7
  599. package/dist/src/mpc/util.d.ts.map +0 -1
  600. package/dist/src/mpc/util.js +0 -38
  601. package/dist/src/utils/crypto.d.ts +0 -99
  602. package/dist/src/utils/crypto.d.ts.map +0 -1
  603. package/dist/src/utils/crypto.js +0 -260
  604. package/dist/src/utils/ed25519KeyDeriver.d.ts +0 -49
  605. package/dist/src/utils/ed25519KeyDeriver.d.ts.map +0 -1
  606. package/dist/src/utils/ed25519KeyDeriver.js +0 -92
  607. package/resources/hbar/protobuf/BasicTypes.proto +0 -424
  608. package/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  609. package/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  610. package/resources/hbar/protobuf/Duration.proto +0 -28
  611. package/resources/hbar/protobuf/Timestamp.proto +0 -34
  612. package/resources/hbar/protobuf/Transaction.proto +0 -35
  613. package/resources/hbar/protobuf/TransactionBody.proto +0 -24
  614. package/resources/hbar/protobuf/TransactionContents.proto +0 -33
  615. package/resources/hbar/protobuf/hedera.d.ts +0 -4612
  616. package/resources/hbar/protobuf/hedera.js +0 -12192
  617. package/resources/trx/protobuf/Contract.proto +0 -256
  618. package/resources/trx/protobuf/Discover.proto +0 -44
  619. package/resources/trx/protobuf/tron.d.ts +0 -11024
  620. package/resources/trx/protobuf/tron.js +0 -31510
  621. package/resources/trx/protobuf/tron.proto +0 -677
@@ -1,1180 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
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
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.forwarderOriginationOperation = exports.getOwnersPublicKeys = exports.genericMultisigOriginationOperation = exports.revealOperation = exports.genericMultisigDataToSign = exports.getMultisigTransferSignatures = exports.updateMultisigTransferSignatures = exports.multisigTransactionOperation = exports.singlesigTransactionOperation = exports.getOriginationDataFromOperation = exports.getMultisigTransferDataFromOperation = void 0;
23
- const _ = __importStar(require("lodash"));
24
- const utils_1 = require("./utils");
25
- // Default n of m for multisig wallets
26
- const DEFAULT_N = 2;
27
- const DEFAULT_M = 3;
28
- /**
29
- * Helper method to get the transfer details from a generic multisig transaction operation.
30
- *
31
- * @param {TransactionOp} operation A transaction operation JSON
32
- * @returns {TransferData} Information about the destination, token and transfer amount
33
- */
34
- function getMultisigTransferDataFromOperation(operation) {
35
- const fee = {
36
- fee: operation.fee,
37
- gasLimit: operation.gas_limit,
38
- storageLimit: operation.storage_limit,
39
- };
40
- if (!operation.parameters) {
41
- // Singlesig transaction
42
- return {
43
- coin: 'mutez',
44
- from: operation.source,
45
- to: operation.destination,
46
- amount: operation.amount,
47
- fee,
48
- };
49
- }
50
- // These follow the structure from the response of genericMultisigTransferParams()
51
- const transferArgs = operation.parameters.value.args[0].args[1].args[0];
52
- const accountType = transferArgs[3].prim;
53
- const counter = operation.parameters.value.args[0].args[0].int;
54
- // In multisig transactions, the wallet contract is the destination
55
- const from = operation.destination;
56
- let accountTypeIndex;
57
- switch (accountType) {
58
- case 'IMPLICIT_ACCOUNT':
59
- accountTypeIndex = 4;
60
- break;
61
- case 'CONTRACT':
62
- accountTypeIndex = 5;
63
- break;
64
- default:
65
- throw new Error('Invalid contract parameters');
66
- }
67
- return {
68
- coin: transferArgs[accountTypeIndex].args[0].prim,
69
- from,
70
- to: transferArgs[2].args[1].string,
71
- amount: transferArgs[accountTypeIndex].args[1].int,
72
- fee,
73
- counter,
74
- };
75
- }
76
- exports.getMultisigTransferDataFromOperation = getMultisigTransferDataFromOperation;
77
- /**
78
- * Helper method to get the wallet or address initialization tx from an origination operation
79
- *
80
- * @param {OriginationOp} operation
81
- * @returns {OriginationData} Information about the wallet contract creating a forwarder contract
82
- */
83
- function getOriginationDataFromOperation(operation) {
84
- const fee = {
85
- fee: operation.fee,
86
- gasLimit: operation.gas_limit,
87
- storageLimit: operation.storage_limit,
88
- };
89
- const { source: from, counter, balance } = operation;
90
- // Transactions initializing a forwarder contract contain the address of the wallet contract
91
- const forwarderDestination = _.get(operation, 'script.code[2].args[0][3].args[0][0].args[1].string');
92
- return {
93
- fee,
94
- counter,
95
- balance,
96
- from,
97
- forwarderDestination,
98
- };
99
- }
100
- exports.getOriginationDataFromOperation = getOriginationDataFromOperation;
101
- /**
102
- * Helper method to build a singlesig transaction operation.
103
- *
104
- * @param {string} counter Source account next counter
105
- * @param {string} source The account that will pay for fees, and in singlesig transactions, where
106
- * the funds are taken from
107
- * @param {string} amount The amount in mutez to be transferred
108
- * @param {string} destination The account address to send the funds to
109
- * @param {string} fee Fees in mutez to pay by the source account
110
- * @param {string} gasLimit Maximum amount in mutez to spend in gas fees
111
- * @param {string} storageLimit Maximum amount in mutez to spend in storage fees
112
- * @returns {TransactionOp}A Tezos transaction operation
113
- */
114
- function singlesigTransactionOperation(counter, source, amount, destination, fee = utils_1.DEFAULT_FEE.TRANSFER.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.TRANSFER.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.TRANSFER.toString()) {
115
- return {
116
- kind: 'transaction',
117
- source,
118
- fee,
119
- counter,
120
- gas_limit: gasLimit,
121
- storage_limit: storageLimit,
122
- amount,
123
- destination,
124
- };
125
- }
126
- exports.singlesigTransactionOperation = singlesigTransactionOperation;
127
- /**
128
- * Create a multisig wallet transaction operation.
129
- *
130
- * @see {@link transactionOperation}
131
- * @param {string} counter Source account next counter
132
- * @param {string} source The account that will pay for fees, and in singlesig transactions, where
133
- * the funds are taken from
134
- * @param {string} amount The amount in mutez to be transferred
135
- * @param {string} contractAddress If it is a multisig transfer, the smart contract address with the
136
- * funds to be transferred from
137
- * @param {string} contractCounter If it is a multisig transfer, the smart contract counter to use
138
- * in the next transaction
139
- * @param {string} destinationAddress An implicit or originated address to transfer fudns to
140
- * @param {string[]} signatures signatures List of signatures authorizing the funds transfer form
141
- * the multisig wallet
142
- * @param {string} fee Fees in mutez to pay by the source account
143
- * @param {string} gasLimit Maximum amount in mutez to spend in gas fees
144
- * @param {string} storageLimit Maximum amount in mutez to spend in storage fees
145
- * @param {number} m The number of signers (owners) for the multisig wallet being used. Default is 3
146
- * @returns {TransactionOp} A Tezos operation with a generic multisig transfer
147
- */
148
- function multisigTransactionOperation(counter, source, amount, contractAddress, contractCounter, destinationAddress, signatures, fee = utils_1.DEFAULT_FEE.TRANSFER.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.TRANSFER.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.TRANSFER.toString(), m = DEFAULT_M) {
149
- return {
150
- kind: 'transaction',
151
- source,
152
- fee,
153
- counter,
154
- gas_limit: gasLimit,
155
- storage_limit: storageLimit,
156
- amount: '0',
157
- destination: contractAddress,
158
- parameters: genericMultisigTransferParams(destinationAddress, amount, contractCounter, signatures, m),
159
- };
160
- }
161
- exports.multisigTransactionOperation = multisigTransactionOperation;
162
- /**
163
- * Helper function to build the parameters to call the generic multisig smart contract with.
164
- *
165
- * @param {string} destinationAddress An implicit or originated address
166
- * @param {number} amount Number of Mutez to be transferred
167
- * @param {string} contractCounter Multisig contract counter number
168
- * @param {IndexedSignature[]} signatures List of transactions and their order
169
- * @param {number} m The multisig wallet total number of signers (owners)
170
- * @returns The parameters object
171
- */
172
- function genericMultisigTransferParams(destinationAddress, amount, contractCounter, signatures, m) {
173
- const transactionSignatures = buildSignatures(signatures);
174
- return {
175
- entrypoint: 'main',
176
- value: {
177
- prim: 'Pair',
178
- args: [
179
- {
180
- prim: 'Pair',
181
- args: [{ int: contractCounter }, { prim: 'Left', args: [transferToAccount(destinationAddress, amount)] }],
182
- },
183
- transactionSignatures,
184
- ],
185
- },
186
- };
187
- }
188
- /**
189
- * Replace the signatures in a multisig transaction operation with new ones.
190
- *
191
- * @param {TransactionOp} transaction Transaction to mutate
192
- * @param {IndexedSignature[]} signatures List of transactions and their order
193
- */
194
- function updateMultisigTransferSignatures(transaction, signatures) {
195
- transaction.parameters.value.args[1] = buildSignatures(signatures, transaction.parameters.value.args[1]);
196
- }
197
- exports.updateMultisigTransferSignatures = updateMultisigTransferSignatures;
198
- /**
199
- * Ge the list if multisig signatures if any in a convenient format.
200
- *
201
- * @param {TransactionOp} transaction The transaction to search the signatures in
202
- * @returns {IndexedSignature[]} A list of signatures and their order in teh transfer script
203
- */
204
- function getMultisigTransferSignatures(transaction) {
205
- const signatures = [];
206
- if (!transaction.parameters && !transaction.parameters.value && !transaction.parameters.value) {
207
- return [];
208
- }
209
- const rawSignatures = transaction.parameters.value.args[1];
210
- for (let i = 0; i < rawSignatures.length; i++) {
211
- if (rawSignatures[i].prim === 'Some') {
212
- signatures.push({
213
- signature: rawSignatures[i].args[0].string,
214
- index: i,
215
- });
216
- }
217
- }
218
- return signatures;
219
- }
220
- exports.getMultisigTransferSignatures = getMultisigTransferSignatures;
221
- /**
222
- * Build a list of ordered signatures, putting a None primitive for the missing indexes.
223
- *
224
- * @param {IndexedSignature[]} signatures List of transactions and their order
225
- * @param {number} m Size of the signature list
226
- * @param {any[]} existingSignatures List of existing signatures to merge with the generated ones
227
- * @returns {any[]} List of signatures in the right order
228
- */
229
- function buildSignatures(signatures, existingSignatures = [], m = DEFAULT_M) {
230
- // Initialize the array with the existing signatures and/or empty objects
231
- const transactionSignatures = existingSignatures;
232
- const size = existingSignatures.length;
233
- if (size > m) {
234
- throw new Error('Too many signatures. Expected less than ' + m + ' got ' + size);
235
- }
236
- for (let i = size; i < m; i++) {
237
- transactionSignatures.push({ prim: 'None' });
238
- }
239
- // Replace the empty signatures for the real ones based on the right index
240
- signatures.forEach((s) => {
241
- if (s.index) {
242
- transactionSignatures[s.index] = { prim: 'Some', args: [{ string: s.signature }] };
243
- }
244
- else {
245
- for (let i = 0; i < transactionSignatures.length; i++) {
246
- // Search for the first "null" signature
247
- if (transactionSignatures[i].prim === 'None') {
248
- transactionSignatures[i] = { prim: 'Some', args: [{ string: s.signature }] };
249
- break;
250
- }
251
- }
252
- }
253
- });
254
- return transactionSignatures;
255
- }
256
- /**
257
- * Helper function to build the Michelson script to be signed to transfer funds from a multisig
258
- * wallet.
259
- *
260
- * @param contractAddress The multisig smart contract address
261
- * @param {string} destinationAddress The destination account address (implicit or originated)
262
- * @param {number} amount Number of mutez to transfer
263
- * @param {string} contractCounter Wallet counter to use in the transaction
264
- * @returns A JSON representation of the Michelson script to sign and approve a transfer
265
- */
266
- function genericMultisigDataToSign(contractAddress, destinationAddress, amount, contractCounter) {
267
- const data = {
268
- prim: 'Pair',
269
- args: [
270
- { int: contractCounter },
271
- {
272
- prim: 'Left',
273
- args: [transferToAccount(destinationAddress, amount)],
274
- },
275
- ],
276
- };
277
- const type = {
278
- prim: 'pair',
279
- args: [
280
- {
281
- prim: 'nat',
282
- annots: ['%counter'],
283
- },
284
- {
285
- prim: 'or',
286
- args: [
287
- {
288
- prim: 'lambda',
289
- args: [
290
- { prim: 'unit' },
291
- {
292
- prim: 'list',
293
- args: [{ prim: 'operation' }],
294
- },
295
- ],
296
- annots: ['%operation'],
297
- },
298
- {
299
- prim: 'pair',
300
- args: [
301
- {
302
- prim: 'nat',
303
- annots: ['%threshold'],
304
- },
305
- {
306
- prim: 'list',
307
- args: [{ prim: 'key' }],
308
- annots: ['%keys'],
309
- },
310
- ],
311
- annots: ['%change_keys'],
312
- },
313
- ],
314
- annots: [':action'],
315
- },
316
- ],
317
- annots: [':payload'],
318
- };
319
- return buildPair(data, type, contractAddress);
320
- }
321
- exports.genericMultisigDataToSign = genericMultisigDataToSign;
322
- /**
323
- * Util function to build a Michelson Pair object.
324
- *
325
- * @param data
326
- * @param type
327
- * @param contractAddress
328
- */
329
- function buildPair(data, type, contractAddress) {
330
- return {
331
- data: {
332
- prim: 'Pair',
333
- args: [{ string: contractAddress }, data],
334
- },
335
- type: {
336
- prim: 'pair',
337
- args: [{ prim: 'address' }, type],
338
- },
339
- };
340
- }
341
- /**
342
- * Build the lambda for the multisig transaction transfer to an implicit or originated account.
343
- *
344
- * @param {string} address Account address to send the funds to
345
- * @param {string} amount The amount in mutez to transfer
346
- * @see {@link https://tezostaquito.io/docs/making_transfers#transfer-000005-50-mutez-tokens-from-a-kt1-address-to-a-tz1-address}
347
- */
348
- function transferToAccount(address, amount) {
349
- if (utils_1.isValidKey(address, utils_1.hashTypes.KT)) {
350
- return transferToOriginatedAccount(address, amount);
351
- }
352
- // Lambda to transfer to an implicit account
353
- return [
354
- { prim: 'DROP' },
355
- { prim: 'NIL', args: [{ prim: 'operation' }] },
356
- {
357
- prim: 'PUSH',
358
- args: [{ prim: 'key_hash' }, { string: address }],
359
- },
360
- { prim: 'IMPLICIT_ACCOUNT' },
361
- {
362
- prim: 'PUSH',
363
- args: [{ prim: 'mutez' }, { int: amount }],
364
- },
365
- { prim: 'UNIT' },
366
- { prim: 'TRANSFER_TOKENS' },
367
- { prim: 'CONS' },
368
- ];
369
- }
370
- /**
371
- * Build the lambda for the multisig transaction transfer to an originated account.
372
- *
373
- * @param {string} address Originated account address to send the funds to
374
- * @param {string} amount The amount in mutez to transfer
375
- * @see {@link https://tezostaquito.io/docs/making_transfers#transfer-0000001-1-mutez-tokens-from-a-kt1-address-to-a-kt1-address}
376
- */
377
- function transferToOriginatedAccount(address, amount) {
378
- return [
379
- { prim: 'DROP' },
380
- { prim: 'NIL', args: [{ prim: 'operation' }] },
381
- {
382
- prim: 'PUSH',
383
- args: [{ prim: 'address' }, { string: address }],
384
- },
385
- { prim: 'CONTRACT', args: [{ prim: 'unit' }] },
386
- [
387
- {
388
- prim: 'IF_NONE',
389
- args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], []],
390
- },
391
- ],
392
- {
393
- prim: 'PUSH',
394
- args: [{ prim: 'mutez' }, { int: amount }],
395
- },
396
- { prim: 'UNIT' },
397
- { prim: 'TRANSFER_TOKENS' },
398
- { prim: 'CONS' },
399
- ];
400
- }
401
- /**
402
- * Create a reveal operation for a public key.
403
- *
404
- * @param {string} counter Source account next counter
405
- * @param {string} source Source account address
406
- * @param {string} pubKey The public key to reveal
407
- * @param {string} fee Fees in mutez to pay by the source account
408
- * @param {string} gasLimit Maximum amount in mutez to spend in gas fees
409
- * @param {string} storageLimit Maximum amount in mutez to spend in storage fees
410
- * @returns An origination operation
411
- */
412
- function revealOperation(counter, source, pubKey, fee = utils_1.DEFAULT_FEE.REVEAL.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.REVEAL.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.REVEAL.toString()) {
413
- return {
414
- kind: 'reveal',
415
- counter,
416
- source,
417
- fee,
418
- gas_limit: gasLimit,
419
- storage_limit: storageLimit,
420
- public_key: pubKey,
421
- };
422
- }
423
- exports.revealOperation = revealOperation;
424
- /**
425
- * Create an origination operation for the generic multisg contract. It does not create a reveal
426
- * operation for the source account.
427
- *
428
- * @param {string} counter Valid source account counter to use
429
- * @param {string} source Source account address
430
- * @param {string} fee Fees in mutez to pay by the source account
431
- * @param {string} gasLimit Maximum amount in mutez to spend in gas fees
432
- * @param {string} storageLimit Maximum amount in mutez to spend in storage fees
433
- * @param {string} balance New multisig account initial balance taken from the source account
434
- * @param {string[]} pubKeys List of public keys of the multisig owner
435
- * @param {string} delegate Optional implicit address to delegate the wallet funds to
436
- * @param {number} threshold Minimum number of signatures required to authorize a multisig operation
437
- * @returns An origination operation
438
- */
439
- function genericMultisigOriginationOperation(counter, source, fee, gasLimit, storageLimit, balance, pubKeys, delegate, threshold = DEFAULT_N) {
440
- const walletPublicKeys = [];
441
- pubKeys.forEach((pk) => walletPublicKeys.push({ string: pk }));
442
- const originationOp = {
443
- kind: 'origination',
444
- counter,
445
- source,
446
- fee,
447
- gas_limit: gasLimit,
448
- storage_limit: storageLimit,
449
- balance,
450
- script: {
451
- code: genericMultisig,
452
- storage: {
453
- prim: 'Pair',
454
- args: [
455
- {
456
- int: '0',
457
- },
458
- {
459
- prim: 'Pair',
460
- args: [
461
- {
462
- int: threshold.toString(),
463
- },
464
- walletPublicKeys,
465
- ],
466
- },
467
- ],
468
- },
469
- },
470
- };
471
- if (delegate) {
472
- originationOp.delegate = delegate;
473
- }
474
- return originationOp;
475
- }
476
- exports.genericMultisigOriginationOperation = genericMultisigOriginationOperation;
477
- /**
478
- * Get the public key of each owner of an multisig wallet origination contract.
479
- *
480
- * @param {OriginationOp} operation An operation with the generic multisig wallet origination
481
- * @returns {string[]} List of all the owners set in the origination transaction
482
- */
483
- function getOwnersPublicKeys(operation) {
484
- const ownersArgs = _.get(operation, 'script.storage.args[1].args[1]');
485
- if (!ownersArgs) {
486
- return [];
487
- }
488
- return ownersArgs.map((o) => o.string);
489
- }
490
- exports.getOwnersPublicKeys = getOwnersPublicKeys;
491
- /**
492
- * Generic Multisig contract from https://github.com/murbard/smart-contracts/blob/master/multisig/michelson/generic.tz
493
- */
494
- const genericMultisig = [
495
- {
496
- prim: 'parameter',
497
- args: [
498
- {
499
- prim: 'or',
500
- args: [
501
- { prim: 'unit', annots: ['%default'] },
502
- {
503
- prim: 'pair',
504
- args: [
505
- {
506
- prim: 'pair',
507
- args: [
508
- {
509
- prim: 'nat',
510
- annots: ['%counter'],
511
- },
512
- {
513
- prim: 'or',
514
- args: [
515
- {
516
- prim: 'lambda',
517
- args: [
518
- { prim: 'unit' },
519
- {
520
- prim: 'list',
521
- args: [
522
- {
523
- prim: 'operation',
524
- },
525
- ],
526
- },
527
- ],
528
- annots: ['%operation'],
529
- },
530
- {
531
- prim: 'pair',
532
- args: [
533
- {
534
- prim: 'nat',
535
- annots: ['%threshold'],
536
- },
537
- {
538
- prim: 'list',
539
- args: [{ prim: 'key' }],
540
- annots: ['%keys'],
541
- },
542
- ],
543
- annots: ['%change_keys'],
544
- },
545
- ],
546
- annots: [':action'],
547
- },
548
- ],
549
- annots: [':payload'],
550
- },
551
- {
552
- prim: 'list',
553
- args: [
554
- {
555
- prim: 'option',
556
- args: [{ prim: 'signature' }],
557
- },
558
- ],
559
- annots: ['%sigs'],
560
- },
561
- ],
562
- annots: ['%main'],
563
- },
564
- ],
565
- },
566
- ],
567
- },
568
- {
569
- prim: 'storage',
570
- args: [
571
- {
572
- prim: 'pair',
573
- args: [
574
- {
575
- prim: 'nat',
576
- annots: ['%stored_counter'],
577
- },
578
- {
579
- prim: 'pair',
580
- args: [
581
- {
582
- prim: 'nat',
583
- annots: ['%threshold'],
584
- },
585
- {
586
- prim: 'list',
587
- args: [{ prim: 'key' }],
588
- annots: ['%keys'],
589
- },
590
- ],
591
- },
592
- ],
593
- },
594
- ],
595
- },
596
- {
597
- prim: 'code',
598
- args: [
599
- [
600
- [
601
- [
602
- { prim: 'DUP' },
603
- { prim: 'CAR' },
604
- {
605
- prim: 'DIP',
606
- args: [[{ prim: 'CDR' }]],
607
- },
608
- ],
609
- ],
610
- {
611
- prim: 'IF_LEFT',
612
- args: [
613
- [
614
- { prim: 'DROP' },
615
- {
616
- prim: 'NIL',
617
- args: [{ prim: 'operation' }],
618
- },
619
- { prim: 'PAIR' },
620
- ],
621
- [
622
- {
623
- prim: 'PUSH',
624
- args: [{ prim: 'mutez' }, { int: '0' }],
625
- },
626
- { prim: 'AMOUNT' },
627
- [
628
- [{ prim: 'COMPARE' }, { prim: 'EQ' }],
629
- {
630
- prim: 'IF',
631
- args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
632
- },
633
- ],
634
- { prim: 'SWAP' },
635
- { prim: 'DUP' },
636
- {
637
- prim: 'DIP',
638
- args: [[{ prim: 'SWAP' }]],
639
- },
640
- {
641
- prim: 'DIP',
642
- args: [
643
- [
644
- [
645
- [
646
- { prim: 'DUP' },
647
- { prim: 'CAR' },
648
- {
649
- prim: 'DIP',
650
- args: [[{ prim: 'CDR' }]],
651
- },
652
- ],
653
- ],
654
- { prim: 'DUP' },
655
- { prim: 'SELF' },
656
- { prim: 'ADDRESS' },
657
- { prim: 'PAIR' },
658
- { prim: 'PACK' },
659
- {
660
- prim: 'DIP',
661
- args: [
662
- [
663
- [
664
- [
665
- { prim: 'DUP' },
666
- {
667
- prim: 'CAR',
668
- annots: ['@counter'],
669
- },
670
- {
671
- prim: 'DIP',
672
- args: [
673
- [
674
- {
675
- prim: 'CDR',
676
- },
677
- ],
678
- ],
679
- },
680
- ],
681
- ],
682
- {
683
- prim: 'DIP',
684
- args: [[{ prim: 'SWAP' }]],
685
- },
686
- ],
687
- ],
688
- },
689
- { prim: 'SWAP' },
690
- ],
691
- ],
692
- },
693
- [
694
- [
695
- { prim: 'DUP' },
696
- {
697
- prim: 'CAR',
698
- annots: ['@stored_counter'],
699
- },
700
- {
701
- prim: 'DIP',
702
- args: [[{ prim: 'CDR' }]],
703
- },
704
- ],
705
- ],
706
- {
707
- prim: 'DIP',
708
- args: [[{ prim: 'SWAP' }]],
709
- },
710
- [
711
- [{ prim: 'COMPARE' }, { prim: 'EQ' }],
712
- {
713
- prim: 'IF',
714
- args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
715
- },
716
- ],
717
- {
718
- prim: 'DIP',
719
- args: [[{ prim: 'SWAP' }]],
720
- },
721
- [
722
- [
723
- { prim: 'DUP' },
724
- {
725
- prim: 'CAR',
726
- annots: ['@threshold'],
727
- },
728
- {
729
- prim: 'DIP',
730
- args: [
731
- [
732
- {
733
- prim: 'CDR',
734
- annots: ['@keys'],
735
- },
736
- ],
737
- ],
738
- },
739
- ],
740
- ],
741
- {
742
- prim: 'DIP',
743
- args: [
744
- [
745
- {
746
- prim: 'PUSH',
747
- args: [{ prim: 'nat' }, { int: '0' }],
748
- annots: ['@valid'],
749
- },
750
- { prim: 'SWAP' },
751
- {
752
- prim: 'ITER',
753
- args: [
754
- [
755
- {
756
- prim: 'DIP',
757
- args: [[{ prim: 'SWAP' }]],
758
- },
759
- { prim: 'SWAP' },
760
- {
761
- prim: 'IF_CONS',
762
- args: [
763
- [
764
- [
765
- {
766
- prim: 'IF_NONE',
767
- args: [
768
- [
769
- {
770
- prim: 'SWAP',
771
- },
772
- {
773
- prim: 'DROP',
774
- },
775
- ],
776
- [
777
- {
778
- prim: 'SWAP',
779
- },
780
- {
781
- prim: 'DIP',
782
- args: [
783
- [
784
- {
785
- prim: 'SWAP',
786
- },
787
- {
788
- prim: 'DIP',
789
- args: [
790
- {
791
- int: '2',
792
- },
793
- [
794
- [
795
- {
796
- prim: 'DIP',
797
- args: [
798
- [
799
- {
800
- prim: 'DUP',
801
- },
802
- ],
803
- ],
804
- },
805
- {
806
- prim: 'SWAP',
807
- },
808
- ],
809
- ],
810
- ],
811
- },
812
- [
813
- [
814
- {
815
- prim: 'DIP',
816
- args: [
817
- {
818
- int: '2',
819
- },
820
- [
821
- {
822
- prim: 'DUP',
823
- },
824
- ],
825
- ],
826
- },
827
- {
828
- prim: 'DIG',
829
- args: [
830
- {
831
- int: '3',
832
- },
833
- ],
834
- },
835
- ],
836
- {
837
- prim: 'DIP',
838
- args: [
839
- [
840
- {
841
- prim: 'CHECK_SIGNATURE',
842
- },
843
- ],
844
- ],
845
- },
846
- {
847
- prim: 'SWAP',
848
- },
849
- {
850
- prim: 'IF',
851
- args: [
852
- [
853
- {
854
- prim: 'DROP',
855
- },
856
- ],
857
- [
858
- {
859
- prim: 'FAILWITH',
860
- },
861
- ],
862
- ],
863
- },
864
- ],
865
- {
866
- prim: 'PUSH',
867
- args: [
868
- {
869
- prim: 'nat',
870
- },
871
- {
872
- int: '1',
873
- },
874
- ],
875
- },
876
- {
877
- prim: 'ADD',
878
- annots: ['@valid'],
879
- },
880
- ],
881
- ],
882
- },
883
- ],
884
- ],
885
- },
886
- ],
887
- ],
888
- [
889
- [
890
- {
891
- prim: 'UNIT',
892
- },
893
- {
894
- prim: 'FAILWITH',
895
- },
896
- ],
897
- ],
898
- ],
899
- },
900
- { prim: 'SWAP' },
901
- ],
902
- ],
903
- },
904
- ],
905
- ],
906
- },
907
- [
908
- [{ prim: 'COMPARE' }, { prim: 'LE' }],
909
- {
910
- prim: 'IF',
911
- args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
912
- },
913
- ],
914
- {
915
- prim: 'IF_CONS',
916
- args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], []],
917
- },
918
- { prim: 'DROP' },
919
- {
920
- prim: 'DIP',
921
- args: [
922
- [
923
- [
924
- [
925
- { prim: 'DUP' },
926
- { prim: 'CAR' },
927
- {
928
- prim: 'DIP',
929
- args: [[{ prim: 'CDR' }]],
930
- },
931
- ],
932
- ],
933
- {
934
- prim: 'PUSH',
935
- args: [{ prim: 'nat' }, { int: '1' }],
936
- },
937
- {
938
- prim: 'ADD',
939
- annots: ['@new_counter'],
940
- },
941
- { prim: 'PAIR' },
942
- ],
943
- ],
944
- },
945
- {
946
- prim: 'IF_LEFT',
947
- args: [
948
- [{ prim: 'UNIT' }, { prim: 'EXEC' }],
949
- [
950
- {
951
- prim: 'DIP',
952
- args: [[{ prim: 'CAR' }]],
953
- },
954
- { prim: 'SWAP' },
955
- { prim: 'PAIR' },
956
- {
957
- prim: 'NIL',
958
- args: [{ prim: 'operation' }],
959
- },
960
- ],
961
- ],
962
- },
963
- { prim: 'PAIR' },
964
- ],
965
- ],
966
- },
967
- ],
968
- ],
969
- },
970
- ];
971
- /**
972
- * Add contract address to forwarder contract template and return contract Michelson code as JSON
973
- *
974
- * @param {string} contractAddress - multisig contractAddress that will receive forwarded funds
975
- * @returns {object[]} Michelson code for the origination operation
976
- */
977
- function createForwarder(contractAddress) {
978
- return [
979
- {
980
- prim: 'parameter',
981
- args: [
982
- {
983
- prim: 'or',
984
- args: [
985
- { prim: 'unit', annots: ['%default'] },
986
- {
987
- prim: 'pair',
988
- args: [
989
- { prim: 'nat' },
990
- {
991
- prim: 'contract',
992
- args: [
993
- {
994
- prim: 'pair',
995
- args: [
996
- { prim: 'address', annots: [':from'] },
997
- {
998
- prim: 'pair',
999
- args: [
1000
- { prim: 'address', annots: [':to'] },
1001
- { prim: 'nat', annots: [':value'] },
1002
- ],
1003
- },
1004
- ],
1005
- },
1006
- ],
1007
- },
1008
- ],
1009
- annots: ['%flush'],
1010
- },
1011
- ],
1012
- },
1013
- ],
1014
- },
1015
- { prim: 'storage', args: [{ prim: 'unit' }] },
1016
- {
1017
- prim: 'code',
1018
- args: [
1019
- [
1020
- {
1021
- prim: 'CAST',
1022
- args: [
1023
- {
1024
- prim: 'pair',
1025
- args: [
1026
- {
1027
- prim: 'or',
1028
- args: [
1029
- { prim: 'unit' },
1030
- {
1031
- prim: 'pair',
1032
- args: [
1033
- { prim: 'nat' },
1034
- {
1035
- prim: 'contract',
1036
- args: [
1037
- {
1038
- prim: 'pair',
1039
- args: [
1040
- { prim: 'address' },
1041
- { prim: 'pair', args: [{ prim: 'address' }, { prim: 'nat' }] },
1042
- ],
1043
- },
1044
- ],
1045
- },
1046
- ],
1047
- },
1048
- ],
1049
- },
1050
- { prim: 'unit' },
1051
- ],
1052
- },
1053
- ],
1054
- },
1055
- { prim: 'CAR' },
1056
- {
1057
- prim: 'IF_LEFT',
1058
- args: [
1059
- [
1060
- { prim: 'DROP' },
1061
- {
1062
- prim: 'NONE',
1063
- args: [
1064
- {
1065
- prim: 'pair',
1066
- args: [
1067
- { prim: 'nat' },
1068
- {
1069
- prim: 'contract',
1070
- args: [
1071
- {
1072
- prim: 'pair',
1073
- args: [
1074
- { prim: 'address' },
1075
- { prim: 'pair', args: [{ prim: 'address' }, { prim: 'nat' }] },
1076
- ],
1077
- },
1078
- ],
1079
- },
1080
- ],
1081
- },
1082
- ],
1083
- },
1084
- ],
1085
- [{ prim: 'SOME' }],
1086
- ],
1087
- },
1088
- { prim: 'DIP', args: [[{ prim: 'PUSH', args: [{ prim: 'address' }, { string: contractAddress }] }]] },
1089
- {
1090
- prim: 'IF_NONE',
1091
- args: [
1092
- [{ prim: 'NIL', args: [{ prim: 'operation' }] }],
1093
- [
1094
- { prim: 'DIP', args: [[{ prim: 'DUP' }]] },
1095
- { prim: 'DUP' },
1096
- { prim: 'CAR' },
1097
- { prim: 'DIP', args: [[{ prim: 'CDR' }]] },
1098
- { prim: 'DIG', args: [{ int: '2' }] },
1099
- { prim: 'PAIR' },
1100
- { prim: 'SELF' },
1101
- { prim: 'ADDRESS' },
1102
- { prim: 'PAIR' },
1103
- { prim: 'DIP', args: [[{ prim: 'PUSH', args: [{ prim: 'mutez' }, { int: '0' }] }]] },
1104
- { prim: 'TRANSFER_TOKENS' },
1105
- { prim: 'DIP', args: [[{ prim: 'NIL', args: [{ prim: 'operation' }] }]] },
1106
- { prim: 'CONS' },
1107
- ],
1108
- ],
1109
- },
1110
- { prim: 'BALANCE' },
1111
- { prim: 'PUSH', args: [{ prim: 'mutez' }, { int: '0' }] },
1112
- { prim: 'COMPARE' },
1113
- { prim: 'EQ' },
1114
- {
1115
- prim: 'IF',
1116
- args: [
1117
- [{ prim: 'DIP', args: [[{ prim: 'DROP' }]] }],
1118
- [
1119
- {
1120
- prim: 'DIP',
1121
- args: [
1122
- [
1123
- { prim: 'CONTRACT', args: [{ prim: 'unit' }] },
1124
- {
1125
- prim: 'IF_NONE',
1126
- args: [
1127
- [
1128
- { prim: 'PUSH', args: [{ prim: 'string' }, { string: 'not a wallet' }] },
1129
- { prim: 'FAILWITH' },
1130
- ],
1131
- [],
1132
- ],
1133
- },
1134
- { prim: 'BALANCE' },
1135
- { prim: 'UNIT' },
1136
- { prim: 'TRANSFER_TOKENS' },
1137
- ],
1138
- ],
1139
- },
1140
- { prim: 'SWAP' },
1141
- { prim: 'CONS' },
1142
- ],
1143
- ],
1144
- },
1145
- { prim: 'DIP', args: [[{ prim: 'UNIT' }]] },
1146
- { prim: 'PAIR' },
1147
- ],
1148
- ],
1149
- },
1150
- ];
1151
- }
1152
- /**
1153
- * Create an origination operation for a forwarder contract
1154
- *
1155
- * @param {string} contractAddress originated multisig address to forward funds
1156
- * @param {string} counter Valid source account counter to use
1157
- * @param {string} source Source account address
1158
- * @param {string} fee Fees in mutez to pay by the source account
1159
- * @param {string} gasLimit Maximum amount in mutez to spend in gas fees
1160
- * @param {string} storageLimit Maximum amount in mutez to spend in storage fees
1161
- * @param {string} balance New multisig account initial balance taken from the source account
1162
- * @returns {OriginationOp} the operation
1163
- */
1164
- function forwarderOriginationOperation(contractAddress, counter, source, fee, gasLimit, storageLimit, balance) {
1165
- return {
1166
- kind: 'origination',
1167
- counter,
1168
- source,
1169
- fee,
1170
- gas_limit: gasLimit,
1171
- storage_limit: storageLimit,
1172
- balance,
1173
- script: {
1174
- code: createForwarder(contractAddress),
1175
- storage: { prim: 'Unit' },
1176
- },
1177
- };
1178
- }
1179
- exports.forwarderOriginationOperation = forwarderOriginationOperation;
1180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzaWdVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2luL3h0ei9tdWx0aXNpZ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBNEI7QUFFNUIsbUNBQXVHO0FBRXZHLHNDQUFzQztBQUN0QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRXBCOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0NBQW9DLENBQUMsU0FBd0I7SUFDM0UsTUFBTSxHQUFHLEdBQUc7UUFDVixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDbEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxTQUFTO1FBQzdCLFlBQVksRUFBRSxTQUFTLENBQUMsYUFBYTtLQUN0QyxDQUFDO0lBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUU7UUFDekIsd0JBQXdCO1FBQ3hCLE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN0QixFQUFFLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDekIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQ3hCLEdBQUc7U0FDSixDQUFDO0tBQ0g7SUFDRCxrRkFBa0Y7SUFDbEYsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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aEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOzZCQUNqQjt5QkFDRjtxQkFDRjtvQkFDRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQzNDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtpQkFDakI7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxlQUF1QixFQUN2QixPQUFlLEVBQ2YsTUFBYyxFQUNkLEdBQVcsRUFDWCxRQUFnQixFQUNoQixZQUFvQixFQUNwQixPQUFlO0lBRWYsT0FBTztRQUNMLElBQUksRUFBRSxhQUFhO1FBQ25CLE9BQU87UUFDUCxNQUFNO1FBQ04sR0FBRztRQUNILFNBQVMsRUFBRSxRQUFRO1FBQ25CLGFBQWEsRUFBRSxZQUFZO1FBQzNCLE9BQU87UUFDUCxNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQztZQUN0QyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQzFCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUF0QkQsc0VBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW5kZXhlZFNpZ25hdHVyZSwgT3JpZ2luYXRpb25EYXRhLCBPcmlnaW5hdGlvbk9wLCBSZXZlYWxPcCwgVHJhbnNhY3Rpb25PcCwgVHJhbnNmZXJEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBERUZBVUxUX0ZFRSwgREVGQVVMVF9HQVNfTElNSVQsIERFRkFVTFRfU1RPUkFHRV9MSU1JVCwgaGFzaFR5cGVzLCBpc1ZhbGlkS2V5IH0gZnJvbSAnLi91dGlscyc7XG5cbi8vIERlZmF1bHQgbiBvZiBtIGZvciBtdWx0aXNpZyB3YWxsZXRzXG5jb25zdCBERUZBVUxUX04gPSAyO1xuY29uc3QgREVGQVVMVF9NID0gMztcblxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIGdldCB0aGUgdHJhbnNmZXIgZGV0YWlscyBmcm9tIGEgZ2VuZXJpYyBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbk9wfSBvcGVyYXRpb24gQSB0cmFuc2FjdGlvbiBvcGVyYXRpb24gSlNPTlxuICogQHJldHVybnMge1RyYW5zZmVyRGF0YX0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGRlc3RpbmF0aW9uLCB0b2tlbiBhbmQgdHJhbnNmZXIgYW1vdW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNdWx0aXNpZ1RyYW5zZmVyRGF0YUZyb21PcGVyYXRpb24ob3BlcmF0aW9uOiBUcmFuc2FjdGlvbk9wKTogVHJhbnNmZXJEYXRhIHtcbiAgY29uc3QgZmVlID0ge1xuICAgIGZlZTogb3BlcmF0aW9uLmZlZSxcbiAgICBnYXNMaW1pdDogb3BlcmF0aW9uLmdhc19saW1pdCxcbiAgICBzdG9yYWdlTGltaXQ6IG9wZXJhdGlvbi5zdG9yYWdlX2xpbWl0LFxuICB9O1xuXG4gIGlmICghb3BlcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAvLyBTaW5nbGVzaWcgdHJhbnNhY3Rpb25cbiAgICByZXR1cm4ge1xuICAgICAgY29pbjogJ211dGV6JyxcbiAgICAgIGZyb206IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICB0bzogb3BlcmF0aW9uLmRlc3RpbmF0aW9uLFxuICAgICAgYW1vdW50OiBvcGVyYXRpb24uYW1vdW50LFxuICAgICAgZmVlLFxuICAgIH07XG4gIH1cbiAgLy8gVGhlc2UgZm9sbG93IHRoZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgcmVzcG9uc2Ugb2YgZ2VuZXJpY011bHRpc2lnVHJhbnNmZXJQYXJhbXMoKVxuICBjb25zdCB0cmFuc2ZlckFyZ3MgPSBvcGVyYXRpb24ucGFyYW1ldGVycy52YWx1ZS5hcmdzWzBdLmFyZ3NbMV0uYXJnc1swXTtcbiAgY29uc3QgYWNjb3VudFR5cGUgPSB0cmFuc2ZlckFyZ3NbM10ucHJpbTtcbiAgY29uc3QgY291bnRlciA9IG9wZXJhdGlvbi5wYXJhbWV0ZXJzLnZhbHVlLmFyZ3NbMF0uYXJnc1swXS5pbnQ7XG4gIC8vIEluIG11bHRpc2lnIHRyYW5zYWN0aW9ucywgdGhlIHdhbGxldCBjb250cmFjdCBpcyB0aGUgZGVzdGluYXRpb25cbiAgY29uc3QgZnJvbSA9IG9wZXJhdGlvbi5kZXN0aW5hdGlvbjtcblxuICBsZXQgYWNjb3VudFR5cGVJbmRleDtcbiAgc3dpdGNoIChhY2NvdW50VHlwZSkge1xuICAgIGNhc2UgJ0lNUExJQ0lUX0FDQ09VTlQnOlxuICAgICAgYWNjb3VudFR5cGVJbmRleCA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdDT05UUkFDVCc6XG4gICAgICBhY2NvdW50VHlwZUluZGV4ID0gNTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udHJhY3QgcGFyYW1ldGVycycpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2luOiB0cmFuc2ZlckFyZ3NbYWNjb3VudFR5cGVJbmRleF0uYXJnc1swXS5wcmltLFxuICAgIGZyb20sXG4gICAgdG86IHRyYW5zZmVyQXJnc1syXS5hcmdzWzFdLnN0cmluZyxcbiAgICBhbW91bnQ6IHRyYW5zZmVyQXJnc1thY2NvdW50VHlwZUluZGV4XS5hcmdzWzFdLmludCxcbiAgICBmZWUsXG4gICAgY291bnRlcixcbiAgfTtcbn1cblxuLyoqXG4gKiAgSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIHdhbGxldCBvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHR4IGZyb20gYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uXG4gKlxuICogQHBhcmFtIHtPcmlnaW5hdGlvbk9wfSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIHtPcmlnaW5hdGlvbkRhdGF9IEluZm9ybWF0aW9uIGFib3V0IHRoZSB3YWxsZXQgY29udHJhY3QgY3JlYXRpbmcgYSBmb3J3YXJkZXIgY29udHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdpbmF0aW9uRGF0YUZyb21PcGVyYXRpb24ob3BlcmF0aW9uOiBPcmlnaW5hdGlvbk9wKTogT3JpZ2luYXRpb25EYXRhIHtcbiAgY29uc3QgZmVlID0ge1xuICAgIGZlZTogb3BlcmF0aW9uLmZlZSxcbiAgICBnYXNMaW1pdDogb3BlcmF0aW9uLmdhc19saW1pdCxcbiAgICBzdG9yYWdlTGltaXQ6IG9wZXJhdGlvbi5zdG9yYWdlX2xpbWl0LFxuICB9O1xuXG4gIGNvbnN0IHsgc291cmNlOiBmcm9tLCBjb3VudGVyLCBiYWxhbmNlIH0gPSBvcGVyYXRpb247XG5cbiAgLy8gVHJhbnNhY3Rpb25zIGluaXRpYWxpemluZyBhIGZvcndhcmRlciBjb250cmFjdCBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZSB3YWxsZXQgY29udHJhY3RcbiAgY29uc3QgZm9yd2FyZGVyRGVzdGluYXRpb246IHN0cmluZyA9IF8uZ2V0KG9wZXJhdGlvbiwgJ3NjcmlwdC5jb2RlWzJdLmFyZ3NbMF1bM10uYXJnc1swXVswXS5hcmdzWzFdLnN0cmluZycpO1xuXG4gIHJldHVybiB7XG4gICAgZmVlLFxuICAgIGNvdW50ZXIsXG4gICAgYmFsYW5jZSxcbiAgICBmcm9tLFxuICAgIGZvcndhcmRlckRlc3RpbmF0aW9uLFxuICB9O1xufVxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIGJ1aWxkIGEgc2luZ2xlc2lnIHRyYW5zYWN0aW9uIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRlciBTb3VyY2UgYWNjb3VudCBuZXh0IGNvdW50ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIGFjY291bnQgdGhhdCB3aWxsIHBheSBmb3IgZmVlcywgYW5kIGluIHNpbmdsZXNpZyB0cmFuc2FjdGlvbnMsIHdoZXJlXG4gKiAgICAgICAgdGhlIGZ1bmRzIGFyZSB0YWtlbiBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IFRoZSBhbW91bnQgaW4gbXV0ZXogdG8gYmUgdHJhbnNmZXJyZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBUaGUgYWNjb3VudCBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gZmVlIEZlZXMgaW4gbXV0ZXogdG8gcGF5IGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmd9IGdhc0xpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIGdhcyBmZWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUxpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIHN0b3JhZ2UgZmVlc1xuICogQHJldHVybnMge1RyYW5zYWN0aW9uT3B9QSBUZXpvcyB0cmFuc2FjdGlvbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZXNpZ1RyYW5zYWN0aW9uT3BlcmF0aW9uKFxuICBjb3VudGVyOiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBhbW91bnQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgZmVlOiBzdHJpbmcgPSBERUZBVUxUX0ZFRS5UUkFOU0ZFUi50b1N0cmluZygpLFxuICBnYXNMaW1pdDogc3RyaW5nID0gREVGQVVMVF9HQVNfTElNSVQuVFJBTlNGRVIudG9TdHJpbmcoKSxcbiAgc3RvcmFnZUxpbWl0OiBzdHJpbmcgPSBERUZBVUxUX1NUT1JBR0VfTElNSVQuVFJBTlNGRVIudG9TdHJpbmcoKSxcbik6IFRyYW5zYWN0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICd0cmFuc2FjdGlvbicsXG4gICAgc291cmNlLFxuICAgIGZlZSxcbiAgICBjb3VudGVyLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGFtb3VudCxcbiAgICBkZXN0aW5hdGlvbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtdWx0aXNpZyB3YWxsZXQgdHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICpcbiAqIEBzZWUge0BsaW5rIHRyYW5zYWN0aW9uT3BlcmF0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgU291cmNlIGFjY291bnQgbmV4dCBjb3VudGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBhY2NvdW50IHRoYXQgd2lsbCBwYXkgZm9yIGZlZXMsIGFuZCBpbiBzaW5nbGVzaWcgdHJhbnNhY3Rpb25zLCB3aGVyZVxuICogICAgICAgIHRoZSBmdW5kcyBhcmUgdGFrZW4gZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCBUaGUgYW1vdW50IGluIG11dGV6IHRvIGJlIHRyYW5zZmVycmVkXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RBZGRyZXNzIElmIGl0IGlzIGEgbXVsdGlzaWcgdHJhbnNmZXIsIHRoZSBzbWFydCBjb250cmFjdCBhZGRyZXNzIHdpdGggdGhlXG4gKiAgICAgICAgZnVuZHMgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBJZiBpdCBpcyBhIG11bHRpc2lnIHRyYW5zZmVyLCB0aGUgc21hcnQgY29udHJhY3QgY291bnRlciB0byB1c2VcbiAqICAgICAgICBpbiB0aGUgbmV4dCB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uQWRkcmVzcyBBbiBpbXBsaWNpdCBvciBvcmlnaW5hdGVkIGFkZHJlc3MgdG8gdHJhbnNmZXIgZnVkbnMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nW119IHNpZ25hdHVyZXMgc2lnbmF0dXJlcyBMaXN0IG9mIHNpZ25hdHVyZXMgYXV0aG9yaXppbmcgdGhlIGZ1bmRzIHRyYW5zZmVyIGZvcm1cbiAqICAgICAgICB0aGUgbXVsdGlzaWcgd2FsbGV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZmVlIEZlZXMgaW4gbXV0ZXogdG8gcGF5IGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmd9IGdhc0xpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIGdhcyBmZWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUxpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIHN0b3JhZ2UgZmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IG0gVGhlIG51bWJlciBvZiBzaWduZXJzIChvd25lcnMpIGZvciB0aGUgbXVsdGlzaWcgd2FsbGV0IGJlaW5nIHVzZWQuIERlZmF1bHQgaXMgM1xuICogQHJldHVybnMge1RyYW5zYWN0aW9uT3B9IEEgVGV6b3Mgb3BlcmF0aW9uIHdpdGggYSBnZW5lcmljIG11bHRpc2lnIHRyYW5zZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXNpZ1RyYW5zYWN0aW9uT3BlcmF0aW9uKFxuICBjb3VudGVyOiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBhbW91bnQ6IHN0cmluZyxcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmcsXG4gIGNvbnRyYWN0Q291bnRlcjogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdLFxuICBmZWU6IHN0cmluZyA9IERFRkFVTFRfRkVFLlRSQU5TRkVSLnRvU3RyaW5nKCksXG4gIGdhc0xpbWl0OiBzdHJpbmcgPSBERUZBVUxUX0dBU19MSU1JVC5UUkFOU0ZFUi50b1N0cmluZygpLFxuICBzdG9yYWdlTGltaXQ6IHN0cmluZyA9IERFRkFVTFRfU1RPUkFHRV9MSU1JVC5UUkFOU0ZFUi50b1N0cmluZygpLFxuICBtOiBudW1iZXIgPSBERUZBVUxUX00sXG4pOiBUcmFuc2FjdGlvbk9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndHJhbnNhY3Rpb24nLFxuICAgIHNvdXJjZSxcbiAgICBmZWUsXG4gICAgY291bnRlcixcbiAgICBnYXNfbGltaXQ6IGdhc0xpbWl0LFxuICAgIHN0b3JhZ2VfbGltaXQ6IHN0b3JhZ2VMaW1pdCxcbiAgICBhbW91bnQ6ICcwJywgLy8gRG9uJ3QgdHJhbnNmZXIgYW55IGZ1bmRzIGZyb20gaGUgc291cmNlIGFjY291bnQgdG8gdGhlIGNvbnRyYWN0IGluIG11bHRpc2lnIHR4c1xuICAgIGRlc3RpbmF0aW9uOiBjb250cmFjdEFkZHJlc3MsXG4gICAgcGFyYW1ldGVyczogZ2VuZXJpY011bHRpc2lnVHJhbnNmZXJQYXJhbXMoZGVzdGluYXRpb25BZGRyZXNzLCBhbW91bnQsIGNvbnRyYWN0Q291bnRlciwgc2lnbmF0dXJlcywgbSksXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBwYXJhbWV0ZXJzIHRvIGNhbGwgdGhlIGdlbmVyaWMgbXVsdGlzaWcgc21hcnQgY29udHJhY3Qgd2l0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb25BZGRyZXNzIEFuIGltcGxpY2l0IG9yIG9yaWdpbmF0ZWQgYWRkcmVzc1xuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBOdW1iZXIgb2YgTXV0ZXogdG8gYmUgdHJhbnNmZXJyZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cmFjdENvdW50ZXIgTXVsdGlzaWcgY29udHJhY3QgY291bnRlciBudW1iZXJcbiAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2YgdHJhbnNhY3Rpb25zIGFuZCB0aGVpciBvcmRlclxuICogQHBhcmFtIHtudW1iZXJ9IG0gVGhlIG11bHRpc2lnIHdhbGxldCB0b3RhbCBudW1iZXIgb2Ygc2lnbmVycyAob3duZXJzKVxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlcnMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdlbmVyaWNNdWx0aXNpZ1RyYW5zZmVyUGFyYW1zKFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgYW1vdW50OiBzdHJpbmcsXG4gIGNvbnRyYWN0Q291bnRlcjogc3RyaW5nLFxuICBzaWduYXR1cmVzOiBJbmRleGVkU2lnbmF0dXJlW10sXG4gIG06IG51bWJlcixcbikge1xuICBjb25zdCB0cmFuc2FjdGlvblNpZ25hdHVyZXM6IGFueVtdID0gYnVpbGRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnQ6ICdtYWluJyxcbiAgICB2YWx1ZToge1xuICAgICAgcHJpbTogJ1BhaXInLFxuICAgICAgYXJnczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJpbTogJ1BhaXInLFxuICAgICAgICAgIGFyZ3M6IFt7IGludDogY29udHJhY3RDb3VudGVyIH0sIHsgcHJpbTogJ0xlZnQnLCBhcmdzOiBbdHJhbnNmZXJUb0FjY291bnQoZGVzdGluYXRpb25BZGRyZXNzLCBhbW91bnQpXSB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNhY3Rpb25TaWduYXR1cmVzLFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFJlcGxhY2UgdGhlIHNpZ25hdHVyZXMgaW4gYSBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24gd2l0aCBuZXcgb25lcy5cbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uT3B9IHRyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIHRvIG11dGF0ZVxuICogQHBhcmFtIHtJbmRleGVkU2lnbmF0dXJlW119IHNpZ25hdHVyZXMgTGlzdCBvZiB0cmFuc2FjdGlvbnMgYW5kIHRoZWlyIG9yZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25PcCwgc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdKSB7XG4gIHRyYW5zYWN0aW9uLnBhcmFtZXRlcnMudmFsdWUuYXJnc1sxXSA9IGJ1aWxkU2lnbmF0dXJlcyhzaWduYXR1cmVzLCB0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzLnZhbHVlLmFyZ3NbMV0pO1xufVxuXG4vKipcbiAqIEdlIHRoZSBsaXN0IGlmIG11bHRpc2lnIHNpZ25hdHVyZXMgaWYgYW55IGluIGEgY29udmVuaWVudCBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbk9wfSB0cmFuc2FjdGlvbiBUaGUgdHJhbnNhY3Rpb24gdG8gc2VhcmNoIHRoZSBzaWduYXR1cmVzIGluXG4gKiBAcmV0dXJucyB7SW5kZXhlZFNpZ25hdHVyZVtdfSBBIGxpc3Qgb2Ygc2lnbmF0dXJlcyBhbmQgdGhlaXIgb3JkZXIgaW4gdGVoIHRyYW5zZmVyIHNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uT3ApOiBJbmRleGVkU2lnbmF0dXJlW10ge1xuICBjb25zdCBzaWduYXR1cmVzOiBJbmRleGVkU2lnbmF0dXJlW10gPSBbXTtcbiAgaWYgKCF0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzICYmICF0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzLnZhbHVlICYmICF0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzLnZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHJhd1NpZ25hdHVyZXMgPSB0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzLnZhbHVlLmFyZ3NbMV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3U2lnbmF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyYXdTaWduYXR1cmVzW2ldLnByaW0gPT09ICdTb21lJykge1xuICAgICAgc2lnbmF0dXJlcy5wdXNoKHtcbiAgICAgICAgc2lnbmF0dXJlOiByYXdTaWduYXR1cmVzW2ldLmFyZ3NbMF0uc3RyaW5nLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2lnbmF0dXJlcztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGxpc3Qgb2Ygb3JkZXJlZCBzaWduYXR1cmVzLCBwdXR0aW5nIGEgTm9uZSBwcmltaXRpdmUgZm9yIHRoZSBtaXNzaW5nIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIHtJbmRleGVkU2lnbmF0dXJlW119IHNpZ25hdHVyZXMgTGlzdCBvZiB0cmFuc2FjdGlvbnMgYW5kIHRoZWlyIG9yZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gbSBTaXplIG9mIHRoZSBzaWduYXR1cmUgbGlzdFxuICogQHBhcmFtIHthbnlbXX0gZXhpc3RpbmdTaWduYXR1cmVzIExpc3Qgb2YgZXhpc3Rpbmcgc2lnbmF0dXJlcyB0byBtZXJnZSB3aXRoIHRoZSBnZW5lcmF0ZWQgb25lc1xuICogQHJldHVybnMge2FueVtdfSBMaXN0IG9mIHNpZ25hdHVyZXMgaW4gdGhlIHJpZ2h0IG9yZGVyXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2lnbmF0dXJlcyhzaWduYXR1cmVzOiBJbmRleGVkU2lnbmF0dXJlW10sIGV4aXN0aW5nU2lnbmF0dXJlcyA9IFtdLCBtOiBudW1iZXIgPSBERUZBVUxUX00pIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJyYXkgd2l0aCB0aGUgZXhpc3Rpbmcgc2lnbmF0dXJlcyBhbmQvb3IgZW1wdHkgb2JqZWN0c1xuICBjb25zdCB0cmFuc2FjdGlvblNpZ25hdHVyZXM6IGFueVtdID0gZXhpc3RpbmdTaWduYXR1cmVzO1xuICBjb25zdCBzaXplID0gZXhpc3RpbmdTaWduYXR1cmVzLmxlbmd0aDtcbiAgaWYgKHNpemUgPiBtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBzaWduYXR1cmVzLiBFeHBlY3RlZCBsZXNzIHRoYW4gJyArIG0gKyAnIGdvdCAnICsgc2l6ZSk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IHNpemU7IGkgPCBtOyBpKyspIHtcbiAgICB0cmFuc2FjdGlvblNpZ25hdHVyZXMucHVzaCh7IHByaW06ICdOb25lJyB9KTtcbiAgfVxuICAvLyBSZXBsYWNlIHRoZSBlbXB0eSBzaWduYXR1cmVzIGZvciB0aGUgcmVhbCBvbmVzIGJhc2VkIG9uIHRoZSByaWdodCBpbmRleFxuICBzaWduYXR1cmVzLmZvckVhY2goKHMpID0+IHtcbiAgICBpZiAocy5pbmRleCkge1xuICAgICAgdHJhbnNhY3Rpb25TaWduYXR1cmVzW3MuaW5kZXhdID0geyBwcmltOiAnU29tZScsIGFyZ3M6IFt7IHN0cmluZzogcy5zaWduYXR1cmUgfV0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvblNpZ25hdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgZmlyc3QgXCJudWxsXCIgc2lnbmF0dXJlXG4gICAgICAgIGlmICh0cmFuc2FjdGlvblNpZ25hdHVyZXNbaV0ucHJpbSA9PT0gJ05vbmUnKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb25TaWduYXR1cmVzW2ldID0geyBwcmltOiAnU29tZScsIGFyZ3M6IFt7IHN0cmluZzogcy5zaWduYXR1cmUgfV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0cmFuc2FjdGlvblNpZ25hdHVyZXM7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBNaWNoZWxzb24gc2NyaXB0IHRvIGJlIHNpZ25lZCB0byB0cmFuc2ZlciBmdW5kcyBmcm9tIGEgbXVsdGlzaWdcbiAqIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0gY29udHJhY3RBZGRyZXNzIFRoZSBtdWx0aXNpZyBzbWFydCBjb250cmFjdCBhZGRyZXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb25BZGRyZXNzIFRoZSBkZXN0aW5hdGlvbiBhY2NvdW50IGFkZHJlc3MgKGltcGxpY2l0IG9yIG9yaWdpbmF0ZWQpXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBvZiBtdXRleiB0byB0cmFuc2ZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBXYWxsZXQgY291bnRlciB0byB1c2UgaW4gdGhlIHRyYW5zYWN0aW9uXG4gKiBAcmV0dXJucyBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIE1pY2hlbHNvbiBzY3JpcHQgdG8gc2lnbiBhbmQgYXBwcm92ZSBhIHRyYW5zZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljTXVsdGlzaWdEYXRhVG9TaWduKFxuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZyxcbiAgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gIGFtb3VudDogc3RyaW5nLFxuICBjb250cmFjdENvdW50ZXI6IHN0cmluZyxcbikge1xuICBjb25zdCBkYXRhID0ge1xuICAgIHByaW06ICdQYWlyJyxcbiAgICBhcmdzOiBbXG4gICAgICB7IGludDogY29udHJhY3RDb3VudGVyIH0sXG4gICAgICB7XG4gICAgICAgIHByaW06ICdMZWZ0JyxcbiAgICAgICAgYXJnczogW3RyYW5zZmVyVG9BY2NvdW50KGRlc3RpbmF0aW9uQWRkcmVzcywgYW1vdW50KV0sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG4gIGNvbnN0IHR5cGUgPSB7XG4gICAgcHJpbTogJ3BhaXInLFxuICAgIGFyZ3M6IFtcbiAgICAgIHtcbiAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgIGFubm90czogWyclY291bnRlciddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJpbTogJ29yJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICdsYW1iZGEnLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7IHByaW06ICd1bml0JyB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdvcGVyYXRpb24nIH1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFubm90czogWyclb3BlcmF0aW9uJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnbmF0JyxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJXRocmVzaG9sZCddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdrZXknIH1dLFxuICAgICAgICAgICAgICAgIGFubm90czogWycla2V5cyddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFubm90czogWyclY2hhbmdlX2tleXMnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBhbm5vdHM6IFsnOmFjdGlvbiddLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFubm90czogWyc6cGF5bG9hZCddLFxuICB9O1xuICByZXR1cm4gYnVpbGRQYWlyKGRhdGEsIHR5cGUsIGNvbnRyYWN0QWRkcmVzcyk7XG59XG5cbi8qKlxuICogVXRpbCBmdW5jdGlvbiB0byBidWlsZCBhIE1pY2hlbHNvbiBQYWlyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHR5cGVcbiAqIEBwYXJhbSBjb250cmFjdEFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gYnVpbGRQYWlyKGRhdGE6IGFueSwgdHlwZTogYW55LCBjb250cmFjdEFkZHJlc3M6IGFueSkge1xuICByZXR1cm4ge1xuICAgIGRhdGE6IHtcbiAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgIGFyZ3M6IFt7IHN0cmluZzogY29udHJhY3RBZGRyZXNzIH0sIGRhdGFdLFxuICAgIH0sXG4gICAgdHlwZToge1xuICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgYXJnczogW3sgcHJpbTogJ2FkZHJlc3MnIH0sIHR5cGVdLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGxhbWJkYSBmb3IgdGhlIG11bHRpc2lnIHRyYW5zYWN0aW9uIHRyYW5zZmVyIHRvIGFuIGltcGxpY2l0IG9yIG9yaWdpbmF0ZWQgYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBBY2NvdW50IGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgVGhlIGFtb3VudCBpbiBtdXRleiB0byB0cmFuc2ZlclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90ZXpvc3RhcXVpdG8uaW8vZG9jcy9tYWtpbmdfdHJhbnNmZXJzI3RyYW5zZmVyLTAwMDAwNS01MC1tdXRlei10b2tlbnMtZnJvbS1hLWt0MS1hZGRyZXNzLXRvLWEtdHoxLWFkZHJlc3N9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVyVG9BY2NvdW50KGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpIHtcbiAgaWYgKGlzVmFsaWRLZXkoYWRkcmVzcywgaGFzaFR5cGVzLktUKSkge1xuICAgIHJldHVybiB0cmFuc2ZlclRvT3JpZ2luYXRlZEFjY291bnQoYWRkcmVzcywgYW1vdW50KTtcbiAgfVxuICAvLyBMYW1iZGEgdG8gdHJhbnNmZXIgdG8gYW4gaW1wbGljaXQgYWNjb3VudFxuICByZXR1cm4gW1xuICAgIHsgcHJpbTogJ0RST1AnIH0sXG4gICAgeyBwcmltOiAnTklMJywgYXJnczogW3sgcHJpbTogJ29wZXJhdGlvbicgfV0gfSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAna2V5X2hhc2gnIH0sIHsgc3RyaW5nOiBhZGRyZXNzIH1dLFxuICAgIH0sXG4gICAgeyBwcmltOiAnSU1QTElDSVRfQUNDT1VOVCcgfSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAnbXV0ZXonIH0sIHsgaW50OiBhbW91bnQgfV0sXG4gICAgfSxcbiAgICB7IHByaW06ICdVTklUJyB9LFxuICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICB7IHByaW06ICdDT05TJyB9LFxuICBdO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBsYW1iZGEgZm9yIHRoZSBtdWx0aXNpZyB0cmFuc2FjdGlvbiB0cmFuc2ZlciB0byBhbiBvcmlnaW5hdGVkIGFjY291bnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgT3JpZ2luYXRlZCBhY2NvdW50IGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgVGhlIGFtb3VudCBpbiBtdXRleiB0byB0cmFuc2ZlclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90ZXpvc3RhcXVpdG8uaW8vZG9jcy9tYWtpbmdfdHJhbnNmZXJzI3RyYW5zZmVyLTAwMDAwMDEtMS1tdXRlei10b2tlbnMtZnJvbS1hLWt0MS1hZGRyZXNzLXRvLWEta3QxLWFkZHJlc3N9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVyVG9PcmlnaW5hdGVkQWNjb3VudChhZGRyZXNzOiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBbXG4gICAgeyBwcmltOiAnRFJPUCcgfSxcbiAgICB7IHByaW06ICdOSUwnLCBhcmdzOiBbeyBwcmltOiAnb3BlcmF0aW9uJyB9XSB9LFxuICAgIHtcbiAgICAgIHByaW06ICdQVVNIJyxcbiAgICAgIGFyZ3M6IFt7IHByaW06ICdhZGRyZXNzJyB9LCB7IHN0cmluZzogYWRkcmVzcyB9XSxcbiAgICB9LFxuICAgIHsgcHJpbTogJ0NPTlRSQUNUJywgYXJnczogW3sgcHJpbTogJ3VuaXQnIH1dIH0sXG4gICAgW1xuICAgICAge1xuICAgICAgICBwcmltOiAnSUZfTk9ORScsXG4gICAgICAgIGFyZ3M6IFtbW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0ZBSUxXSVRIJyB9XV0sIFtdXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAnbXV0ZXonIH0sIHsgaW50OiBhbW91bnQgfV0sXG4gICAgfSxcbiAgICB7IHByaW06ICdVTklUJyB9LFxuICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICB7IHByaW06ICdDT05TJyB9LFxuICBdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJldmVhbCBvcGVyYXRpb24gZm9yIGEgcHVibGljIGtleS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRlciBTb3VyY2UgYWNjb3VudCBuZXh0IGNvdW50ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGFjY291bnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IHB1YktleSBUaGUgcHVibGljIGtleSB0byByZXZlYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBmZWUgRmVlcyBpbiBtdXRleiB0byBwYXkgYnkgdGhlIHNvdXJjZSBhY2NvdW50XG4gKiBAcGFyYW0ge3N0cmluZ30gZ2FzTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gZ2FzIGZlZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gc3RvcmFnZSBmZWVzXG4gKiBAcmV0dXJucyBBbiBvcmlnaW5hdGlvbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldmVhbE9wZXJhdGlvbihcbiAgY291bnRlcjogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgcHViS2V5OiBzdHJpbmcsXG4gIGZlZTogc3RyaW5nID0gREVGQVVMVF9GRUUuUkVWRUFMLnRvU3RyaW5nKCksXG4gIGdhc0xpbWl0OiBzdHJpbmcgPSBERUZBVUxUX0dBU19MSU1JVC5SRVZFQUwudG9TdHJpbmcoKSxcbiAgc3RvcmFnZUxpbWl0OiBzdHJpbmcgPSBERUZBVUxUX1NUT1JBR0VfTElNSVQuUkVWRUFMLnRvU3RyaW5nKCksXG4pOiBSZXZlYWxPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3JldmVhbCcsXG4gICAgY291bnRlcixcbiAgICBzb3VyY2UsXG4gICAgZmVlLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIHB1YmxpY19rZXk6IHB1YktleSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uIGZvciB0aGUgZ2VuZXJpYyBtdWx0aXNnIGNvbnRyYWN0LiBJdCBkb2VzIG5vdCBjcmVhdGUgYSByZXZlYWxcbiAqIG9wZXJhdGlvbiBmb3IgdGhlIHNvdXJjZSBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudGVyIFZhbGlkIHNvdXJjZSBhY2NvdW50IGNvdW50ZXIgdG8gdXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFNvdXJjZSBhY2NvdW50IGFkZHJlc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBmZWUgRmVlcyBpbiBtdXRleiB0byBwYXkgYnkgdGhlIHNvdXJjZSBhY2NvdW50XG4gKiBAcGFyYW0ge3N0cmluZ30gZ2FzTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gZ2FzIGZlZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gc3RvcmFnZSBmZWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFsYW5jZSBOZXcgbXVsdGlzaWcgYWNjb3VudCBpbml0aWFsIGJhbGFuY2UgdGFrZW4gZnJvbSB0aGUgc291cmNlIGFjY291bnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHB1YktleXMgTGlzdCBvZiBwdWJsaWMga2V5cyBvZiB0aGUgbXVsdGlzaWcgb3duZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWxlZ2F0ZSBPcHRpb25hbCBpbXBsaWNpdCBhZGRyZXNzIHRvIGRlbGVnYXRlIHRoZSB3YWxsZXQgZnVuZHMgdG9cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgTWluaW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyByZXF1aXJlZCB0byBhdXRob3JpemUgYSBtdWx0aXNpZyBvcGVyYXRpb25cbiAqIEByZXR1cm5zIEFuIG9yaWdpbmF0aW9uIG9wZXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY011bHRpc2lnT3JpZ2luYXRpb25PcGVyYXRpb24oXG4gIGNvdW50ZXI6IHN0cmluZyxcbiAgc291cmNlOiBzdHJpbmcsXG4gIGZlZTogc3RyaW5nLFxuICBnYXNMaW1pdDogc3RyaW5nLFxuICBzdG9yYWdlTGltaXQ6IHN0cmluZyxcbiAgYmFsYW5jZTogc3RyaW5nLFxuICBwdWJLZXlzOiBzdHJpbmdbXSxcbiAgZGVsZWdhdGU/OiBzdHJpbmcsXG4gIHRocmVzaG9sZDogbnVtYmVyID0gREVGQVVMVF9OLFxuKTogT3JpZ2luYXRpb25PcCB7XG4gIGNvbnN0IHdhbGxldFB1YmxpY0tleXM6IGFueVtdID0gW107XG4gIHB1YktleXMuZm9yRWFjaCgocGspID0+IHdhbGxldFB1YmxpY0tleXMucHVzaCh7IHN0cmluZzogcGsgfSkpO1xuICBjb25zdCBvcmlnaW5hdGlvbk9wOiBPcmlnaW5hdGlvbk9wID0ge1xuICAgIGtpbmQ6ICdvcmlnaW5hdGlvbicsXG4gICAgY291bnRlcixcbiAgICBzb3VyY2UsXG4gICAgZmVlLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGJhbGFuY2UsXG4gICAgc2NyaXB0OiB7XG4gICAgICBjb2RlOiBnZW5lcmljTXVsdGlzaWcsXG4gICAgICBzdG9yYWdlOiB7XG4gICAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGludDogJzAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ1BhaXInLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW50OiB0aHJlc2hvbGQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2FsbGV0UHVibGljS2V5cyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgaWYgKGRlbGVnYXRlKSB7XG4gICAgb3JpZ2luYXRpb25PcC5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICB9XG4gIHJldHVybiBvcmlnaW5hdGlvbk9wO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHVibGljIGtleSBvZiBlYWNoIG93bmVyIG9mIGFuIG11bHRpc2lnIHdhbGxldCBvcmlnaW5hdGlvbiBjb250cmFjdC5cbiAqXG4gKiBAcGFyYW0ge09yaWdpbmF0aW9uT3B9IG9wZXJhdGlvbiBBbiBvcGVyYXRpb24gd2l0aCB0aGUgZ2VuZXJpYyBtdWx0aXNpZyB3YWxsZXQgb3JpZ2luYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gTGlzdCBvZiBhbGwgdGhlIG93bmVycyBzZXQgaW4gdGhlIG9yaWdpbmF0aW9uIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25lcnNQdWJsaWNLZXlzKG9wZXJhdGlvbjogT3JpZ2luYXRpb25PcCk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgb3duZXJzQXJncyA9IF8uZ2V0KG9wZXJhdGlvbiwgJ3NjcmlwdC5zdG9yYWdlLmFyZ3NbMV0uYXJnc1sxXScpO1xuICBpZiAoIW93bmVyc0FyZ3MpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG93bmVyc0FyZ3MubWFwKChvKSA9PiBvLnN0cmluZyk7XG59XG5cbi8qKlxuICogR2VuZXJpYyBNdWx0aXNpZyBjb250cmFjdCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tdXJiYXJkL3NtYXJ0LWNvbnRyYWN0cy9ibG9iL21hc3Rlci9tdWx0aXNpZy9taWNoZWxzb24vZ2VuZXJpYy50elxuICovXG5jb25zdCBnZW5lcmljTXVsdGlzaWcgPSBbXG4gIHtcbiAgICBwcmltOiAncGFyYW1ldGVyJyxcbiAgICBhcmdzOiBbXG4gICAgICB7XG4gICAgICAgIHByaW06ICdvcicsXG4gICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICB7IHByaW06ICd1bml0JywgYW5ub3RzOiBbJyVkZWZhdWx0J10gfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnbmF0JyxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJyVjb3VudGVyJ10sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ2xhbWJkYScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJW9wZXJhdGlvbiddLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJyV0aHJlc2hvbGQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeyBwcmltOiAna2V5JyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJWtleXMnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJWNoYW5nZV9rZXlzJ10sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJzphY3Rpb24nXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnOnBheWxvYWQnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByaW06ICdvcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeyBwcmltOiAnc2lnbmF0dXJlJyB9XSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJXNpZ3MnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbm5vdHM6IFsnJW1haW4nXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgcHJpbTogJ3N0b3JhZ2UnLFxuICAgIGFyZ3M6IFtcbiAgICAgIHtcbiAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICBhcmdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgICAgICBhbm5vdHM6IFsnJXN0b3JlZF9jb3VudGVyJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnbmF0JyxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJXRocmVzaG9sZCddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdrZXknIH1dLFxuICAgICAgICAgICAgICAgIGFubm90czogWycla2V5cyddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgcHJpbTogJ2NvZGUnLFxuICAgIGFyZ3M6IFtcbiAgICAgIFtcbiAgICAgICAgW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgIHsgcHJpbTogJ0NBUicgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnQ0RSJyB9XV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmltOiAnSUZfTEVGVCcsXG4gICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7IHByaW06ICdEUk9QJyB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ05JTCcsXG4gICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ29wZXJhdGlvbicgfV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ1BVU0gnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdtdXRleicgfSwgeyBpbnQ6ICcwJyB9XSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyBwcmltOiAnQU1PVU5UJyB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW3sgcHJpbTogJ0NPTVBBUkUnIH0sIHsgcHJpbTogJ0VRJyB9XSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwcmltOiAnSUYnLFxuICAgICAgICAgICAgICAgICAgYXJnczogW1tdLCBbW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0ZBSUxXSVRIJyB9XV1dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnU1dBUCcgfV1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnRFVQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnQ0FSJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdDRFInIH1dXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnRFVQJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdTRUxGJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdBRERSRVNTJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdQQUNLJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnRFVQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnQ0FSJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJ0Bjb3VudGVyJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NEUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ1NXQVAnIH1dXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnU1dBUCcgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NBUicsXG4gICAgICAgICAgICAgICAgICAgIGFubm90czogWydAc3RvcmVkX2NvdW50ZXInXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ0NEUicgfV1dLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdTV0FQJyB9XV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbeyBwcmltOiAnQ09NUEFSRScgfSwgeyBwcmltOiAnRVEnIH1dLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHByaW06ICdJRicsXG4gICAgICAgICAgICAgICAgICBhcmdzOiBbW10sIFtbeyBwcmltOiAnVU5JVCcgfSwgeyBwcmltOiAnRkFJTFdJVEgnIH1dXV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnU1dBUCcgfV1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgeyBwcmltOiAnRFVQJyB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnQ0FSJyxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJ0B0aHJlc2hvbGQnXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnQ0RSJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJ0BrZXlzJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnUFVTSCcsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ25hdCcgfSwgeyBpbnQ6ICcwJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnQHZhbGlkJ10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnSVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdTV0FQJyB9XV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnSUZfQ09OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0lGX05PTkUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ1NXQVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RST1AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnU1dBUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdTV0FQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OiAnMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRFVQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdTV0FQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDogJzInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdEVVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJRycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ6ICczJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnQ0hFQ0tfU0lHTkFUVVJFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdTV0FQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdJRicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdEUk9QJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdGQUlMV0lUSCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ1BVU0gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnQUREJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90czogWydAdmFsaWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdVTklUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdGQUlMV0lUSCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnU1dBUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFt7IHByaW06ICdDT01QQVJFJyB9LCB7IHByaW06ICdMRScgfV0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJpbTogJ0lGJyxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IFtbXSwgW1t7IHByaW06ICdVTklUJyB9LCB7IHByaW06ICdGQUlMV0lUSCcgfV1dXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ0lGX0NPTlMnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtbW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0ZBSUxXSVRIJyB9XV0sIFtdXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyBwcmltOiAnRFJPUCcgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NBUicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnQ0RSJyB9XV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnUFVTSCcsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ25hdCcgfSwgeyBpbnQ6ICcxJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdBREQnLFxuICAgICAgICAgICAgICAgICAgICAgIGFubm90czogWydAbmV3X2NvdW50ZXInXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnUEFJUicgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdJRl9MRUZUJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICBbeyBwcmltOiAnVU5JVCcgfSwgeyBwcmltOiAnRVhFQycgfV0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ0NBUicgfV1dLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdTV0FQJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ05JTCcsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ29wZXJhdGlvbicgfV0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF0sXG4gIH0sXG5dO1xuXG4vKipcbiAqIEFkZCBjb250cmFjdCBhZGRyZXNzIHRvIGZvcndhcmRlciBjb250cmFjdCB0ZW1wbGF0ZSBhbmQgcmV0dXJuIGNvbnRyYWN0IE1pY2hlbHNvbiBjb2RlIGFzIEpTT05cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RBZGRyZXNzIC0gbXVsdGlzaWcgY29udHJhY3RBZGRyZXNzIHRoYXQgd2lsbCByZWNlaXZlIGZvcndhcmRlZCBmdW5kc1xuICogQHJldHVybnMge29iamVjdFtdfSBNaWNoZWxzb24gY29kZSBmb3IgdGhlIG9yaWdpbmF0aW9uIG9wZXJhdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVGb3J3YXJkZXIoY29udHJhY3RBZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcmltOiAncGFyYW1ldGVyJyxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByaW06ICdvcicsXG4gICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgeyBwcmltOiAndW5pdCcsIGFubm90czogWyclZGVmYXVsdCddIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgIHsgcHJpbTogJ25hdCcgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwcmltOiAnY29udHJhY3QnLFxuICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ2FkZHJlc3MnLCBhbm5vdHM6IFsnOmZyb20nXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdhZGRyZXNzJywgYW5ub3RzOiBbJzp0byddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnbmF0JywgYW5ub3RzOiBbJzp2YWx1ZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGFubm90czogWyclZmx1c2gnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7IHByaW06ICdzdG9yYWdlJywgYXJnczogW3sgcHJpbTogJ3VuaXQnIH1dIH0sXG4gICAge1xuICAgICAgcHJpbTogJ2NvZGUnLFxuICAgICAgYXJnczogW1xuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ0NBU1QnLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbTogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICduYXQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnY29udHJhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnYWRkcmVzcycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdwYWlyJywgYXJnczogW3sgcHJpbTogJ2FkZHJlc3MnIH0sIHsgcHJpbTogJ25hdCcgfV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7IHByaW06ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBwcmltOiAnQ0FSJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICdJRl9MRUZUJyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RST1AnIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJpbTogJ05PTkUnLFxuICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ25hdCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ2NvbnRyYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnYWRkcmVzcycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAncGFpcicsIGFyZ3M6IFt7IHByaW06ICdhZGRyZXNzJyB9LCB7IHByaW06ICduYXQnIH1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFt7IHByaW06ICdTT01FJyB9XSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHByaW06ICdESVAnLCBhcmdzOiBbW3sgcHJpbTogJ1BVU0gnLCBhcmdzOiBbeyBwcmltOiAnYWRkcmVzcycgfSwgeyBzdHJpbmc6IGNvbnRyYWN0QWRkcmVzcyB9XSB9XV0gfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAnSUZfTk9ORScsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIFt7IHByaW06ICdOSUwnLCBhcmdzOiBbeyBwcmltOiAnb3BlcmF0aW9uJyB9XSB9XSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RJUCcsIGFyZ3M6IFtbeyBwcmltOiAnRFVQJyB9XV0gfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdEVVAnIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnQ0FSJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RJUCcsIGFyZ3M6IFtbeyBwcmltOiAnQ0RSJyB9XV0gfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdESUcnLCBhcmdzOiBbeyBpbnQ6ICcyJyB9XSB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnU0VMRicgfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdBRERSRVNTJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnRElQJywgYXJnczogW1t7IHByaW06ICdQVVNIJywgYXJnczogW3sgcHJpbTogJ211dGV6JyB9LCB7IGludDogJzAnIH1dIH1dXSB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdESVAnLCBhcmdzOiBbW3sgcHJpbTogJ05JTCcsIGFyZ3M6IFt7IHByaW06ICdvcGVyYXRpb24nIH1dIH1dXSB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NPTlMnIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBwcmltOiAnQkFMQU5DRScgfSxcbiAgICAgICAgICB7IHByaW06ICdQVVNIJywgYXJnczogW3sgcHJpbTogJ211dGV6JyB9LCB7IGludDogJzAnIH1dIH0sXG4gICAgICAgICAgeyBwcmltOiAnQ09NUEFSRScgfSxcbiAgICAgICAgICB7IHByaW06ICdFUScgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAnSUYnLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICBbeyBwcmltOiAnRElQJywgYXJnczogW1t7IHByaW06ICdEUk9QJyB9XV0gfV0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NPTlRSQUNUJywgYXJnczogW3sgcHJpbTogJ3VuaXQnIH1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0lGX05PTkUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnUFVTSCcsIGFyZ3M6IFt7IHByaW06ICdzdHJpbmcnIH0sIHsgc3RyaW5nOiAnbm90IGEgd2FsbGV0JyB9XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0ZBSUxXSVRIJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdCQUxBTkNFJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1VOSVQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnVFJBTlNGRVJfVE9LRU5TJyB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnQ09OUycgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHByaW06ICdESVAnLCBhcmdzOiBbW3sgcHJpbTogJ1VOSVQnIH1dXSB9LFxuICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9yaWdpbmF0aW9uIG9wZXJhdGlvbiBmb3IgYSBmb3J3YXJkZXIgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RBZGRyZXNzIG9yaWdpbmF0ZWQgbXVsdGlzaWcgYWRkcmVzcyB0byBmb3J3YXJkIGZ1bmRzXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRlciBWYWxpZCBzb3VyY2UgYWNjb3VudCBjb3VudGVyIHRvIHVzZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBTb3VyY2UgYWNjb3VudCBhZGRyZXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gZmVlIEZlZXMgaW4gbXV0ZXogdG8gcGF5IGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmd9IGdhc0xpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIGdhcyBmZWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUxpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIHN0b3JhZ2UgZmVlc1xuICogQHBhcmFtIHtzdHJpbmd9IGJhbGFuY2UgTmV3IG11bHRpc2lnIGFjY291bnQgaW5pdGlhbCBiYWxhbmNlIHRha2VuIGZyb20gdGhlIHNvdXJjZSBhY2NvdW50XG4gKiBAcmV0dXJucyB7T3JpZ2luYXRpb25PcH0gdGhlIG9wZXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZGVyT3JpZ2luYXRpb25PcGVyYXRpb24oXG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nLFxuICBjb3VudGVyOiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBmZWU6IHN0cmluZyxcbiAgZ2FzTGltaXQ6IHN0cmluZyxcbiAgc3RvcmFnZUxpbWl0OiBzdHJpbmcsXG4gIGJhbGFuY2U6IHN0cmluZyxcbik6IE9yaWdpbmF0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdvcmlnaW5hdGlvbicsXG4gICAgY291bnRlcixcbiAgICBzb3VyY2UsXG4gICAgZmVlLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGJhbGFuY2UsXG4gICAgc2NyaXB0OiB7XG4gICAgICBjb2RlOiBjcmVhdGVGb3J3YXJkZXIoY29udHJhY3RBZGRyZXNzKSxcbiAgICAgIHN0b3JhZ2U6IHsgcHJpbTogJ1VuaXQnIH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==