@bitgo/account-lib 2.20.0-rc.3 → 2.20.0-rc.32

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