@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,199 @@
1
+ "use strict";
2
+ /**
3
+ * @prettier
4
+ *
5
+ * Reusable Token-2022 resolution logic (Transfer Hook extra accounts and sRFC-37
6
+ * Token ACL permissionless thaw), decoupled from the `Sol` coin class so any caller
7
+ * with its own account-fetcher (e.g. wallet-platform reading chain state via IMS RPC)
8
+ * can resolve these dependencies offline of the SDK's node transport.
9
+ *
10
+ * The resolution functions take a `Connection` (only `getAccountInfo` is required);
11
+ * {@link buildSolAccountConnection} adapts a plain {@link SolAccountFetcher} into the
12
+ * shape `@solana/spl-token`'s transfer-hook helpers expect.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.buildSolAccountConnection = buildSolAccountConnection;
16
+ exports.resolveTransferHookAccounts = resolveTransferHookAccounts;
17
+ exports.resolvePermissionlessThaw = resolvePermissionlessThaw;
18
+ const spl_token_1 = require("@solana/spl-token");
19
+ const web3_js_1 = require("@solana/web3.js");
20
+ const constants_1 = require("./constants");
21
+ /**
22
+ * Build a minimal `Connection`-like shim backed by a {@link SolAccountFetcher}.
23
+ *
24
+ * `@solana/spl-token`'s transfer-hook resolution helpers only require
25
+ * `getAccountInfo(publicKey)` returning an `AccountInfo<Buffer>`. This adapts a
26
+ * plain address-based fetcher to that shape so any transport can drive the
27
+ * resolution below without opening a dedicated RPC connection.
28
+ *
29
+ * @param {SolAccountFetcher} fetch - fetcher returning decoded account info by address
30
+ * @returns {Connection} a shim exposing `getAccountInfo`, cast to `Connection`
31
+ */
32
+ function buildSolAccountConnection(fetch) {
33
+ const getAccountInfo = async (publicKey, _commitmentOrConfig) => {
34
+ return fetch(publicKey.toBase58());
35
+ };
36
+ return { getAccountInfo };
37
+ }
38
+ /**
39
+ * Map the extra keys appended to a resolved transfer instruction into the
40
+ * serializable {@link ExtraAccountMeta} shape.
41
+ */
42
+ function toExtraAccountMetas(instruction, baseKeyCount) {
43
+ return instruction.keys.slice(baseKeyCount).map((meta) => ({
44
+ pubkey: meta.pubkey.toBase58(),
45
+ isSigner: meta.isSigner,
46
+ isWritable: meta.isWritable,
47
+ }));
48
+ }
49
+ /**
50
+ * Decode the fields of a Token ACL MintConfig account we depend on.
51
+ *
52
+ * Layout: `u8 discriminator, u8 bump, bool enablePermissionlessThaw, bool enablePermissionlessFreeze,
53
+ * pubkey mint(32), pubkey freezeAuthority(32), pubkey gatingProgram(32)`.
54
+ */
55
+ function decodeTokenAclMintConfig(data) {
56
+ const enablePermissionlessThaw = data[2] === 1;
57
+ const gatingProgram = new web3_js_1.PublicKey(data.subarray(68, 100));
58
+ return { enablePermissionlessThaw, gatingProgram };
59
+ }
60
+ /**
61
+ * Resolve the gating program's thaw ExtraAccountMetaList onto a can-thaw context.
62
+ *
63
+ * Mirrors the reference `resolveExtraMetas`: fetch the extra-metas account, unpack its
64
+ * ExtraAccountMeta entries, then resolve each one (fixed address, PDA, or account-data derived)
65
+ * against the accumulating metas using the spl-token transfer-hook helpers. When the extra-metas
66
+ * account does not exist, there are no extras to append.
67
+ */
68
+ async function resolveTokenAclExtraMetas(connection, extraMetasAddress, previousMetas, gatingProgram) {
69
+ const instructionData = Buffer.from([constants_1.THAW_PERMISSIONLESS_IDEMPOTENT_DISCRIMINATOR]);
70
+ const resolvedMetas = [...previousMetas];
71
+ const extraMetasAccount = await connection.getAccountInfo(extraMetasAddress);
72
+ if (!extraMetasAccount) {
73
+ return resolvedMetas;
74
+ }
75
+ const extraAccountMetas = (0, spl_token_1.getExtraAccountMetas)(extraMetasAccount);
76
+ for (const extraAccountMeta of extraAccountMetas) {
77
+ const resolvedMeta = await (0, spl_token_1.resolveExtraAccountMeta)(connection, extraAccountMeta, resolvedMetas, instructionData, gatingProgram);
78
+ resolvedMetas.push(resolvedMeta);
79
+ }
80
+ return resolvedMetas;
81
+ }
82
+ /**
83
+ * Resolve the Token-2022 Transfer Hook extra accounts for a specific transfer.
84
+ *
85
+ * This is generic: it works for any Token-2022 mint by reading the mint's
86
+ * TransferHook extension and the hook program's ExtraAccountMetaList live from
87
+ * the node, then resolving each extra account (including seed-derived PDAs) via
88
+ * the standard `spl-transfer-hook-interface` helpers. The returned metas are in
89
+ * the exact order the hook requires and are suitable for
90
+ * `TokenTransfer.params.transferHookAccounts`.
91
+ *
92
+ * When the mint has no Transfer Hook, this returns an empty array and callers can
93
+ * omit the param.
94
+ *
95
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
96
+ * @param params - the transfer parameters
97
+ * @param {string} params.mint - the Token-2022 mint address
98
+ * @param {string} params.source - the source token account (sender ATA)
99
+ * @param {string} params.destination - the destination token account (recipient ATA)
100
+ * @param {string} params.owner - the source account owner / transfer authority
101
+ * @param {string} params.amount - the raw transfer amount in base units
102
+ * @returns {Promise<ExtraAccountMeta[]>} ordered extra account metas, or [] when no hook
103
+ */
104
+ async function resolveTransferHookAccounts(connection, params) {
105
+ const { mint, source, destination, owner, amount } = params;
106
+ const mintPubkey = new web3_js_1.PublicKey(mint);
107
+ // Read the mint and detect whether a Transfer Hook extension is configured.
108
+ const mintAccountInfo = await connection.getAccountInfo(mintPubkey);
109
+ if (!mintAccountInfo) {
110
+ return [];
111
+ }
112
+ const mintState = (0, spl_token_1.unpackMint)(mintPubkey, mintAccountInfo, spl_token_1.TOKEN_2022_PROGRAM_ID);
113
+ const transferHook = (0, spl_token_1.getTransferHook)(mintState);
114
+ if (!transferHook || transferHook.programId.equals(web3_js_1.PublicKey.default)) {
115
+ return [];
116
+ }
117
+ const sourcePubkey = new web3_js_1.PublicKey(source);
118
+ const destinationPubkey = new web3_js_1.PublicKey(destination);
119
+ const ownerPubkey = new web3_js_1.PublicKey(owner);
120
+ const transferAmount = BigInt(amount);
121
+ // Start from a base transferChecked instruction; addExtraAccountMetasForExecute
122
+ // appends the resolved extra accounts, the hook program, and the validation
123
+ // state account in the required order.
124
+ const instruction = (0, spl_token_1.createTransferCheckedInstruction)(sourcePubkey, mintPubkey, destinationPubkey, ownerPubkey, transferAmount, mintState.decimals, [], spl_token_1.TOKEN_2022_PROGRAM_ID);
125
+ const baseKeyCount = instruction.keys.length;
126
+ await (0, spl_token_1.addExtraAccountMetasForExecute)(connection, instruction, transferHook.programId, sourcePubkey, mintPubkey, destinationPubkey, ownerPubkey, transferAmount);
127
+ return toExtraAccountMetas(instruction, baseKeyCount);
128
+ }
129
+ /**
130
+ * Resolve the sRFC-37 Token ACL permissionless-thaw dependencies for a token account.
131
+ *
132
+ * This is generic: it works for ANY allowlist/blocklist (DefaultAccountState) Token-2022 mint
133
+ * gated by the Token ACL program — no issuer is hardcoded. It reads the mint's MintConfig PDA
134
+ * live from the node, and only when permissionless thaw is enabled does it derive the flag /
135
+ * mint-config / thaw-extra-metas PDAs and resolve the gating program's extra account metas (in
136
+ * the exact order the gating program requires, mirroring `resolveExtraMetas`).
137
+ *
138
+ * When the mint is not a Token ACL mint, or permissionless thaw is disabled, this returns
139
+ * `{ applicable: false }` and callers skip the thaw.
140
+ *
141
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
142
+ * @param params - the thaw parameters
143
+ * @param {string} params.mint - the Token-2022 mint address
144
+ * @param {string} params.tokenAccount - the token account (ATA) to thaw
145
+ * @param {string} params.tokenAccountOwner - the owner of the token account
146
+ * @param {string} params.authority - the signer invoking the thaw (fee payer / authority)
147
+ * @returns {Promise<ResolvePermissionlessThawResult>} the resolved thaw params, or `{ applicable: false }`
148
+ */
149
+ async function resolvePermissionlessThaw(connection, params) {
150
+ const { mint, tokenAccount, tokenAccountOwner, authority } = params;
151
+ const mintPubkey = new web3_js_1.PublicKey(mint);
152
+ const tokenAccountPubkey = new web3_js_1.PublicKey(tokenAccount);
153
+ const tokenAccountOwnerPubkey = new web3_js_1.PublicKey(tokenAccountOwner);
154
+ const authorityPubkey = new web3_js_1.PublicKey(authority);
155
+ const tokenAclProgramId = new web3_js_1.PublicKey(constants_1.TOKEN_ACL_PROGRAM_ID);
156
+ // 1. Read the mint's MintConfig PDA. Absent => the mint is not a Token ACL mint.
157
+ const [mintConfigPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TOKEN_ACL_MINT_CONFIG_SEED), mintPubkey.toBuffer()], tokenAclProgramId);
158
+ const mintConfigAccount = await connection.getAccountInfo(mintConfigPda);
159
+ if (!mintConfigAccount) {
160
+ return { applicable: false };
161
+ }
162
+ // 2. Decode the MintConfig; permissionless thaw must be enabled.
163
+ const mintConfig = decodeTokenAclMintConfig(mintConfigAccount.data);
164
+ if (!mintConfig.enablePermissionlessThaw) {
165
+ return { applicable: false };
166
+ }
167
+ const gatingProgramPubkey = mintConfig.gatingProgram;
168
+ // 3. Derive the remaining PDAs (flag account under Token ACL, thaw extra metas under gating).
169
+ const [flagAccountPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TOKEN_ACL_FLAG_ACCOUNT_SEED), tokenAccountPubkey.toBuffer()], tokenAclProgramId);
170
+ const [thawExtraMetasPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TOKEN_ACL_THAW_EXTRA_METAS_SEED), mintPubkey.toBuffer()], gatingProgramPubkey);
171
+ // 4. Build the 6-account can-thaw context (all readonly), then resolve the gating program's
172
+ // extra account metas onto it.
173
+ const canThawContext = [
174
+ { pubkey: authorityPubkey, isSigner: false, isWritable: false },
175
+ { pubkey: tokenAccountPubkey, isSigner: false, isWritable: false },
176
+ { pubkey: mintPubkey, isSigner: false, isWritable: false },
177
+ { pubkey: tokenAccountOwnerPubkey, isSigner: false, isWritable: false },
178
+ { pubkey: flagAccountPda, isSigner: false, isWritable: false },
179
+ { pubkey: thawExtraMetasPda, isSigner: false, isWritable: false },
180
+ ];
181
+ const resolvedMetas = await resolveTokenAclExtraMetas(connection, thawExtraMetasPda, canThawContext, gatingProgramPubkey);
182
+ // 5. Drop the first five context accounts; the remainder ([thawExtraMetas, ...extras]) are the
183
+ // accounts appended after the thaw instruction's fixed nine.
184
+ const extraAccounts = resolvedMetas.slice(5).map((meta) => ({
185
+ pubkey: meta.pubkey.toBase58(),
186
+ isSigner: meta.isSigner,
187
+ isWritable: meta.isWritable,
188
+ }));
189
+ return {
190
+ applicable: true,
191
+ gatingProgram: gatingProgramPubkey.toBase58(),
192
+ flagAccount: flagAccountPda.toBase58(),
193
+ mintConfig: mintConfigPda.toBase58(),
194
+ tokenProgram: spl_token_1.TOKEN_2022_PROGRAM_ID.toBase58(),
195
+ systemProgram: web3_js_1.SystemProgram.programId.toBase58(),
196
+ extraAccounts,
197
+ };
198
+ }
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4yMDIyUmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9rZW4yMDIyUmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBbUVILDhEQVFDO0FBa0ZELGtFQWlEQztBQXNCRCw4REF3RUM7QUExU0QsaURBUTJCO0FBQzNCLDZDQVF5QjtBQUV6QiwyQ0FNcUI7QUE2QnJCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxLQUF3QjtJQUNoRSxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQzFCLFNBQXVCLEVBQ3ZCLG1CQUFnQyxFQUNLLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxFQUFFLGNBQWMsRUFBMkIsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxXQUFtQyxFQUFFLFlBQW9CO0lBQ3BGLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0tBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxJQUFZO0lBQzVDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUseUJBQXlCLENBQ3RDLFVBQXNCLEVBQ3RCLGlCQUErQixFQUMvQixhQUE0QixFQUM1QixhQUEyQjtJQUUzQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsd0RBQTRDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sYUFBYSxHQUFrQixDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLGdDQUFvQixFQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEUsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLG1DQUF1QixFQUNoRCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxDQUNkLENBQUM7UUFDRixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNJLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsVUFBc0IsRUFDdEIsTUFBNEY7SUFFNUYsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFDLDRFQUE0RTtJQUM1RSxNQUFNLGVBQWUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsc0JBQVUsRUFBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLGlDQUFxQixDQUFDLENBQUM7SUFDakYsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLElBQUksbUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLGlCQUFpQixHQUFHLElBQUksbUJBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLG1CQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXRDLGdGQUFnRjtJQUNoRiw0RUFBNEU7SUFDNUUsdUNBQXVDO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUEsNENBQWdDLEVBQ2xELFlBQVksRUFDWixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsU0FBUyxDQUFDLFFBQVEsRUFDbEIsRUFBRSxFQUNGLGlDQUFxQixDQUN0QixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDN0MsTUFBTSxJQUFBLDBDQUE4QixFQUNsQyxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksQ0FBQyxTQUFTLEVBQ3RCLFlBQVksRUFDWixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxjQUFjLENBQ2YsQ0FBQztJQUVGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsVUFBc0IsRUFDdEIsTUFBNEY7SUFFNUYsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksbUJBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRCxNQUFNLHVCQUF1QixHQUFHLElBQUksbUJBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sZUFBZSxHQUFHLElBQUksbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksbUJBQVksQ0FBQyxnQ0FBb0IsQ0FBQyxDQUFDO0lBRWpFLGlGQUFpRjtJQUNqRixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsbUJBQVksQ0FBQyxzQkFBc0IsQ0FDekQsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUEwQixDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2hFLGlCQUFpQixDQUNsQixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFFckQsOEZBQThGO0lBQzlGLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxtQkFBWSxDQUFDLHNCQUFzQixDQUMxRCxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUNBQTJCLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUN6RSxpQkFBaUIsQ0FDbEIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLG1CQUFZLENBQUMsc0JBQXNCLENBQzdELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBK0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUNyRSxtQkFBbUIsQ0FDcEIsQ0FBQztJQUVGLDRGQUE0RjtJQUM1RixrQ0FBa0M7SUFDbEMsTUFBTSxjQUFjLEdBQWtCO1FBQ3BDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDL0QsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO1FBQ2xFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDMUQsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO1FBQ3ZFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDOUQsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO0tBQ2xFLENBQUM7SUFDRixNQUFNLGFBQWEsR0FBRyxNQUFNLHlCQUF5QixDQUNuRCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUVGLCtGQUErRjtJQUMvRixnRUFBZ0U7SUFDaEUsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7S0FDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUk7UUFDaEIsYUFBYSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtRQUM3QyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtRQUN0QyxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtRQUNwQyxZQUFZLEVBQUUsaUNBQXFCLENBQUMsUUFBUSxFQUFFO1FBQzlDLGFBQWEsRUFBRSx1QkFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7UUFDakQsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBSZXVzYWJsZSBUb2tlbi0yMDIyIHJlc29sdXRpb24gbG9naWMgKFRyYW5zZmVyIEhvb2sgZXh0cmEgYWNjb3VudHMgYW5kIHNSRkMtMzdcbiAqIFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzcyB0aGF3KSwgZGVjb3VwbGVkIGZyb20gdGhlIGBTb2xgIGNvaW4gY2xhc3Mgc28gYW55IGNhbGxlclxuICogd2l0aCBpdHMgb3duIGFjY291bnQtZmV0Y2hlciAoZS5nLiB3YWxsZXQtcGxhdGZvcm0gcmVhZGluZyBjaGFpbiBzdGF0ZSB2aWEgSU1TIFJQQylcbiAqIGNhbiByZXNvbHZlIHRoZXNlIGRlcGVuZGVuY2llcyBvZmZsaW5lIG9mIHRoZSBTREsncyBub2RlIHRyYW5zcG9ydC5cbiAqXG4gKiBUaGUgcmVzb2x1dGlvbiBmdW5jdGlvbnMgdGFrZSBhIGBDb25uZWN0aW9uYCAob25seSBgZ2V0QWNjb3VudEluZm9gIGlzIHJlcXVpcmVkKTtcbiAqIHtAbGluayBidWlsZFNvbEFjY291bnRDb25uZWN0aW9ufSBhZGFwdHMgYSBwbGFpbiB7QGxpbmsgU29sQWNjb3VudEZldGNoZXJ9IGludG8gdGhlXG4gKiBzaGFwZSBgQHNvbGFuYS9zcGwtdG9rZW5gJ3MgdHJhbnNmZXItaG9vayBoZWxwZXJzIGV4cGVjdC5cbiAqL1xuXG5pbXBvcnQge1xuICBUT0tFTl8yMDIyX1BST0dSQU1fSUQsXG4gIGFkZEV4dHJhQWNjb3VudE1ldGFzRm9yRXhlY3V0ZSxcbiAgY3JlYXRlVHJhbnNmZXJDaGVja2VkSW5zdHJ1Y3Rpb24sXG4gIGdldEV4dHJhQWNjb3VudE1ldGFzLFxuICBnZXRUcmFuc2Zlckhvb2ssXG4gIHJlc29sdmVFeHRyYUFjY291bnRNZXRhLFxuICB1bnBhY2tNaW50LFxufSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQge1xuICBBY2NvdW50SW5mbyxcbiAgQWNjb3VudE1ldGEsXG4gIENvbW1pdG1lbnQsXG4gIENvbm5lY3Rpb24sXG4gIFB1YmxpY0tleSBhcyBTb2xQdWJsaWNLZXksXG4gIFN5c3RlbVByb2dyYW0sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5cbmltcG9ydCB7XG4gIFRIQVdfUEVSTUlTU0lPTkxFU1NfSURFTVBPVEVOVF9ESVNDUklNSU5BVE9SLFxuICBUT0tFTl9BQ0xfRkxBR19BQ0NPVU5UX1NFRUQsXG4gIFRPS0VOX0FDTF9NSU5UX0NPTkZJR19TRUVELFxuICBUT0tFTl9BQ0xfUFJPR1JBTV9JRCxcbiAgVE9LRU5fQUNMX1RIQVdfRVhUUkFfTUVUQVNfU0VFRCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXh0cmFBY2NvdW50TWV0YSB9IGZyb20gJy4vaWZhY2UnO1xuXG4vKipcbiAqIEEgbWluaW1hbCBhY2NvdW50LWZldGNoZXI6IGdpdmVuIGEgYmFzZTU4IGFkZHJlc3MsIHJldHVybiBpdHMgb24tY2hhaW5cbiAqIHtAbGluayBBY2NvdW50SW5mb30gKHdpdGggYGRhdGFgIGFscmVhZHkgZGVjb2RlZCBpbnRvIGEgYEJ1ZmZlcmApIG9yIGBudWxsYFxuICogd2hlbiB0aGUgYWNjb3VudCBkb2VzIG5vdCBleGlzdC4gQ2FsbGVycyBzdXBwbHkgdGhlaXIgb3duIHRyYW5zcG9ydCAoU0RLIG5vZGVcbiAqIHJlcXVlc3QsIHdhbGxldC1wbGF0Zm9ybSBJTVMgUlBDLCBhIGZ1bGwgYENvbm5lY3Rpb25gLCBldGMuKS5cbiAqL1xuZXhwb3J0IHR5cGUgU29sQWNjb3VudEZldGNoZXIgPSAoYWRkcmVzczogc3RyaW5nKSA9PiBQcm9taXNlPEFjY291bnRJbmZvPEJ1ZmZlcj4gfCBudWxsPjtcblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzb2x2aW5nIHRoZSBzUkZDLTM3IFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzcyB0aGF3IGZvciBhIG1pbnQgLyB0b2tlbiBhY2NvdW50LlxuICpcbiAqIFdoZW4gYGFwcGxpY2FibGVgIGlzIGZhbHNlICh0aGUgbWludCBoYXMgbm8gVG9rZW4gQUNMIE1pbnRDb25maWcsIG9yIHBlcm1pc3Npb25sZXNzIHRoYXcgaXNcbiAqIGRpc2FibGVkKSBhbGwgb3RoZXIgZmllbGRzIGFyZSBvbWl0dGVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBub3QgZW1pdCBhIHRoYXcgaW5zdHJ1Y3Rpb24uXG4gKiBXaGVuIGBhcHBsaWNhYmxlYCBpcyB0cnVlLCB0aGUgZmllbGRzIGFyZSByZWFkeSB0byB0aHJlYWQgaW50byB0aGUgdG9rZW4tdHJhbnNmZXIgYnVpbGRlciB2aWFcbiAqIGBwZXJtaXNzaW9ubGVzc1RoYXcoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVBlcm1pc3Npb25sZXNzVGhhd1Jlc3VsdCB7XG4gIGFwcGxpY2FibGU6IGJvb2xlYW47XG4gIGdhdGluZ1Byb2dyYW0/OiBzdHJpbmc7XG4gIGZsYWdBY2NvdW50Pzogc3RyaW5nO1xuICBtaW50Q29uZmlnPzogc3RyaW5nO1xuICB0b2tlblByb2dyYW0/OiBzdHJpbmc7XG4gIHN5c3RlbVByb2dyYW0/OiBzdHJpbmc7XG4gIGV4dHJhQWNjb3VudHM/OiBFeHRyYUFjY291bnRNZXRhW107XG59XG5cbi8qKlxuICogQnVpbGQgYSBtaW5pbWFsIGBDb25uZWN0aW9uYC1saWtlIHNoaW0gYmFja2VkIGJ5IGEge0BsaW5rIFNvbEFjY291bnRGZXRjaGVyfS5cbiAqXG4gKiBgQHNvbGFuYS9zcGwtdG9rZW5gJ3MgdHJhbnNmZXItaG9vayByZXNvbHV0aW9uIGhlbHBlcnMgb25seSByZXF1aXJlXG4gKiBgZ2V0QWNjb3VudEluZm8ocHVibGljS2V5KWAgcmV0dXJuaW5nIGFuIGBBY2NvdW50SW5mbzxCdWZmZXI+YC4gVGhpcyBhZGFwdHMgYVxuICogcGxhaW4gYWRkcmVzcy1iYXNlZCBmZXRjaGVyIHRvIHRoYXQgc2hhcGUgc28gYW55IHRyYW5zcG9ydCBjYW4gZHJpdmUgdGhlXG4gKiByZXNvbHV0aW9uIGJlbG93IHdpdGhvdXQgb3BlbmluZyBhIGRlZGljYXRlZCBSUEMgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1NvbEFjY291bnRGZXRjaGVyfSBmZXRjaCAtIGZldGNoZXIgcmV0dXJuaW5nIGRlY29kZWQgYWNjb3VudCBpbmZvIGJ5IGFkZHJlc3NcbiAqIEByZXR1cm5zIHtDb25uZWN0aW9ufSBhIHNoaW0gZXhwb3NpbmcgYGdldEFjY291bnRJbmZvYCwgY2FzdCB0byBgQ29ubmVjdGlvbmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU29sQWNjb3VudENvbm5lY3Rpb24oZmV0Y2g6IFNvbEFjY291bnRGZXRjaGVyKTogQ29ubmVjdGlvbiB7XG4gIGNvbnN0IGdldEFjY291bnRJbmZvID0gYXN5bmMgKFxuICAgIHB1YmxpY0tleTogU29sUHVibGljS2V5LFxuICAgIF9jb21taXRtZW50T3JDb25maWc/OiBDb21taXRtZW50XG4gICk6IFByb21pc2U8QWNjb3VudEluZm88QnVmZmVyPiB8IG51bGw+ID0+IHtcbiAgICByZXR1cm4gZmV0Y2gocHVibGljS2V5LnRvQmFzZTU4KCkpO1xuICB9O1xuICByZXR1cm4geyBnZXRBY2NvdW50SW5mbyB9IGFzIHVua25vd24gYXMgQ29ubmVjdGlvbjtcbn1cblxuLyoqXG4gKiBNYXAgdGhlIGV4dHJhIGtleXMgYXBwZW5kZWQgdG8gYSByZXNvbHZlZCB0cmFuc2ZlciBpbnN0cnVjdGlvbiBpbnRvIHRoZVxuICogc2VyaWFsaXphYmxlIHtAbGluayBFeHRyYUFjY291bnRNZXRhfSBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gdG9FeHRyYUFjY291bnRNZXRhcyhpbnN0cnVjdGlvbjogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgYmFzZUtleUNvdW50OiBudW1iZXIpOiBFeHRyYUFjY291bnRNZXRhW10ge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb24ua2V5cy5zbGljZShiYXNlS2V5Q291bnQpLm1hcCgobWV0YSkgPT4gKHtcbiAgICBwdWJrZXk6IG1ldGEucHVia2V5LnRvQmFzZTU4KCksXG4gICAgaXNTaWduZXI6IG1ldGEuaXNTaWduZXIsXG4gICAgaXNXcml0YWJsZTogbWV0YS5pc1dyaXRhYmxlLFxuICB9KSk7XG59XG5cbi8qKlxuICogRGVjb2RlIHRoZSBmaWVsZHMgb2YgYSBUb2tlbiBBQ0wgTWludENvbmZpZyBhY2NvdW50IHdlIGRlcGVuZCBvbi5cbiAqXG4gKiBMYXlvdXQ6IGB1OCBkaXNjcmltaW5hdG9yLCB1OCBidW1wLCBib29sIGVuYWJsZVBlcm1pc3Npb25sZXNzVGhhdywgYm9vbCBlbmFibGVQZXJtaXNzaW9ubGVzc0ZyZWV6ZSxcbiAqIHB1YmtleSBtaW50KDMyKSwgcHVia2V5IGZyZWV6ZUF1dGhvcml0eSgzMiksIHB1YmtleSBnYXRpbmdQcm9ncmFtKDMyKWAuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVRva2VuQWNsTWludENvbmZpZyhkYXRhOiBCdWZmZXIpOiB7IGVuYWJsZVBlcm1pc3Npb25sZXNzVGhhdzogYm9vbGVhbjsgZ2F0aW5nUHJvZ3JhbTogU29sUHVibGljS2V5IH0ge1xuICBjb25zdCBlbmFibGVQZXJtaXNzaW9ubGVzc1RoYXcgPSBkYXRhWzJdID09PSAxO1xuICBjb25zdCBnYXRpbmdQcm9ncmFtID0gbmV3IFNvbFB1YmxpY0tleShkYXRhLnN1YmFycmF5KDY4LCAxMDApKTtcbiAgcmV0dXJuIHsgZW5hYmxlUGVybWlzc2lvbmxlc3NUaGF3LCBnYXRpbmdQcm9ncmFtIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZ2F0aW5nIHByb2dyYW0ncyB0aGF3IEV4dHJhQWNjb3VudE1ldGFMaXN0IG9udG8gYSBjYW4tdGhhdyBjb250ZXh0LlxuICpcbiAqIE1pcnJvcnMgdGhlIHJlZmVyZW5jZSBgcmVzb2x2ZUV4dHJhTWV0YXNgOiBmZXRjaCB0aGUgZXh0cmEtbWV0YXMgYWNjb3VudCwgdW5wYWNrIGl0c1xuICogRXh0cmFBY2NvdW50TWV0YSBlbnRyaWVzLCB0aGVuIHJlc29sdmUgZWFjaCBvbmUgKGZpeGVkIGFkZHJlc3MsIFBEQSwgb3IgYWNjb3VudC1kYXRhIGRlcml2ZWQpXG4gKiBhZ2FpbnN0IHRoZSBhY2N1bXVsYXRpbmcgbWV0YXMgdXNpbmcgdGhlIHNwbC10b2tlbiB0cmFuc2Zlci1ob29rIGhlbHBlcnMuIFdoZW4gdGhlIGV4dHJhLW1ldGFzXG4gKiBhY2NvdW50IGRvZXMgbm90IGV4aXN0LCB0aGVyZSBhcmUgbm8gZXh0cmFzIHRvIGFwcGVuZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVRva2VuQWNsRXh0cmFNZXRhcyhcbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbixcbiAgZXh0cmFNZXRhc0FkZHJlc3M6IFNvbFB1YmxpY0tleSxcbiAgcHJldmlvdXNNZXRhczogQWNjb3VudE1ldGFbXSxcbiAgZ2F0aW5nUHJvZ3JhbTogU29sUHVibGljS2V5XG4pOiBQcm9taXNlPEFjY291bnRNZXRhW10+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhID0gQnVmZmVyLmZyb20oW1RIQVdfUEVSTUlTU0lPTkxFU1NfSURFTVBPVEVOVF9ESVNDUklNSU5BVE9SXSk7XG4gIGNvbnN0IHJlc29sdmVkTWV0YXM6IEFjY291bnRNZXRhW10gPSBbLi4ucHJldmlvdXNNZXRhc107XG4gIGNvbnN0IGV4dHJhTWV0YXNBY2NvdW50ID0gYXdhaXQgY29ubmVjdGlvbi5nZXRBY2NvdW50SW5mbyhleHRyYU1ldGFzQWRkcmVzcyk7XG4gIGlmICghZXh0cmFNZXRhc0FjY291bnQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRNZXRhcztcbiAgfVxuICBjb25zdCBleHRyYUFjY291bnRNZXRhcyA9IGdldEV4dHJhQWNjb3VudE1ldGFzKGV4dHJhTWV0YXNBY2NvdW50KTtcbiAgZm9yIChjb25zdCBleHRyYUFjY291bnRNZXRhIG9mIGV4dHJhQWNjb3VudE1ldGFzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRNZXRhID0gYXdhaXQgcmVzb2x2ZUV4dHJhQWNjb3VudE1ldGEoXG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgZXh0cmFBY2NvdW50TWV0YSxcbiAgICAgIHJlc29sdmVkTWV0YXMsXG4gICAgICBpbnN0cnVjdGlvbkRhdGEsXG4gICAgICBnYXRpbmdQcm9ncmFtXG4gICAgKTtcbiAgICByZXNvbHZlZE1ldGFzLnB1c2gocmVzb2x2ZWRNZXRhKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRNZXRhcztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBUb2tlbi0yMDIyIFRyYW5zZmVyIEhvb2sgZXh0cmEgYWNjb3VudHMgZm9yIGEgc3BlY2lmaWMgdHJhbnNmZXIuXG4gKlxuICogVGhpcyBpcyBnZW5lcmljOiBpdCB3b3JrcyBmb3IgYW55IFRva2VuLTIwMjIgbWludCBieSByZWFkaW5nIHRoZSBtaW50J3NcbiAqIFRyYW5zZmVySG9vayBleHRlbnNpb24gYW5kIHRoZSBob29rIHByb2dyYW0ncyBFeHRyYUFjY291bnRNZXRhTGlzdCBsaXZlIGZyb21cbiAqIHRoZSBub2RlLCB0aGVuIHJlc29sdmluZyBlYWNoIGV4dHJhIGFjY291bnQgKGluY2x1ZGluZyBzZWVkLWRlcml2ZWQgUERBcykgdmlhXG4gKiB0aGUgc3RhbmRhcmQgYHNwbC10cmFuc2Zlci1ob29rLWludGVyZmFjZWAgaGVscGVycy4gVGhlIHJldHVybmVkIG1ldGFzIGFyZSBpblxuICogdGhlIGV4YWN0IG9yZGVyIHRoZSBob29rIHJlcXVpcmVzIGFuZCBhcmUgc3VpdGFibGUgZm9yXG4gKiBgVG9rZW5UcmFuc2Zlci5wYXJhbXMudHJhbnNmZXJIb29rQWNjb3VudHNgLlxuICpcbiAqIFdoZW4gdGhlIG1pbnQgaGFzIG5vIFRyYW5zZmVyIEhvb2ssIHRoaXMgcmV0dXJucyBhbiBlbXB0eSBhcnJheSBhbmQgY2FsbGVycyBjYW5cbiAqIG9taXQgdGhlIHBhcmFtLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvbiAtIGEgYENvbm5lY3Rpb25gIChvciBzaGltKSBleHBvc2luZyBgZ2V0QWNjb3VudEluZm9gXG4gKiBAcGFyYW0gcGFyYW1zIC0gdGhlIHRyYW5zZmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMubWludCAtIHRoZSBUb2tlbi0yMDIyIG1pbnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5zb3VyY2UgLSB0aGUgc291cmNlIHRva2VuIGFjY291bnQgKHNlbmRlciBBVEEpXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmRlc3RpbmF0aW9uIC0gdGhlIGRlc3RpbmF0aW9uIHRva2VuIGFjY291bnQgKHJlY2lwaWVudCBBVEEpXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLm93bmVyIC0gdGhlIHNvdXJjZSBhY2NvdW50IG93bmVyIC8gdHJhbnNmZXIgYXV0aG9yaXR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmFtb3VudCAtIHRoZSByYXcgdHJhbnNmZXIgYW1vdW50IGluIGJhc2UgdW5pdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEV4dHJhQWNjb3VudE1ldGFbXT59IG9yZGVyZWQgZXh0cmEgYWNjb3VudCBtZXRhcywgb3IgW10gd2hlbiBubyBob29rXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlVHJhbnNmZXJIb29rQWNjb3VudHMoXG4gIGNvbm5lY3Rpb246IENvbm5lY3Rpb24sXG4gIHBhcmFtczogeyBtaW50OiBzdHJpbmc7IHNvdXJjZTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nOyBvd25lcjogc3RyaW5nOyBhbW91bnQ6IHN0cmluZyB9XG4pOiBQcm9taXNlPEV4dHJhQWNjb3VudE1ldGFbXT4ge1xuICBjb25zdCB7IG1pbnQsIHNvdXJjZSwgZGVzdGluYXRpb24sIG93bmVyLCBhbW91bnQgfSA9IHBhcmFtcztcbiAgY29uc3QgbWludFB1YmtleSA9IG5ldyBTb2xQdWJsaWNLZXkobWludCk7XG5cbiAgLy8gUmVhZCB0aGUgbWludCBhbmQgZGV0ZWN0IHdoZXRoZXIgYSBUcmFuc2ZlciBIb29rIGV4dGVuc2lvbiBpcyBjb25maWd1cmVkLlxuICBjb25zdCBtaW50QWNjb3VudEluZm8gPSBhd2FpdCBjb25uZWN0aW9uLmdldEFjY291bnRJbmZvKG1pbnRQdWJrZXkpO1xuICBpZiAoIW1pbnRBY2NvdW50SW5mbykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBtaW50U3RhdGUgPSB1bnBhY2tNaW50KG1pbnRQdWJrZXksIG1pbnRBY2NvdW50SW5mbywgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcbiAgY29uc3QgdHJhbnNmZXJIb29rID0gZ2V0VHJhbnNmZXJIb29rKG1pbnRTdGF0ZSk7XG4gIGlmICghdHJhbnNmZXJIb29rIHx8IHRyYW5zZmVySG9vay5wcm9ncmFtSWQuZXF1YWxzKFNvbFB1YmxpY0tleS5kZWZhdWx0KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZVB1YmtleSA9IG5ldyBTb2xQdWJsaWNLZXkoc291cmNlKTtcbiAgY29uc3QgZGVzdGluYXRpb25QdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KGRlc3RpbmF0aW9uKTtcbiAgY29uc3Qgb3duZXJQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KG93bmVyKTtcbiAgY29uc3QgdHJhbnNmZXJBbW91bnQgPSBCaWdJbnQoYW1vdW50KTtcblxuICAvLyBTdGFydCBmcm9tIGEgYmFzZSB0cmFuc2ZlckNoZWNrZWQgaW5zdHJ1Y3Rpb247IGFkZEV4dHJhQWNjb3VudE1ldGFzRm9yRXhlY3V0ZVxuICAvLyBhcHBlbmRzIHRoZSByZXNvbHZlZCBleHRyYSBhY2NvdW50cywgdGhlIGhvb2sgcHJvZ3JhbSwgYW5kIHRoZSB2YWxpZGF0aW9uXG4gIC8vIHN0YXRlIGFjY291bnQgaW4gdGhlIHJlcXVpcmVkIG9yZGVyLlxuICBjb25zdCBpbnN0cnVjdGlvbiA9IGNyZWF0ZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uKFxuICAgIHNvdXJjZVB1YmtleSxcbiAgICBtaW50UHVia2V5LFxuICAgIGRlc3RpbmF0aW9uUHVia2V5LFxuICAgIG93bmVyUHVia2V5LFxuICAgIHRyYW5zZmVyQW1vdW50LFxuICAgIG1pbnRTdGF0ZS5kZWNpbWFscyxcbiAgICBbXSxcbiAgICBUT0tFTl8yMDIyX1BST0dSQU1fSURcbiAgKTtcbiAgY29uc3QgYmFzZUtleUNvdW50ID0gaW5zdHJ1Y3Rpb24ua2V5cy5sZW5ndGg7XG4gIGF3YWl0IGFkZEV4dHJhQWNjb3VudE1ldGFzRm9yRXhlY3V0ZShcbiAgICBjb25uZWN0aW9uLFxuICAgIGluc3RydWN0aW9uLFxuICAgIHRyYW5zZmVySG9vay5wcm9ncmFtSWQsXG4gICAgc291cmNlUHVia2V5LFxuICAgIG1pbnRQdWJrZXksXG4gICAgZGVzdGluYXRpb25QdWJrZXksXG4gICAgb3duZXJQdWJrZXksXG4gICAgdHJhbnNmZXJBbW91bnRcbiAgKTtcblxuICByZXR1cm4gdG9FeHRyYUFjY291bnRNZXRhcyhpbnN0cnVjdGlvbiwgYmFzZUtleUNvdW50KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBzUkZDLTM3IFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzcy10aGF3IGRlcGVuZGVuY2llcyBmb3IgYSB0b2tlbiBhY2NvdW50LlxuICpcbiAqIFRoaXMgaXMgZ2VuZXJpYzogaXQgd29ya3MgZm9yIEFOWSBhbGxvd2xpc3QvYmxvY2tsaXN0IChEZWZhdWx0QWNjb3VudFN0YXRlKSBUb2tlbi0yMDIyIG1pbnRcbiAqIGdhdGVkIGJ5IHRoZSBUb2tlbiBBQ0wgcHJvZ3JhbSDigJQgbm8gaXNzdWVyIGlzIGhhcmRjb2RlZC4gSXQgcmVhZHMgdGhlIG1pbnQncyBNaW50Q29uZmlnIFBEQVxuICogbGl2ZSBmcm9tIHRoZSBub2RlLCBhbmQgb25seSB3aGVuIHBlcm1pc3Npb25sZXNzIHRoYXcgaXMgZW5hYmxlZCBkb2VzIGl0IGRlcml2ZSB0aGUgZmxhZyAvXG4gKiBtaW50LWNvbmZpZyAvIHRoYXctZXh0cmEtbWV0YXMgUERBcyBhbmQgcmVzb2x2ZSB0aGUgZ2F0aW5nIHByb2dyYW0ncyBleHRyYSBhY2NvdW50IG1ldGFzIChpblxuICogdGhlIGV4YWN0IG9yZGVyIHRoZSBnYXRpbmcgcHJvZ3JhbSByZXF1aXJlcywgbWlycm9yaW5nIGByZXNvbHZlRXh0cmFNZXRhc2ApLlxuICpcbiAqIFdoZW4gdGhlIG1pbnQgaXMgbm90IGEgVG9rZW4gQUNMIG1pbnQsIG9yIHBlcm1pc3Npb25sZXNzIHRoYXcgaXMgZGlzYWJsZWQsIHRoaXMgcmV0dXJuc1xuICogYHsgYXBwbGljYWJsZTogZmFsc2UgfWAgYW5kIGNhbGxlcnMgc2tpcCB0aGUgdGhhdy5cbiAqXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb24gLSBhIGBDb25uZWN0aW9uYCAob3Igc2hpbSkgZXhwb3NpbmcgYGdldEFjY291bnRJbmZvYFxuICogQHBhcmFtIHBhcmFtcyAtIHRoZSB0aGF3IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMubWludCAtIHRoZSBUb2tlbi0yMDIyIG1pbnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy50b2tlbkFjY291bnQgLSB0aGUgdG9rZW4gYWNjb3VudCAoQVRBKSB0byB0aGF3XG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnRva2VuQWNjb3VudE93bmVyIC0gdGhlIG93bmVyIG9mIHRoZSB0b2tlbiBhY2NvdW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmF1dGhvcml0eSAtIHRoZSBzaWduZXIgaW52b2tpbmcgdGhlIHRoYXcgKGZlZSBwYXllciAvIGF1dGhvcml0eSlcbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlc29sdmVQZXJtaXNzaW9ubGVzc1RoYXdSZXN1bHQ+fSB0aGUgcmVzb2x2ZWQgdGhhdyBwYXJhbXMsIG9yIGB7IGFwcGxpY2FibGU6IGZhbHNlIH1gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGVybWlzc2lvbmxlc3NUaGF3KFxuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBwYXJhbXM6IHsgbWludDogc3RyaW5nOyB0b2tlbkFjY291bnQ6IHN0cmluZzsgdG9rZW5BY2NvdW50T3duZXI6IHN0cmluZzsgYXV0aG9yaXR5OiBzdHJpbmcgfVxuKTogUHJvbWlzZTxSZXNvbHZlUGVybWlzc2lvbmxlc3NUaGF3UmVzdWx0PiB7XG4gIGNvbnN0IHsgbWludCwgdG9rZW5BY2NvdW50LCB0b2tlbkFjY291bnRPd25lciwgYXV0aG9yaXR5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1pbnRQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KG1pbnQpO1xuICBjb25zdCB0b2tlbkFjY291bnRQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KHRva2VuQWNjb3VudCk7XG4gIGNvbnN0IHRva2VuQWNjb3VudE93bmVyUHVia2V5ID0gbmV3IFNvbFB1YmxpY0tleSh0b2tlbkFjY291bnRPd25lcik7XG4gIGNvbnN0IGF1dGhvcml0eVB1YmtleSA9IG5ldyBTb2xQdWJsaWNLZXkoYXV0aG9yaXR5KTtcbiAgY29uc3QgdG9rZW5BY2xQcm9ncmFtSWQgPSBuZXcgU29sUHVibGljS2V5KFRPS0VOX0FDTF9QUk9HUkFNX0lEKTtcblxuICAvLyAxLiBSZWFkIHRoZSBtaW50J3MgTWludENvbmZpZyBQREEuIEFic2VudCA9PiB0aGUgbWludCBpcyBub3QgYSBUb2tlbiBBQ0wgbWludC5cbiAgY29uc3QgW21pbnRDb25maWdQZGFdID0gU29sUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKFRPS0VOX0FDTF9NSU5UX0NPTkZJR19TRUVEKSwgbWludFB1YmtleS50b0J1ZmZlcigpXSxcbiAgICB0b2tlbkFjbFByb2dyYW1JZFxuICApO1xuICBjb25zdCBtaW50Q29uZmlnQWNjb3VudCA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0QWNjb3VudEluZm8obWludENvbmZpZ1BkYSk7XG4gIGlmICghbWludENvbmZpZ0FjY291bnQpIHtcbiAgICByZXR1cm4geyBhcHBsaWNhYmxlOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gMi4gRGVjb2RlIHRoZSBNaW50Q29uZmlnOyBwZXJtaXNzaW9ubGVzcyB0aGF3IG11c3QgYmUgZW5hYmxlZC5cbiAgY29uc3QgbWludENvbmZpZyA9IGRlY29kZVRva2VuQWNsTWludENvbmZpZyhtaW50Q29uZmlnQWNjb3VudC5kYXRhKTtcbiAgaWYgKCFtaW50Q29uZmlnLmVuYWJsZVBlcm1pc3Npb25sZXNzVGhhdykge1xuICAgIHJldHVybiB7IGFwcGxpY2FibGU6IGZhbHNlIH07XG4gIH1cbiAgY29uc3QgZ2F0aW5nUHJvZ3JhbVB1YmtleSA9IG1pbnRDb25maWcuZ2F0aW5nUHJvZ3JhbTtcblxuICAvLyAzLiBEZXJpdmUgdGhlIHJlbWFpbmluZyBQREFzIChmbGFnIGFjY291bnQgdW5kZXIgVG9rZW4gQUNMLCB0aGF3IGV4dHJhIG1ldGFzIHVuZGVyIGdhdGluZykuXG4gIGNvbnN0IFtmbGFnQWNjb3VudFBkYV0gPSBTb2xQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbQnVmZmVyLmZyb20oVE9LRU5fQUNMX0ZMQUdfQUNDT1VOVF9TRUVEKSwgdG9rZW5BY2NvdW50UHVia2V5LnRvQnVmZmVyKCldLFxuICAgIHRva2VuQWNsUHJvZ3JhbUlkXG4gICk7XG4gIGNvbnN0IFt0aGF3RXh0cmFNZXRhc1BkYV0gPSBTb2xQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbQnVmZmVyLmZyb20oVE9LRU5fQUNMX1RIQVdfRVhUUkFfTUVUQVNfU0VFRCksIG1pbnRQdWJrZXkudG9CdWZmZXIoKV0sXG4gICAgZ2F0aW5nUHJvZ3JhbVB1YmtleVxuICApO1xuXG4gIC8vIDQuIEJ1aWxkIHRoZSA2LWFjY291bnQgY2FuLXRoYXcgY29udGV4dCAoYWxsIHJlYWRvbmx5KSwgdGhlbiByZXNvbHZlIHRoZSBnYXRpbmcgcHJvZ3JhbSdzXG4gIC8vICAgIGV4dHJhIGFjY291bnQgbWV0YXMgb250byBpdC5cbiAgY29uc3QgY2FuVGhhd0NvbnRleHQ6IEFjY291bnRNZXRhW10gPSBbXG4gICAgeyBwdWJrZXk6IGF1dGhvcml0eVB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiB0b2tlbkFjY291bnRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWludFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiB0b2tlbkFjY291bnRPd25lclB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiBmbGFnQWNjb3VudFBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiB0aGF3RXh0cmFNZXRhc1BkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuICBjb25zdCByZXNvbHZlZE1ldGFzID0gYXdhaXQgcmVzb2x2ZVRva2VuQWNsRXh0cmFNZXRhcyhcbiAgICBjb25uZWN0aW9uLFxuICAgIHRoYXdFeHRyYU1ldGFzUGRhLFxuICAgIGNhblRoYXdDb250ZXh0LFxuICAgIGdhdGluZ1Byb2dyYW1QdWJrZXlcbiAgKTtcblxuICAvLyA1LiBEcm9wIHRoZSBmaXJzdCBmaXZlIGNvbnRleHQgYWNjb3VudHM7IHRoZSByZW1haW5kZXIgKFt0aGF3RXh0cmFNZXRhcywgLi4uZXh0cmFzXSkgYXJlIHRoZVxuICAvLyAgICBhY2NvdW50cyBhcHBlbmRlZCBhZnRlciB0aGUgdGhhdyBpbnN0cnVjdGlvbidzIGZpeGVkIG5pbmUuXG4gIGNvbnN0IGV4dHJhQWNjb3VudHMgPSByZXNvbHZlZE1ldGFzLnNsaWNlKDUpLm1hcCgobWV0YSkgPT4gKHtcbiAgICBwdWJrZXk6IG1ldGEucHVia2V5LnRvQmFzZTU4KCksXG4gICAgaXNTaWduZXI6IG1ldGEuaXNTaWduZXIsXG4gICAgaXNXcml0YWJsZTogbWV0YS5pc1dyaXRhYmxlLFxuICB9KSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhcHBsaWNhYmxlOiB0cnVlLFxuICAgIGdhdGluZ1Byb2dyYW06IGdhdGluZ1Byb2dyYW1QdWJrZXkudG9CYXNlNTgoKSxcbiAgICBmbGFnQWNjb3VudDogZmxhZ0FjY291bnRQZGEudG9CYXNlNTgoKSxcbiAgICBtaW50Q29uZmlnOiBtaW50Q29uZmlnUGRhLnRvQmFzZTU4KCksXG4gICAgdG9rZW5Qcm9ncmFtOiBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9CYXNlNTgoKSxcbiAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZC50b0Jhc2U1OCgpLFxuICAgIGV4dHJhQWNjb3VudHMsXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { SolTokenExtensions, SolTokenExtensionType } from '@bitgo-beta/statics';
2
+ import { type Mint } from '@solana/spl-token';
3
+ import { Commitment, Connection, PublicKey } from '@solana/web3.js';
4
+ /**
5
+ * Result of reading a Token-2022 mint's extension data.
6
+ *
7
+ * `detectedTypeNames` lists EVERY extension present on the mint — including ones BitGo does
8
+ * not model — so callers can run the onboarding safety gate (`getUnsupportedSolTokenExtensions`).
9
+ * `extensions` is the typed, storable config for the extensions BitGo does model.
10
+ */
11
+ export interface MintExtensionReadResult {
12
+ detectedTypeNames: string[];
13
+ extensions: SolTokenExtensions;
14
+ }
15
+ /** Human-readable names of every extension type present on the mint. */
16
+ export declare function extensionTypeNames(mintInfo: Mint): string[];
17
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
18
+ export declare function mapModeledExtensions(detectedTypeNames: readonly string[]): SolTokenExtensionType[];
19
+ /**
20
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
21
+ * so it can be unit-tested against recorded mint fixtures.
22
+ */
23
+ export declare function parseMintExtensions(mintInfo: Mint): MintExtensionReadResult;
24
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
25
+ export declare function readMintExtensions(connection: Connection, mint: string | PublicKey, commitment?: Commitment): Promise<MintExtensionReadResult>;
26
+ //# sourceMappingURL=tokenExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExtensions.d.ts","sourceRoot":"","sources":["../../../../src/lib/tokenExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAUL,KAAK,IAAI,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAYD,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,CAK3D;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,qBAAqB,EAAE,CASlG;AAcD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,GAAG,uBAAuB,CAwD3E;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,UAAwB,GACnC,OAAO,CAAC,uBAAuB,CAAC,CAIlC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extensionTypeNames = extensionTypeNames;
4
+ exports.mapModeledExtensions = mapModeledExtensions;
5
+ exports.parseMintExtensions = parseMintExtensions;
6
+ exports.readMintExtensions = readMintExtensions;
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const spl_token_1 = require("@solana/spl-token");
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ /** Map from `@solana/spl-token` ExtensionType names to BitGo's modeled extension types. */
11
+ const EXTENSION_NAME_MAP = {
12
+ TransferFeeConfig: statics_1.SolTokenExtensionType.TransferFee,
13
+ TransferHook: statics_1.SolTokenExtensionType.TransferHook,
14
+ PermanentDelegate: statics_1.SolTokenExtensionType.PermanentDelegate,
15
+ InterestBearingConfig: statics_1.SolTokenExtensionType.InterestBearing,
16
+ DefaultAccountState: statics_1.SolTokenExtensionType.DefaultAccountState,
17
+ ScaledUiAmountConfig: statics_1.SolTokenExtensionType.ScaledUiAmount,
18
+ };
19
+ /** Human-readable names of every extension type present on the mint. */
20
+ function extensionTypeNames(mintInfo) {
21
+ if (mintInfo.tlvData.length === 0) {
22
+ return [];
23
+ }
24
+ return (0, spl_token_1.getExtensionTypes)(mintInfo.tlvData).map((t) => spl_token_1.ExtensionType[t] ?? `unknown(${t})`);
25
+ }
26
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
27
+ function mapModeledExtensions(detectedTypeNames) {
28
+ const modeled = [];
29
+ for (const name of detectedTypeNames) {
30
+ const mapped = EXTENSION_NAME_MAP[name];
31
+ if (mapped !== undefined && !modeled.includes(mapped)) {
32
+ modeled.push(mapped);
33
+ }
34
+ }
35
+ return modeled;
36
+ }
37
+ // No SDK-level extension-combination assert: the on-chain program already
38
+ // enforces its own invalid-combination rules at extension init
39
+ // (`check_for_invalid_mint_extension_combinations` in token-2022), and it does
40
+ // NOT forbid TransferHook + ConfidentialTransferMint. A previous assert here
41
+ // rejected that legal pair and blocked onboarding of real mints. Custody
42
+ // policy on which combinations BitGo will serve belongs to consumers
43
+ // (statics `getUnsupportedSolTokenExtensions`, the AMS onboarding gate).
44
+ function toBase58(key) {
45
+ return key ? key.toBase58() : undefined;
46
+ }
47
+ /**
48
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
49
+ * so it can be unit-tested against recorded mint fixtures.
50
+ */
51
+ function parseMintExtensions(mintInfo) {
52
+ const detectedTypeNames = extensionTypeNames(mintInfo);
53
+ const extensions = { detected: mapModeledExtensions(detectedTypeNames) };
54
+ const authorities = {
55
+ mintAuthority: toBase58(mintInfo.mintAuthority),
56
+ freezeAuthority: toBase58(mintInfo.freezeAuthority),
57
+ };
58
+ const feeConfig = (0, spl_token_1.getTransferFeeConfig)(mintInfo);
59
+ if (feeConfig) {
60
+ extensions.transferFee = {
61
+ transferFeeBasisPoints: feeConfig.newerTransferFee.transferFeeBasisPoints,
62
+ maximumFee: feeConfig.newerTransferFee.maximumFee.toString(),
63
+ };
64
+ authorities.transferFeeConfigAuthority = toBase58(feeConfig.transferFeeConfigAuthority);
65
+ authorities.withdrawWithheldAuthority = toBase58(feeConfig.withdrawWithheldAuthority);
66
+ }
67
+ const hook = (0, spl_token_1.getTransferHook)(mintInfo);
68
+ if (hook) {
69
+ extensions.transferHookProgramId = hook.programId.toBase58();
70
+ }
71
+ const delegate = (0, spl_token_1.getPermanentDelegate)(mintInfo);
72
+ if (delegate?.delegate) {
73
+ authorities.permanentDelegate = delegate.delegate.toBase58();
74
+ }
75
+ const interest = (0, spl_token_1.getInterestBearingMintConfigState)(mintInfo);
76
+ if (interest) {
77
+ extensions.interestBearing = { rateBasisPoints: interest.currentRate };
78
+ authorities.rateAuthority = toBase58(interest.rateAuthority);
79
+ }
80
+ // DefaultAccountState is a single byte (AccountState). Decoded generically to avoid depending
81
+ // on a version-specific typed getter. permissionlessThaw is NOT on-chain — resolved separately
82
+ // at onboarding; defaults false until confirmed.
83
+ const defaultStateData = (0, spl_token_1.getExtensionData)(spl_token_1.ExtensionType.DefaultAccountState, mintInfo.tlvData);
84
+ if (defaultStateData) {
85
+ extensions.defaultAccountState = {
86
+ frozen: defaultStateData[0] === spl_token_1.AccountState.Frozen,
87
+ permissionlessThaw: false,
88
+ };
89
+ }
90
+ // NOTE: ScaledUiAmount config parsing (initialMultiplier) is intentionally deferred — the typed
91
+ // getter is not available in @solana/spl-token@0.4.9. The extension is still *detected* above
92
+ // (so the safety gate sees it); populating scaledUiAmount.initialMultiplier is a follow-up that
93
+ // bumps @solana/spl-token to a version exposing getScaledUiAmountConfig. See PR for 3.4.
94
+ if (Object.values(authorities).some((v) => v !== undefined)) {
95
+ extensions.authorities = authorities;
96
+ }
97
+ return { detectedTypeNames, extensions };
98
+ }
99
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
100
+ async function readMintExtensions(connection, mint, commitment = 'finalized') {
101
+ const mintPubkey = typeof mint === 'string' ? new web3_js_1.PublicKey(mint) : mint;
102
+ const mintInfo = await (0, spl_token_1.getMint)(connection, mintPubkey, commitment, spl_token_1.TOKEN_2022_PROGRAM_ID);
103
+ return parseMintExtensions(mintInfo);
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5FeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b2tlbkV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1Q0EsZ0RBS0M7QUFHRCxvREFTQztBQWtCRCxrREF3REM7QUFHRCxnREFRQztBQTdJRCxpREFBZ0Y7QUFDaEYsaURBWTJCO0FBQzNCLDZDQUFvRTtBQWNwRSwyRkFBMkY7QUFDM0YsTUFBTSxrQkFBa0IsR0FBb0Q7SUFDMUUsaUJBQWlCLEVBQUUsK0JBQXFCLENBQUMsV0FBVztJQUNwRCxZQUFZLEVBQUUsK0JBQXFCLENBQUMsWUFBWTtJQUNoRCxpQkFBaUIsRUFBRSwrQkFBcUIsQ0FBQyxpQkFBaUI7SUFDMUQscUJBQXFCLEVBQUUsK0JBQXFCLENBQUMsZUFBZTtJQUM1RCxtQkFBbUIsRUFBRSwrQkFBcUIsQ0FBQyxtQkFBbUI7SUFDOUQsb0JBQW9CLEVBQUUsK0JBQXFCLENBQUMsY0FBYztDQUMzRCxDQUFDO0FBRUYsd0VBQXdFO0FBQ3hFLFNBQWdCLGtCQUFrQixDQUFDLFFBQWM7SUFDL0MsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLElBQUEsNkJBQWlCLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMseUJBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUVELG9HQUFvRztBQUNwRyxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBb0M7SUFDdkUsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQztJQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsa0JB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Q0FBQyxNQUFNO1lBQ25ELGtCQUFrQixFQUFFLEtBQUs7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsOEZBQThGO0lBQzlGLGdHQUFnRztJQUNoRyx5RkFBeUY7SUFFekYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDNUQsVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQsMkZBQTJGO0FBQ3BGLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsVUFBc0IsRUFDdEIsSUFBd0IsRUFDeEIsYUFBeUIsV0FBVztJQUVwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksbUJBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxtQkFBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGlDQUFxQixDQUFDLENBQUM7SUFDMUYsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29sVG9rZW5FeHRlbnNpb25zLCBTb2xUb2tlbkV4dGVuc2lvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFjY291bnRTdGF0ZSxcbiAgRXh0ZW5zaW9uVHlwZSxcbiAgZ2V0RXh0ZW5zaW9uRGF0YSxcbiAgZ2V0RXh0ZW5zaW9uVHlwZXMsXG4gIGdldEludGVyZXN0QmVhcmluZ01pbnRDb25maWdTdGF0ZSxcbiAgZ2V0TWludCxcbiAgZ2V0UGVybWFuZW50RGVsZWdhdGUsXG4gIGdldFRyYW5zZmVyRmVlQ29uZmlnLFxuICBnZXRUcmFuc2Zlckhvb2ssXG4gIHR5cGUgTWludCxcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxufSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQgeyBDb21taXRtZW50LCBDb25uZWN0aW9uLCBQdWJsaWNLZXkgfSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuXG4vKipcbiAqIFJlc3VsdCBvZiByZWFkaW5nIGEgVG9rZW4tMjAyMiBtaW50J3MgZXh0ZW5zaW9uIGRhdGEuXG4gKlxuICogYGRldGVjdGVkVHlwZU5hbWVzYCBsaXN0cyBFVkVSWSBleHRlbnNpb24gcHJlc2VudCBvbiB0aGUgbWludCDigJQgaW5jbHVkaW5nIG9uZXMgQml0R28gZG9lc1xuICogbm90IG1vZGVsIOKAlCBzbyBjYWxsZXJzIGNhbiBydW4gdGhlIG9uYm9hcmRpbmcgc2FmZXR5IGdhdGUgKGBnZXRVbnN1cHBvcnRlZFNvbFRva2VuRXh0ZW5zaW9uc2ApLlxuICogYGV4dGVuc2lvbnNgIGlzIHRoZSB0eXBlZCwgc3RvcmFibGUgY29uZmlnIGZvciB0aGUgZXh0ZW5zaW9ucyBCaXRHbyBkb2VzIG1vZGVsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbnRFeHRlbnNpb25SZWFkUmVzdWx0IHtcbiAgZGV0ZWN0ZWRUeXBlTmFtZXM6IHN0cmluZ1tdO1xuICBleHRlbnNpb25zOiBTb2xUb2tlbkV4dGVuc2lvbnM7XG59XG5cbi8qKiBNYXAgZnJvbSBgQHNvbGFuYS9zcGwtdG9rZW5gIEV4dGVuc2lvblR5cGUgbmFtZXMgdG8gQml0R28ncyBtb2RlbGVkIGV4dGVuc2lvbiB0eXBlcy4gKi9cbmNvbnN0IEVYVEVOU0lPTl9OQU1FX01BUDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU29sVG9rZW5FeHRlbnNpb25UeXBlPj4gPSB7XG4gIFRyYW5zZmVyRmVlQ29uZmlnOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuVHJhbnNmZXJGZWUsXG4gIFRyYW5zZmVySG9vazogU29sVG9rZW5FeHRlbnNpb25UeXBlLlRyYW5zZmVySG9vayxcbiAgUGVybWFuZW50RGVsZWdhdGU6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5QZXJtYW5lbnREZWxlZ2F0ZSxcbiAgSW50ZXJlc3RCZWFyaW5nQ29uZmlnOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuSW50ZXJlc3RCZWFyaW5nLFxuICBEZWZhdWx0QWNjb3VudFN0YXRlOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuRGVmYXVsdEFjY291bnRTdGF0ZSxcbiAgU2NhbGVkVWlBbW91bnRDb25maWc6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5TY2FsZWRVaUFtb3VudCxcbn07XG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBuYW1lcyBvZiBldmVyeSBleHRlbnNpb24gdHlwZSBwcmVzZW50IG9uIHRoZSBtaW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2lvblR5cGVOYW1lcyhtaW50SW5mbzogTWludCk6IHN0cmluZ1tdIHtcbiAgaWYgKG1pbnRJbmZvLnRsdkRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBnZXRFeHRlbnNpb25UeXBlcyhtaW50SW5mby50bHZEYXRhKS5tYXAoKHQpID0+IEV4dGVuc2lvblR5cGVbdF0gPz8gYHVua25vd24oJHt0fSlgKTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgZGV0ZWN0ZWQgZXh0ZW5zaW9ucyB0aGF0IEJpdEdvIG1vZGVscy4gUHVyZSDigJQgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGNoYWluIGRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwTW9kZWxlZEV4dGVuc2lvbnMoZGV0ZWN0ZWRUeXBlTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogU29sVG9rZW5FeHRlbnNpb25UeXBlW10ge1xuICBjb25zdCBtb2RlbGVkOiBTb2xUb2tlbkV4dGVuc2lvblR5cGVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgZGV0ZWN0ZWRUeXBlTmFtZXMpIHtcbiAgICBjb25zdCBtYXBwZWQgPSBFWFRFTlNJT05fTkFNRV9NQVBbbmFtZV07XG4gICAgaWYgKG1hcHBlZCAhPT0gdW5kZWZpbmVkICYmICFtb2RlbGVkLmluY2x1ZGVzKG1hcHBlZCkpIHtcbiAgICAgIG1vZGVsZWQucHVzaChtYXBwZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kZWxlZDtcbn1cblxuLy8gTm8gU0RLLWxldmVsIGV4dGVuc2lvbi1jb21iaW5hdGlvbiBhc3NlcnQ6IHRoZSBvbi1jaGFpbiBwcm9ncmFtIGFscmVhZHlcbi8vIGVuZm9yY2VzIGl0cyBvd24gaW52YWxpZC1jb21iaW5hdGlvbiBydWxlcyBhdCBleHRlbnNpb24gaW5pdFxuLy8gKGBjaGVja19mb3JfaW52YWxpZF9taW50X2V4dGVuc2lvbl9jb21iaW5hdGlvbnNgIGluIHRva2VuLTIwMjIpLCBhbmQgaXQgZG9lc1xuLy8gTk9UIGZvcmJpZCBUcmFuc2Zlckhvb2sgKyBDb25maWRlbnRpYWxUcmFuc2Zlck1pbnQuIEEgcHJldmlvdXMgYXNzZXJ0IGhlcmVcbi8vIHJlamVjdGVkIHRoYXQgbGVnYWwgcGFpciBhbmQgYmxvY2tlZCBvbmJvYXJkaW5nIG9mIHJlYWwgbWludHMuIEN1c3RvZHlcbi8vIHBvbGljeSBvbiB3aGljaCBjb21iaW5hdGlvbnMgQml0R28gd2lsbCBzZXJ2ZSBiZWxvbmdzIHRvIGNvbnN1bWVyc1xuLy8gKHN0YXRpY3MgYGdldFVuc3VwcG9ydGVkU29sVG9rZW5FeHRlbnNpb25zYCwgdGhlIEFNUyBvbmJvYXJkaW5nIGdhdGUpLlxuXG5mdW5jdGlvbiB0b0Jhc2U1OChrZXk6IFB1YmxpY0tleSB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4ga2V5ID8ga2V5LnRvQmFzZTU4KCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBkZWNvZGVkIFRva2VuLTIwMjIgYE1pbnRgIGludG8gQml0R28ncyBleHRlbnNpb24gbW9kZWwuIFNlcGFyYXRlZCBmcm9tIHRoZSBSUEMgY2FsbFxuICogc28gaXQgY2FuIGJlIHVuaXQtdGVzdGVkIGFnYWluc3QgcmVjb3JkZWQgbWludCBmaXh0dXJlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWludEV4dGVuc2lvbnMobWludEluZm86IE1pbnQpOiBNaW50RXh0ZW5zaW9uUmVhZFJlc3VsdCB7XG4gIGNvbnN0IGRldGVjdGVkVHlwZU5hbWVzID0gZXh0ZW5zaW9uVHlwZU5hbWVzKG1pbnRJbmZvKTtcblxuICBjb25zdCBleHRlbnNpb25zOiBTb2xUb2tlbkV4dGVuc2lvbnMgPSB7IGRldGVjdGVkOiBtYXBNb2RlbGVkRXh0ZW5zaW9ucyhkZXRlY3RlZFR5cGVOYW1lcykgfTtcbiAgY29uc3QgYXV0aG9yaXRpZXM6IE5vbk51bGxhYmxlPFNvbFRva2VuRXh0ZW5zaW9uc1snYXV0aG9yaXRpZXMnXT4gPSB7XG4gICAgbWludEF1dGhvcml0eTogdG9CYXNlNTgobWludEluZm8ubWludEF1dGhvcml0eSksXG4gICAgZnJlZXplQXV0aG9yaXR5OiB0b0Jhc2U1OChtaW50SW5mby5mcmVlemVBdXRob3JpdHkpLFxuICB9O1xuXG4gIGNvbnN0IGZlZUNvbmZpZyA9IGdldFRyYW5zZmVyRmVlQ29uZmlnKG1pbnRJbmZvKTtcbiAgaWYgKGZlZUNvbmZpZykge1xuICAgIGV4dGVuc2lvbnMudHJhbnNmZXJGZWUgPSB7XG4gICAgICB0cmFuc2ZlckZlZUJhc2lzUG9pbnRzOiBmZWVDb25maWcubmV3ZXJUcmFuc2ZlckZlZS50cmFuc2ZlckZlZUJhc2lzUG9pbnRzLFxuICAgICAgbWF4aW11bUZlZTogZmVlQ29uZmlnLm5ld2VyVHJhbnNmZXJGZWUubWF4aW11bUZlZS50b1N0cmluZygpLFxuICAgIH07XG4gICAgYXV0aG9yaXRpZXMudHJhbnNmZXJGZWVDb25maWdBdXRob3JpdHkgPSB0b0Jhc2U1OChmZWVDb25maWcudHJhbnNmZXJGZWVDb25maWdBdXRob3JpdHkpO1xuICAgIGF1dGhvcml0aWVzLndpdGhkcmF3V2l0aGhlbGRBdXRob3JpdHkgPSB0b0Jhc2U1OChmZWVDb25maWcud2l0aGRyYXdXaXRoaGVsZEF1dGhvcml0eSk7XG4gIH1cblxuICBjb25zdCBob29rID0gZ2V0VHJhbnNmZXJIb29rKG1pbnRJbmZvKTtcbiAgaWYgKGhvb2spIHtcbiAgICBleHRlbnNpb25zLnRyYW5zZmVySG9va1Byb2dyYW1JZCA9IGhvb2sucHJvZ3JhbUlkLnRvQmFzZTU4KCk7XG4gIH1cblxuICBjb25zdCBkZWxlZ2F0ZSA9IGdldFBlcm1hbmVudERlbGVnYXRlKG1pbnRJbmZvKTtcbiAgaWYgKGRlbGVnYXRlPy5kZWxlZ2F0ZSkge1xuICAgIGF1dGhvcml0aWVzLnBlcm1hbmVudERlbGVnYXRlID0gZGVsZWdhdGUuZGVsZWdhdGUudG9CYXNlNTgoKTtcbiAgfVxuXG4gIGNvbnN0IGludGVyZXN0ID0gZ2V0SW50ZXJlc3RCZWFyaW5nTWludENvbmZpZ1N0YXRlKG1pbnRJbmZvKTtcbiAgaWYgKGludGVyZXN0KSB7XG4gICAgZXh0ZW5zaW9ucy5pbnRlcmVzdEJlYXJpbmcgPSB7IHJhdGVCYXNpc1BvaW50czogaW50ZXJlc3QuY3VycmVudFJhdGUgfTtcbiAgICBhdXRob3JpdGllcy5yYXRlQXV0aG9yaXR5ID0gdG9CYXNlNTgoaW50ZXJlc3QucmF0ZUF1dGhvcml0eSk7XG4gIH1cblxuICAvLyBEZWZhdWx0QWNjb3VudFN0YXRlIGlzIGEgc2luZ2xlIGJ5dGUgKEFjY291bnRTdGF0ZSkuIERlY29kZWQgZ2VuZXJpY2FsbHkgdG8gYXZvaWQgZGVwZW5kaW5nXG4gIC8vIG9uIGEgdmVyc2lvbi1zcGVjaWZpYyB0eXBlZCBnZXR0ZXIuIHBlcm1pc3Npb25sZXNzVGhhdyBpcyBOT1Qgb24tY2hhaW4g4oCUIHJlc29sdmVkIHNlcGFyYXRlbHlcbiAgLy8gYXQgb25ib2FyZGluZzsgZGVmYXVsdHMgZmFsc2UgdW50aWwgY29uZmlybWVkLlxuICBjb25zdCBkZWZhdWx0U3RhdGVEYXRhID0gZ2V0RXh0ZW5zaW9uRGF0YShFeHRlbnNpb25UeXBlLkRlZmF1bHRBY2NvdW50U3RhdGUsIG1pbnRJbmZvLnRsdkRhdGEpO1xuICBpZiAoZGVmYXVsdFN0YXRlRGF0YSkge1xuICAgIGV4dGVuc2lvbnMuZGVmYXVsdEFjY291bnRTdGF0ZSA9IHtcbiAgICAgIGZyb3plbjogZGVmYXVsdFN0YXRlRGF0YVswXSA9PT0gQWNjb3VudFN0YXRlLkZyb3plbixcbiAgICAgIHBlcm1pc3Npb25sZXNzVGhhdzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5PVEU6IFNjYWxlZFVpQW1vdW50IGNvbmZpZyBwYXJzaW5nIChpbml0aWFsTXVsdGlwbGllcikgaXMgaW50ZW50aW9uYWxseSBkZWZlcnJlZCDigJQgdGhlIHR5cGVkXG4gIC8vIGdldHRlciBpcyBub3QgYXZhaWxhYmxlIGluIEBzb2xhbmEvc3BsLXRva2VuQDAuNC45LiBUaGUgZXh0ZW5zaW9uIGlzIHN0aWxsICpkZXRlY3RlZCogYWJvdmVcbiAgLy8gKHNvIHRoZSBzYWZldHkgZ2F0ZSBzZWVzIGl0KTsgcG9wdWxhdGluZyBzY2FsZWRVaUFtb3VudC5pbml0aWFsTXVsdGlwbGllciBpcyBhIGZvbGxvdy11cCB0aGF0XG4gIC8vIGJ1bXBzIEBzb2xhbmEvc3BsLXRva2VuIHRvIGEgdmVyc2lvbiBleHBvc2luZyBnZXRTY2FsZWRVaUFtb3VudENvbmZpZy4gU2VlIFBSIGZvciAzLjQuXG5cbiAgaWYgKE9iamVjdC52YWx1ZXMoYXV0aG9yaXRpZXMpLnNvbWUoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpIHtcbiAgICBleHRlbnNpb25zLmF1dGhvcml0aWVzID0gYXV0aG9yaXRpZXM7XG4gIH1cblxuICByZXR1cm4geyBkZXRlY3RlZFR5cGVOYW1lcywgZXh0ZW5zaW9ucyB9O1xufVxuXG4vKiogRmV0Y2ggYSBUb2tlbi0yMDIyIG1pbnQgYW5kIHBhcnNlIGl0cyBleHRlbnNpb25zLiBVc2VzIGBmaW5hbGl6ZWRgIGNvbW1pdG1lbnQgcnVsZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1pbnRFeHRlbnNpb25zKFxuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBtaW50OiBzdHJpbmcgfCBQdWJsaWNLZXksXG4gIGNvbW1pdG1lbnQ6IENvbW1pdG1lbnQgPSAnZmluYWxpemVkJ1xuKTogUHJvbWlzZTxNaW50RXh0ZW5zaW9uUmVhZFJlc3VsdD4ge1xuICBjb25zdCBtaW50UHVia2V5ID0gdHlwZW9mIG1pbnQgPT09ICdzdHJpbmcnID8gbmV3IFB1YmxpY0tleShtaW50KSA6IG1pbnQ7XG4gIGNvbnN0IG1pbnRJbmZvID0gYXdhaXQgZ2V0TWludChjb25uZWN0aW9uLCBtaW50UHVia2V5LCBjb21taXRtZW50LCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICByZXR1cm4gcGFyc2VNaW50RXh0ZW5zaW9ucyhtaW50SW5mbyk7XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
2
  import { TransactionType } from '@bitgo-beta/sdk-core';
3
3
  import { Transaction } from './transaction';
4
- import { TokenAssociateRecipient } from './iface';
4
+ import { ExtraAccountMeta, PermissionlessThawIdempotent, TokenAssociateRecipient } from './iface';
5
5
  import { TransactionBuilder } from './transactionBuilder';
6
6
  export interface SendParams {
7
7
  address: string;
@@ -14,7 +14,33 @@ export interface SendParams {
14
14
  export declare class TokenTransferBuilder extends TransactionBuilder {
15
15
  private _sendParams;
16
16
  private _createAtaParams;
17
+ private _transferHookAccounts?;
18
+ private _permissionlessThaw?;
17
19
  constructor(_coinConfig: Readonly<CoinConfig>);
20
+ /**
21
+ * Set the resolved sRFC-37 Token ACL permissionless-thaw params for this transfer.
22
+ *
23
+ * These must be resolved live by the caller (e.g. via `Sol.resolvePermissionlessThaw`) since
24
+ * builders remain offline and never perform RPC. When set, the built transaction bundles a
25
+ * `PermissionlessThawIdempotent` instruction after any ATA creation and before the transfer, so
26
+ * a freshly created (frozen) allowlist/blocklist token account is thawed atomically with the
27
+ * transfer — all-or-nothing.
28
+ *
29
+ * @param {PermissionlessThawIdempotent['params']} params - resolved thaw params
30
+ * @returns {TokenTransferBuilder} This transaction builder
31
+ */
32
+ permissionlessThaw(params: PermissionlessThawIdempotent['params']): this;
33
+ /**
34
+ * Set the resolved Token-2022 Transfer Hook extra account metas for this transfer.
35
+ *
36
+ * These must be resolved live by the caller (e.g. via `Sol.resolveTransferHookAccounts`)
37
+ * since builders remain offline and never perform RPC. The order is significant and
38
+ * must match the hook's ExtraAccountMetaList.
39
+ *
40
+ * @param {ExtraAccountMeta[]} metas - resolved extra account metas, in hook order
41
+ * @returns {TokenTransferBuilder} This transaction builder
42
+ */
43
+ transferHookAccounts(metas: ExtraAccountMeta[]): this;
18
44
  protected get transactionType(): TransactionType;
19
45
  initBuilder(tx: Transaction): void;
20
46
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/tokenTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,OAAO,EAEL,gBAAgB,EAChB,4BAA4B,EAC5B,uBAAuB,EAGxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,qBAAa,oBAAqB,SAAQ,kBAAkB;IAC1D,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,qBAAqB,CAAC,CAAqB;IACnD,OAAO,CAAC,mBAAmB,CAAC,CAAyC;gBAEzD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,MAAM,EAAE,4BAA4B,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKxE;;;;;;;;;OASG;IACH,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKrD,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IA6BlC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,UAAU,GAAG,IAAI;IAa9F;;;;;;OAMG;IACH,4BAA4B,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IAmBtE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CA8G5D"}