@bitgo-beta/sdk-coin-islm 1.0.0-alpha.39 → 1.0.0-alpha.391

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 (49) hide show
  1. package/dist/resources/types/ethSecp256k1.d.ts +8 -24
  2. package/dist/resources/types/ethSecp256k1.d.ts.map +1 -1
  3. package/dist/resources/types/ethSecp256k1.js +22 -14
  4. package/dist/src/islm.js +1 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +3 -3
  7. package/dist/src/lib/index.js +18 -8
  8. package/dist/src/lib/transactionBuilderFactory.js +1 -1
  9. package/dist/src/lib/utils.js +20 -11
  10. package/dist/src/tislm.js +1 -1
  11. package/dist/test/resources/islm.d.ts +216 -0
  12. package/dist/test/resources/islm.d.ts.map +1 -0
  13. package/dist/test/resources/islm.js +219 -0
  14. package/dist/test/unit/islm.d.ts +2 -0
  15. package/dist/test/unit/islm.d.ts.map +1 -0
  16. package/dist/test/unit/islm.js +309 -0
  17. package/dist/test/unit/keyPair.d.ts +2 -0
  18. package/dist/test/unit/keyPair.d.ts.map +1 -0
  19. package/dist/test/unit/keyPair.js +92 -0
  20. package/dist/test/unit/transaction.d.ts +2 -0
  21. package/dist/test/unit/transaction.d.ts.map +1 -0
  22. package/dist/test/unit/transaction.js +219 -0
  23. package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts +2 -0
  24. package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts.map +1 -0
  25. package/dist/test/unit/transactionBuilder/StakingActivateBuilder.js +154 -0
  26. package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts +2 -0
  27. package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts.map +1 -0
  28. package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.js +153 -0
  29. package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts +2 -0
  30. package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
  31. package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.js +154 -0
  32. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  33. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  34. package/dist/test/unit/transactionBuilder/transactionBuilder.js +112 -0
  35. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  36. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  37. package/dist/test/unit/transactionBuilder/transferBuilder.js +189 -0
  38. package/dist/test/unit/utils.d.ts +2 -0
  39. package/dist/test/unit/utils.d.ts.map +1 -0
  40. package/dist/test/unit/utils.js +76 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -0
  42. package/package.json +13 -9
  43. package/.eslintignore +0 -5
  44. package/.mocharc.yml +0 -8
  45. package/CHANGELOG.md +0 -258
  46. package/resources/README.md +0 -15
  47. package/resources/proto/ethermint/crypto/v1/ethsecp256k1/ethSecp256k1.proto +0 -23
  48. package/resources/proto/gogoproto/gogo.proto +0 -145
  49. package/resources/types/ethSecp256k1.ts +0 -183
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ // Get the test data by running the scripts for the particular coin from coin-sandbox repo.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.coinAmounts = exports.txIds = exports.blockHash = exports.address = exports.TEST_TX_WITH_MEMO = exports.TEST_WITHDRAW_REWARDS_TX = exports.TEST_UNDELEGATE_TX = exports.TEST_DELEGATE_TX = exports.TEST_SEND_TX = exports.TEST_ACCOUNT = void 0;
5
+ exports.TEST_ACCOUNT = {
6
+ pubAddress: 'haqq1z34mxtp9xd0tv89cfyvc9r4cckfqt3gs2a0xh5',
7
+ compressedPublicKey: '029ae62ba5168f4a7e4a48ce9ec85b6a0ba1c7cbb676a95ff993f8b0df74a461df',
8
+ compressedPublicKeyTwo: '031dabb2069dfa614b9457ce9fc84c2a7b3b6f5e3cbb57c633380c5f4fcfd1486a',
9
+ uncompressedPublicKey: '049ae62ba5168f4a7e4a48ce9ec85b6a0ba1c7cbb676a95ff993f8b0df74a461df371b136a9be5dbc0e233ad70a733a37beeb41398df69376326c9207368255a6a',
10
+ privateKey: '2bc15c7ea4881524469f94e053429d92b89f60d1efb5048258291052ae0f70ff',
11
+ extendedPrv: 'xprv9s21ZrQH143K2xS8TWuFksLBHRRc994e166knSrbtBYVLpXDNkEF1DX45MvAdW97nV9FsrzmPtPCcg8dMxzFBeS2SZ1pWHC2k8xLMuTv673',
12
+ extendedPub: 'xpub661MyMwAqRbcFSWbZYSG81GuqTG6YbnVNK2MaqGDSX5UDcrMvHYVZ1qXvdnt6EZWFXMwerL8ySqJvj91855WUxiRcvDyVTwTYDhJ3JYnC8f',
13
+ };
14
+ exports.TEST_SEND_TX = {
15
+ hash: '2679D297CD41346707EF8116D1691078199FEB8134D1EECAE5894B618D45AC84',
16
+ signature: 'Edqy59rfNqIrgmBcHh4j6vsLIl9MeOldeVy/a1aa0yw3163yQBtqvV9Esn3rpwAWNzN6sBFjB00Of3VYdqoxLQ==',
17
+ pubKey: 'AyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzj',
18
+ privateKey: '3xn43lnhB0RxwYkJ2vW4UeBPPOcb947WYsYuqsOzXa0=',
19
+ signedTxBase64: 'Co4BCosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKK2hhcXExc2V5bXdyOHpzNmM5MnJjZnl6NmpsYTRhNTBkcm13Z3E5dHp2bHoSK2hhcXExOXAycm52emFoeHFoOXlrcmozcnFtamRndjBtejZlZm5qbWR6YTcaDwoFYUlTTE0SBjEwMDAwMBJ8ClkKTwooL2V0aGVybWludC5jcnlwdG8udjEuZXRoc2VjcDI1NmsxLlB1YktleRIjCiEDI7QTDMHGPtjNM6Y1v1NwgbIS+t18CWwzYuTIVvoVbOMSBAoCCAEYGBIfChkKBWFJU0xNEhA0MDAwMDAwMDAwMDAwMDAwEMCaDBpAEdqy59rfNqIrgmBcHh4j6vsLIl9MeOldeVy/a1aa0yw3163yQBtqvV9Esn3rpwAWNzN6sBFjB00Of3VYdqoxLQ==',
20
+ sender: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
21
+ recipient: 'haqq19p2rnvzahxqh9ykrj3rqmjdgv0mz6efnjmdza7',
22
+ chainId: 'haqq_54211-3',
23
+ accountNumber: 167676,
24
+ sequence: 24,
25
+ sendAmount: '100000',
26
+ feeAmount: '4000000000000000',
27
+ sendMessage: {
28
+ typeUrl: '/cosmos.bank.v1beta1.MsgSend',
29
+ value: {
30
+ fromAddress: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
31
+ toAddress: 'haqq19p2rnvzahxqh9ykrj3rqmjdgv0mz6efnjmdza7',
32
+ amount: [
33
+ {
34
+ denom: 'aISLM',
35
+ amount: '100000',
36
+ },
37
+ ],
38
+ },
39
+ },
40
+ gasBudget: {
41
+ amount: [
42
+ {
43
+ denom: 'aISLM',
44
+ amount: '4000000000000000',
45
+ },
46
+ ],
47
+ gasLimit: 200000,
48
+ },
49
+ };
50
+ exports.TEST_DELEGATE_TX = {
51
+ hash: 'F7E8933B59F514A0EEF66434C2438B639D208435071CC6F09BD07E229A19A262',
52
+ signature: 'Bd9eww9Nh2WlH6vI8pPkD667hDXh/ErfjNkESsP5EokkUp/qbTaz0VWRXG6fJSbsY0iWhtonlnZqKCijAYqPgQ==',
53
+ pubKey: 'AyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzj',
54
+ privateKey: '3xn43lnhB0RxwYkJ2vW4UeBPPOcb947WYsYuqsOzXa0=',
55
+ signedTxBase64: 'CpwBCpkBCiMvY29zbW9zLnN0YWtpbmcudjFiZXRhMS5Nc2dEZWxlZ2F0ZRJyCitoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6EjJoYXFxdmFsb3BlcjE4eGEyZTJ6NG5kbWdlZjlhN2M3bGowMGV0dXR3MmRhZnl5aGRreBoPCgVhSVNMTRIGMTAwMDAwEnwKWQpPCigvZXRoZXJtaW50LmNyeXB0by52MS5ldGhzZWNwMjU2azEuUHViS2V5EiMKIQMjtBMMwcY+2M0zpjW/U3CBshL63XwJbDNi5MhW+hVs4xIECgIIARgREh8KGQoFYUlTTE0SEDQwMDAwMDAwMDAwMDAwMDAQwJoMGkAF317DD02HZaUfq8jyk+QPrruENeH8St+M2QRKw/kSiSRSn+ptNrPRVZFcbp8lJuxjSJaG2ieWdmooKKMBio+B',
56
+ delegator: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
57
+ validator: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
58
+ chainId: 'haqq_54211-3',
59
+ accountNumber: 167676,
60
+ sequence: 17,
61
+ sendAmount: '100000',
62
+ feeAmount: '4000000000000000',
63
+ sendMessage: {
64
+ typeUrl: '/cosmos.staking.v1beta1.MsgDelegate',
65
+ value: {
66
+ delegatorAddress: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
67
+ validatorAddress: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
68
+ amount: {
69
+ denom: 'aISLM',
70
+ amount: '100000',
71
+ },
72
+ },
73
+ },
74
+ gasBudget: {
75
+ amount: [
76
+ {
77
+ denom: 'aISLM',
78
+ amount: '4000000000000000',
79
+ },
80
+ ],
81
+ gasLimit: 200000,
82
+ },
83
+ };
84
+ exports.TEST_UNDELEGATE_TX = {
85
+ hash: 'CCBD92831278103E852E8FB0C038717EA2B122A4C59BFEDC76E2BEE5F4F128BE',
86
+ signature: 'fB8iHcGdjlb67Si9D68LK/jKsHPVkm7+Xcv+Hv+akG0RHSVrQvy2XowSFjfTwqt16Je7RWlLvfyfL/wq2Y9M6w==',
87
+ pubKey: 'AyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzj',
88
+ privateKey: '3xn43lnhB0RxwYkJ2vW4UeBPPOcb947WYsYuqsOzXa0=',
89
+ signedTxBase64: 'Cp4BCpsBCiUvY29zbW9zLnN0YWtpbmcudjFiZXRhMS5Nc2dVbmRlbGVnYXRlEnIKK2hhcXExc2V5bXdyOHpzNmM5MnJjZnl6NmpsYTRhNTBkcm13Z3E5dHp2bHoSMmhhcXF2YWxvcGVyMTh4YTJlMno0bmRtZ2VmOWE3YzdsajAwZXR1dHcyZGFmeXloZGt4Gg8KBWFJU0xNEgYxMDAwMDASfApZCk8KKC9ldGhlcm1pbnQuY3J5cHRvLnYxLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzjEgQKAggBGBMSHwoZCgVhSVNMTRIQNDAwMDAwMDAwMDAwMDAwMBDAmgwaQHwfIh3BnY5W+u0ovQ+vCyv4yrBz1ZJu/l3L/h7/mpBtER0la0L8tl6MEhY308KrdeiXu0VpS738ny/8KtmPTOs=',
90
+ delegator: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
91
+ validator: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
92
+ chainId: 'haqq_54211-3',
93
+ accountNumber: 167676,
94
+ sequence: 19,
95
+ sendAmount: '100000',
96
+ feeAmount: '4000000000000000',
97
+ sendMessage: {
98
+ typeUrl: '/cosmos.staking.v1beta1.MsgUndelegate',
99
+ value: {
100
+ delegatorAddress: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
101
+ validatorAddress: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
102
+ amount: {
103
+ denom: 'aISLM',
104
+ amount: '100000',
105
+ },
106
+ },
107
+ },
108
+ gasBudget: {
109
+ amount: [
110
+ {
111
+ denom: 'aISLM',
112
+ amount: '4000000000000000',
113
+ },
114
+ ],
115
+ gasLimit: 200000,
116
+ },
117
+ };
118
+ exports.TEST_WITHDRAW_REWARDS_TX = {
119
+ hash: '11CD80A6B569D6EC5D42C0CE082CBD125472A6BF61FC55E500950BD1A9A3B957',
120
+ signature: 'KXFbRvLeI+CvphTMZYz0U6wJuZ6VAZApXg/M4N8MWWpLsK8ERzppbgSSWGU30hDuI2GtD+CHUAiYy1bS3mDzSQ==',
121
+ pubKey: 'AyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzj',
122
+ privateKey: '3xn43lnhB0RxwYkJ2vW4UeBPPOcb947WYsYuqsOzXa0=',
123
+ signedTxBase64: 'Cp8BCpwBCjcvY29zbW9zLmRpc3RyaWJ1dGlvbi52MWJldGExLk1zZ1dpdGhkcmF3RGVsZWdhdG9yUmV3YXJkEmEKK2hhcXExc2V5bXdyOHpzNmM5MnJjZnl6NmpsYTRhNTBkcm13Z3E5dHp2bHoSMmhhcXF2YWxvcGVyMTh4YTJlMno0bmRtZ2VmOWE3YzdsajAwZXR1dHcyZGFmeXloZGt4EnwKWQpPCigvZXRoZXJtaW50LmNyeXB0by52MS5ldGhzZWNwMjU2azEuUHViS2V5EiMKIQMjtBMMwcY+2M0zpjW/U3CBshL63XwJbDNi5MhW+hVs4xIECgIIARgSEh8KGQoFYUlTTE0SEDQwMDAwMDAwMDAwMDAwMDAQwJoMGkApcVtG8t4j4K+mFMxljPRTrAm5npUBkCleD8zg3wxZakuwrwRHOmluBJJYZTfSEO4jYa0P4IdQCJjLVtLeYPNJ',
124
+ delegator: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
125
+ validator: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
126
+ chainId: 'haqq_54211-3',
127
+ accountNumber: 167676,
128
+ sequence: 18,
129
+ sendAmount: '100000',
130
+ feeAmount: '4000000000000000',
131
+ sendMessage: {
132
+ typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',
133
+ value: {
134
+ delegatorAddress: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
135
+ validatorAddress: 'haqqvaloper18xa2e2z4ndmgef9a7c7lj00etutw2dafyyhdkx',
136
+ amount: {
137
+ denom: 'aISLM',
138
+ amount: '100000',
139
+ },
140
+ },
141
+ },
142
+ gasBudget: {
143
+ amount: [
144
+ {
145
+ denom: 'aISLM',
146
+ amount: '4000000000000000',
147
+ },
148
+ ],
149
+ gasLimit: 200000,
150
+ },
151
+ };
152
+ exports.TEST_TX_WITH_MEMO = {
153
+ hash: 'D930F12BC6764AA1971AFB20F466AC6F598C664BBCFE792D2D421C8C77B239A8',
154
+ signature: 'ojuPe7cO37Zs69g5lHSg+NO18WE0/6qNoKnyeaomeYxhp+U7Ym7J5Z/fWAWTrP2+AWRmCqNuPOhnSxfFZabkSw==',
155
+ pubKey: 'AyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzj',
156
+ privateKey: '3xn43lnhB0RxwYkJ2vW4UeBPPOcb947WYsYuqsOzXa0=',
157
+ signedTxBase64: 'CpIBCosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKK2hhcXExc2V5bXdyOHpzNmM5MnJjZnl6NmpsYTRhNTBkcm13Z3E5dHp2bHoSK2hhcXExOXAycm52emFoeHFoOXlrcmozcnFtamRndjBtejZlZm5qbWR6YTcaDwoFYUlTTE0SBjEwMDAwMBICMjMSfApZCk8KKC9ldGhlcm1pbnQuY3J5cHRvLnYxLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAyO0EwzBxj7YzTOmNb9TcIGyEvrdfAlsM2LkyFb6FWzjEgQKAggBGBQSHwoZCgVhSVNMTRIQNDAwMDAwMDAwMDAwMDAwMBDAmgwaQKI7j3u3Dt+2bOvYOZR0oPjTtfFhNP+qjaCp8nmqJnmMYaflO2JuyeWf31gFk6z9vgFkZgqjbjzoZ0sXxWWm5Es=',
158
+ sender: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
159
+ recipient: 'haqq19p2rnvzahxqh9ykrj3rqmjdgv0mz6efnjmdza7',
160
+ chainId: 'haqq_54211-3',
161
+ accountNumber: 167676,
162
+ sequence: 20,
163
+ sendAmount: '100000',
164
+ feeAmount: '4000000000000000',
165
+ sendMessage: {
166
+ typeUrl: '/cosmos.bank.v1beta1.MsgSend',
167
+ value: {
168
+ fromAddress: 'haqq1seymwr8zs6c92rcfyz6jla4a50drmwgq9tzvlz',
169
+ toAddress: 'haqq19p2rnvzahxqh9ykrj3rqmjdgv0mz6efnjmdza7',
170
+ amount: [
171
+ {
172
+ denom: 'aISLM',
173
+ amount: '100000',
174
+ },
175
+ ],
176
+ },
177
+ },
178
+ memo: '23',
179
+ gasBudget: {
180
+ amount: [
181
+ {
182
+ denom: 'aISLM',
183
+ amount: '4000000000000000',
184
+ },
185
+ ],
186
+ gasLimit: 200000,
187
+ },
188
+ };
189
+ exports.address = {
190
+ address1: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc',
191
+ address2: 'haqq1j3hhwl6exe9yjnggy33raj5s3xeskgsljvzagt',
192
+ address3: 'haqq2k3hhwl6exe9yjnggy33raj5s3xeskgsljvzagt',
193
+ address4: 'haqq1tmm005xgms7qrfm7jwpst3mj9dp8tzdld34jgv',
194
+ validatorAddress1: 'haqqvaloper16lp0xpq87cre5z4jkfddq78r5l4vcd7el2jlmj',
195
+ validatorAddress2: 'haqqvaloper16gg3wzq8h98zyn9kjp7aw3jwy6pnxslrdhl7zp',
196
+ validatorAddress3: 'haqqvaloper35eafuvcrh3c07z4g3pqgq68n3lmsyu5jd9swsy',
197
+ validatorAddress4: 'haqqvaloder1p8k6xk94u24vv9dmxu3vkgg43fs3v72grkpjhm',
198
+ noMemoIdAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc',
199
+ validMemoIdAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc?memoId=2',
200
+ invalidMemoIdAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc?memoId=xyz',
201
+ multipleMemoIdAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc?memoId=3&memoId=12',
202
+ };
203
+ exports.blockHash = {
204
+ hash1: '78009F3F043D3BFDE78D3DB46C98AC6C4D30BE586E8DA2A28FB1FE537DF79265',
205
+ hash2: '1CCB5E358CE84FB9FBD77311D25E0621356CF283159EA703455BA72A5CB61F97',
206
+ };
207
+ exports.txIds = {
208
+ hash1: 'CCDCFAC079BA3833AD3F8EEF3B411C9D8AE2747EF33CA516488A40E522DDD34D',
209
+ hash2: 'B51713C6FFD9EBEAFF158498BB6C406AFCC5E1D0423F38073714DC1F54E576F6',
210
+ hash3: '74BF02FE620C37EFC242B945B01A21D8E3BDAEDC23617BB0964AFC5BC598042E',
211
+ };
212
+ exports.coinAmounts = {
213
+ amount1: { amount: '100000', denom: 'aISLM' },
214
+ amount2: { amount: '1000000', denom: 'aISLM' },
215
+ amount3: { amount: '10000000', denom: 'aISLM' },
216
+ amount4: { amount: '-1', denom: 'aISLM' },
217
+ amount5: { amount: '1000000000', denom: 'uISLM' },
218
+ };
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNsbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvcmVzb3VyY2VzL2lzbG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDJGQUEyRjs7O0FBRTlFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFVBQVUsRUFBRSw2Q0FBNkM7SUFDekQsbUJBQW1CLEVBQUUsb0VBQW9FO0lBQ3pGLHNCQUFzQixFQUFFLG9FQUFvRTtJQUM1RixxQkFBcUIsRUFDbkIsb0lBQW9JO0lBQ3RJLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUUsV0FBVyxFQUNULGlIQUFpSDtJQUNuSCxXQUFXLEVBQ1QsaUhBQWlIO0NBQ3BILENBQUM7QUFFVyxRQUFBLFlBQVksR0FBRztJQUMxQixJQUFJLEVBQUUsa0VBQWtFO0lBQ3hFLFNBQVMsRUFBRSwwRkFBMEY7SUFDckcsTUFBTSxFQUFFLDhDQUE4QztJQUN0RCxVQUFVLEVBQUUsOENBQThDO0lBQzFELGNBQWMsRUFDWixzY0FBc2M7SUFDeGMsTUFBTSxFQUFFLDZDQUE2QztJQUNyRCxTQUFTLEVBQUUsNkNBQTZDO0lBQ3hELE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFFBQVEsRUFBRSxFQUFFO0lBQ1osVUFBVSxFQUFFLFFBQVE7SUFDcEIsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixXQUFXLEVBQUU7UUFDWCxPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSw2Q0FBNkM7WUFDMUQsU0FBUyxFQUFFLDZDQUE2QztZQUN4RCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsS0FBSyxFQUFFLE9BQU87b0JBQ2QsTUFBTSxFQUFFLFFBQVE7aUJBQ2pCO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLGtCQUFrQjthQUMzQjtTQUNGO1FBQ0QsUUFB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RSx3REFBd0Q7SUFDOUUscUJBQXFCLEVBQUUsZ0VBQWdFO0NBQ3hGLENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixLQUFLLEVBQUUsa0VBQWtFO0lBQ3pFLEtBQUssRUFBRSxrRUFBa0U7Q0FDMUUsQ0FBQztBQUVXLFFBQUEsS0FBSyxHQUFHO0lBQ25CLEtBQUssRUFBRSxrRUFBa0U7SUFDekUsS0FBSyxFQUFFLGtFQUFrRTtJQUN6RSxLQUFLLEVBQUUsa0VBQWtFO0NBQzFFLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBRztJQUN6QixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7SUFDN0MsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQzlDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtJQUMvQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7SUFDekMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZXQgdGhlIHRlc3QgZGF0YSBieSBydW5uaW5nIHRoZSBzY3JpcHRzIGZvciB0aGUgcGFydGljdWxhciBjb2luIGZyb20gY29pbi1zYW5kYm94IHJlcG8uXG5cbmV4cG9ydCBjb25zdCBURVNUX0FDQ09VTlQgPSB7XG4gIHB1YkFkZHJlc3M6ICdoYXFxMXozNG14dHA5eGQwdHY4OWNmeXZjOXI0Y2NrZnF0M2dzMmEweGg1JyxcbiAgY29tcHJlc3NlZFB1YmxpY0tleTogJzAyOWFlNjJiYTUxNjhmNGE3ZTRhNDhjZTllYzg1YjZhMGJhMWM3Y2JiNjc2YTk1ZmY5OTNmOGIwZGY3NGE0NjFkZicsXG4gIGNvbXByZXNzZWRQdWJsaWNLZXlUd286ICcwMzFkYWJiMjA2OWRmYTYxNGI5NDU3Y2U5ZmM4NGMyYTdiM2I2ZjVlM2NiYjU3YzYzMzM4MGM1ZjRmY2ZkMTQ4NmEnLFxuICB1bmNvbXByZXNzZWRQdWJsaWNLZXk6XG4gICAgJzA0OWFlNjJiYTUxNjhmNGE3ZTRhNDhjZTllYzg1YjZhMGJhMWM3Y2JiNjc2YTk1ZmY5OTNmOGIwZGY3NGE0NjFkZjM3MWIxMzZhOWJlNWRiYzBlMjMzYWQ3MGE3MzNhMzdiZWViNDEzOThkZjY5Mzc2MzI2YzkyMDczNjgyNTVhNmEnLFxuICBwcml2YXRlS2V5OiAnMmJjMTVjN2VhNDg4MTUyNDQ2OWY5NGUwNTM0MjlkOTJiODlmNjBkMWVmYjUwNDgyNTgyOTEwNTJhZTBmNzBmZicsXG4gIGV4dGVuZGVkUHJ2OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMnhTOFRXdUZrc0xCSFJSYzk5NGUxNjZrblNyYnRCWVZMcFhETmtFRjFEWDQ1TXZBZFc5N25WOUZzcnptUHRQQ2NnOGRNeHpGQmVTMlNaMXBXSEMyazh4TE11VHY2NzMnLFxuICBleHRlbmRlZFB1YjpcbiAgICAneHB1YjY2MU15TXdBcVJiY0ZTV2JaWVNHODFHdXFURzZZYm5WTksyTWFxR0RTWDVVRGNyTXZIWVZaMXFYdmRudDZFWldGWE13ZXJMOHlTcUp2ajkxODU1V1V4aVJjdkR5VlR3VFlEaEozSlluQzhmJyxcbn07XG5cbmV4cG9ydCBjb25zdCBURVNUX1NFTkRfVFggPSB7XG4gIGhhc2g6ICcyNjc5RDI5N0NENDEzNDY3MDdFRjgxMTZEMTY5MTA3ODE5OUZFQjgxMzREMUVFQ0FFNTg5NEI2MThENDVBQzg0JyxcbiAgc2lnbmF0dXJlOiAnRWRxeTU5cmZOcUlyZ21CY0hoNGo2dnNMSWw5TWVPbGRlVnkvYTFhYTB5dzMxNjN5UUJ0cXZWOUVzbjNycHdBV056TjZzQkZqQjAwT2YzVllkcW94TFE9PScsXG4gIHB1YktleTogJ0F5TzBFd3pCeGo3WXpUT21OYjlUY0lHeUV2cmRmQWxzTTJMa3lGYjZGV3pqJyxcbiAgcHJpdmF0ZUtleTogJzN4bjQzbG5oQjBSeHdZa0oydlc0VWVCUFBPY2I5NDdXWXNZdXFzT3pYYTA9JyxcbiAgc2lnbmVkVHhCYXNlNjQ6XG4gICAgJ0NvNEJDb3NCQ2h3dlkyOXpiVzl6TG1KaGJtc3VkakZpWlhSaE1TNU5jMmRUWlc1a0Vtc0tLMmhoY1hFeGMyVjViWGR5T0hwek5tTTVNbkpqWm5sNk5tcHNZVFJoTlRCa2NtMTNaM0U1ZEhwMmJIb1NLMmhoY1hFeE9YQXljbTUyZW1Gb2VIRm9PWGxyY21vemNuRnRhbVJuZGpCdGVqWmxabTVxYldSNllUY2FEd29GWVVsVFRFMFNCakV3TURBd01CSjhDbGtLVHdvb0wyVjBhR1Z5YldsdWRDNWpjbmx3ZEc4dWRqRXVaWFJvYzJWamNESTFObXN4TGxCMVlrdGxlUklqQ2lFREk3UVRETUhHUHRqTk02WTF2MU53Z2JJUyt0MThDV3d6WXVUSVZ2b1ZiT01TQkFvQ0NBRVlHQklmQ2hrS0JXRkpVMHhORWhBME1EQXdNREF3TURBd01EQXdNREF3RU1DYURCcEFFZHF5NTlyZk5xSXJnbUJjSGg0ajZ2c0xJbDlNZU9sZGVWeS9hMWFhMHl3MzE2M3lRQnRxdlY5RXNuM3Jwd0FXTnpONnNCRmpCMDBPZjNWWWRxb3hMUT09JyxcbiAgc2VuZGVyOiAnaGFxcTFzZXltd3I4enM2YzkycmNmeXo2amxhNGE1MGRybXdncTl0enZseicsXG4gIHJlY2lwaWVudDogJ2hhcXExOXAycm52emFoeHFoOXlrcmozcnFtamRndjBtejZlZm5qbWR6YTcnLFxuICBjaGFpbklkOiAnaGFxcV81NDIxMS0zJyxcbiAgYWNjb3VudE51bWJlcjogMTY3Njc2LFxuICBzZXF1ZW5jZTogMjQsXG4gIHNlbmRBbW91bnQ6ICcxMDAwMDAnLFxuICBmZWVBbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgc2VuZE1lc3NhZ2U6IHtcbiAgICB0eXBlVXJsOiAnL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZCcsXG4gICAgdmFsdWU6IHtcbiAgICAgIGZyb21BZGRyZXNzOiAnaGFxcTFzZXltd3I4enM2YzkycmNmeXo2amxhNGE1MGRybXdncTl0enZseicsXG4gICAgICB0b0FkZHJlc3M6ICdoYXFxMTlwMnJudnphaHhxaDl5a3JqM3JxbWpkZ3YwbXo2ZWZuam1kemE3JyxcbiAgICAgIGFtb3VudDogW1xuICAgICAgICB7XG4gICAgICAgICAgZGVub206ICdhSVNMTScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgZ2FzQnVkZ2V0OiB7XG4gICAgYW1vdW50OiBbXG4gICAgICB7XG4gICAgICAgIGRlbm9tOiAnYUlTTE0nLFxuICAgICAgICBhbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnYXNMaW1pdDogMjAwMDAwLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFRFU1RfREVMRUdBVEVfVFggPSB7XG4gIGhhc2g6ICdGN0U4OTMzQjU5RjUxNEEwRUVGNjY0MzRDMjQzOEI2MzlEMjA4NDM1MDcxQ0M2RjA5QkQwN0UyMjlBMTlBMjYyJyxcbiAgc2lnbmF0dXJlOiAnQmQ5ZXd3OU5oMldsSDZ2SThwUGtENjY3aERYaC9FcmZqTmtFU3NQNUVva2tVcC9xYlRhejBWV1JYRzZmSlNic1kwaVdodG9ubG5acUtDaWpBWXFQZ1E9PScsXG4gIHB1YktleTogJ0F5TzBFd3pCeGo3WXpUT21OYjlUY0lHeUV2cmRmQWxzTTJMa3lGYjZGV3pqJyxcbiAgcHJpdmF0ZUtleTogJzN4bjQzbG5oQjBSeHdZa0oydlc0VWVCUFBPY2I5NDdXWXNZdXFzT3pYYTA9JyxcbiAgc2lnbmVkVHhCYXNlNjQ6XG4gICAgJ0Nwd0JDcGtCQ2lNdlkyOXpiVzl6TG5OMFlXdHBibWN1ZGpGaVpYUmhNUzVOYzJkRVpXeGxaMkYwWlJKeUNpdG9ZWEZ4TVhObGVXMTNjamg2Y3paak9USnlZMlo1ZWpacWJHRTBZVFV3WkhKdGQyZHhPWFI2ZG14NkVqSm9ZWEZ4ZG1Gc2IzQmxjakU0ZUdFeVpUSjZORzVrYldkbFpqbGhOMk0zYkdvd01HVjBkWFIzTW1SaFpubDVhR1JyZUJvUENnVmhTVk5NVFJJR01UQXdNREF3RW53S1dRcFBDaWd2WlhSb1pYSnRhVzUwTG1OeWVYQjBieTUyTVM1bGRHaHpaV053TWpVMmF6RXVVSFZpUzJWNUVpTUtJUU1qdEJNTXdjWSsyTTB6cGpXL1UzQ0JzaEw2M1h3SmJETmk1TWhXK2hWczR4SUVDZ0lJQVJnUkVoOEtHUW9GWVVsVFRFMFNFRFF3TURBd01EQXdNREF3TURBd01EQVF3Sm9NR2tBRjMxN0REMDJIWmFVZnE4anlrK1FQcnJ1RU5lSDhTdCtNMlFSS3cva1NpU1JTbitwdE5yUFJWWkZjYnA4bEp1eGpTSmFHMmllV2Rtb29LS01CaW8rQicsXG4gIGRlbGVnYXRvcjogJ2hhcXExc2V5bXdyOHpzNmM5MnJjZnl6NmpsYTRhNTBkcm13Z3E5dHp2bHonLFxuICB2YWxpZGF0b3I6ICdoYXFxdmFsb3BlcjE4eGEyZTJ6NG5kbWdlZjlhN2M3bGowMGV0dXR3MmRhZnl5aGRreCcsXG4gIGNoYWluSWQ6ICdoYXFxXzU0MjExLTMnLFxuICBhY2NvdW50TnVtYmVyOiAxNjc2NzYsXG4gIHNlcXVlbmNlOiAxNyxcbiAgc2VuZEFtb3VudDogJzEwMDAwMCcsXG4gIGZlZUFtb3VudDogJzQwMDAwMDAwMDAwMDAwMDAnLFxuICBzZW5kTWVzc2FnZToge1xuICAgIHR5cGVVcmw6ICcvY29zbW9zLnN0YWtpbmcudjFiZXRhMS5Nc2dEZWxlZ2F0ZScsXG4gICAgdmFsdWU6IHtcbiAgICAgIGRlbGVnYXRvckFkZHJlc3M6ICdoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6JyxcbiAgICAgIHZhbGlkYXRvckFkZHJlc3M6ICdoYXFxdmFsb3BlcjE4eGEyZTJ6NG5kbWdlZjlhN2M3bGowMGV0dXR3MmRhZnl5aGRreCcsXG4gICAgICBhbW91bnQ6IHtcbiAgICAgICAgZGVub206ICdhSVNMTScsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGdhc0J1ZGdldDoge1xuICAgIGFtb3VudDogW1xuICAgICAge1xuICAgICAgICBkZW5vbTogJ2FJU0xNJyxcbiAgICAgICAgYW1vdW50OiAnNDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2FzTGltaXQ6IDIwMDAwMCxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBURVNUX1VOREVMRUdBVEVfVFggPSB7XG4gIGhhc2g6ICdDQ0JEOTI4MzEyNzgxMDNFODUyRThGQjBDMDM4NzE3RUEyQjEyMkE0QzU5QkZFREM3NkUyQkVFNUY0RjEyOEJFJyxcbiAgc2lnbmF0dXJlOiAnZkI4aUhjR2RqbGI2N1NpOUQ2OExLL2pLc0hQVmttNytYY3YrSHYrYWtHMFJIU1ZyUXZ5Mlhvd1NGamZUd3F0MTZKZTdSV2xMdmZ5Zkwvd3EyWTlNNnc9PScsXG4gIHB1YktleTogJ0F5TzBFd3pCeGo3WXpUT21OYjlUY0lHeUV2cmRmQWxzTTJMa3lGYjZGV3pqJyxcbiAgcHJpdmF0ZUtleTogJzN4bjQzbG5oQjBSeHdZa0oydlc0VWVCUFBPY2I5NDdXWXNZdXFzT3pYYTA9JyxcbiAgc2lnbmVkVHhCYXNlNjQ6XG4gICAgJ0NwNEJDcHNCQ2lVdlkyOXpiVzl6TG5OMFlXdHBibWN1ZGpGaVpYUmhNUzVOYzJkVmJtUmxiR1ZuWVhSbEVuSUtLMmhoY1hFeGMyVjViWGR5T0hwek5tTTVNbkpqWm5sNk5tcHNZVFJoTlRCa2NtMTNaM0U1ZEhwMmJIb1NNbWhoY1hGMllXeHZjR1Z5TVRoNFlUSmxNbm8wYm1SdFoyVm1PV0UzWXpkc2FqQXdaWFIxZEhjeVpHRm1lWGxvWkd0NEdnOEtCV0ZKVTB4TkVnWXhNREF3TURBU2ZBcFpDazhLS0M5bGRHaGxjbTFwYm5RdVkzSjVjSFJ2TG5ZeExtVjBhSE5sWTNBeU5UWnJNUzVRZFdKTFpYa1NJd29oQXlPMEV3ekJ4ajdZelRPbU5iOVRjSUd5RXZyZGZBbHNNMkxreUZiNkZXempFZ1FLQWdnQkdCTVNId29aQ2dWaFNWTk1UUklRTkRBd01EQXdNREF3TURBd01EQXdNQkRBbWd3YVFId2ZJaDNCblk1Vyt1MG92USt2Q3l2NHlyQnoxWkp1L2wzTC9oNy9tcEJ0RVIwbGEwTDh0bDZNRWhZMzA4S3JkZWlYdTBWcFM3MzhueS84S3RtUFRPcz0nLFxuICBkZWxlZ2F0b3I6ICdoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6JyxcbiAgdmFsaWRhdG9yOiAnaGFxcXZhbG9wZXIxOHhhMmUyejRuZG1nZWY5YTdjN2xqMDBldHV0dzJkYWZ5eWhka3gnLFxuICBjaGFpbklkOiAnaGFxcV81NDIxMS0zJyxcbiAgYWNjb3VudE51bWJlcjogMTY3Njc2LFxuICBzZXF1ZW5jZTogMTksXG4gIHNlbmRBbW91bnQ6ICcxMDAwMDAnLFxuICBmZWVBbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgc2VuZE1lc3NhZ2U6IHtcbiAgICB0eXBlVXJsOiAnL2Nvc21vcy5zdGFraW5nLnYxYmV0YTEuTXNnVW5kZWxlZ2F0ZScsXG4gICAgdmFsdWU6IHtcbiAgICAgIGRlbGVnYXRvckFkZHJlc3M6ICdoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6JyxcbiAgICAgIHZhbGlkYXRvckFkZHJlc3M6ICdoYXFxdmFsb3BlcjE4eGEyZTJ6NG5kbWdlZjlhN2M3bGowMGV0dXR3MmRhZnl5aGRreCcsXG4gICAgICBhbW91bnQ6IHtcbiAgICAgICAgZGVub206ICdhSVNMTScsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGdhc0J1ZGdldDoge1xuICAgIGFtb3VudDogW1xuICAgICAge1xuICAgICAgICBkZW5vbTogJ2FJU0xNJyxcbiAgICAgICAgYW1vdW50OiAnNDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2FzTGltaXQ6IDIwMDAwMCxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFggPSB7XG4gIGhhc2g6ICcxMUNEODBBNkI1NjlENkVDNUQ0MkMwQ0UwODJDQkQxMjU0NzJBNkJGNjFGQzU1RTUwMDk1MEJEMUE5QTNCOTU3JyxcbiAgc2lnbmF0dXJlOiAnS1hGYlJ2TGVJK0N2cGhUTVpZejBVNndKdVo2VkFaQXBYZy9NNE44TVdXcExzSzhFUnpwcGJnU1NXR1UzMGhEdUkyR3REK0NIVUFpWXkxYlMzbUR6U1E9PScsXG4gIHB1YktleTogJ0F5TzBFd3pCeGo3WXpUT21OYjlUY0lHeUV2cmRmQWxzTTJMa3lGYjZGV3pqJyxcbiAgcHJpdmF0ZUtleTogJzN4bjQzbG5oQjBSeHdZa0oydlc0VWVCUFBPY2I5NDdXWXNZdXFzT3pYYTA9JyxcbiAgc2lnbmVkVHhCYXNlNjQ6XG4gICAgJ0NwOEJDcHdCQ2pjdlkyOXpiVzl6TG1ScGMzUnlhV0oxZEdsdmJpNTJNV0psZEdFeExrMXpaMWRwZEdoa2NtRjNSR1ZzWldkaGRHOXlVbVYzWVhKa0VtRUtLMmhoY1hFeGMyVjViWGR5T0hwek5tTTVNbkpqWm5sNk5tcHNZVFJoTlRCa2NtMTNaM0U1ZEhwMmJIb1NNbWhoY1hGMllXeHZjR1Z5TVRoNFlUSmxNbm8wYm1SdFoyVm1PV0UzWXpkc2FqQXdaWFIxZEhjeVpHRm1lWGxvWkd0NEVud0tXUXBQQ2lndlpYUm9aWEp0YVc1MExtTnllWEIwYnk1Mk1TNWxkR2h6WldOd01qVTJhekV1VUhWaVMyVjVFaU1LSVFNanRCTU13Y1krMk0wenBqVy9VM0NCc2hMNjNYd0piRE5pNU1oVytoVnM0eElFQ2dJSUFSZ1NFaDhLR1FvRllVbFRURTBTRURRd01EQXdNREF3TURBd01EQXdNREFRd0pvTUdrQXBjVnRHOHQ0ajRLK21GTXhsalBSVHJBbTVucFVCa0NsZUQ4emczd3haYWt1d3J3UkhPbWx1QkpKWVpUZlNFTzRqWWEwUDRJZFFDSmpMVnRMZVlQTkonLFxuICBkZWxlZ2F0b3I6ICdoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6JyxcbiAgdmFsaWRhdG9yOiAnaGFxcXZhbG9wZXIxOHhhMmUyejRuZG1nZWY5YTdjN2xqMDBldHV0dzJkYWZ5eWhka3gnLFxuICBjaGFpbklkOiAnaGFxcV81NDIxMS0zJyxcbiAgYWNjb3VudE51bWJlcjogMTY3Njc2LFxuICBzZXF1ZW5jZTogMTgsXG4gIHNlbmRBbW91bnQ6ICcxMDAwMDAnLFxuICBmZWVBbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgc2VuZE1lc3NhZ2U6IHtcbiAgICB0eXBlVXJsOiAnL2Nvc21vcy5kaXN0cmlidXRpb24udjFiZXRhMS5Nc2dXaXRoZHJhd0RlbGVnYXRvclJld2FyZCcsXG4gICAgdmFsdWU6IHtcbiAgICAgIGRlbGVnYXRvckFkZHJlc3M6ICdoYXFxMXNleW13cjh6czZjOTJyY2Z5ejZqbGE0YTUwZHJtd2dxOXR6dmx6JyxcbiAgICAgIHZhbGlkYXRvckFkZHJlc3M6ICdoYXFxdmFsb3BlcjE4eGEyZTJ6NG5kbWdlZjlhN2M3bGowMGV0dXR3MmRhZnl5aGRreCcsXG4gICAgICBhbW91bnQ6IHtcbiAgICAgICAgZGVub206ICdhSVNMTScsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGdhc0J1ZGdldDoge1xuICAgIGFtb3VudDogW1xuICAgICAge1xuICAgICAgICBkZW5vbTogJ2FJU0xNJyxcbiAgICAgICAgYW1vdW50OiAnNDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2FzTGltaXQ6IDIwMDAwMCxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBURVNUX1RYX1dJVEhfTUVNTyA9IHtcbiAgaGFzaDogJ0Q5MzBGMTJCQzY3NjRBQTE5NzFBRkIyMEY0NjZBQzZGNTk4QzY2NEJCQ0ZFNzkyRDJENDIxQzhDNzdCMjM5QTgnLFxuICBzaWduYXR1cmU6ICdvanVQZTdjTzM3WnM2OWc1bEhTZytOTzE4V0UwLzZxTm9LbnllYW9tZVl4aHArVTdZbTdKNVovZldBV1RyUDIrQVdSbUNxTnVQT2huU3hmRlphYmtTdz09JyxcbiAgcHViS2V5OiAnQXlPMEV3ekJ4ajdZelRPbU5iOVRjSUd5RXZyZGZBbHNNMkxreUZiNkZXemonLFxuICBwcml2YXRlS2V5OiAnM3huNDNsbmhCMFJ4d1lrSjJ2VzRVZUJQUE9jYjk0N1dZc1l1cXNPelhhMD0nLFxuICBzaWduZWRUeEJhc2U2NDpcbiAgICAnQ3BJQkNvc0JDaHd2WTI5emJXOXpMbUpoYm1zdWRqRmlaWFJoTVM1TmMyZFRaVzVrRW1zS0syaGhjWEV4YzJWNWJYZHlPSHB6Tm1NNU1uSmpabmw2Tm1wc1lUUmhOVEJrY20xM1ozRTVkSHAyYkhvU0syaGhjWEV4T1hBeWNtNTJlbUZvZUhGb09YbHJjbW96Y25GdGFtUm5kakJ0ZWpabFptNXFiV1I2WVRjYUR3b0ZZVWxUVEUwU0JqRXdNREF3TUJJQ01qTVNmQXBaQ2s4S0tDOWxkR2hsY20xcGJuUXVZM0o1Y0hSdkxuWXhMbVYwYUhObFkzQXlOVFpyTVM1UWRXSkxaWGtTSXdvaEF5TzBFd3pCeGo3WXpUT21OYjlUY0lHeUV2cmRmQWxzTTJMa3lGYjZGV3pqRWdRS0FnZ0JHQlFTSHdvWkNnVmhTVk5NVFJJUU5EQXdNREF3TURBd01EQXdNREF3TUJEQW1nd2FRS0k3ajN1M0R0KzJiT3ZZT1pSMG9QalR0ZkZoTlArcWphQ3A4bm1xSm5tTVlhZmxPMkp1eWVXZjMxZ0ZrNno5dmdGa1pncWpianpvWjBzWHhXV201RXM9JyxcbiAgc2VuZGVyOiAnaGFxcTFzZXltd3I4enM2YzkycmNmeXo2amxhNGE1MGRybXdncTl0enZseicsXG4gIHJlY2lwaWVudDogJ2hhcXExOXAycm52emFoeHFoOXlrcmozcnFtamRndjBtejZlZm5qbWR6YTcnLFxuICBjaGFpbklkOiAnaGFxcV81NDIxMS0zJyxcbiAgYWNjb3VudE51bWJlcjogMTY3Njc2LFxuICBzZXF1ZW5jZTogMjAsXG4gIHNlbmRBbW91bnQ6ICcxMDAwMDAnLFxuICBmZWVBbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgc2VuZE1lc3NhZ2U6IHtcbiAgICB0eXBlVXJsOiAnL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZCcsXG4gICAgdmFsdWU6IHtcbiAgICAgIGZyb21BZGRyZXNzOiAnaGFxcTFzZXltd3I4enM2YzkycmNmeXo2amxhNGE1MGRybXdncTl0enZseicsXG4gICAgICB0b0FkZHJlc3M6ICdoYXFxMTlwMnJudnphaHhxaDl5a3JqM3JxbWpkZ3YwbXo2ZWZuam1kemE3JyxcbiAgICAgIGFtb3VudDogW1xuICAgICAgICB7XG4gICAgICAgICAgZGVub206ICdhSVNMTScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgbWVtbzogJzIzJyxcbiAgZ2FzQnVkZ2V0OiB7XG4gICAgYW1vdW50OiBbXG4gICAgICB7XG4gICAgICAgIGRlbm9tOiAnYUlTTE0nLFxuICAgICAgICBhbW91bnQ6ICc0MDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnYXNMaW1pdDogMjAwMDAwLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGFkZHJlc3MgPSB7XG4gIGFkZHJlc3MxOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6YycsXG4gIGFkZHJlc3MyOiAnaGFxcTFqM2hod2w2ZXhlOXlqbmdneTMzcmFqNXMzeGVza2dzbGp2emFndCcsXG4gIGFkZHJlc3MzOiAnaGFxcTJrM2hod2w2ZXhlOXlqbmdneTMzcmFqNXMzeGVza2dzbGp2emFndCcsXG4gIGFkZHJlc3M0OiAnaGFxcTF0bW0wMDV4Z21zN3FyZm03andwc3QzbWo5ZHA4dHpkbGQzNGpndicsXG4gIHZhbGlkYXRvckFkZHJlc3MxOiAnaGFxcXZhbG9wZXIxNmxwMHhwcTg3Y3JlNXo0amtmZGRxNzhyNWw0dmNkN2VsMmpsbWonLFxuICB2YWxpZGF0b3JBZGRyZXNzMjogJ2hhcXF2YWxvcGVyMTZnZzN3enE4aDk4enluOWtqcDdhdzNqd3k2cG54c2xyZGhsN3pwJyxcbiAgdmFsaWRhdG9yQWRkcmVzczM6ICdoYXFxdmFsb3BlcjM1ZWFmdXZjcmgzYzA3ejRnM3BxZ3E2OG4zbG1zeXU1amQ5c3dzeScsXG4gIHZhbGlkYXRvckFkZHJlc3M0OiAnaGFxcXZhbG9kZXIxcDhrNnhrOTR1MjR2djlkbXh1M3ZrZ2c0M2ZzM3Y3Mmdya3BqaG0nLFxuICBub01lbW9JZEFkZHJlc3M6ICdoYXFxMWczZzZuZm1xZjNmOWxtZGhmNWc4NHB1N3VzdHc4anQ3dHZyZnpjJyxcbiAgdmFsaWRNZW1vSWRBZGRyZXNzOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6Yz9tZW1vSWQ9MicsXG4gIGludmFsaWRNZW1vSWRBZGRyZXNzOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6Yz9tZW1vSWQ9eHl6JyxcbiAgbXVsdGlwbGVNZW1vSWRBZGRyZXNzOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6Yz9tZW1vSWQ9MyZtZW1vSWQ9MTInLFxufTtcblxuZXhwb3J0IGNvbnN0IGJsb2NrSGFzaCA9IHtcbiAgaGFzaDE6ICc3ODAwOUYzRjA0M0QzQkZERTc4RDNEQjQ2Qzk4QUM2QzREMzBCRTU4NkU4REEyQTI4RkIxRkU1MzdERjc5MjY1JyxcbiAgaGFzaDI6ICcxQ0NCNUUzNThDRTg0RkI5RkJENzczMTFEMjVFMDYyMTM1NkNGMjgzMTU5RUE3MDM0NTVCQTcyQTVDQjYxRjk3Jyxcbn07XG5cbmV4cG9ydCBjb25zdCB0eElkcyA9IHtcbiAgaGFzaDE6ICdDQ0RDRkFDMDc5QkEzODMzQUQzRjhFRUYzQjQxMUM5RDhBRTI3NDdFRjMzQ0E1MTY0ODhBNDBFNTIyREREMzREJyxcbiAgaGFzaDI6ICdCNTE3MTNDNkZGRDlFQkVBRkYxNTg0OThCQjZDNDA2QUZDQzVFMUQwNDIzRjM4MDczNzE0REMxRjU0RTU3NkY2JyxcbiAgaGFzaDM6ICc3NEJGMDJGRTYyMEMzN0VGQzI0MkI5NDVCMDFBMjFEOEUzQkRBRURDMjM2MTdCQjA5NjRBRkM1QkM1OTgwNDJFJyxcbn07XG5cbmV4cG9ydCBjb25zdCBjb2luQW1vdW50cyA9IHtcbiAgYW1vdW50MTogeyBhbW91bnQ6ICcxMDAwMDAnLCBkZW5vbTogJ2FJU0xNJyB9LFxuICBhbW91bnQyOiB7IGFtb3VudDogJzEwMDAwMDAnLCBkZW5vbTogJ2FJU0xNJyB9LFxuICBhbW91bnQzOiB7IGFtb3VudDogJzEwMDAwMDAwJywgZGVub206ICdhSVNMTScgfSxcbiAgYW1vdW50NDogeyBhbW91bnQ6ICctMScsIGRlbm9tOiAnYUlTTE0nIH0sXG4gIGFtb3VudDU6IHsgYW1vdW50OiAnMTAwMDAwMDAwMCcsIGRlbm9tOiAndUlTTE0nIH0sXG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=islm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islm.d.ts","sourceRoot":"","sources":["../../../test/unit/islm.ts"],"names":[],"mappings":""}
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const sdk_api_1 = require("@bitgo-beta/sdk-api");
7
+ const sdk_test_1 = require("@bitgo-beta/sdk-test");
8
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ const src_1 = require("../../src");
11
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
12
+ const islm_1 = require("../resources/islm");
13
+ const should = require("should");
14
+ describe('Islm', function () {
15
+ let bitgo;
16
+ let basecoin;
17
+ before(function () {
18
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
19
+ bitgo.safeRegister('islm', src_1.Islm.createInstance);
20
+ bitgo.safeRegister('tislm', src_1.Tislm.createInstance);
21
+ bitgo.initializeTestVars();
22
+ basecoin = bitgo.coin('tislm');
23
+ });
24
+ it('should return the right info', function () {
25
+ const islm = bitgo.coin('islm');
26
+ const tislm = bitgo.coin('tislm');
27
+ islm.getChain().should.equal('islm');
28
+ islm.getFamily().should.equal('islm');
29
+ islm.getFullName().should.equal('Islamic Coin');
30
+ islm.getBaseFactor().should.equal(1e18);
31
+ tislm.getChain().should.equal('tislm');
32
+ tislm.getFamily().should.equal('islm');
33
+ tislm.getFullName().should.equal('Testnet Islamic Coin');
34
+ tislm.getBaseFactor().should.equal(1e18);
35
+ });
36
+ describe('Address Validation', () => {
37
+ it('should get address details without memoId', function () {
38
+ const addressDetails = basecoin.getAddressDetails(islm_1.address.noMemoIdAddress);
39
+ addressDetails.address.should.equal(islm_1.address.noMemoIdAddress);
40
+ should.not.exist(addressDetails.memoId);
41
+ });
42
+ it('should get address details with memoId', function () {
43
+ const addressDetails = basecoin.getAddressDetails(islm_1.address.validMemoIdAddress);
44
+ addressDetails.address.should.equal(islm_1.address.validMemoIdAddress.split('?')[0]);
45
+ addressDetails.memoId.should.equal('2');
46
+ });
47
+ it('should throw on multiple memo id address', () => {
48
+ (() => {
49
+ basecoin.getAddressDetails(islm_1.address.multipleMemoIdAddress);
50
+ }).should.throw();
51
+ });
52
+ it('should validate wallet receive address', async function () {
53
+ const receiveAddress = {
54
+ address: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc?memoId=7',
55
+ coinSpecific: {
56
+ rootAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc',
57
+ memoID: '7',
58
+ },
59
+ };
60
+ const isValid = await basecoin.isWalletAddress(receiveAddress);
61
+ isValid.should.equal(true);
62
+ });
63
+ it('should validate account addresses correctly', () => {
64
+ should.equal(utils_1.default.isValidAddress(islm_1.address.address1), true);
65
+ should.equal(utils_1.default.isValidAddress(islm_1.address.address2), true);
66
+ should.equal(utils_1.default.isValidAddress(islm_1.address.address3), false);
67
+ should.equal(utils_1.default.isValidAddress(islm_1.address.address4), true);
68
+ should.equal(utils_1.default.isValidAddress('dfjk35y'), false);
69
+ should.equal(utils_1.default.isValidAddress(undefined), false);
70
+ should.equal(utils_1.default.isValidAddress(''), false);
71
+ should.equal(utils_1.default.isValidAddress(islm_1.address.validMemoIdAddress), true);
72
+ should.equal(utils_1.default.isValidAddress(islm_1.address.multipleMemoIdAddress), false);
73
+ });
74
+ it('should validate validator addresses correctly', () => {
75
+ should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress1), true);
76
+ should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress2), true);
77
+ should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress3), false);
78
+ should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress4), false);
79
+ should.equal(utils_1.default.isValidValidatorAddress('dfjk35y'), false);
80
+ should.equal(utils_1.default.isValidValidatorAddress(undefined), false);
81
+ should.equal(utils_1.default.isValidValidatorAddress(''), false);
82
+ });
83
+ });
84
+ describe('Verify transaction: ', () => {
85
+ it('should succeed to verify transaction', async function () {
86
+ const txPrebuild = {
87
+ txHex: islm_1.TEST_SEND_TX.signedTxBase64,
88
+ txInfo: {},
89
+ };
90
+ const txParams = {
91
+ recipients: [
92
+ {
93
+ address: islm_1.TEST_SEND_TX.recipient,
94
+ amount: islm_1.TEST_SEND_TX.sendAmount,
95
+ },
96
+ ],
97
+ };
98
+ const verification = {};
99
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
100
+ isTransactionVerified.should.equal(true);
101
+ });
102
+ it('should succeed to verify delegate transaction', async function () {
103
+ const txPrebuild = {
104
+ txHex: islm_1.TEST_DELEGATE_TX.signedTxBase64,
105
+ txInfo: {},
106
+ };
107
+ const txParams = {
108
+ recipients: [
109
+ {
110
+ address: islm_1.TEST_DELEGATE_TX.validator,
111
+ amount: islm_1.TEST_DELEGATE_TX.sendAmount,
112
+ },
113
+ ],
114
+ };
115
+ const verification = {};
116
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
117
+ isTransactionVerified.should.equal(true);
118
+ });
119
+ it('should succeed to verify undelegate transaction', async function () {
120
+ const txPrebuild = {
121
+ txHex: islm_1.TEST_UNDELEGATE_TX.signedTxBase64,
122
+ txInfo: {},
123
+ };
124
+ const txParams = {
125
+ recipients: [
126
+ {
127
+ address: islm_1.TEST_UNDELEGATE_TX.validator,
128
+ amount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
129
+ },
130
+ ],
131
+ };
132
+ const verification = {};
133
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
134
+ isTransactionVerified.should.equal(true);
135
+ });
136
+ it('should succeed to verify withdraw rewards transaction', async function () {
137
+ const txPrebuild = {
138
+ txHex: islm_1.TEST_WITHDRAW_REWARDS_TX.signedTxBase64,
139
+ txInfo: {},
140
+ };
141
+ const txParams = {
142
+ recipients: [
143
+ {
144
+ address: islm_1.TEST_WITHDRAW_REWARDS_TX.validator,
145
+ amount: 'UNAVAILABLE',
146
+ },
147
+ ],
148
+ };
149
+ const verification = {};
150
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
151
+ isTransactionVerified.should.equal(true);
152
+ });
153
+ it('should fail to verify transaction with invalid param', async function () {
154
+ const txPrebuild = {};
155
+ const txParams = { recipients: undefined };
156
+ await basecoin
157
+ .verifyTransaction({
158
+ txParams,
159
+ txPrebuild,
160
+ })
161
+ .should.rejectedWith('missing required tx prebuild property txHex');
162
+ });
163
+ });
164
+ describe('Explain Transaction: ', () => {
165
+ it('should explain a transfer transaction', async function () {
166
+ const explainedTransaction = await basecoin.explainTransaction({
167
+ txHex: islm_1.TEST_SEND_TX.signedTxBase64,
168
+ });
169
+ explainedTransaction.should.deepEqual({
170
+ displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
171
+ id: islm_1.TEST_SEND_TX.hash,
172
+ outputs: [
173
+ {
174
+ address: islm_1.TEST_SEND_TX.recipient,
175
+ amount: islm_1.TEST_SEND_TX.sendAmount,
176
+ },
177
+ ],
178
+ outputAmount: islm_1.TEST_SEND_TX.sendAmount,
179
+ changeOutputs: [],
180
+ changeAmount: '0',
181
+ fee: { fee: islm_1.TEST_SEND_TX.gasBudget.amount[0].amount },
182
+ type: 0,
183
+ });
184
+ });
185
+ it('should explain a delegate transaction', async function () {
186
+ const explainedTransaction = await basecoin.explainTransaction({
187
+ txHex: islm_1.TEST_DELEGATE_TX.signedTxBase64,
188
+ });
189
+ explainedTransaction.should.deepEqual({
190
+ displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
191
+ id: islm_1.TEST_DELEGATE_TX.hash,
192
+ outputs: [
193
+ {
194
+ address: islm_1.TEST_DELEGATE_TX.validator,
195
+ amount: islm_1.TEST_DELEGATE_TX.sendAmount,
196
+ },
197
+ ],
198
+ outputAmount: islm_1.TEST_DELEGATE_TX.sendAmount,
199
+ changeOutputs: [],
200
+ changeAmount: '0',
201
+ fee: { fee: islm_1.TEST_DELEGATE_TX.gasBudget.amount[0].amount },
202
+ type: 13,
203
+ });
204
+ });
205
+ it('should explain a undelegate transaction', async function () {
206
+ const explainedTransaction = await basecoin.explainTransaction({
207
+ txHex: islm_1.TEST_UNDELEGATE_TX.signedTxBase64,
208
+ });
209
+ explainedTransaction.should.deepEqual({
210
+ displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
211
+ id: islm_1.TEST_UNDELEGATE_TX.hash,
212
+ outputs: [
213
+ {
214
+ address: islm_1.TEST_UNDELEGATE_TX.validator,
215
+ amount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
216
+ },
217
+ ],
218
+ outputAmount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
219
+ changeOutputs: [],
220
+ changeAmount: '0',
221
+ fee: { fee: islm_1.TEST_UNDELEGATE_TX.gasBudget.amount[0].amount },
222
+ type: 17,
223
+ });
224
+ });
225
+ it('should explain a withdraw transaction', async function () {
226
+ const explainedTransaction = await basecoin.explainTransaction({
227
+ txHex: islm_1.TEST_WITHDRAW_REWARDS_TX.signedTxBase64,
228
+ });
229
+ explainedTransaction.should.deepEqual({
230
+ displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
231
+ id: islm_1.TEST_WITHDRAW_REWARDS_TX.hash,
232
+ outputs: [
233
+ {
234
+ address: islm_1.TEST_WITHDRAW_REWARDS_TX.validator,
235
+ amount: 'UNAVAILABLE',
236
+ },
237
+ ],
238
+ outputAmount: undefined,
239
+ changeOutputs: [],
240
+ changeAmount: '0',
241
+ fee: { fee: islm_1.TEST_WITHDRAW_REWARDS_TX.gasBudget.amount[0].amount },
242
+ type: 15,
243
+ });
244
+ });
245
+ it('should explain a transfer transaction with memo', async function () {
246
+ const explainedTransaction = await basecoin.explainTransaction({
247
+ txHex: islm_1.TEST_TX_WITH_MEMO.signedTxBase64,
248
+ });
249
+ explainedTransaction.should.deepEqual({
250
+ displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
251
+ id: islm_1.TEST_TX_WITH_MEMO.hash,
252
+ outputs: [
253
+ {
254
+ address: islm_1.TEST_TX_WITH_MEMO.recipient,
255
+ amount: islm_1.TEST_TX_WITH_MEMO.sendAmount,
256
+ memo: islm_1.TEST_TX_WITH_MEMO.memo,
257
+ },
258
+ ],
259
+ outputAmount: islm_1.TEST_TX_WITH_MEMO.sendAmount,
260
+ changeOutputs: [],
261
+ changeAmount: '0',
262
+ fee: { fee: islm_1.TEST_TX_WITH_MEMO.gasBudget.amount[0].amount },
263
+ type: 0,
264
+ });
265
+ });
266
+ it('should fail to explain transaction with missing params', async function () {
267
+ try {
268
+ await basecoin.explainTransaction({});
269
+ }
270
+ catch (error) {
271
+ should.equal(error.message, 'missing required txHex parameter');
272
+ }
273
+ });
274
+ it('should fail to explain transaction with invalid params', async function () {
275
+ try {
276
+ await basecoin.explainTransaction({ txHex: 'randomString' });
277
+ }
278
+ catch (error) {
279
+ should.equal(error.message.startsWith('Invalid transaction:'), true);
280
+ }
281
+ });
282
+ });
283
+ describe('Parse Transactions: ', () => {
284
+ it('should parse a transfer transaction', async function () {
285
+ const transferInputsResponse = {
286
+ address: islm_1.TEST_SEND_TX.recipient,
287
+ amount: new bignumber_js_1.default(islm_1.TEST_SEND_TX.sendAmount).plus(islm_1.TEST_SEND_TX.gasBudget.amount[0].amount).toFixed(),
288
+ };
289
+ const transferOutputsResponse = {
290
+ address: islm_1.TEST_SEND_TX.recipient,
291
+ amount: islm_1.TEST_SEND_TX.sendAmount,
292
+ };
293
+ const parsedTransaction = await basecoin.parseTransaction({ txHex: islm_1.TEST_SEND_TX.signedTxBase64 });
294
+ parsedTransaction.should.deepEqual({
295
+ inputs: [transferInputsResponse],
296
+ outputs: [transferOutputsResponse],
297
+ });
298
+ });
299
+ it('should fail to parse a transfer transaction when explainTransaction response is undefined', async function () {
300
+ const stub = sinon_1.default.stub(src_1.Islm.prototype, 'explainTransaction');
301
+ stub.resolves(undefined);
302
+ await basecoin
303
+ .parseTransaction({ txHex: islm_1.TEST_SEND_TX.signedTxBase64 })
304
+ .should.be.rejectedWith('Invalid transaction');
305
+ stub.restore();
306
+ });
307
+ });
308
+ });
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNsbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9pc2xtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCxnRUFBcUM7QUFDckMsa0RBQTBCO0FBQzFCLG1DQUF3QztBQUN4QyxnRUFBd0M7QUFDeEMsNENBTzJCO0FBQzNCLGlDQUFrQztBQUVsQyxRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FB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QUFDLFNBQVM7Z0JBQy9CLE1BQU0sRUFBRSxtQkFBWSxDQUFDLFVBQVU7YUFDaEMsQ0FBQztZQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBRWxHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzthQUNuQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRkFBMkYsRUFBRSxLQUFLO1lBQ25HLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUMsVUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsTUFBTSxRQUFRO2lCQUNYLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3hELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBJc2xtLCBUaXNsbSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBURVNUX0RFTEVHQVRFX1RYLFxuICBURVNUX1NFTkRfVFgsXG4gIFRFU1RfVFhfV0lUSF9NRU1PLFxuICBURVNUX1VOREVMRUdBVEVfVFgsXG4gIFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWCxcbiAgYWRkcmVzcyxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzL2lzbG0nO1xuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuXG5kZXNjcmliZSgnSXNsbScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2lzbG0nLCBJc2xtLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rpc2xtJywgVGlzbG0uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGlzbG0nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaXNsbSA9IGJpdGdvLmNvaW4oJ2lzbG0nKTtcbiAgICBjb25zdCB0aXNsbSA9IGJpdGdvLmNvaW4oJ3Rpc2xtJyk7XG5cbiAgICBpc2xtLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpc2xtJyk7XG4gICAgaXNsbS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2lzbG0nKTtcbiAgICBpc2xtLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdJc2xhbWljIENvaW4nKTtcbiAgICBpc2xtLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG5cbiAgICB0aXNsbS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGlzbG0nKTtcbiAgICB0aXNsbS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2lzbG0nKTtcbiAgICB0aXNsbS5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBJc2xhbWljIENvaW4nKTtcbiAgICB0aXNsbS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRob3V0IG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcy5ub01lbW9JZEFkZHJlc3MpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoYWRkcmVzcy5ub01lbW9JZEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChhZGRyZXNzRGV0YWlscy5tZW1vSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzIHdpdGggbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyk7XG4gICAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcy5zcGxpdCgnPycpWzBdKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLm1lbW9JZC5zaG91bGQuZXF1YWwoJzInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gbXVsdGlwbGUgbWVtbyBpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgKCgpID0+IHtcbiAgICAgICAgYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcy5tdWx0aXBsZU1lbW9JZEFkZHJlc3MpO1xuICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHdhbGxldCByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9IHtcbiAgICAgICAgYWRkcmVzczogJ2hhcXExZzNnNm5mbXFmM2Y5bG1kaGY1Zzg0cHU3dXN0dzhqdDd0dnJmemM/bWVtb0lkPTcnLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICByb290QWRkcmVzczogJ2hhcXExZzNnNm5mbXFmM2Y5bG1kaGY1Zzg0cHU3dXN0dzhqdDd0dnJmemMnLFxuICAgICAgICAgIG1lbW9JRDogJzcnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFjY291bnQgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MxKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMiksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczMpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzNCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKCdkZmprMzV5JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoJycpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy52YWxpZE1lbW9JZEFkZHJlc3MpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLm11bHRpcGxlTWVtb0lkQWRkcmVzcyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdmFsaWRhdG9yIGFkZHJlc3NlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcy52YWxpZGF0b3JBZGRyZXNzMSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczIpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzLnZhbGlkYXRvckFkZHJlc3MzKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczQpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoJ2RmamszNXknKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcygnJyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSB0cmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9TRU5EX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9TRU5EX1RYLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX0RFTEVHQVRFX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bmRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVU5ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfVU5ERUxFR0FURV9UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfVU5ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB3aXRoZHJhdyByZXdhcmRzIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6ICdVTkFWQUlMQUJMRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBwYXJhbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiB1bmRlZmluZWQgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9TRU5EX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfU0VORF9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBkZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfREVMRUdBVEVfVFguaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX0RFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiBURVNUX0RFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9ERUxFR0FURV9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAxMyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdW5kZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVU5ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9VTkRFTEVHQVRFX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1VOREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1VOREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfVU5ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfVU5ERUxFR0FURV9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAxNyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgd2l0aGRyYXcgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogJ1VOQVZBSUxBQkxFJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMTUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVFhfV0lUSF9NRU1PLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX1RYX1dJVEhfTUVNTy5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9UWF9XSVRIX01FTU8ucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1RYX1dJVEhfTUVNTy5zZW5kQW1vdW50LFxuICAgICAgICAgICAgbWVtbzogVEVTVF9UWF9XSVRIX01FTU8ubWVtbyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfVFhfV0lUSF9NRU1PLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9UWF9XSVRIX01FTU8uZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBtaXNzaW5nIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7fSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG91bGQuZXF1YWwoZXJyb3IubWVzc2FnZSwgJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggcGFyYW1ldGVyJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6ICdyYW5kb21TdHJpbmcnIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjonKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQYXJzZSBUcmFuc2FjdGlvbnM6ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0c1Jlc3BvbnNlID0ge1xuICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIoVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQpLnBsdXMoVEVTVF9TRU5EX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50KS50b0ZpeGVkKCksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0cmFuc2Zlck91dHB1dHNSZXNwb25zZSA9IHtcbiAgICAgICAgYWRkcmVzczogVEVTVF9TRU5EX1RYLnJlY2lwaWVudCxcbiAgICAgICAgYW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiBURVNUX1NFTkRfVFguc2lnbmVkVHhCYXNlNjQgfSk7XG5cbiAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBpbnB1dHM6IFt0cmFuc2ZlcklucHV0c1Jlc3BvbnNlXSxcbiAgICAgICAgb3V0cHV0czogW3RyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoSXNsbS5wcm90b3R5cGUsICdleHBsYWluVHJhbnNhY3Rpb24nKTtcbiAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}