@sidhujag/sysweb3-keyring 1.0.547 → 1.0.549

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 (212) hide show
  1. package/{dist/cjs → cjs}/providers.js +1 -64
  2. package/cjs/providers.js.map +1 -0
  3. package/{dist/cjs → cjs}/transactions/ethereum.js +1 -16
  4. package/cjs/transactions/ethereum.js.map +1 -0
  5. package/package.json +2 -30
  6. package/{dist/types → types}/providers.d.ts +0 -8
  7. package/{dist/types → types}/transactions/ethereum.d.ts +2 -2
  8. package/{dist/types → types}/types.d.ts +2 -2
  9. package/coverage/clover.xml +0 -2875
  10. package/coverage/coverage-final.json +0 -29468
  11. package/coverage/lcov-report/base.css +0 -354
  12. package/coverage/lcov-report/block-navigation.js +0 -85
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/index.html +0 -320
  15. package/coverage/lcov-report/prettify.css +0 -101
  16. package/coverage/lcov-report/prettify.js +0 -1008
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +0 -191
  19. package/coverage/lcov-report/src/index.html +0 -276
  20. package/coverage/lcov-report/src/index.ts.html +0 -114
  21. package/coverage/lcov-report/src/initial-state.ts.html +0 -558
  22. package/coverage/lcov-report/src/keyring-manager.ts.html +0 -6279
  23. package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +0 -178
  24. package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +0 -144
  25. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +0 -1560
  26. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +0 -276
  27. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +0 -495
  28. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +0 -1138
  29. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +0 -363
  30. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +0 -289
  31. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +0 -486
  32. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +0 -240
  33. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +0 -342
  34. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +0 -2388
  35. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +0 -453
  36. package/coverage/lcov-report/src/ledger/consts.ts.html +0 -177
  37. package/coverage/lcov-report/src/ledger/index.html +0 -216
  38. package/coverage/lcov-report/src/ledger/index.ts.html +0 -1371
  39. package/coverage/lcov-report/src/ledger/utils.ts.html +0 -102
  40. package/coverage/lcov-report/src/signers.ts.html +0 -591
  41. package/coverage/lcov-report/src/storage.ts.html +0 -198
  42. package/coverage/lcov-report/src/transactions/ethereum.ts.html +0 -5826
  43. package/coverage/lcov-report/src/transactions/index.html +0 -216
  44. package/coverage/lcov-report/src/transactions/index.ts.html +0 -93
  45. package/coverage/lcov-report/src/transactions/syscoin.ts.html +0 -1521
  46. package/coverage/lcov-report/src/trezor/index.html +0 -176
  47. package/coverage/lcov-report/src/trezor/index.ts.html +0 -2655
  48. package/coverage/lcov-report/src/types.ts.html +0 -1443
  49. package/coverage/lcov-report/src/utils/derivation-paths.ts.html +0 -486
  50. package/coverage/lcov-report/src/utils/index.html +0 -196
  51. package/coverage/lcov-report/src/utils/psbt.ts.html +0 -159
  52. package/coverage/lcov-report/test/helpers/constants.ts.html +0 -627
  53. package/coverage/lcov-report/test/helpers/index.html +0 -176
  54. package/coverage/lcov.info +0 -4832
  55. package/dist/cjs/providers.js.map +0 -1
  56. package/dist/cjs/transactions/ethereum.js.map +0 -1
  57. package/dist/package.json +0 -50
  58. package/examples/basic-usage.js +0 -140
  59. package/jest.config.js +0 -32
  60. package/readme.md +0 -201
  61. package/src/declare.d.ts +0 -7
  62. package/src/errorUtils.ts +0 -83
  63. package/src/hardware-wallet-manager.ts +0 -655
  64. package/src/index.ts +0 -12
  65. package/src/initial-state.ts +0 -108
  66. package/src/keyring-manager.ts +0 -2698
  67. package/src/ledger/bitcoin_client/index.ts +0 -19
  68. package/src/ledger/bitcoin_client/lib/appClient.ts +0 -405
  69. package/src/ledger/bitcoin_client/lib/bip32.ts +0 -61
  70. package/src/ledger/bitcoin_client/lib/buffertools.ts +0 -134
  71. package/src/ledger/bitcoin_client/lib/clientCommands.ts +0 -356
  72. package/src/ledger/bitcoin_client/lib/constants.ts +0 -12
  73. package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +0 -65
  74. package/src/ledger/bitcoin_client/lib/merkle.ts +0 -136
  75. package/src/ledger/bitcoin_client/lib/merkleMap.ts +0 -49
  76. package/src/ledger/bitcoin_client/lib/policy.ts +0 -91
  77. package/src/ledger/bitcoin_client/lib/psbtv2.ts +0 -768
  78. package/src/ledger/bitcoin_client/lib/varint.ts +0 -120
  79. package/src/ledger/consts.ts +0 -3
  80. package/src/ledger/index.ts +0 -685
  81. package/src/ledger/types.ts +0 -74
  82. package/src/network-utils.ts +0 -99
  83. package/src/providers.ts +0 -345
  84. package/src/signers.ts +0 -158
  85. package/src/storage.ts +0 -63
  86. package/src/transactions/__tests__/integration.test.ts +0 -303
  87. package/src/transactions/__tests__/syscoin.test.ts +0 -409
  88. package/src/transactions/ethereum.ts +0 -2503
  89. package/src/transactions/index.ts +0 -2
  90. package/src/transactions/syscoin.ts +0 -542
  91. package/src/trezor/index.ts +0 -1050
  92. package/src/types.ts +0 -366
  93. package/src/utils/derivation-paths.ts +0 -133
  94. package/src/utils/psbt.ts +0 -24
  95. package/src/utils.ts +0 -191
  96. package/test/README.md +0 -158
  97. package/test/__mocks__/ledger-mock.js +0 -20
  98. package/test/__mocks__/trezor-mock.js +0 -75
  99. package/test/cleanup-summary.md +0 -167
  100. package/test/helpers/README.md +0 -78
  101. package/test/helpers/constants.ts +0 -79
  102. package/test/helpers/setup.ts +0 -714
  103. package/test/integration/import-validation.spec.ts +0 -588
  104. package/test/unit/hardware/ledger.spec.ts +0 -869
  105. package/test/unit/hardware/trezor.spec.ts +0 -828
  106. package/test/unit/keyring-manager/account-management.spec.ts +0 -970
  107. package/test/unit/keyring-manager/import-watchonly.spec.ts +0 -181
  108. package/test/unit/keyring-manager/import-wif.spec.ts +0 -126
  109. package/test/unit/keyring-manager/initialization.spec.ts +0 -782
  110. package/test/unit/keyring-manager/key-derivation.spec.ts +0 -996
  111. package/test/unit/keyring-manager/security.spec.ts +0 -505
  112. package/test/unit/keyring-manager/state-management.spec.ts +0 -375
  113. package/test/unit/network/network-management.spec.ts +0 -372
  114. package/test/unit/transactions/ethereum-transactions.spec.ts +0 -382
  115. package/test/unit/transactions/syscoin-transactions.spec.ts +0 -615
  116. package/tsconfig.json +0 -14
  117. /package/{dist/README.md → README.md} +0 -0
  118. /package/{dist/cjs → cjs}/errorUtils.js +0 -0
  119. /package/{dist/cjs → cjs}/errorUtils.js.map +0 -0
  120. /package/{dist/cjs → cjs}/hardware-wallet-manager.js +0 -0
  121. /package/{dist/cjs → cjs}/hardware-wallet-manager.js.map +0 -0
  122. /package/{dist/cjs → cjs}/index.js +0 -0
  123. /package/{dist/cjs → cjs}/index.js.map +0 -0
  124. /package/{dist/cjs → cjs}/initial-state.js +0 -0
  125. /package/{dist/cjs → cjs}/initial-state.js.map +0 -0
  126. /package/{dist/cjs → cjs}/keyring-manager.js +0 -0
  127. /package/{dist/cjs → cjs}/keyring-manager.js.map +0 -0
  128. /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js +0 -0
  129. /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js.map +0 -0
  130. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js +0 -0
  131. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js.map +0 -0
  132. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
  133. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
  134. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
  135. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
  136. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
  137. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
  138. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
  139. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
  140. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
  141. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
  142. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
  143. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
  144. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
  145. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
  146. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
  147. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
  148. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
  149. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
  150. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
  151. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
  152. /package/{dist/cjs → cjs}/ledger/consts.js +0 -0
  153. /package/{dist/cjs → cjs}/ledger/consts.js.map +0 -0
  154. /package/{dist/cjs → cjs}/ledger/index.js +0 -0
  155. /package/{dist/cjs → cjs}/ledger/index.js.map +0 -0
  156. /package/{dist/cjs → cjs}/ledger/types.js +0 -0
  157. /package/{dist/cjs → cjs}/ledger/types.js.map +0 -0
  158. /package/{dist/cjs → cjs}/network-utils.js +0 -0
  159. /package/{dist/cjs → cjs}/network-utils.js.map +0 -0
  160. /package/{dist/cjs → cjs}/signers.js +0 -0
  161. /package/{dist/cjs → cjs}/signers.js.map +0 -0
  162. /package/{dist/cjs → cjs}/storage.js +0 -0
  163. /package/{dist/cjs → cjs}/storage.js.map +0 -0
  164. /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js +0 -0
  165. /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js.map +0 -0
  166. /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js +0 -0
  167. /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
  168. /package/{dist/cjs → cjs}/transactions/index.js +0 -0
  169. /package/{dist/cjs → cjs}/transactions/index.js.map +0 -0
  170. /package/{dist/cjs → cjs}/transactions/syscoin.js +0 -0
  171. /package/{dist/cjs → cjs}/transactions/syscoin.js.map +0 -0
  172. /package/{dist/cjs → cjs}/trezor/index.js +0 -0
  173. /package/{dist/cjs → cjs}/trezor/index.js.map +0 -0
  174. /package/{dist/cjs → cjs}/types.js +0 -0
  175. /package/{dist/cjs → cjs}/types.js.map +0 -0
  176. /package/{dist/cjs → cjs}/utils/derivation-paths.js +0 -0
  177. /package/{dist/cjs → cjs}/utils/derivation-paths.js.map +0 -0
  178. /package/{dist/cjs → cjs}/utils/psbt.js +0 -0
  179. /package/{dist/cjs → cjs}/utils/psbt.js.map +0 -0
  180. /package/{dist/cjs → cjs}/utils.js +0 -0
  181. /package/{dist/cjs → cjs}/utils.js.map +0 -0
  182. /package/{dist/types → types}/errorUtils.d.ts +0 -0
  183. /package/{dist/types → types}/hardware-wallet-manager.d.ts +0 -0
  184. /package/{dist/types → types}/index.d.ts +0 -0
  185. /package/{dist/types → types}/initial-state.d.ts +0 -0
  186. /package/{dist/types → types}/keyring-manager.d.ts +0 -0
  187. /package/{dist/types → types}/ledger/bitcoin_client/index.d.ts +0 -0
  188. /package/{dist/types → types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -0
  189. /package/{dist/types → types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
  190. /package/{dist/types → types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
  191. /package/{dist/types → types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
  192. /package/{dist/types → types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
  193. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
  194. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
  195. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
  196. /package/{dist/types → types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
  197. /package/{dist/types → types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
  198. /package/{dist/types → types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
  199. /package/{dist/types → types}/ledger/consts.d.ts +0 -0
  200. /package/{dist/types → types}/ledger/index.d.ts +0 -0
  201. /package/{dist/types → types}/ledger/types.d.ts +0 -0
  202. /package/{dist/types → types}/network-utils.d.ts +0 -0
  203. /package/{dist/types → types}/signers.d.ts +0 -0
  204. /package/{dist/types → types}/storage.d.ts +0 -0
  205. /package/{dist/types → types}/transactions/__tests__/integration.test.d.ts +0 -0
  206. /package/{dist/types → types}/transactions/__tests__/syscoin.test.d.ts +0 -0
  207. /package/{dist/types → types}/transactions/index.d.ts +0 -0
  208. /package/{dist/types → types}/transactions/syscoin.d.ts +0 -0
  209. /package/{dist/types → types}/trezor/index.d.ts +0 -0
  210. /package/{dist/types → types}/utils/derivation-paths.d.ts +0 -0
  211. /package/{dist/types → types}/utils/psbt.d.ts +0 -0
  212. /package/{dist/types → types}/utils.d.ts +0 -0
@@ -1,1521 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <title>Code coverage report for src/transactions/syscoin.ts</title>
5
- <meta charset="utf-8" />
6
- <link rel="stylesheet" href="../../prettify.css" />
7
- <link rel="stylesheet" href="../../base.css" />
8
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
9
- <meta name="viewport" content="width=device-width, initial-scale=1" />
10
- <style type="text/css">
11
- .coverage-summary .sorter {
12
- background-image: url(../../sort-arrow-sprite.png);
13
- }
14
- </style>
15
- </head>
16
-
17
- <body>
18
- <div class="wrapper">
19
- <div class="pad1">
20
- <h1>
21
- <a href="../../index.html">All files</a> /
22
- <a href="index.html">src/transactions</a> syscoin.ts
23
- </h1>
24
- <div class="clearfix">
25
- <div class="fl pad1y space-right2">
26
- <span class="strong">41.12% </span>
27
- <span class="quiet">Statements</span>
28
- <span class="fraction">51/124</span>
29
- </div>
30
-
31
- <div class="fl pad1y space-right2">
32
- <span class="strong">7.57% </span>
33
- <span class="quiet">Branches</span>
34
- <span class="fraction">5/66</span>
35
- </div>
36
-
37
- <div class="fl pad1y space-right2">
38
- <span class="strong">46.15% </span>
39
- <span class="quiet">Functions</span>
40
- <span class="fraction">6/13</span>
41
- </div>
42
-
43
- <div class="fl pad1y space-right2">
44
- <span class="strong">41.12% </span>
45
- <span class="quiet">Lines</span>
46
- <span class="fraction">51/124</span>
47
- </div>
48
- </div>
49
- <p class="quiet">
50
- Press <em>n</em> or <em>j</em> to go to the next uncovered block,
51
- <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
52
- </p>
53
- <template id="filterTemplate">
54
- <div class="quiet">
55
- Filter:
56
- <input type="search" id="fileSearch" />
57
- </div>
58
- </template>
59
- </div>
60
- <div class="status-line low"></div>
61
- <pre><table class="coverage">
62
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
63
- <a name='L2'></a><a href='#L2'>2</a>
64
- <a name='L3'></a><a href='#L3'>3</a>
65
- <a name='L4'></a><a href='#L4'>4</a>
66
- <a name='L5'></a><a href='#L5'>5</a>
67
- <a name='L6'></a><a href='#L6'>6</a>
68
- <a name='L7'></a><a href='#L7'>7</a>
69
- <a name='L8'></a><a href='#L8'>8</a>
70
- <a name='L9'></a><a href='#L9'>9</a>
71
- <a name='L10'></a><a href='#L10'>10</a>
72
- <a name='L11'></a><a href='#L11'>11</a>
73
- <a name='L12'></a><a href='#L12'>12</a>
74
- <a name='L13'></a><a href='#L13'>13</a>
75
- <a name='L14'></a><a href='#L14'>14</a>
76
- <a name='L15'></a><a href='#L15'>15</a>
77
- <a name='L16'></a><a href='#L16'>16</a>
78
- <a name='L17'></a><a href='#L17'>17</a>
79
- <a name='L18'></a><a href='#L18'>18</a>
80
- <a name='L19'></a><a href='#L19'>19</a>
81
- <a name='L20'></a><a href='#L20'>20</a>
82
- <a name='L21'></a><a href='#L21'>21</a>
83
- <a name='L22'></a><a href='#L22'>22</a>
84
- <a name='L23'></a><a href='#L23'>23</a>
85
- <a name='L24'></a><a href='#L24'>24</a>
86
- <a name='L25'></a><a href='#L25'>25</a>
87
- <a name='L26'></a><a href='#L26'>26</a>
88
- <a name='L27'></a><a href='#L27'>27</a>
89
- <a name='L28'></a><a href='#L28'>28</a>
90
- <a name='L29'></a><a href='#L29'>29</a>
91
- <a name='L30'></a><a href='#L30'>30</a>
92
- <a name='L31'></a><a href='#L31'>31</a>
93
- <a name='L32'></a><a href='#L32'>32</a>
94
- <a name='L33'></a><a href='#L33'>33</a>
95
- <a name='L34'></a><a href='#L34'>34</a>
96
- <a name='L35'></a><a href='#L35'>35</a>
97
- <a name='L36'></a><a href='#L36'>36</a>
98
- <a name='L37'></a><a href='#L37'>37</a>
99
- <a name='L38'></a><a href='#L38'>38</a>
100
- <a name='L39'></a><a href='#L39'>39</a>
101
- <a name='L40'></a><a href='#L40'>40</a>
102
- <a name='L41'></a><a href='#L41'>41</a>
103
- <a name='L42'></a><a href='#L42'>42</a>
104
- <a name='L43'></a><a href='#L43'>43</a>
105
- <a name='L44'></a><a href='#L44'>44</a>
106
- <a name='L45'></a><a href='#L45'>45</a>
107
- <a name='L46'></a><a href='#L46'>46</a>
108
- <a name='L47'></a><a href='#L47'>47</a>
109
- <a name='L48'></a><a href='#L48'>48</a>
110
- <a name='L49'></a><a href='#L49'>49</a>
111
- <a name='L50'></a><a href='#L50'>50</a>
112
- <a name='L51'></a><a href='#L51'>51</a>
113
- <a name='L52'></a><a href='#L52'>52</a>
114
- <a name='L53'></a><a href='#L53'>53</a>
115
- <a name='L54'></a><a href='#L54'>54</a>
116
- <a name='L55'></a><a href='#L55'>55</a>
117
- <a name='L56'></a><a href='#L56'>56</a>
118
- <a name='L57'></a><a href='#L57'>57</a>
119
- <a name='L58'></a><a href='#L58'>58</a>
120
- <a name='L59'></a><a href='#L59'>59</a>
121
- <a name='L60'></a><a href='#L60'>60</a>
122
- <a name='L61'></a><a href='#L61'>61</a>
123
- <a name='L62'></a><a href='#L62'>62</a>
124
- <a name='L63'></a><a href='#L63'>63</a>
125
- <a name='L64'></a><a href='#L64'>64</a>
126
- <a name='L65'></a><a href='#L65'>65</a>
127
- <a name='L66'></a><a href='#L66'>66</a>
128
- <a name='L67'></a><a href='#L67'>67</a>
129
- <a name='L68'></a><a href='#L68'>68</a>
130
- <a name='L69'></a><a href='#L69'>69</a>
131
- <a name='L70'></a><a href='#L70'>70</a>
132
- <a name='L71'></a><a href='#L71'>71</a>
133
- <a name='L72'></a><a href='#L72'>72</a>
134
- <a name='L73'></a><a href='#L73'>73</a>
135
- <a name='L74'></a><a href='#L74'>74</a>
136
- <a name='L75'></a><a href='#L75'>75</a>
137
- <a name='L76'></a><a href='#L76'>76</a>
138
- <a name='L77'></a><a href='#L77'>77</a>
139
- <a name='L78'></a><a href='#L78'>78</a>
140
- <a name='L79'></a><a href='#L79'>79</a>
141
- <a name='L80'></a><a href='#L80'>80</a>
142
- <a name='L81'></a><a href='#L81'>81</a>
143
- <a name='L82'></a><a href='#L82'>82</a>
144
- <a name='L83'></a><a href='#L83'>83</a>
145
- <a name='L84'></a><a href='#L84'>84</a>
146
- <a name='L85'></a><a href='#L85'>85</a>
147
- <a name='L86'></a><a href='#L86'>86</a>
148
- <a name='L87'></a><a href='#L87'>87</a>
149
- <a name='L88'></a><a href='#L88'>88</a>
150
- <a name='L89'></a><a href='#L89'>89</a>
151
- <a name='L90'></a><a href='#L90'>90</a>
152
- <a name='L91'></a><a href='#L91'>91</a>
153
- <a name='L92'></a><a href='#L92'>92</a>
154
- <a name='L93'></a><a href='#L93'>93</a>
155
- <a name='L94'></a><a href='#L94'>94</a>
156
- <a name='L95'></a><a href='#L95'>95</a>
157
- <a name='L96'></a><a href='#L96'>96</a>
158
- <a name='L97'></a><a href='#L97'>97</a>
159
- <a name='L98'></a><a href='#L98'>98</a>
160
- <a name='L99'></a><a href='#L99'>99</a>
161
- <a name='L100'></a><a href='#L100'>100</a>
162
- <a name='L101'></a><a href='#L101'>101</a>
163
- <a name='L102'></a><a href='#L102'>102</a>
164
- <a name='L103'></a><a href='#L103'>103</a>
165
- <a name='L104'></a><a href='#L104'>104</a>
166
- <a name='L105'></a><a href='#L105'>105</a>
167
- <a name='L106'></a><a href='#L106'>106</a>
168
- <a name='L107'></a><a href='#L107'>107</a>
169
- <a name='L108'></a><a href='#L108'>108</a>
170
- <a name='L109'></a><a href='#L109'>109</a>
171
- <a name='L110'></a><a href='#L110'>110</a>
172
- <a name='L111'></a><a href='#L111'>111</a>
173
- <a name='L112'></a><a href='#L112'>112</a>
174
- <a name='L113'></a><a href='#L113'>113</a>
175
- <a name='L114'></a><a href='#L114'>114</a>
176
- <a name='L115'></a><a href='#L115'>115</a>
177
- <a name='L116'></a><a href='#L116'>116</a>
178
- <a name='L117'></a><a href='#L117'>117</a>
179
- <a name='L118'></a><a href='#L118'>118</a>
180
- <a name='L119'></a><a href='#L119'>119</a>
181
- <a name='L120'></a><a href='#L120'>120</a>
182
- <a name='L121'></a><a href='#L121'>121</a>
183
- <a name='L122'></a><a href='#L122'>122</a>
184
- <a name='L123'></a><a href='#L123'>123</a>
185
- <a name='L124'></a><a href='#L124'>124</a>
186
- <a name='L125'></a><a href='#L125'>125</a>
187
- <a name='L126'></a><a href='#L126'>126</a>
188
- <a name='L127'></a><a href='#L127'>127</a>
189
- <a name='L128'></a><a href='#L128'>128</a>
190
- <a name='L129'></a><a href='#L129'>129</a>
191
- <a name='L130'></a><a href='#L130'>130</a>
192
- <a name='L131'></a><a href='#L131'>131</a>
193
- <a name='L132'></a><a href='#L132'>132</a>
194
- <a name='L133'></a><a href='#L133'>133</a>
195
- <a name='L134'></a><a href='#L134'>134</a>
196
- <a name='L135'></a><a href='#L135'>135</a>
197
- <a name='L136'></a><a href='#L136'>136</a>
198
- <a name='L137'></a><a href='#L137'>137</a>
199
- <a name='L138'></a><a href='#L138'>138</a>
200
- <a name='L139'></a><a href='#L139'>139</a>
201
- <a name='L140'></a><a href='#L140'>140</a>
202
- <a name='L141'></a><a href='#L141'>141</a>
203
- <a name='L142'></a><a href='#L142'>142</a>
204
- <a name='L143'></a><a href='#L143'>143</a>
205
- <a name='L144'></a><a href='#L144'>144</a>
206
- <a name='L145'></a><a href='#L145'>145</a>
207
- <a name='L146'></a><a href='#L146'>146</a>
208
- <a name='L147'></a><a href='#L147'>147</a>
209
- <a name='L148'></a><a href='#L148'>148</a>
210
- <a name='L149'></a><a href='#L149'>149</a>
211
- <a name='L150'></a><a href='#L150'>150</a>
212
- <a name='L151'></a><a href='#L151'>151</a>
213
- <a name='L152'></a><a href='#L152'>152</a>
214
- <a name='L153'></a><a href='#L153'>153</a>
215
- <a name='L154'></a><a href='#L154'>154</a>
216
- <a name='L155'></a><a href='#L155'>155</a>
217
- <a name='L156'></a><a href='#L156'>156</a>
218
- <a name='L157'></a><a href='#L157'>157</a>
219
- <a name='L158'></a><a href='#L158'>158</a>
220
- <a name='L159'></a><a href='#L159'>159</a>
221
- <a name='L160'></a><a href='#L160'>160</a>
222
- <a name='L161'></a><a href='#L161'>161</a>
223
- <a name='L162'></a><a href='#L162'>162</a>
224
- <a name='L163'></a><a href='#L163'>163</a>
225
- <a name='L164'></a><a href='#L164'>164</a>
226
- <a name='L165'></a><a href='#L165'>165</a>
227
- <a name='L166'></a><a href='#L166'>166</a>
228
- <a name='L167'></a><a href='#L167'>167</a>
229
- <a name='L168'></a><a href='#L168'>168</a>
230
- <a name='L169'></a><a href='#L169'>169</a>
231
- <a name='L170'></a><a href='#L170'>170</a>
232
- <a name='L171'></a><a href='#L171'>171</a>
233
- <a name='L172'></a><a href='#L172'>172</a>
234
- <a name='L173'></a><a href='#L173'>173</a>
235
- <a name='L174'></a><a href='#L174'>174</a>
236
- <a name='L175'></a><a href='#L175'>175</a>
237
- <a name='L176'></a><a href='#L176'>176</a>
238
- <a name='L177'></a><a href='#L177'>177</a>
239
- <a name='L178'></a><a href='#L178'>178</a>
240
- <a name='L179'></a><a href='#L179'>179</a>
241
- <a name='L180'></a><a href='#L180'>180</a>
242
- <a name='L181'></a><a href='#L181'>181</a>
243
- <a name='L182'></a><a href='#L182'>182</a>
244
- <a name='L183'></a><a href='#L183'>183</a>
245
- <a name='L184'></a><a href='#L184'>184</a>
246
- <a name='L185'></a><a href='#L185'>185</a>
247
- <a name='L186'></a><a href='#L186'>186</a>
248
- <a name='L187'></a><a href='#L187'>187</a>
249
- <a name='L188'></a><a href='#L188'>188</a>
250
- <a name='L189'></a><a href='#L189'>189</a>
251
- <a name='L190'></a><a href='#L190'>190</a>
252
- <a name='L191'></a><a href='#L191'>191</a>
253
- <a name='L192'></a><a href='#L192'>192</a>
254
- <a name='L193'></a><a href='#L193'>193</a>
255
- <a name='L194'></a><a href='#L194'>194</a>
256
- <a name='L195'></a><a href='#L195'>195</a>
257
- <a name='L196'></a><a href='#L196'>196</a>
258
- <a name='L197'></a><a href='#L197'>197</a>
259
- <a name='L198'></a><a href='#L198'>198</a>
260
- <a name='L199'></a><a href='#L199'>199</a>
261
- <a name='L200'></a><a href='#L200'>200</a>
262
- <a name='L201'></a><a href='#L201'>201</a>
263
- <a name='L202'></a><a href='#L202'>202</a>
264
- <a name='L203'></a><a href='#L203'>203</a>
265
- <a name='L204'></a><a href='#L204'>204</a>
266
- <a name='L205'></a><a href='#L205'>205</a>
267
- <a name='L206'></a><a href='#L206'>206</a>
268
- <a name='L207'></a><a href='#L207'>207</a>
269
- <a name='L208'></a><a href='#L208'>208</a>
270
- <a name='L209'></a><a href='#L209'>209</a>
271
- <a name='L210'></a><a href='#L210'>210</a>
272
- <a name='L211'></a><a href='#L211'>211</a>
273
- <a name='L212'></a><a href='#L212'>212</a>
274
- <a name='L213'></a><a href='#L213'>213</a>
275
- <a name='L214'></a><a href='#L214'>214</a>
276
- <a name='L215'></a><a href='#L215'>215</a>
277
- <a name='L216'></a><a href='#L216'>216</a>
278
- <a name='L217'></a><a href='#L217'>217</a>
279
- <a name='L218'></a><a href='#L218'>218</a>
280
- <a name='L219'></a><a href='#L219'>219</a>
281
- <a name='L220'></a><a href='#L220'>220</a>
282
- <a name='L221'></a><a href='#L221'>221</a>
283
- <a name='L222'></a><a href='#L222'>222</a>
284
- <a name='L223'></a><a href='#L223'>223</a>
285
- <a name='L224'></a><a href='#L224'>224</a>
286
- <a name='L225'></a><a href='#L225'>225</a>
287
- <a name='L226'></a><a href='#L226'>226</a>
288
- <a name='L227'></a><a href='#L227'>227</a>
289
- <a name='L228'></a><a href='#L228'>228</a>
290
- <a name='L229'></a><a href='#L229'>229</a>
291
- <a name='L230'></a><a href='#L230'>230</a>
292
- <a name='L231'></a><a href='#L231'>231</a>
293
- <a name='L232'></a><a href='#L232'>232</a>
294
- <a name='L233'></a><a href='#L233'>233</a>
295
- <a name='L234'></a><a href='#L234'>234</a>
296
- <a name='L235'></a><a href='#L235'>235</a>
297
- <a name='L236'></a><a href='#L236'>236</a>
298
- <a name='L237'></a><a href='#L237'>237</a>
299
- <a name='L238'></a><a href='#L238'>238</a>
300
- <a name='L239'></a><a href='#L239'>239</a>
301
- <a name='L240'></a><a href='#L240'>240</a>
302
- <a name='L241'></a><a href='#L241'>241</a>
303
- <a name='L242'></a><a href='#L242'>242</a>
304
- <a name='L243'></a><a href='#L243'>243</a>
305
- <a name='L244'></a><a href='#L244'>244</a>
306
- <a name='L245'></a><a href='#L245'>245</a>
307
- <a name='L246'></a><a href='#L246'>246</a>
308
- <a name='L247'></a><a href='#L247'>247</a>
309
- <a name='L248'></a><a href='#L248'>248</a>
310
- <a name='L249'></a><a href='#L249'>249</a>
311
- <a name='L250'></a><a href='#L250'>250</a>
312
- <a name='L251'></a><a href='#L251'>251</a>
313
- <a name='L252'></a><a href='#L252'>252</a>
314
- <a name='L253'></a><a href='#L253'>253</a>
315
- <a name='L254'></a><a href='#L254'>254</a>
316
- <a name='L255'></a><a href='#L255'>255</a>
317
- <a name='L256'></a><a href='#L256'>256</a>
318
- <a name='L257'></a><a href='#L257'>257</a>
319
- <a name='L258'></a><a href='#L258'>258</a>
320
- <a name='L259'></a><a href='#L259'>259</a>
321
- <a name='L260'></a><a href='#L260'>260</a>
322
- <a name='L261'></a><a href='#L261'>261</a>
323
- <a name='L262'></a><a href='#L262'>262</a>
324
- <a name='L263'></a><a href='#L263'>263</a>
325
- <a name='L264'></a><a href='#L264'>264</a>
326
- <a name='L265'></a><a href='#L265'>265</a>
327
- <a name='L266'></a><a href='#L266'>266</a>
328
- <a name='L267'></a><a href='#L267'>267</a>
329
- <a name='L268'></a><a href='#L268'>268</a>
330
- <a name='L269'></a><a href='#L269'>269</a>
331
- <a name='L270'></a><a href='#L270'>270</a>
332
- <a name='L271'></a><a href='#L271'>271</a>
333
- <a name='L272'></a><a href='#L272'>272</a>
334
- <a name='L273'></a><a href='#L273'>273</a>
335
- <a name='L274'></a><a href='#L274'>274</a>
336
- <a name='L275'></a><a href='#L275'>275</a>
337
- <a name='L276'></a><a href='#L276'>276</a>
338
- <a name='L277'></a><a href='#L277'>277</a>
339
- <a name='L278'></a><a href='#L278'>278</a>
340
- <a name='L279'></a><a href='#L279'>279</a>
341
- <a name='L280'></a><a href='#L280'>280</a>
342
- <a name='L281'></a><a href='#L281'>281</a>
343
- <a name='L282'></a><a href='#L282'>282</a>
344
- <a name='L283'></a><a href='#L283'>283</a>
345
- <a name='L284'></a><a href='#L284'>284</a>
346
- <a name='L285'></a><a href='#L285'>285</a>
347
- <a name='L286'></a><a href='#L286'>286</a>
348
- <a name='L287'></a><a href='#L287'>287</a>
349
- <a name='L288'></a><a href='#L288'>288</a>
350
- <a name='L289'></a><a href='#L289'>289</a>
351
- <a name='L290'></a><a href='#L290'>290</a>
352
- <a name='L291'></a><a href='#L291'>291</a>
353
- <a name='L292'></a><a href='#L292'>292</a>
354
- <a name='L293'></a><a href='#L293'>293</a>
355
- <a name='L294'></a><a href='#L294'>294</a>
356
- <a name='L295'></a><a href='#L295'>295</a>
357
- <a name='L296'></a><a href='#L296'>296</a>
358
- <a name='L297'></a><a href='#L297'>297</a>
359
- <a name='L298'></a><a href='#L298'>298</a>
360
- <a name='L299'></a><a href='#L299'>299</a>
361
- <a name='L300'></a><a href='#L300'>300</a>
362
- <a name='L301'></a><a href='#L301'>301</a>
363
- <a name='L302'></a><a href='#L302'>302</a>
364
- <a name='L303'></a><a href='#L303'>303</a>
365
- <a name='L304'></a><a href='#L304'>304</a>
366
- <a name='L305'></a><a href='#L305'>305</a>
367
- <a name='L306'></a><a href='#L306'>306</a>
368
- <a name='L307'></a><a href='#L307'>307</a>
369
- <a name='L308'></a><a href='#L308'>308</a>
370
- <a name='L309'></a><a href='#L309'>309</a>
371
- <a name='L310'></a><a href='#L310'>310</a>
372
- <a name='L311'></a><a href='#L311'>311</a>
373
- <a name='L312'></a><a href='#L312'>312</a>
374
- <a name='L313'></a><a href='#L313'>313</a>
375
- <a name='L314'></a><a href='#L314'>314</a>
376
- <a name='L315'></a><a href='#L315'>315</a>
377
- <a name='L316'></a><a href='#L316'>316</a>
378
- <a name='L317'></a><a href='#L317'>317</a>
379
- <a name='L318'></a><a href='#L318'>318</a>
380
- <a name='L319'></a><a href='#L319'>319</a>
381
- <a name='L320'></a><a href='#L320'>320</a>
382
- <a name='L321'></a><a href='#L321'>321</a>
383
- <a name='L322'></a><a href='#L322'>322</a>
384
- <a name='L323'></a><a href='#L323'>323</a>
385
- <a name='L324'></a><a href='#L324'>324</a>
386
- <a name='L325'></a><a href='#L325'>325</a>
387
- <a name='L326'></a><a href='#L326'>326</a>
388
- <a name='L327'></a><a href='#L327'>327</a>
389
- <a name='L328'></a><a href='#L328'>328</a>
390
- <a name='L329'></a><a href='#L329'>329</a>
391
- <a name='L330'></a><a href='#L330'>330</a>
392
- <a name='L331'></a><a href='#L331'>331</a>
393
- <a name='L332'></a><a href='#L332'>332</a>
394
- <a name='L333'></a><a href='#L333'>333</a>
395
- <a name='L334'></a><a href='#L334'>334</a>
396
- <a name='L335'></a><a href='#L335'>335</a>
397
- <a name='L336'></a><a href='#L336'>336</a>
398
- <a name='L337'></a><a href='#L337'>337</a>
399
- <a name='L338'></a><a href='#L338'>338</a>
400
- <a name='L339'></a><a href='#L339'>339</a>
401
- <a name='L340'></a><a href='#L340'>340</a>
402
- <a name='L341'></a><a href='#L341'>341</a>
403
- <a name='L342'></a><a href='#L342'>342</a>
404
- <a name='L343'></a><a href='#L343'>343</a>
405
- <a name='L344'></a><a href='#L344'>344</a>
406
- <a name='L345'></a><a href='#L345'>345</a>
407
- <a name='L346'></a><a href='#L346'>346</a>
408
- <a name='L347'></a><a href='#L347'>347</a>
409
- <a name='L348'></a><a href='#L348'>348</a>
410
- <a name='L349'></a><a href='#L349'>349</a>
411
- <a name='L350'></a><a href='#L350'>350</a>
412
- <a name='L351'></a><a href='#L351'>351</a>
413
- <a name='L352'></a><a href='#L352'>352</a>
414
- <a name='L353'></a><a href='#L353'>353</a>
415
- <a name='L354'></a><a href='#L354'>354</a>
416
- <a name='L355'></a><a href='#L355'>355</a>
417
- <a name='L356'></a><a href='#L356'>356</a>
418
- <a name='L357'></a><a href='#L357'>357</a>
419
- <a name='L358'></a><a href='#L358'>358</a>
420
- <a name='L359'></a><a href='#L359'>359</a>
421
- <a name='L360'></a><a href='#L360'>360</a>
422
- <a name='L361'></a><a href='#L361'>361</a>
423
- <a name='L362'></a><a href='#L362'>362</a>
424
- <a name='L363'></a><a href='#L363'>363</a>
425
- <a name='L364'></a><a href='#L364'>364</a>
426
- <a name='L365'></a><a href='#L365'>365</a>
427
- <a name='L366'></a><a href='#L366'>366</a>
428
- <a name='L367'></a><a href='#L367'>367</a>
429
- <a name='L368'></a><a href='#L368'>368</a>
430
- <a name='L369'></a><a href='#L369'>369</a>
431
- <a name='L370'></a><a href='#L370'>370</a>
432
- <a name='L371'></a><a href='#L371'>371</a>
433
- <a name='L372'></a><a href='#L372'>372</a>
434
- <a name='L373'></a><a href='#L373'>373</a>
435
- <a name='L374'></a><a href='#L374'>374</a>
436
- <a name='L375'></a><a href='#L375'>375</a>
437
- <a name='L376'></a><a href='#L376'>376</a>
438
- <a name='L377'></a><a href='#L377'>377</a>
439
- <a name='L378'></a><a href='#L378'>378</a>
440
- <a name='L379'></a><a href='#L379'>379</a>
441
- <a name='L380'></a><a href='#L380'>380</a>
442
- <a name='L381'></a><a href='#L381'>381</a>
443
- <a name='L382'></a><a href='#L382'>382</a>
444
- <a name='L383'></a><a href='#L383'>383</a>
445
- <a name='L384'></a><a href='#L384'>384</a>
446
- <a name='L385'></a><a href='#L385'>385</a>
447
- <a name='L386'></a><a href='#L386'>386</a>
448
- <a name='L387'></a><a href='#L387'>387</a>
449
- <a name='L388'></a><a href='#L388'>388</a>
450
- <a name='L389'></a><a href='#L389'>389</a>
451
- <a name='L390'></a><a href='#L390'>390</a>
452
- <a name='L391'></a><a href='#L391'>391</a>
453
- <a name='L392'></a><a href='#L392'>392</a>
454
- <a name='L393'></a><a href='#L393'>393</a>
455
- <a name='L394'></a><a href='#L394'>394</a>
456
- <a name='L395'></a><a href='#L395'>395</a>
457
- <a name='L396'></a><a href='#L396'>396</a>
458
- <a name='L397'></a><a href='#L397'>397</a>
459
- <a name='L398'></a><a href='#L398'>398</a>
460
- <a name='L399'></a><a href='#L399'>399</a>
461
- <a name='L400'></a><a href='#L400'>400</a>
462
- <a name='L401'></a><a href='#L401'>401</a>
463
- <a name='L402'></a><a href='#L402'>402</a>
464
- <a name='L403'></a><a href='#L403'>403</a>
465
- <a name='L404'></a><a href='#L404'>404</a>
466
- <a name='L405'></a><a href='#L405'>405</a>
467
- <a name='L406'></a><a href='#L406'>406</a>
468
- <a name='L407'></a><a href='#L407'>407</a>
469
- <a name='L408'></a><a href='#L408'>408</a>
470
- <a name='L409'></a><a href='#L409'>409</a>
471
- <a name='L410'></a><a href='#L410'>410</a>
472
- <a name='L411'></a><a href='#L411'>411</a>
473
- <a name='L412'></a><a href='#L412'>412</a>
474
- <a name='L413'></a><a href='#L413'>413</a>
475
- <a name='L414'></a><a href='#L414'>414</a>
476
- <a name='L415'></a><a href='#L415'>415</a>
477
- <a name='L416'></a><a href='#L416'>416</a>
478
- <a name='L417'></a><a href='#L417'>417</a>
479
- <a name='L418'></a><a href='#L418'>418</a>
480
- <a name='L419'></a><a href='#L419'>419</a>
481
- <a name='L420'></a><a href='#L420'>420</a>
482
- <a name='L421'></a><a href='#L421'>421</a>
483
- <a name='L422'></a><a href='#L422'>422</a>
484
- <a name='L423'></a><a href='#L423'>423</a>
485
- <a name='L424'></a><a href='#L424'>424</a>
486
- <a name='L425'></a><a href='#L425'>425</a>
487
- <a name='L426'></a><a href='#L426'>426</a>
488
- <a name='L427'></a><a href='#L427'>427</a>
489
- <a name='L428'></a><a href='#L428'>428</a>
490
- <a name='L429'></a><a href='#L429'>429</a>
491
- <a name='L430'></a><a href='#L430'>430</a>
492
- <a name='L431'></a><a href='#L431'>431</a>
493
- <a name='L432'></a><a href='#L432'>432</a>
494
- <a name='L433'></a><a href='#L433'>433</a>
495
- <a name='L434'></a><a href='#L434'>434</a>
496
- <a name='L435'></a><a href='#L435'>435</a>
497
- <a name='L436'></a><a href='#L436'>436</a>
498
- <a name='L437'></a><a href='#L437'>437</a>
499
- <a name='L438'></a><a href='#L438'>438</a>
500
- <a name='L439'></a><a href='#L439'>439</a>
501
- <a name='L440'></a><a href='#L440'>440</a>
502
- <a name='L441'></a><a href='#L441'>441</a>
503
- <a name='L442'></a><a href='#L442'>442</a>
504
- <a name='L443'></a><a href='#L443'>443</a>
505
- <a name='L444'></a><a href='#L444'>444</a>
506
- <a name='L445'></a><a href='#L445'>445</a>
507
- <a name='L446'></a><a href='#L446'>446</a>
508
- <a name='L447'></a><a href='#L447'>447</a>
509
- <a name='L448'></a><a href='#L448'>448</a>
510
- <a name='L449'></a><a href='#L449'>449</a>
511
- <a name='L450'></a><a href='#L450'>450</a>
512
- <a name='L451'></a><a href='#L451'>451</a>
513
- <a name='L452'></a><a href='#L452'>452</a>
514
- <a name='L453'></a><a href='#L453'>453</a>
515
- <a name='L454'></a><a href='#L454'>454</a>
516
- <a name='L455'></a><a href='#L455'>455</a>
517
- <a name='L456'></a><a href='#L456'>456</a>
518
- <a name='L457'></a><a href='#L457'>457</a>
519
- <a name='L458'></a><a href='#L458'>458</a>
520
- <a name='L459'></a><a href='#L459'>459</a>
521
- <a name='L460'></a><a href='#L460'>460</a>
522
- <a name='L461'></a><a href='#L461'>461</a>
523
- <a name='L462'></a><a href='#L462'>462</a>
524
- <a name='L463'></a><a href='#L463'>463</a>
525
- <a name='L464'></a><a href='#L464'>464</a>
526
- <a name='L465'></a><a href='#L465'>465</a>
527
- <a name='L466'></a><a href='#L466'>466</a>
528
- <a name='L467'></a><a href='#L467'>467</a>
529
- <a name='L468'></a><a href='#L468'>468</a>
530
- <a name='L469'></a><a href='#L469'>469</a>
531
- <a name='L470'></a><a href='#L470'>470</a>
532
- <a name='L471'></a><a href='#L471'>471</a>
533
- <a name='L472'></a><a href='#L472'>472</a>
534
- <a name='L473'></a><a href='#L473'>473</a>
535
- <a name='L474'></a><a href='#L474'>474</a>
536
- <a name='L475'></a><a href='#L475'>475</a>
537
- <a name='L476'></a><a href='#L476'>476</a>
538
- <a name='L477'></a><a href='#L477'>477</a>
539
- <a name='L478'></a><a href='#L478'>478</a>
540
- <a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-yes">2x</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-yes">2x</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">2x</span>
553
- <span class="cline-any cline-yes">2x</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-yes">2x</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-yes">2x</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">43x</span>
618
- <span class="cline-any cline-yes">43x</span>
619
- <span class="cline-any cline-yes">43x</span>
620
- <span class="cline-any cline-yes">43x</span>
621
- <span class="cline-any cline-yes">43x</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-yes">43x</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-no">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-no">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-no">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-no">&nbsp;</span>
644
- <span class="cline-any cline-no">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-no">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-no">&nbsp;</span>
650
- <span class="cline-any cline-no">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-no">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-yes">43x</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
- <span class="cline-any cline-no">&nbsp;</span>
665
- <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-yes">43x</span>
669
- <span class="cline-any cline-no">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-yes">43x</span>
672
- <span class="cline-any cline-no">&nbsp;</span>
673
- <span class="cline-any cline-no">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">43x</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-no">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-yes">43x</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-no">&nbsp;</span>
707
- <span class="cline-any cline-no">&nbsp;</span>
708
- <span class="cline-any cline-no">&nbsp;</span>
709
- <span class="cline-any cline-no">&nbsp;</span>
710
- <span class="cline-any cline-no">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-no">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-no">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-no">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-no">&nbsp;</span>
729
- <span class="cline-any cline-no">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-no">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-no">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-no">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-no">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-no">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-no">&nbsp;</span>
773
- <span class="cline-any cline-no">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-no">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">43x</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">1x</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-yes">1x</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-yes">1x</span>
798
- <span class="cline-any cline-yes">1x</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-yes">1x</span>
803
- <span class="cline-any cline-yes">1x</span>
804
- <span class="cline-any cline-yes">1x</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-yes">1x</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-yes">1x</span>
818
- <span class="cline-any cline-yes">1x</span>
819
- <span class="cline-any cline-yes">1x</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">1x</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">1x</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-yes">1x</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-yes">1x</span>
843
- <span class="cline-any cline-yes">1x</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-yes">1x</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-yes">1x</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-yes">43x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-neutral">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-neutral">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-no">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-no">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-yes">43x</span>
967
- <span class="cline-any cline-yes">1x</span>
968
- <span class="cline-any cline-yes">1x</span>
969
- <span class="cline-any cline-neutral">&nbsp;</span>
970
- <span class="cline-any cline-yes">1x</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-yes">1x</span>
974
- <span class="cline-any cline-yes">1x</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-neutral">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-yes">43x</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-neutral">&nbsp;</span>
994
- <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-yes">2x</span>
1002
- <span class="cline-any cline-yes">1x</span>
1003
- <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-yes">1x</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-yes">43x</span>
1012
- <span class="cline-any cline-yes">1x</span>
1013
- <span class="cline-any cline-no">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-yes">1x</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as syscoinjs from 'syscoinjs-lib';
1019
- // import { BIP_84, ONE_HUNDRED_MILLION, SYSCOIN_BASIC_FEE } from 'utils';
1020
- &nbsp;
1021
- import { LedgerKeyring } from '../ledger';
1022
- import { DefaultWalletPolicy } from '../ledger/bitcoin_client';
1023
- import { SyscoinHDSigner } from '../signers';
1024
- import { TrezorKeyring } from '../trezor';
1025
- import {
1026
- ISyscoinTransactions,
1027
- KeyringAccountType,
1028
- accountType,
1029
- } from '../types';
1030
- import { getAccountDerivationPath } from '../utils/derivation-paths';
1031
- import { PsbtUtils } from '../utils/psbt';
1032
- import { INetwork } from '@pollum-io/sysweb3-network';
1033
- import { ITxid, txUtils, getAsset } from '@pollum-io/sysweb3-utils';
1034
- &nbsp;
1035
- type EstimateFeeParams = {
1036
- changeAddress: string;
1037
- feeRateBN: any;
1038
- outputs: { address: string; value: number }[];
1039
- txOptions: any;
1040
- xpub: string;
1041
- };
1042
- &nbsp;
1043
- export class SyscoinTransactions implements ISyscoinTransactions {
1044
- // New separated transaction flow for better UX:
1045
- // 1. Call getEstimateSysTransactionFee() - creates UNSIGNED PSBT and calculates fee
1046
- // 2. Call signPSBT() - signs the PSBT with appropriate wallet (HD/Trezor/Ledger)
1047
- // 3. Call sendTransaction() - broadcasts the signed PSBT
1048
- //
1049
- // This separation allows:
1050
- // - Independent error handling for each step
1051
- // - Better UX feedback (fee estimation, signing, broadcasting)
1052
- // - Hardware wallet compatibility with proper PSBT enhancement
1053
- &nbsp;
1054
- private getSigner: () =&gt; {
1055
- hd: SyscoinHDSigner;
1056
- main: any;
1057
- };
1058
- private trezor: TrezorKeyring;
1059
- private ledger: LedgerKeyring;
1060
- private getState: () =&gt; {
1061
- accounts: {
1062
- HDAccount: accountType;
1063
- Imported: accountType;
1064
- Ledger: accountType;
1065
- Trezor: accountType;
1066
- };
1067
- activeAccountId: number;
1068
- activeAccountType: KeyringAccountType;
1069
- activeNetwork: INetwork;
1070
- };
1071
- private getAddress: (
1072
- xpub: string,
1073
- isChangeAddress: boolean
1074
- ) =&gt; Promise&lt;string&gt;;
1075
- &nbsp;
1076
- constructor(
1077
- getSyscoinSigner: () =&gt; {
1078
- hd: SyscoinHDSigner;
1079
- main: any;
1080
- },
1081
- getState: () =&gt; {
1082
- accounts: {
1083
- HDAccount: accountType;
1084
- Imported: accountType;
1085
- Ledger: accountType;
1086
- Trezor: accountType;
1087
- };
1088
- activeAccountId: number;
1089
- activeAccountType: KeyringAccountType;
1090
- activeNetwork: INetwork;
1091
- },
1092
- getAddress: (xpub: string, isChangeAddress: boolean) =&gt; Promise&lt;string&gt;,
1093
- ledgerSigner: LedgerKeyring
1094
- ) {
1095
- this.getSigner = getSyscoinSigner;
1096
- this.getState = getState;
1097
- this.getAddress = getAddress;
1098
- this.trezor = new TrezorKeyring(this.getSigner);
1099
- this.ledger = ledgerSigner;
1100
- }
1101
- &nbsp;
1102
- private getTransactionPSBT = <span class="fstat-no" title="function not covered" >async </span>({
1103
- txOptions,
1104
- outputs,
1105
- changeAddress,
1106
- xpub,
1107
- feeRateBN,
1108
- }: EstimateFeeParams) =&gt; {
1109
- const { main } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
1110
- &nbsp;
1111
- <span class="cstat-no" title="statement not covered" > try {</span>
1112
- // Use syscoinjs-lib directly for transaction creation
1113
- const result = <span class="cstat-no" title="statement not covered" >await main.createTransaction(</span>
1114
- txOptions,
1115
- changeAddress,
1116
- outputs,
1117
- feeRateBN,
1118
- xpub // sysFromXpubOrAddress
1119
- );
1120
- &nbsp;
1121
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (result &amp;&amp; result.psbt) {</span>
1122
- <span class="cstat-no" title="statement not covered" > return { psbt: result.psbt, fee: result.fee };</span>
1123
- }
1124
- <span class="cstat-no" title="statement not covered" > throw new Error('psbt not found');</span>
1125
- } catch (error) {
1126
- // Propagate structured error from syscoinjs-lib
1127
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.error &amp;&amp; error.code) {</span>
1128
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1129
- }
1130
- // Wrap non-structured errors
1131
- <span class="cstat-no" title="statement not covered" > throw {</span>
1132
- error: true,
1133
- code: 'TRANSACTION_CREATION_FAILED',
1134
- message: error.message || 'Failed to create transaction',
1135
- details: error,
1136
- };
1137
- }
1138
- };
1139
- &nbsp;
1140
- public decodeRawTransaction = <span class="fstat-no" title="function not covered" >(p</span>sbt: any) =&gt; {
1141
- const { main } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
1142
- const psbtObj = <span class="cstat-no" title="statement not covered" >PsbtUtils.fromPali(psbt);</span>
1143
- <span class="cstat-no" title="statement not covered" > return main.decodeRawTransaction(psbtObj);</span>
1144
- };
1145
- &nbsp;
1146
- public getRecommendedFee = <span class="fstat-no" title="function not covered" >async </span>(explorerUrl: string): Promise&lt;number&gt; =&gt;
1147
- <span class="cstat-no" title="statement not covered" > (await syscoinjs.utils.fetchEstimateFee(explorerUrl, 1)) / 1024;</span>
1148
- &nbsp;
1149
- public txUtilsFunctions = <span class="fstat-no" title="function not covered" >() =</span>&gt; {
1150
- const { getRawTransaction } = <span class="cstat-no" title="statement not covered" >txUtils();</span>
1151
- <span class="cstat-no" title="statement not covered" > return {</span>
1152
- getRawTransaction,
1153
- };
1154
- };
1155
- &nbsp;
1156
- // Internal method for signing with the HD signer
1157
- private signPSBTWithSigner = <span class="fstat-no" title="function not covered" >async </span>({
1158
- psbt,
1159
- signer,
1160
- pathIn,
1161
- }: {
1162
- pathIn?: string;
1163
- psbt: any;
1164
- signer: any;
1165
- }): Promise&lt;any&gt; =&gt; <span class="cstat-no" title="statement not covered" >await signer.sign(psbt, pathIn);</span>
1166
- &nbsp;
1167
- // Create unsigned PSBT for any transaction type
1168
- private createUnsignedPSBT = <span class="fstat-no" title="function not covered" >async </span>({
1169
- txOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
1170
- isMax = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1171
- amount,
1172
- receivingAddress,
1173
- feeRateBN,
1174
- token = <span class="branch-0 cbranch-no" title="branch not covered" >null,</span>
1175
- }: {
1176
- amount: number;
1177
- feeRateBN: any; // BigNumber in satoshis/byte
1178
- receivingAddress: string;
1179
- token?: { guid: string; symbol?: string } | null;
1180
- txOptions?: any;
1181
- isMax?: boolean | false;
1182
- }): Promise&lt;{ psbt: any; fee: number }&gt; =&gt; {
1183
- // Ensure RBF is enabled by default if not explicitly set
1184
- const finalTxOptions = <span class="cstat-no" title="statement not covered" >{ rbf: true, ...txOptions };</span>
1185
- const { activeAccountId, accounts, activeAccountType } = <span class="cstat-no" title="statement not covered" >this.getState();</span>
1186
- const { main } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
1187
- const xpub = <span class="cstat-no" title="statement not covered" >accounts[activeAccountType][activeAccountId].xpub;</span>
1188
- const value = <span class="cstat-no" title="statement not covered" >new syscoinjs.utils.BN(amount * 1e8);</span>
1189
- const changeAddress = <span class="cstat-no" title="statement not covered" >await this.getAddress(xpub, true);</span>
1190
- &nbsp;
1191
- <span class="cstat-no" title="statement not covered" > try {</span>
1192
- <span class="cstat-no" title="statement not covered" > if (token &amp;&amp; token.guid) {</span>
1193
- // Token transaction: use assetAllocationSend
1194
- const asset = <span class="cstat-no" title="statement not covered" >await getAsset(main.blockbookURL, token.guid);</span>
1195
- &nbsp;
1196
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!asset) {</span>
1197
- <span class="cstat-no" title="statement not covered" > throw {</span>
1198
- error: true,
1199
- code: 'INVALID_ASSET_ALLOCATION',
1200
- message: 'Token not found',
1201
- details: { guid: token.guid },
1202
- };
1203
- }
1204
- &nbsp;
1205
- // Create a Map for the asset allocation
1206
- const assetMap = <span class="cstat-no" title="statement not covered" >new Map();</span>
1207
- <span class="cstat-no" title="statement not covered" > assetMap.set(token.guid, {</span>
1208
- changeAddress,
1209
- outputs: [
1210
- {
1211
- value: value as any,
1212
- address: receivingAddress,
1213
- },
1214
- ],
1215
- });
1216
- &nbsp;
1217
- // Pass xpub to get back just the PSBT without signing and sending
1218
- const result = <span class="cstat-no" title="statement not covered" >await main.assetAllocationSend(</span>
1219
- finalTxOptions,
1220
- assetMap,
1221
- changeAddress,
1222
- feeRateBN,
1223
- xpub // Pass xpub to get PSBT back
1224
- );
1225
- &nbsp;
1226
- // Return PSBT and fee
1227
- <span class="cstat-no" title="statement not covered" > return { psbt: result.psbt, fee: result.fee };</span>
1228
- } else {
1229
- // Native transaction: use getTransactionPSBT to create unsigned PSBT
1230
- const outputs = <span class="cstat-no" title="statement not covered" >[</span>
1231
- {
1232
- address: receivingAddress,
1233
- value,
1234
- subtractFeeFrom: isMax ? true : undefined,
1235
- },
1236
- ];
1237
- &nbsp;
1238
- const result = <span class="cstat-no" title="statement not covered" >await this.getTransactionPSBT({</span>
1239
- txOptions: finalTxOptions,
1240
- outputs,
1241
- changeAddress,
1242
- feeRateBN,
1243
- xpub,
1244
- });
1245
- &nbsp;
1246
- <span class="cstat-no" title="statement not covered" > return result;</span>
1247
- }
1248
- } catch (error) {
1249
- // Re-throw structured errors from syscoinjs-lib
1250
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.error &amp;&amp; error.code) {</span>
1251
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1252
- }
1253
- // Wrap other errors in structured format
1254
- <span class="cstat-no" title="statement not covered" > throw {</span>
1255
- error: true,
1256
- code: 'TRANSACTION_CREATION_FAILED',
1257
- message: error.message || 'Failed to create unsigned PSBT',
1258
- details: error,
1259
- };
1260
- }
1261
- };
1262
- &nbsp;
1263
- // Sign PSBT with appropriate method - separated for better error handling
1264
- private signPSBTWithMethod = async (
1265
- psbt: any,
1266
- isTrezor: boolean,
1267
- isLedger = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1268
- pathIn = ''
1269
- ): Promise&lt;any&gt; =&gt; {
1270
- const { activeNetwork, activeAccountId, activeAccountType, accounts } =
1271
- this.getState();
1272
- &nbsp;
1273
- if (isLedger) {
1274
- // Initialize Ledger connection if needed
1275
- if (!this.ledger.ledgerTransport) {
1276
- await this.ledger.connectToLedgerDevice();
1277
- }
1278
- &nbsp;
1279
- // CRITICAL: Enhance PSBT with required Ledger fields
1280
- const accountXpub = accounts[activeAccountType][activeAccountId].xpub;
1281
- const accountId = accounts[activeAccountType][activeAccountId].id;
1282
- const enhancedPsbt = await this.ledger.convertToLedgerFormat(
1283
- psbt,
1284
- accountXpub,
1285
- accountId,
1286
- activeNetwork.currency,
1287
- activeNetwork.slip44
1288
- );
1289
- &nbsp;
1290
- // Get wallet policy for Ledger
1291
- const fingerprint =
1292
- await this.ledger.ledgerUtxoClient.getMasterFingerprint();
1293
- &nbsp;
1294
- // Use dynamic path generation if no path provided
1295
- let hdPath = pathIn;
1296
- if (!pathIn || <span class="branch-1 cbranch-no" title="branch not covered" >pathIn.length === 0)</span> {
1297
- hdPath = getAccountDerivationPath(
1298
- activeNetwork.currency,
1299
- activeNetwork.slip44,
1300
- accountId
1301
- );
1302
- }
1303
- &nbsp;
1304
- const xpubWithDescriptor = `[${hdPath}]${accountXpub}`.replace(
1305
- 'm',
1306
- fingerprint
1307
- );
1308
- const walletPolicy = new DefaultWalletPolicy(
1309
- 'wpkh(@0/**)',
1310
- xpubWithDescriptor
1311
- );
1312
- &nbsp;
1313
- // Sign the enhanced PSBT with Ledger
1314
- const signatureEntries = await this.ledger.ledgerUtxoClient.signPsbt(
1315
- enhancedPsbt.toBase64(),
1316
- walletPolicy,
1317
- null // No HMAC needed for standard policy
1318
- );
1319
- &nbsp;
1320
- signatureEntries.forEach(([inputIndex, partialSig]) =&gt; {
1321
- enhancedPsbt.updateInput(inputIndex, {
1322
- partialSig: [partialSig],
1323
- });
1324
- });
1325
- &nbsp;
1326
- // Finalize all inputs
1327
- enhancedPsbt.finalizeAllInputs();
1328
- &nbsp;
1329
- return enhancedPsbt;
1330
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (isTrezor) {</span>
1331
- // Initialize Trezor connection before signing
1332
- <span class="cstat-no" title="statement not covered" > await this.trezor.init();</span>
1333
- &nbsp;
1334
- // Handle Trezor signing for UTXO
1335
- const trezorTx = <span class="cstat-no" title="statement not covered" >this.trezor.convertToTrezorFormat({</span>
1336
- psbt,
1337
- pathIn, // Pass pathIn to Trezor
1338
- coin: activeNetwork.currency.toLowerCase(),
1339
- });
1340
- const signedPsbt = <span class="cstat-no" title="statement not covered" >await this.trezor.signUtxoTransaction(trezorTx, psbt);</span>
1341
- <span class="cstat-no" title="statement not covered" > return signedPsbt;</span>
1342
- } else {
1343
- const { hd } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
1344
- const signedPsbt = <span class="cstat-no" title="statement not covered" >await this.signPSBTWithSigner({</span>
1345
- psbt,
1346
- signer: hd,
1347
- pathIn,
1348
- });
1349
- <span class="cstat-no" title="statement not covered" > return signedPsbt;</span>
1350
- }
1351
- };
1352
- &nbsp;
1353
- // Create unsigned PSBT and estimate fee - NO SIGNING
1354
- public getEstimateSysTransactionFee = <span class="fstat-no" title="function not covered" >async </span>({
1355
- txOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
1356
- isMax = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1357
- amount,
1358
- receivingAddress,
1359
- feeRate,
1360
- token = <span class="branch-0 cbranch-no" title="branch not covered" >null,</span>
1361
- }: {
1362
- amount: number;
1363
- feeRate?: number;
1364
- receivingAddress: string;
1365
- // Optional fee rate in SYS/byte
1366
- token?: { guid: string; symbol?: string } | null;
1367
- txOptions?: any;
1368
- isMax?: boolean | false;
1369
- }) =&gt; {
1370
- <span class="cstat-no" title="statement not covered" > try {</span>
1371
- // Ensure RBF is enabled by default if not explicitly set
1372
- const finalTxOptions = <span class="cstat-no" title="statement not covered" >{ rbf: true, ...txOptions };</span>
1373
- const { main } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
1374
- // Step 1: Determine fee rate
1375
- let actualFeeRate;
1376
- <span class="cstat-no" title="statement not covered" > if (feeRate !== undefined) {</span>
1377
- <span class="cstat-no" title="statement not covered" > actualFeeRate = feeRate;</span>
1378
- } else {
1379
- <span class="cstat-no" title="statement not covered" > actualFeeRate = await this.getRecommendedFee(main.blockbookURL);</span>
1380
- }
1381
- &nbsp;
1382
- // Convert fee rate to satoshis/byte for consistent usage
1383
- const feeRateBN = <span class="cstat-no" title="statement not covered" >new syscoinjs.utils.BN(actualFeeRate * 1e8);</span>
1384
- &nbsp;
1385
- // Step 2: Create unsigned PSBT
1386
- const result = <span class="cstat-no" title="statement not covered" >await this.createUnsignedPSBT({</span>
1387
- txOptions: finalTxOptions,
1388
- isMax,
1389
- amount,
1390
- receivingAddress,
1391
- feeRateBN,
1392
- token,
1393
- });
1394
- &nbsp;
1395
- <span class="cstat-no" title="statement not covered" > return {</span>
1396
- fee: result.fee / 1e8,
1397
- psbt: PsbtUtils.toPali(result.psbt), // Return UNSIGNED PSBT as JSON
1398
- };
1399
- } catch (error) {
1400
- // Pass through structured errors from syscoinjs-lib
1401
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.error &amp;&amp; error.code) {</span>
1402
- // Convert fee from satoshis to SYS if available
1403
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.fee !== undefined) {</span>
1404
- // If fee is a BN object, convert to number first
1405
- <span class="cstat-no" title="statement not covered" > if (typeof error.fee === 'object' &amp;&amp; error.fee.toNumber) {</span>
1406
- <span class="cstat-no" title="statement not covered" > error.fee = error.fee.toNumber() / 1e8;</span>
1407
- } else {
1408
- <span class="cstat-no" title="statement not covered" > error.fee = error.fee / 1e8;</span>
1409
- }
1410
- }
1411
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.remainingFee !== undefined) {</span>
1412
- // If remainingFee is a BN object, convert to number first
1413
- <span class="cstat-no" title="statement not covered" > if (</span>
1414
- typeof error.remainingFee === 'object' &amp;&amp;
1415
- error.remainingFee.toNumber
1416
- ) {
1417
- <span class="cstat-no" title="statement not covered" > error.remainingFee = error.remainingFee.toNumber() / 1e8;</span>
1418
- } else {
1419
- <span class="cstat-no" title="statement not covered" > error.remainingFee = error.remainingFee / 1e8;</span>
1420
- }
1421
- }
1422
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.shortfall !== undefined) {</span>
1423
- // If shortfall is a BN object, convert to number first
1424
- <span class="cstat-no" title="statement not covered" > if (typeof error.shortfall === 'object' &amp;&amp; error.shortfall.toNumber) {</span>
1425
- <span class="cstat-no" title="statement not covered" > error.shortfall = error.shortfall.toNumber() / 1e8;</span>
1426
- } else {
1427
- <span class="cstat-no" title="statement not covered" > error.shortfall = error.shortfall / 1e8;</span>
1428
- }
1429
- }
1430
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1431
- }
1432
- // Wrap other errors
1433
- <span class="cstat-no" title="statement not covered" > throw {</span>
1434
- error: true,
1435
- code: 'TRANSACTION_CREATION_FAILED',
1436
- message: error.message || 'Failed to estimate transaction fee',
1437
- details: error,
1438
- };
1439
- }
1440
- };
1441
- &nbsp;
1442
- // Removed createAndSignSysTransaction - functionality merged into getEstimateSysTransactionFee
1443
- &nbsp;
1444
- private sendSignedTransaction = async (psbt): Promise&lt;ITxid&gt; =&gt; {
1445
- try {
1446
- const { main } = this.getSigner();
1447
- // Send the transaction
1448
- const result = await main.send(psbt);
1449
- &nbsp;
1450
- // Extract the transaction ID
1451
- const txid = result.extractTransaction().getId();
1452
- return { txid };
1453
- } catch (error) {
1454
- // Pass through structured errors
1455
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.error &amp;&amp; error.code) {</span>
1456
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1457
- }
1458
- // Wrap other errors
1459
- <span class="cstat-no" title="statement not covered" > throw {</span>
1460
- error: true,
1461
- code: 'TRANSACTION_SEND_FAILED',
1462
- message: error.message || 'Failed to send transaction',
1463
- details: error,
1464
- };
1465
- }
1466
- };
1467
- &nbsp;
1468
- public signPSBT = async ({
1469
- psbt,
1470
- isTrezor = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1471
- isLedger = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1472
- pathIn,
1473
- }: {
1474
- psbt: any;
1475
- isTrezor?: boolean;
1476
- isLedger?: boolean;
1477
- pathIn?: string;
1478
- }): Promise&lt;any&gt; =&gt; {
1479
- const psbtObj = PsbtUtils.fromPali(psbt);
1480
- const signedPsbt = await this.signPSBTWithMethod(
1481
- psbtObj,
1482
- isTrezor,
1483
- isLedger,
1484
- pathIn
1485
- );
1486
- return PsbtUtils.toPali(signedPsbt);
1487
- };
1488
- &nbsp;
1489
- public sendTransaction = async (psbt: any): Promise&lt;ITxid&gt; =&gt; {
1490
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!psbt) {
1491
- <span class="cstat-no" title="statement not covered" > throw new Error('Signed PSBT is required for broadcasting.');</span>
1492
- }
1493
- return await this.sendSignedTransaction(PsbtUtils.fromPali(psbt));
1494
- };
1495
- }
1496
- &nbsp;</pre></td></tr></table></pre>
1497
-
1498
- <div class="push"></div>
1499
- <!-- for sticky footer -->
1500
- </div>
1501
- <!-- /wrapper -->
1502
- <div class="footer quiet pad2 space-top1 center small">
1503
- Code coverage generated by
1504
- <a
1505
- href="https://istanbul.js.org/"
1506
- target="_blank"
1507
- rel="noopener noreferrer"
1508
- >istanbul</a
1509
- >
1510
- at 2025-06-20T17:45:56.456Z
1511
- </div>
1512
- <script src="../../prettify.js"></script>
1513
- <script>
1514
- window.onload = function () {
1515
- prettyPrint();
1516
- };
1517
- </script>
1518
- <script src="../../sorter.js"></script>
1519
- <script src="../../block-navigation.js"></script>
1520
- </body>
1521
- </html>