@bitgo/account-lib 2.20.1-rc.2 → 2.21.0-hotfix.0

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