@bitgo-beta/sdk-coin-sol 7.6.4-beta.71 → 7.6.4-beta.710

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 (496) hide show
  1. package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
  2. package/dist/cjs/src/bigint-buffer-guard.js +29 -0
  3. package/dist/cjs/src/index.d.ts.map +1 -0
  4. package/dist/{src → cjs/src}/index.js +1 -1
  5. package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
  6. package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
  7. package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
  8. package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
  9. package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
  11. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +128 -0
  12. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/confidentialTransferBuilder.js +311 -0
  14. package/dist/{src → cjs/src}/lib/constants.d.ts +89 -2
  15. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  16. package/dist/cjs/src/lib/constants.js +269 -0
  17. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
  19. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  20. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
  22. package/dist/cjs/src/lib/iface.d.ts +526 -0
  23. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  24. package/dist/cjs/src/lib/iface.js +7 -0
  25. package/dist/{src → cjs/src}/lib/index.d.ts +5 -0
  26. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/index.js +93 -0
  28. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
  29. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  30. package/dist/cjs/src/lib/instructionParamsFactory.js +1220 -0
  31. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  32. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  33. package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
  34. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  35. package/dist/cjs/src/lib/keyPair.js +112 -0
  36. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  37. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  38. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  39. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  40. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  41. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  43. package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
  44. package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
  45. package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
  46. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
  47. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  48. package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
  49. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  50. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  51. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
  52. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
  53. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  54. package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
  55. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
  56. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  57. package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
  58. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
  59. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  60. package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
  61. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
  62. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
  63. package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
  64. package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
  65. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  66. package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
  67. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  68. package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -0
  69. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  70. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  71. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  72. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +214 -0
  73. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  74. package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -0
  75. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  76. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  77. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  78. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +87 -0
  79. package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
  80. package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
  81. package/dist/cjs/src/lib/token2022Resolve.js +199 -0
  82. package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
  83. package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
  84. package/dist/cjs/src/lib/tokenExtensions.js +105 -0
  85. package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
  86. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  87. package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
  88. package/dist/{src → cjs/src}/lib/transaction.d.ts +22 -0
  89. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  90. package/dist/cjs/src/lib/transaction.js +661 -0
  91. package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +9 -1
  92. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  93. package/dist/cjs/src/lib/transactionBuilder.js +388 -0
  94. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
  95. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  96. package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
  97. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  98. package/dist/cjs/src/lib/transferBuilder.js +81 -0
  99. package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
  100. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  101. package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
  102. package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
  103. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  104. package/dist/cjs/src/lib/utils.js +657 -0
  105. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  106. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  107. package/dist/cjs/src/register.d.ts +5 -0
  108. package/dist/cjs/src/register.d.ts.map +1 -0
  109. package/dist/cjs/src/register.js +29 -0
  110. package/dist/{src → cjs/src}/sol.d.ts +114 -3
  111. package/dist/cjs/src/sol.d.ts.map +1 -0
  112. package/dist/cjs/src/sol.js +1670 -0
  113. package/dist/{src → cjs/src}/solToken.d.ts +7 -0
  114. package/dist/cjs/src/solToken.d.ts.map +1 -0
  115. package/dist/cjs/src/solToken.js +79 -0
  116. package/dist/cjs/src/tsol.d.ts.map +1 -0
  117. package/dist/cjs/src/tsol.js +24 -0
  118. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  119. package/dist/cjs/test/fixtures/sol.js +1433 -0
  120. package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
  121. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  122. package/dist/cjs/test/resources/sol.js +320 -0
  123. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  124. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  125. package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
  126. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  127. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  128. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  129. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  130. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  131. package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
  132. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  134. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  135. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  136. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  137. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  138. package/dist/cjs/test/unit/keyPair.js +177 -0
  139. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  140. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  141. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  142. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  143. package/dist/cjs/test/unit/register.d.ts +2 -0
  144. package/dist/cjs/test/unit/register.d.ts.map +1 -0
  145. package/dist/cjs/test/unit/register.js +65 -0
  146. package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
  147. package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
  148. package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
  149. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
  150. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
  151. package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
  152. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
  153. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
  154. package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
  155. package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
  156. package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
  157. package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
  158. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  159. package/dist/cjs/test/unit/sol.js +5038 -0
  160. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  161. package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
  162. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  163. package/dist/cjs/test/unit/solToken.js +37 -0
  164. package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
  165. package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
  166. package/dist/cjs/test/unit/token2022Resolve.js +252 -0
  167. package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
  168. package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
  169. package/dist/cjs/test/unit/tokenExtensions.js +58 -0
  170. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  171. package/dist/cjs/test/unit/transaction.js +1108 -0
  172. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  173. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  174. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  175. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
  176. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
  177. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
  178. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
  179. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
  180. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
  181. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
  182. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
  183. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
  184. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
  185. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
  186. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
  187. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -0
  188. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  189. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  190. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  191. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  192. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  193. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  194. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  195. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  196. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  197. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  198. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  199. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  200. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  201. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
  202. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  203. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  204. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  205. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +302 -0
  206. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  207. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
  208. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  209. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  210. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  211. package/dist/cjs/test/unit/utils.js +628 -0
  212. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  213. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  214. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  215. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  216. package/dist/esm/index.d.ts +7 -0
  217. package/dist/esm/index.js +7 -0
  218. package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
  219. package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
  220. package/dist/esm/lib/ataInitializationBuilder.js +191 -0
  221. package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
  222. package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
  223. package/dist/esm/lib/closeAtaBuilder.js +155 -0
  224. package/dist/esm/lib/confidentialTransferBuilder.d.ts +128 -0
  225. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
  226. package/dist/esm/lib/confidentialTransferBuilder.js +304 -0
  227. package/dist/esm/lib/constants.d.ts +227 -0
  228. package/dist/esm/lib/constants.d.ts.map +1 -0
  229. package/dist/esm/lib/constants.js +266 -0
  230. package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
  231. package/dist/esm/lib/customInstructionBuilder.js +282 -0
  232. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  233. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  234. package/dist/esm/lib/explainTransactionWasm.js +301 -0
  235. package/dist/esm/lib/iface.d.ts +526 -0
  236. package/dist/esm/lib/iface.d.ts.map +1 -0
  237. package/dist/esm/lib/iface.js +3 -0
  238. package/dist/esm/lib/index.d.ts +27 -0
  239. package/dist/esm/lib/index.d.ts.map +1 -0
  240. package/dist/esm/lib/index.js +27 -0
  241. package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
  242. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
  243. package/dist/esm/lib/instructionParamsFactory.js +1212 -0
  244. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  245. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  246. package/dist/esm/lib/keyPair.d.ts +32 -0
  247. package/dist/esm/lib/keyPair.d.ts.map +1 -0
  248. package/dist/esm/lib/keyPair.js +75 -0
  249. package/dist/esm/lib/messages/index.d.ts +2 -0
  250. package/dist/esm/lib/messages/index.js +2 -0
  251. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  252. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  253. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  254. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  255. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  256. package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
  257. package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
  258. package/dist/esm/lib/scaledUiAmount.js +108 -0
  259. package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
  260. package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  261. package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
  262. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  263. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  264. package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
  265. package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
  266. package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  267. package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
  268. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
  269. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  270. package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
  271. package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
  272. package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  273. package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
  274. package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
  275. package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
  276. package/dist/esm/lib/serialization/wire-transaction.js +48 -0
  277. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  278. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  279. package/dist/esm/lib/solInstructionFactory.js +1088 -0
  280. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  281. package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
  282. package/dist/esm/lib/stakingActivateBuilder.js +122 -0
  283. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  284. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  285. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  286. package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  287. package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
  288. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  289. package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
  290. package/dist/esm/lib/stakingDelegateBuilder.js +119 -0
  291. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  292. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  293. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  294. package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
  295. package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
  296. package/dist/esm/lib/token2022Resolve.d.ts +106 -0
  297. package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
  298. package/dist/esm/lib/token2022Resolve.js +194 -0
  299. package/dist/esm/lib/tokenExtensions.d.ts +26 -0
  300. package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
  301. package/dist/esm/lib/tokenExtensions.js +99 -0
  302. package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
  303. package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
  304. package/dist/esm/lib/tokenTransferBuilder.js +230 -0
  305. package/dist/esm/lib/transaction.d.ts +125 -0
  306. package/dist/esm/lib/transaction.d.ts.map +1 -0
  307. package/dist/esm/lib/transaction.js +654 -0
  308. package/dist/esm/lib/transactionBuilder.d.ts +136 -0
  309. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
  310. package/dist/esm/lib/transactionBuilder.js +381 -0
  311. package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
  312. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  313. package/dist/esm/lib/transactionBuilderFactory.js +218 -0
  314. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  315. package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
  316. package/dist/esm/lib/transferBuilder.js +74 -0
  317. package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
  318. package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
  319. package/dist/esm/lib/transferBuilderV2.js +245 -0
  320. package/dist/esm/lib/utils.d.ts +205 -0
  321. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  322. package/dist/esm/lib/utils.js +619 -0
  323. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  324. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  325. package/dist/esm/register.d.ts +5 -0
  326. package/dist/esm/register.d.ts.map +1 -0
  327. package/dist/esm/register.js +24 -0
  328. package/dist/esm/sol.d.ts +351 -0
  329. package/dist/esm/sol.d.ts.map +1 -0
  330. package/dist/esm/sol.js +1629 -0
  331. package/dist/esm/solToken.d.ts +44 -0
  332. package/dist/esm/solToken.d.ts.map +1 -0
  333. package/dist/esm/solToken.js +75 -0
  334. package/dist/esm/tsol.d.ts +11 -0
  335. package/dist/esm/tsol.js +20 -0
  336. package/package.json +36 -16
  337. package/dist/src/config/token2022StaticConfig.d.ts +0 -3
  338. package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
  339. package/dist/src/config/token2022StaticConfig.js +0 -50
  340. package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
  341. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  342. package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
  343. package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
  344. package/dist/src/lib/closeAtaBuilder.js +0 -69
  345. package/dist/src/lib/constants.d.ts.map +0 -1
  346. package/dist/src/lib/constants.js +0 -171
  347. package/dist/src/lib/customInstructionBuilder.js +0 -289
  348. package/dist/src/lib/iface.d.ts +0 -244
  349. package/dist/src/lib/iface.d.ts.map +0 -1
  350. package/dist/src/lib/iface.js +0 -7
  351. package/dist/src/lib/index.d.ts.map +0 -1
  352. package/dist/src/lib/index.js +0 -77
  353. package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
  354. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  355. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  356. package/dist/src/lib/keyPair.d.ts.map +0 -1
  357. package/dist/src/lib/keyPair.js +0 -63
  358. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  359. package/dist/src/lib/solInstructionFactory.js +0 -572
  360. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  361. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  362. package/dist/src/lib/stakingDeactivateBuilder.js +0 -208
  363. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  364. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  365. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  366. package/dist/src/lib/token2022Config.d.ts +0 -44
  367. package/dist/src/lib/token2022Config.d.ts.map +0 -1
  368. package/dist/src/lib/token2022Config.js +0 -27
  369. package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
  370. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  371. package/dist/src/lib/transaction.d.ts.map +0 -1
  372. package/dist/src/lib/transaction.js +0 -595
  373. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  374. package/dist/src/lib/transactionBuilder.js +0 -380
  375. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  376. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  377. package/dist/src/lib/transferBuilder.js +0 -70
  378. package/dist/src/lib/transferBuilderV2.d.ts +0 -43
  379. package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
  380. package/dist/src/lib/transferBuilderV2.js +0 -210
  381. package/dist/src/lib/utils.js +0 -589
  382. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  383. package/dist/src/register.d.ts +0 -3
  384. package/dist/src/register.d.ts.map +0 -1
  385. package/dist/src/register.js +0 -15
  386. package/dist/src/sol.d.ts.map +0 -1
  387. package/dist/src/sol.js +0 -1324
  388. package/dist/src/solToken.d.ts.map +0 -1
  389. package/dist/src/solToken.js +0 -69
  390. package/dist/src/tsol.js +0 -24
  391. package/dist/test/fixtures/sol.js +0 -1433
  392. package/dist/test/resources/sol.d.ts.map +0 -1
  393. package/dist/test/resources/sol.js +0 -320
  394. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  395. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  396. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  397. package/dist/test/unit/getBuilderFactory.js +0 -10
  398. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  399. package/dist/test/unit/instructionParamsFactory.js +0 -412
  400. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  401. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  402. package/dist/test/unit/keyPair.js +0 -177
  403. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  404. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  405. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  406. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  407. package/dist/test/unit/sol.js +0 -3180
  408. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  409. package/dist/test/unit/solInstructionFactory.js +0 -454
  410. package/dist/test/unit/solToken.d.ts.map +0 -1
  411. package/dist/test/unit/solToken.js +0 -31
  412. package/dist/test/unit/transaction.d.ts.map +0 -1
  413. package/dist/test/unit/transaction.js +0 -983
  414. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  415. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  416. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  417. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  418. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  419. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  420. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  421. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  422. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  423. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  424. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  425. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  426. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  427. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  428. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  429. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  430. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  431. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  432. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  433. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  434. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  435. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  436. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  437. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  438. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  439. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  440. package/dist/test/unit/utils.js +0 -517
  441. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  442. package/dist/test/unit/versionedTransaction.js +0 -207
  443. package/dist/tsconfig.tsbuildinfo +0 -1
  444. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  445. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  446. /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
  447. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  448. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  449. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  450. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  451. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  452. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  453. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  454. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  455. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  456. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  457. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  458. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  459. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  460. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  461. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  462. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  463. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  464. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  465. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  466. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  467. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  468. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  469. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  470. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  471. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  472. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  473. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  474. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  475. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  476. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  477. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  478. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  479. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  480. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  481. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  482. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  483. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  484. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  485. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  486. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  487. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  488. /package/dist/{src → esm}/index.d.ts.map +0 -0
  489. /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
  490. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  491. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  492. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  493. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  494. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  495. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  496. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const src_1 = require("../../../src");
40
+ const should_1 = __importDefault(require("should"));
41
+ const testData = __importStar(require("../../resources/sol"));
42
+ const getBuilderFactory_1 = require("../getBuilderFactory");
43
+ describe('Sol Associated Token Account Builder', () => {
44
+ function verifyInputOutputAndRawTransaction(tx, rawTx, owner = sender) {
45
+ tx.inputs.length.should.equal(0);
46
+ tx.outputs.length.should.equal(0);
47
+ const instructions = tx.toJson().instructionsData;
48
+ let ataInitInstruction;
49
+ for (const instruction of instructions) {
50
+ if (instruction.type === 'CreateAssociatedTokenAccount') {
51
+ ataInitInstruction = instruction;
52
+ break;
53
+ }
54
+ }
55
+ should_1.default.exist(ataInitInstruction);
56
+ ataInitInstruction.params.tokenName.should.equal(mint);
57
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
58
+ }
59
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('sol');
60
+ const ataInitBuilder = () => {
61
+ const txBuilder = factory.getAtaInitializationBuilder();
62
+ txBuilder.nonce(recentBlockHash);
63
+ txBuilder.sender(account.pub);
64
+ txBuilder.mint(mint);
65
+ txBuilder.rentExemptAmount(rentAmount);
66
+ return txBuilder;
67
+ };
68
+ const account = new src_1.KeyPair(testData.associatedTokenAccounts.accounts[0]).getKeys();
69
+ const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
70
+ const sender = {
71
+ pubkey: account.pub,
72
+ ataPubkey: testData.associatedTokenAccounts.accounts[0].ata,
73
+ };
74
+ const wrongAccount = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
75
+ const mint = testData.associatedTokenAccounts.mint;
76
+ const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
77
+ const rentAmount = '30000';
78
+ const token2022ProgramId = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
79
+ // for diff owner case
80
+ const accountOwner = new src_1.KeyPair(testData.associatedTokenAccounts.accounts[1]).getKeys();
81
+ const ownerPubkeys = {
82
+ pubkey: accountOwner.pub,
83
+ ataPubkey: testData.associatedTokenAccounts.accounts[1].ata,
84
+ };
85
+ describe('Build and sign', () => {
86
+ describe('Succeed', () => {
87
+ it('build an associated token account init tx unsigned', async () => {
88
+ const txBuilder = ataInitBuilder();
89
+ const tx = await txBuilder.build();
90
+ const rawTx = tx.toBroadcastFormat();
91
+ verifyInputOutputAndRawTransaction(tx, rawTx);
92
+ should_1.default.equal(rawTx, testData.ATA_INIT_UNSIGNED_TX);
93
+ });
94
+ it('build an associated token account init tx unsigned with memo', async () => {
95
+ const txBuilder = ataInitBuilder();
96
+ txBuilder.memo('test memo please ignore');
97
+ const tx = await txBuilder.build();
98
+ const rawTx = tx.toBroadcastFormat();
99
+ verifyInputOutputAndRawTransaction(tx, rawTx);
100
+ should_1.default.equal(rawTx, testData.ATA_INIT_UNSIGNED_TX_WITH_MEMO);
101
+ });
102
+ it('build an associated token account init tx signed', async () => {
103
+ const txBuilder = ataInitBuilder();
104
+ txBuilder.sender(account.pub);
105
+ txBuilder.sign({ key: account.prv });
106
+ const tx = await txBuilder.build();
107
+ const rawTx = tx.toBroadcastFormat();
108
+ verifyInputOutputAndRawTransaction(tx, rawTx);
109
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX);
110
+ });
111
+ it('build an associated token account init tx with memo signed', async () => {
112
+ const txBuilder = ataInitBuilder();
113
+ txBuilder.memo('test memo please ignore');
114
+ txBuilder.sender(account.pub);
115
+ txBuilder.sign({ key: account.prv });
116
+ const tx = await txBuilder.build();
117
+ const rawTx = tx.toBroadcastFormat();
118
+ verifyInputOutputAndRawTransaction(tx, rawTx);
119
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX_WITH_MEMO);
120
+ });
121
+ it('build an associated token account init tx with durable nonce unsigned', async () => {
122
+ const txBuilder = ataInitBuilder();
123
+ txBuilder.memo('test memo please ignore');
124
+ txBuilder.sender(account.pub);
125
+ txBuilder.nonce(recentBlockHash, { walletNonceAddress: nonceAccount.pub, authWalletAddress: account.pub });
126
+ const tx = await txBuilder.build();
127
+ const rawTx = tx.toBroadcastFormat();
128
+ verifyInputOutputAndRawTransaction(tx, rawTx);
129
+ should_1.default.equal(rawTx, testData.ATA_INIT_UNSIGNED_TX_DURABLE_NONCE);
130
+ });
131
+ it('build an associated token account init tx with durable nonce signed', async () => {
132
+ const txBuilder = ataInitBuilder();
133
+ txBuilder.memo('test memo please ignore');
134
+ txBuilder.sender(account.pub);
135
+ txBuilder.nonce(recentBlockHash, { walletNonceAddress: nonceAccount.pub, authWalletAddress: account.pub });
136
+ txBuilder.sign({ key: account.prv });
137
+ const tx = await txBuilder.build();
138
+ const rawTx = tx.toBroadcastFormat();
139
+ verifyInputOutputAndRawTransaction(tx, rawTx);
140
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX_DURABLE_NONCE);
141
+ });
142
+ });
143
+ describe('ATA creation with different owner', () => {
144
+ it('build an associated token account init for diff owner tx unsigned', async () => {
145
+ const txBuilder = ataInitBuilder();
146
+ txBuilder.owner(accountOwner.pub);
147
+ const tx = await txBuilder.build();
148
+ const rawTx = tx.toBroadcastFormat();
149
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
150
+ should_1.default.equal(rawTx, testData.ATA_INIT_UNSIGNED_DIFF_OWNER_TX);
151
+ });
152
+ it('build an associated token account init for diff owner tx unsigned with memo', async () => {
153
+ const txBuilder = ataInitBuilder();
154
+ txBuilder.owner(accountOwner.pub);
155
+ txBuilder.memo('test memo please ignore');
156
+ const tx = await txBuilder.build();
157
+ const rawTx = tx.toBroadcastFormat();
158
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
159
+ should_1.default.equal(rawTx, testData.ATA_INIT_UNSIGNED_DIFF_OWNER_TX_WITH_MEMO);
160
+ });
161
+ it('build an associated token account init for diff owner tx signed', async () => {
162
+ const txBuilder = ataInitBuilder();
163
+ txBuilder.owner(accountOwner.pub);
164
+ txBuilder.sign({ key: account.prv });
165
+ const tx = await txBuilder.build();
166
+ const rawTx = tx.toBroadcastFormat();
167
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
168
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_DIFF_OWNER_TX);
169
+ });
170
+ it('build an associated token account init for diff owner tx with memo signed', async () => {
171
+ const txBuilder = ataInitBuilder();
172
+ txBuilder.owner(accountOwner.pub);
173
+ txBuilder.memo('test memo please ignore');
174
+ txBuilder.sign({ key: account.prv });
175
+ const tx = await txBuilder.build();
176
+ const rawTx = tx.toBroadcastFormat();
177
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
178
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_DIFF_OWNER_TX_WITH_MEMO);
179
+ });
180
+ });
181
+ describe('Fail', () => {
182
+ it('build an associated token account init tx when mint is invalid', () => {
183
+ const txBuilder = ataInitBuilder();
184
+ (0, should_1.default)(() => txBuilder.mint('invalidToken')).throwError('Invalid transaction: invalid token name, got: invalidToken');
185
+ });
186
+ it('build a wallet init tx and sign with an incorrect account', async () => {
187
+ const txBuilder = ataInitBuilder();
188
+ txBuilder.sender(account.pub);
189
+ txBuilder.sign({ key: wrongAccount.prv });
190
+ await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
191
+ });
192
+ it('build when nonce is not provided', async () => {
193
+ const txBuilder = factory.getAtaInitializationBuilder();
194
+ txBuilder.sender(account.pub);
195
+ txBuilder.mint(mint);
196
+ txBuilder.sign({ key: account.prv });
197
+ await txBuilder.build().should.rejectedWith('Invalid transaction: missing nonce blockhash');
198
+ });
199
+ it('build when sender is not provided', async () => {
200
+ const txBuilder = factory.getAtaInitializationBuilder();
201
+ txBuilder.nonce(recentBlockHash);
202
+ txBuilder.mint(mint);
203
+ txBuilder.sign({ key: account.prv });
204
+ await txBuilder.build().should.rejectedWith('Invalid transaction: missing sender');
205
+ });
206
+ it('build when mint is not provided', async () => {
207
+ const txBuilder = factory.getAtaInitializationBuilder();
208
+ txBuilder.sender(account.pub);
209
+ txBuilder.nonce(recentBlockHash);
210
+ txBuilder.sign({ key: account.prv });
211
+ await txBuilder.build().should.rejectedWith('Mint must be set before building the transaction');
212
+ });
213
+ it('build when mint is invalid', async () => {
214
+ const txBuilder = factory.getAtaInitializationBuilder();
215
+ (0, should_1.default)(() => txBuilder.mint('sol:invalid mint')).throwError('Invalid transaction: invalid token name, got: sol:invalid mint');
216
+ });
217
+ it('build when rentExemptAmount is invalid', async () => {
218
+ const txBuilder = ataInitBuilder();
219
+ (0, should_1.default)(() => txBuilder.rentExemptAmount('invalid amount')).throwError('Invalid tokenAccountRentExemptAmount, got: invalid amount');
220
+ (0, should_1.default)(() => txBuilder.associatedTokenAccountRent('invalid amount')).throwError('Invalid tokenAccountRentExemptAmount, got: invalid amount');
221
+ });
222
+ it('build when owner is invalid', async () => {
223
+ const txBuilder = ataInitBuilder();
224
+ (0, should_1.default)(() => txBuilder.owner('invalid owner')).throwError('Invalid or missing ownerAddress, got: invalid owner');
225
+ });
226
+ it('to sign twice with the same key', () => {
227
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_TX);
228
+ txBuilder.sign({ key: account.prv });
229
+ (0, should_1.default)(() => txBuilder.sign({ key: account.prv })).throwError('Duplicated signer: ' + account.prv?.toString());
230
+ });
231
+ });
232
+ });
233
+ describe('Build and sign with enableToken', () => {
234
+ const recipients = [
235
+ {
236
+ ownerAddress: sender.pubkey,
237
+ tokenName: mint,
238
+ ataAddress: sender.ataPubkey,
239
+ },
240
+ {
241
+ ownerAddress: ownerPubkeys.pubkey,
242
+ tokenName: 'sol:ray',
243
+ ataAddress: 'ACEuzYtR4gBFt6HLQTYisg2T7k8Vh4ss1SpnqmbVQSNy',
244
+ },
245
+ {
246
+ ownerAddress: ownerPubkeys.pubkey,
247
+ tokenName: 'tsol:ams',
248
+ ataAddress: 'ACEuzYtR4gBFt6HLQTYisg2T7k8Vh4ss1SpnqmbVQSNy',
249
+ tokenAddress: 'F4uLeXioFz3hw13MposuwaQbMcZbCjqvEGPPeRRB1Byf',
250
+ programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
251
+ },
252
+ ];
253
+ const multiAtaInitBuilder = (recipients) => {
254
+ const txBuilder = factory.getAtaInitializationBuilder();
255
+ txBuilder.nonce(recentBlockHash);
256
+ recipients.forEach((recipient) => {
257
+ txBuilder.enableToken(recipient);
258
+ });
259
+ txBuilder.sender(sender.pubkey);
260
+ txBuilder.rentExemptAmount(rentAmount);
261
+ return txBuilder;
262
+ };
263
+ describe('ATA creation for multiple recipients', () => {
264
+ it('build an associated token account init for multiple recipients', async () => {
265
+ const txBuilder = multiAtaInitBuilder(recipients);
266
+ const tx = await txBuilder.build();
267
+ const rawTx = tx.toBroadcastFormat();
268
+ const ownerRayATA = 'ACEuzYtR4gBFt6HLQTYisg2T7k8Vh4ss1SpnqmbVQSNy';
269
+ tx.inputs.length.should.equal(0);
270
+ tx.outputs.length.should.equal(0);
271
+ const instructions = tx.toJson().instructionsData;
272
+ instructions.length.should.equal(3);
273
+ instructions[0].params.tokenName.should.equal(mint);
274
+ instructions[0].params.ownerAddress.should.equal(sender.pubkey);
275
+ instructions[0].params.ataAddress.should.equal(sender.ataPubkey);
276
+ instructions[1].params.tokenName.should.equal('sol:ray');
277
+ instructions[1].params.ownerAddress.should.equal(ownerPubkeys.pubkey);
278
+ instructions[1].params.ataAddress.should.equal(ownerRayATA);
279
+ instructions[2].params.tokenName.should.equal('tsol:ams');
280
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_UNSIGNED_TX_WITH_OPTIONAL_PARAMS);
281
+ });
282
+ it('build an associated token account init for multiple recipients with memo', async () => {
283
+ const txBuilder = multiAtaInitBuilder(recipients);
284
+ txBuilder.memo('test memo please ignore');
285
+ const tx = await txBuilder.build();
286
+ const rawTx = tx.toBroadcastFormat();
287
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_UNSIGNED_TX_WITH_MEMO_OPTIONAL_PARAM);
288
+ });
289
+ it('bundles permissionless thaw after Token-2022 ATA creation', async () => {
290
+ const t22Name = testData.sol2022TokenTransfers.name;
291
+ const t22Mint = testData.sol2022TokenTransfers.mint;
292
+ const tokenAccount = '98wFF5MpMjMQbfDF2MPzo8LCGX37unZR1ohRA1mU9GmJ';
293
+ const thawParams = {
294
+ authority: account.pub,
295
+ mint: t22Mint,
296
+ tokenAccount,
297
+ tokenAccountOwner: ownerPubkeys.pubkey,
298
+ gatingProgram: 'GbQ8ZiEFzGGTeYoXwtZtcoxwPcMyUcmZDduMVNdUPKpX',
299
+ flagAccount: '48n7YGEww7fKMfJ5gJ3sQC3rM6RWGjpUsghqVfXVkR5A',
300
+ mintConfig: '9sQhAH7vV3RKTCK13VY4EiNjs3qBq1srSYxdNufdAAXm',
301
+ extraAccounts: [{ pubkey: nonceAccount.pub, isSigner: false, isWritable: false }],
302
+ };
303
+ const txBuilder = factory.getAtaInitializationBuilder();
304
+ txBuilder.nonce(recentBlockHash);
305
+ txBuilder.sender(account.pub);
306
+ txBuilder.rentExemptAmount(rentAmount);
307
+ txBuilder.enableToken({
308
+ ownerAddress: ownerPubkeys.pubkey,
309
+ tokenName: t22Name,
310
+ tokenAddress: t22Mint,
311
+ programId: token2022ProgramId,
312
+ ataAddress: tokenAccount,
313
+ });
314
+ txBuilder.permissionlessThaw(thawParams);
315
+ const tx = await txBuilder.build();
316
+ const instructions = tx.toJson().instructionsData;
317
+ instructions
318
+ .map((i) => i.type)
319
+ .should.deepEqual(['CreateAssociatedTokenAccount', 'PermissionlessThawIdempotent']);
320
+ instructions[1].params.tokenAccount.should.equal(tokenAccount);
321
+ instructions[1].params.gatingProgram.should.equal(thawParams.gatingProgram);
322
+ instructions[1].params.extraAccounts.should.deepEqual(thawParams.extraAccounts);
323
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(tx.toBroadcastFormat()), true);
324
+ });
325
+ it('build an associated token account init tx for multiple recipients signed', async () => {
326
+ const txBuilder = multiAtaInitBuilder(recipients);
327
+ txBuilder.sign({ key: account.prv });
328
+ const tx = await txBuilder.build();
329
+ const rawTx = tx.toBroadcastFormat();
330
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_SIGNED_TX_OPTIONAL_PARAM);
331
+ });
332
+ it('build an associated token account init for multiple recipients tx with memo signed', async () => {
333
+ const txBuilder = multiAtaInitBuilder(recipients);
334
+ txBuilder.memo('test memo please ignore');
335
+ txBuilder.sign({ key: account.prv });
336
+ const tx = await txBuilder.build();
337
+ const rawTx = tx.toBroadcastFormat();
338
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_SIGNED_TX_WITH_MEMO_OPTIONAL_PARAM);
339
+ });
340
+ });
341
+ describe('Fail', () => {
342
+ it('should fail to build an associated token account init with duplicate recipients', async () => {
343
+ const duplicateRecipient = {
344
+ ownerAddress: sender.pubkey,
345
+ tokenName: mint,
346
+ ataAddress: sender.ataPubkey,
347
+ };
348
+ const txBuilder = multiAtaInitBuilder(recipients);
349
+ (0, should_1.default)(() => txBuilder.enableToken(duplicateRecipient)).throwError('Invalid transaction: invalid duplicate recipients, got: owner 12f6D3WubGVeQoH2m8kTvvcrasWdXWwtVzUCyRNDZxA2 and tokenName sol:usdc twice');
350
+ });
351
+ it('build an associated token account init tx when mint is invalid', () => {
352
+ const errorMintRecipient = {
353
+ ownerAddress: ownerPubkeys.pubkey,
354
+ tokenName: 'invalidToken',
355
+ ataAddress: ownerPubkeys.ataPubkey,
356
+ };
357
+ const txBuilder = multiAtaInitBuilder(recipients);
358
+ (0, should_1.default)(() => txBuilder.enableToken(errorMintRecipient)).throwError('Invalid transaction: invalid token name, got: invalidToken');
359
+ });
360
+ it('build a wallet init tx and sign with an incorrect account', async () => {
361
+ const txBuilder = multiAtaInitBuilder(recipients);
362
+ txBuilder.sender(account.pub);
363
+ txBuilder.sign({ key: wrongAccount.prv });
364
+ await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
365
+ });
366
+ it('build when nonce is not provided', async () => {
367
+ const txBuilder = factory.getAtaInitializationBuilder();
368
+ txBuilder.sender(account.pub);
369
+ txBuilder.enableToken({
370
+ ownerAddress: account.pub,
371
+ tokenName: mint,
372
+ ataAddress: sender.ataPubkey,
373
+ });
374
+ txBuilder.sign({ key: account.prv });
375
+ await txBuilder.build().should.rejectedWith('Invalid transaction: missing nonce blockhash');
376
+ });
377
+ it('build when sender is not provided', async () => {
378
+ const txBuilder = factory.getAtaInitializationBuilder();
379
+ txBuilder.nonce(recentBlockHash);
380
+ txBuilder.enableToken({
381
+ ownerAddress: account.pub,
382
+ tokenName: mint,
383
+ ataAddress: sender.ataPubkey,
384
+ });
385
+ txBuilder.sign({ key: account.prv });
386
+ await txBuilder.build().should.rejectedWith('Invalid transaction: missing sender');
387
+ });
388
+ it('build when recipient is not provided', async () => {
389
+ const txBuilder = factory.getAtaInitializationBuilder();
390
+ txBuilder.sender(account.pub);
391
+ txBuilder.nonce(recentBlockHash);
392
+ txBuilder.sign({ key: account.prv });
393
+ await txBuilder.build().should.rejectedWith('Mint must be set before building the transaction');
394
+ });
395
+ it('build when rentExemptAmount is invalid', async () => {
396
+ const txBuilder = multiAtaInitBuilder(recipients);
397
+ (0, should_1.default)(() => txBuilder.rentExemptAmount('invalid amount')).throwError('Invalid tokenAccountRentExemptAmount, got: invalid amount');
398
+ (0, should_1.default)(() => txBuilder.associatedTokenAccountRent('invalid amount')).throwError('Invalid tokenAccountRentExemptAmount, got: invalid amount');
399
+ });
400
+ it('build when token owner is invalid', async () => {
401
+ const invalidOwner = {
402
+ ownerAddress: 'invalid owner',
403
+ tokenName: mint,
404
+ ataAddress: sender.ataPubkey,
405
+ };
406
+ const txBuilder = multiAtaInitBuilder(recipients);
407
+ (0, should_1.default)(() => txBuilder.enableToken(invalidOwner)).throwError('Invalid or missing ownerAddress, got: invalid owner');
408
+ });
409
+ it('to sign twice with the same key', () => {
410
+ const txBuilder = factory.from(testData.MULTI_ATA_INIT_UNSIGNED_TX);
411
+ txBuilder.sign({ key: account.prv });
412
+ (0, should_1.default)(() => txBuilder.sign({ key: account.prv })).throwError('Duplicated signer: ' + account.prv?.toString());
413
+ });
414
+ });
415
+ });
416
+ describe('From and sign', () => {
417
+ describe('Succeed', () => {
418
+ it('build from a unsigned ATA init and sign it', async () => {
419
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_TX);
420
+ txBuilder.rentExemptAmount(rentAmount);
421
+ txBuilder.sign({ key: account.prv });
422
+ const tx = await txBuilder.build();
423
+ const rawTx = tx.toBroadcastFormat();
424
+ verifyInputOutputAndRawTransaction(tx, rawTx);
425
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX);
426
+ });
427
+ it('build from a unsigned ATA init with memo and sign it', async () => {
428
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_TX_WITH_MEMO);
429
+ txBuilder.rentExemptAmount(rentAmount);
430
+ txBuilder.sign({ key: account.prv });
431
+ const tx = await txBuilder.build();
432
+ const rawTx = tx.toBroadcastFormat();
433
+ verifyInputOutputAndRawTransaction(tx, rawTx);
434
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX_WITH_MEMO);
435
+ });
436
+ it('build from a unsigned ATA init with diff owner and sign it', async () => {
437
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_DIFF_OWNER_TX);
438
+ txBuilder.rentExemptAmount(rentAmount);
439
+ txBuilder.sign({ key: account.prv });
440
+ const tx = await txBuilder.build();
441
+ const rawTx = tx.toBroadcastFormat();
442
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
443
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_DIFF_OWNER_TX);
444
+ });
445
+ it('build from a unsigned ATA init with diff owner with memo and sign it', async () => {
446
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_DIFF_OWNER_TX_WITH_MEMO);
447
+ txBuilder.rentExemptAmount(rentAmount);
448
+ txBuilder.sign({ key: account.prv });
449
+ const tx = await txBuilder.build();
450
+ const rawTx = tx.toBroadcastFormat();
451
+ verifyInputOutputAndRawTransaction(tx, rawTx, ownerPubkeys);
452
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_DIFF_OWNER_TX_WITH_MEMO);
453
+ });
454
+ it('build from a unsigned ATA init for multi recipients and sign it', async () => {
455
+ const txBuilder = factory.from(testData.MULTI_ATA_INIT_UNSIGNED_TX);
456
+ txBuilder.rentExemptAmount(rentAmount);
457
+ txBuilder.sign({ key: account.prv });
458
+ const tx = await txBuilder.build();
459
+ const rawTx = tx.toBroadcastFormat();
460
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_SIGNED_TX);
461
+ });
462
+ it('build from a unsigned ATA init for multi recipients with memo and sign it', async () => {
463
+ const txBuilder = factory.from(testData.MULTI_ATA_INIT_UNSIGNED_TX_WITH_MEMO);
464
+ txBuilder.rentExemptAmount(rentAmount);
465
+ txBuilder.sign({ key: account.prv });
466
+ const tx = await txBuilder.build();
467
+ const rawTx = tx.toBroadcastFormat();
468
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_SIGNED_TX_WITH_MEMO);
469
+ });
470
+ it('build from a unsigned ATA init for multi recipients with memo and sign it with optinal param', async () => {
471
+ const txBuilder = factory.from(testData.MULTI_ATA_INIT_UNSIGNED_TX_WITH_MEMO_OPTIONAL_PARAM);
472
+ txBuilder.rentExemptAmount(rentAmount);
473
+ txBuilder.sign({ key: account.prv });
474
+ const tx = await txBuilder.build();
475
+ const rawTx = tx.toBroadcastFormat();
476
+ should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_SIGNED_TX_WITH_MEMO_OPTIONAL_PARAM1);
477
+ });
478
+ it('build from a unsigned raw token transfer with optinal param', async () => {
479
+ const txBuilder = factory.from(testData.TOKEN_TRANSFER_UNSIGNED_WITH_CREATE_ATA_AND_MEMO_AND_DURABLE_NONCE_WITH_OPTIONAL_PARAMS);
480
+ txBuilder._sendParams[0].tokenName = 'tsol:ams';
481
+ txBuilder._createAtaParams[0].tokenName = 'tsol:ams';
482
+ const tx = await txBuilder.build();
483
+ const rawTx = tx.toBroadcastFormat();
484
+ should_1.default.equal(rawTx, testData.TOKEN_TRANSFER_UNSIGNED_WITH_CREATE_ATA_AND_MEMO_AND_DURABLE_NONCE_WITH_OPTIONAL_PARAMS);
485
+ });
486
+ it('build from an unsigned ATA init with durable nonce and sign it', async () => {
487
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_TX_DURABLE_NONCE);
488
+ txBuilder.sign({ key: account.prv });
489
+ const tx = await txBuilder.build();
490
+ const rawTx = tx.toBroadcastFormat();
491
+ should_1.default.equal(rawTx, testData.ATA_INIT_SIGNED_TX_DURABLE_NONCE);
492
+ });
493
+ });
494
+ describe('Fail', () => {
495
+ it('build from a unsigned ATA init and fail to sign it', async () => {
496
+ const txBuilder = factory.from(testData.ATA_INIT_UNSIGNED_TX);
497
+ txBuilder.sign({ key: wrongAccount.prv });
498
+ await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
499
+ });
500
+ it('build from a signed ATA init and fail to sign it', async () => {
501
+ const txBuilder = factory.from(testData.ATA_INIT_SIGNED_TX);
502
+ txBuilder.sign({ key: wrongAccount.prv });
503
+ await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
504
+ });
505
+ });
506
+ });
507
+ });
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhSW5pdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2F0YUluaXRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQThGO0FBQzlGLG9EQUE0QjtBQUM1Qiw4REFBZ0Q7QUFFaEQsNERBQXlEO0FBRXpELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsU0FBUyxrQ0FBa0MsQ0FDekMsRUFBbUIsRUFDbkIsS0FBYSxFQUNiLFFBQStDLE1BQU07UUFFckQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxJQUFJLGtCQUFrQixDQUFDO1FBQ3ZCLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLDhCQUE4QixFQUFFLENBQUM7Z0JBQ3hELGtCQUFrQixHQUFHLFdBQVcsQ0FBQztnQkFDakMsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQ0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FB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QyxDQUFDO1lBQzlHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyLCBVdGlscywgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyLCBUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnU29sIEFzc29jaWF0ZWQgVG9rZW4gQWNjb3VudCBCdWlsZGVyJywgKCkgPT4ge1xuICBmdW5jdGlvbiB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKFxuICAgIHR4OiBCYXNlVHJhbnNhY3Rpb24sXG4gICAgcmF3VHg6IHN0cmluZyxcbiAgICBvd25lcjogeyBwdWJrZXk6IHN0cmluZzsgYXRhUHVia2V5OiBzdHJpbmcgfSA9IHNlbmRlclxuICApIHtcbiAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICBsZXQgYXRhSW5pdEluc3RydWN0aW9uO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKSB7XG4gICAgICAgIGF0YUluaXRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkLmV4aXN0KGF0YUluaXRJbnN0cnVjdGlvbik7XG4gICAgYXRhSW5pdEluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKG1pbnQpO1xuXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICB9XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdzb2wnKTtcbiAgY29uc3QgYXRhSW5pdEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcblxuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgYWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdKS5nZXRLZXlzKCk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLm5vbmNlQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBzZW5kZXIgPSB7XG4gICAgcHVia2V5OiBhY2NvdW50LnB1YixcbiAgICBhdGFQdWJrZXk6IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLmF0YSxcbiAgfTtcbiAgY29uc3Qgd3JvbmdBY2NvdW50ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBtaW50ID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMubWludDtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgcmVudEFtb3VudCA9ICczMDAwMCc7XG4gIGNvbnN0IHRva2VuMjAyMlByb2dyYW1JZCA9ICdUb2tlbnpRZEJOYkxxUDVWRWhka0FTNkVQRkxDMVBIbkJxQ1hFcFB4dUViJztcblxuICAvLyBmb3IgZGlmZiBvd25lciBjYXNlXG4gIGNvbnN0IGFjY291bnRPd25lciA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzFdKS5nZXRLZXlzKCk7XG4gIGNvbnN0IG93bmVyUHVia2V5cyA9IHtcbiAgICBwdWJrZXk6IGFjY291bnRPd25lci5wdWIsXG4gICAgYXRhUHVia2V5OiB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1sxXS5hdGEsXG4gIH07XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIGFuZCBzaWduJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHVuc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggdW5zaWduZWQgd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCB0eCBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2l0aCBtZW1vIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdpdGggZHVyYWJsZSBub25jZSB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IGFjY291bnQucHViIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWF9EVVJBQkxFX05PTkNFKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2l0aCBkdXJhYmxlIG5vbmNlIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IGFjY291bnQucHViIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWF9EVVJBQkxFX05PTkNFKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0FUQSBjcmVhdGlvbiB3aXRoIGRpZmZlcmVudCBvd25lcicsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgZGlmZiBvd25lciB0eCB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfRElGRl9PV05FUl9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IGZvciBkaWZmIG93bmVyIHR4IHVuc2lnbmVkIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIGRpZmYgb3duZXIgdHggc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIub3duZXIoYWNjb3VudE93bmVyLnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9ESUZGX09XTkVSX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIGRpZmYgb3duZXIgdHggd2l0aCBtZW1vIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2hlbiBtaW50IGlzIGludmFsaWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIubWludCgnaW52YWxpZFRva2VuJykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgdG9rZW4gbmFtZSwgZ290OiBpbnZhbGlkVG9rZW4nXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGEgd2FsbGV0IGluaXQgdHggYW5kIHNpZ24gd2l0aCBhbiBpbmNvcnJlY3QgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB3cm9uZ0FjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCd1bmtub3duIHNpZ25lcjogQ1A1RHBhYTQyUnRKbU11S3FDUXNMd21hNVloM2tudXZLc1lERlg4NUY0MVMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBub25jZSBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlIGJsb2NraGFzaCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHNlbmRlciBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIG1pbnQgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnTWludCBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gbWludCBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLm1pbnQoJ3NvbDppbnZhbGlkIG1pbnQnKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCB0b2tlbiBuYW1lLCBnb3Q6IHNvbDppbnZhbGlkIG1pbnQnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gcmVudEV4ZW1wdEFtb3VudCBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnJlbnRFeGVtcHRBbW91bnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCgnaW52YWxpZCBhbW91bnQnKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50LCBnb3Q6IGludmFsaWQgYW1vdW50J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIG93bmVyIGlzIGludmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIub3duZXIoJ2ludmFsaWQgb3duZXInKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBvciBtaXNzaW5nIG93bmVyQWRkcmVzcywgZ290OiBpbnZhbGlkIG93bmVyJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0byBzaWduIHR3aWNlIHdpdGggdGhlIHNhbWUga2V5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSkpLnRocm93RXJyb3IoJ0R1cGxpY2F0ZWQgc2lnbmVyOiAnICsgYWNjb3VudC5wcnY/LnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBhbmQgc2lnbiB3aXRoIGVuYWJsZVRva2VuJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIG93bmVyQWRkcmVzczogc2VuZGVyLnB1YmtleSxcbiAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICBhdGFBZGRyZXNzOiBzZW5kZXIuYXRhUHVia2V5LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvd25lclB1YmtleXMucHVia2V5LFxuICAgICAgICB0b2tlbk5hbWU6ICdzb2w6cmF5JyxcbiAgICAgICAgYXRhQWRkcmVzczogJ0FDRXV6WXRSNGdCRnQ2SExRVFlpc2cyVDdrOFZoNHNzMVNwbnFtYlZRU055JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3duZXJQdWJrZXlzLnB1YmtleSxcbiAgICAgICAgdG9rZW5OYW1lOiAndHNvbDphbXMnLFxuICAgICAgICBhdGFBZGRyZXNzOiAnQUNFdXpZdFI0Z0JGdDZITFFUWWlzZzJUN2s4Vmg0c3MxU3BucW1iVlFTTnknLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhpb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IG11bHRpQXRhSW5pdEJ1aWxkZXIgPSAocmVjaXBpZW50cykgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHJlY2lwaWVudCk7XG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoc2VuZGVyLnB1YmtleSk7XG4gICAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcblxuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ0FUQSBjcmVhdGlvbiBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cycsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBjb25zdCBvd25lclJheUFUQSA9ICdBQ0V1ell0UjRnQkZ0NkhMUVRZaXNnMlQ3azhWaDRzczFTcG5xbWJWUVNOeSc7XG5cbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcblxuICAgICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKG1pbnQpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLm93bmVyQWRkcmVzcy5zaG91bGQuZXF1YWwoc2VuZGVyLnB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMuYXRhQWRkcmVzcy5zaG91bGQuZXF1YWwoc2VuZGVyLmF0YVB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMudG9rZW5OYW1lLnNob3VsZC5lcXVhbCgnc29sOnJheScpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMV0ucGFyYW1zLm93bmVyQWRkcmVzcy5zaG91bGQuZXF1YWwob3duZXJQdWJrZXlzLnB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuYXRhQWRkcmVzcy5zaG91bGQuZXF1YWwob3duZXJSYXlBVEEpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMl0ucGFyYW1zLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ3Rzb2w6YW1zJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9PUFRJT05BTF9QQVJBTVMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cyB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9VTlNJR05FRF9UWF9XSVRIX01FTU9fT1BUSU9OQUxfUEFSQU0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidW5kbGVzIHBlcm1pc3Npb25sZXNzIHRoYXcgYWZ0ZXIgVG9rZW4tMjAyMiBBVEEgY3JlYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQyMk5hbWUgPSB0ZXN0RGF0YS5zb2wyMDIyVG9rZW5UcmFuc2ZlcnMubmFtZTtcbiAgICAgICAgY29uc3QgdDIyTWludCA9IHRlc3REYXRhLnNvbDIwMjJUb2tlblRyYW5zZmVycy5taW50O1xuICAgICAgICBjb25zdCB0b2tlbkFjY291bnQgPSAnOTh3RkY1TXBNak1RYmZERjJNUHpvOExDR1gzN3VuWlIxb2hSQTFtVTlHbUonO1xuICAgICAgICBjb25zdCB0aGF3UGFyYW1zID0ge1xuICAgICAgICAgIGF1dGhvcml0eTogYWNjb3VudC5wdWIsXG4gICAgICAgICAgbWludDogdDIyTWludCxcbiAgICAgICAgICB0b2tlbkFjY291bnQsXG4gICAgICAgICAgdG9rZW5BY2NvdW50T3duZXI6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgICAgZ2F0aW5nUHJvZ3JhbTogJ0diUThaaUVGekdHVGVZb1h3dFp0Y294d1BjTXlVY21aRGR1TVZOZFVQS3BYJyxcbiAgICAgICAgICBmbGFnQWNjb3VudDogJzQ4bjdZR0V3dzdmS01mSjVnSjNzUUMzck02UldHanBVc2docVZmWFZrUjVBJyxcbiAgICAgICAgICBtaW50Q29uZmlnOiAnOXNRaEFIN3ZWM1JLVENLMTNWWTRFaU5qczNxQnExc3JTWXhkTnVmZEFBWG0nLFxuICAgICAgICAgIGV4dHJhQWNjb3VudHM6IFt7IHB1YmtleTogbm9uY2VBY2NvdW50LnB1YiwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9XSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgICAgdG9rZW5OYW1lOiB0MjJOYW1lLFxuICAgICAgICAgIHRva2VuQWRkcmVzczogdDIyTWludCxcbiAgICAgICAgICBwcm9ncmFtSWQ6IHRva2VuMjAyMlByb2dyYW1JZCxcbiAgICAgICAgICBhdGFBZGRyZXNzOiB0b2tlbkFjY291bnQsXG4gICAgICAgIH0pO1xuICAgICAgICB0eEJ1aWxkZXIucGVybWlzc2lvbmxlc3NUaGF3KHRoYXdQYXJhbXMpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICAgIGluc3RydWN0aW9uc1xuICAgICAgICAgIC5tYXAoKGkpID0+IGkudHlwZSlcbiAgICAgICAgICAuc2hvdWxkLmRlZXBFcXVhbChbJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCAnUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCddKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy50b2tlbkFjY291bnQuc2hvdWxkLmVxdWFsKHRva2VuQWNjb3VudCk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuZ2F0aW5nUHJvZ3JhbS5zaG91bGQuZXF1YWwodGhhd1BhcmFtcy5nYXRpbmdQcm9ncmFtKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy5leHRyYUFjY291bnRzLnNob3VsZC5kZWVwRXF1YWwodGhhd1BhcmFtcy5leHRyYUFjY291bnRzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbih0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKSwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IGZvciBtdWx0aXBsZSByZWNpcGllbnRzIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9TSUdORURfVFhfT1BUSU9OQUxfUEFSQU0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cyB0eCB3aXRoIG1lbW8gc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9TSUdORURfVFhfV0lUSF9NRU1PX09QVElPTkFMX1BBUkFNKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgd2l0aCBkdXBsaWNhdGUgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlUmVjaXBpZW50ID0ge1xuICAgICAgICAgIG93bmVyQWRkcmVzczogc2VuZGVyLnB1YmtleSxcbiAgICAgICAgICB0b2tlbk5hbWU6IG1pbnQsXG4gICAgICAgICAgYXRhQWRkcmVzczogc2VuZGVyLmF0YVB1YmtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5lbmFibGVUb2tlbihkdXBsaWNhdGVSZWNpcGllbnQpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIGR1cGxpY2F0ZSByZWNpcGllbnRzLCBnb3Q6IG93bmVyIDEyZjZEM1d1YkdWZVFvSDJtOGtUdnZjcmFzV2RYV3d0VnpVQ3lSTkRaeEEyIGFuZCB0b2tlbk5hbWUgc29sOnVzZGMgdHdpY2UnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdoZW4gbWludCBpcyBpbnZhbGlkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1pbnRSZWNpcGllbnQgPSB7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBvd25lclB1YmtleXMucHVia2V5LFxuICAgICAgICAgIHRva2VuTmFtZTogJ2ludmFsaWRUb2tlbicsXG4gICAgICAgICAgYXRhQWRkcmVzczogb3duZXJQdWJrZXlzLmF0YVB1YmtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5lbmFibGVUb2tlbihlcnJvck1pbnRSZWNpcGllbnQpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIHRva2VuIG5hbWUsIGdvdDogaW52YWxpZFRva2VuJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhIHdhbGxldCBpbml0IHR4IGFuZCBzaWduIHdpdGggYW4gaW5jb3JyZWN0IGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd3JvbmdBY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgndW5rbm93biBzaWduZXI6IENQNURwYWE0MlJ0Sm1NdUtxQ1FzTHdtYTVZaDNrbnV2S3NZREZYODVGNDFTJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gbm9uY2UgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICAgIHRva2VuTmFtZTogbWludCxcbiAgICAgICAgICBhdGFBZGRyZXNzOiBzZW5kZXIuYXRhUHVia2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlIGJsb2NraGFzaCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHNlbmRlciBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5hYmxlVG9rZW4oe1xuICAgICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudC5wdWIsXG4gICAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICAgIGF0YUFkZHJlc3M6IHNlbmRlci5hdGFQdWJrZXksXG4gICAgICAgIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgc2VuZGVyJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gcmVjaXBpZW50IGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ01pbnQgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHJlbnRFeGVtcHRBbW91bnQgaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5yZW50RXhlbXB0QW1vdW50KCdpbnZhbGlkIGFtb3VudCcpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogaW52YWxpZCBhbW91bnQnXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYXNzb2NpYXRlZFRva2VuQWNjb3VudFJlbnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiB0b2tlbiBvd25lciBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkT3duZXIgPSB7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnaW52YWxpZCBvd25lcicsXG4gICAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICAgIGF0YUFkZHJlc3M6IHNlbmRlci5hdGFQdWJrZXksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZW5hYmxlVG9rZW4oaW52YWxpZE93bmVyKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBvciBtaXNzaW5nIG93bmVyQWRkcmVzcywgZ290OiBpbnZhbGlkIG93bmVyJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0byBzaWduIHR3aWNlIHdpdGggdGhlIHNhbWUga2V5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSkpLnRocm93RXJyb3IoJ0R1cGxpY2F0ZWQgc2lnbmVyOiAnICsgYWNjb3VudC5wcnY/LnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGcm9tIGFuZCBzaWduJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgd2l0aCBtZW1vIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IHdpdGggZGlmZiBvd25lciBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFgpO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX0RJRkZfT1dORVJfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgd2l0aCBkaWZmIG93bmVyIHdpdGggbWVtbyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9ESUZGX09XTkVSX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBmb3IgbXVsdGkgcmVjaXBpZW50cyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IGZvciBtdWx0aSByZWNpcGllbnRzIHdpdGggbWVtbyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICAgICh0eEJ1aWxkZXIgYXMgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKS5yZW50RXhlbXB0QW1vdW50KHJlbnRBbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgZm9yIG11bHRpIHJlY2lwaWVudHMgd2l0aCBtZW1vIGFuZCBzaWduIGl0IHdpdGggb3B0aW5hbCBwYXJhbScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYX1dJVEhfTUVNT19PUFRJT05BTF9QQVJBTSk7XG4gICAgICAgICh0eEJ1aWxkZXIgYXMgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKS5yZW50RXhlbXB0QW1vdW50KHJlbnRBbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU9fT1BUSU9OQUxfUEFSQU0xKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIHJhdyB0b2tlbiB0cmFuc2ZlciB3aXRoIG9wdGluYWwgcGFyYW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShcbiAgICAgICAgICB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0VfV0lUSF9PUFRJT05BTF9QQVJBTVNcbiAgICAgICAgKSBhcyBUb2tlblRyYW5zZmVyQnVpbGRlcjtcblxuICAgICAgICAodHhCdWlsZGVyIGFzIGFueSkuX3NlbmRQYXJhbXNbMF0udG9rZW5OYW1lID0gJ3Rzb2w6YW1zJztcbiAgICAgICAgKHR4QnVpbGRlciBhcyBhbnkpLl9jcmVhdGVBdGFQYXJhbXNbMF0udG9rZW5OYW1lID0gJ3Rzb2w6YW1zJztcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHJhd1R4LFxuICAgICAgICAgIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1dJVEhfQ1JFQVRFX0FUQV9BTkRfTUVNT19BTkRfRFVSQUJMRV9OT05DRV9XSVRIX09QVElPTkFMX1BBUkFNU1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGFuIHVuc2lnbmVkIEFUQSBpbml0IHdpdGggZHVyYWJsZSBub25jZSBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYX0RVUkFCTEVfTk9OQ0UpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYX0RVUkFCTEVfTk9OQ0UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgYW5kIGZhaWwgdG8gc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdyb25nQWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ3Vua25vd24gc2lnbmVyOiBDUDVEcGFhNDJSdEptTXVLcUNRc0x3bWE1WWgza251dktzWURGWDg1RjQxUycpO1xuICAgICAgfSk7XG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHNpZ25lZCBBVEEgaW5pdCBhbmQgZmFpbCB0byBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdyb25nQWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ3Vua25vd24gc2lnbmVyOiBDUDVEcGFhNDJSdEptTXVLcUNRc0x3bWE1WWgza251dktzWURGWDg1RjQxUycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=