@sidhujag/sysweb3-keyring 1.0.547 → 1.0.548
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.
- package/package.json +2 -27
- package/coverage/clover.xml +0 -2875
- package/coverage/coverage-final.json +0 -29468
- package/coverage/lcov-report/base.css +0 -354
- package/coverage/lcov-report/block-navigation.js +0 -85
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -320
- package/coverage/lcov-report/prettify.css +0 -101
- package/coverage/lcov-report/prettify.js +0 -1008
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -191
- package/coverage/lcov-report/src/index.html +0 -276
- package/coverage/lcov-report/src/index.ts.html +0 -114
- package/coverage/lcov-report/src/initial-state.ts.html +0 -558
- package/coverage/lcov-report/src/keyring-manager.ts.html +0 -6279
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +0 -178
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +0 -144
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +0 -1560
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +0 -276
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +0 -495
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +0 -1138
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +0 -363
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +0 -289
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +0 -486
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +0 -240
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +0 -342
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +0 -2388
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +0 -453
- package/coverage/lcov-report/src/ledger/consts.ts.html +0 -177
- package/coverage/lcov-report/src/ledger/index.html +0 -216
- package/coverage/lcov-report/src/ledger/index.ts.html +0 -1371
- package/coverage/lcov-report/src/ledger/utils.ts.html +0 -102
- package/coverage/lcov-report/src/signers.ts.html +0 -591
- package/coverage/lcov-report/src/storage.ts.html +0 -198
- package/coverage/lcov-report/src/transactions/ethereum.ts.html +0 -5826
- package/coverage/lcov-report/src/transactions/index.html +0 -216
- package/coverage/lcov-report/src/transactions/index.ts.html +0 -93
- package/coverage/lcov-report/src/transactions/syscoin.ts.html +0 -1521
- package/coverage/lcov-report/src/trezor/index.html +0 -176
- package/coverage/lcov-report/src/trezor/index.ts.html +0 -2655
- package/coverage/lcov-report/src/types.ts.html +0 -1443
- package/coverage/lcov-report/src/utils/derivation-paths.ts.html +0 -486
- package/coverage/lcov-report/src/utils/index.html +0 -196
- package/coverage/lcov-report/src/utils/psbt.ts.html +0 -159
- package/coverage/lcov-report/test/helpers/constants.ts.html +0 -627
- package/coverage/lcov-report/test/helpers/index.html +0 -176
- package/coverage/lcov.info +0 -4832
- package/dist/package.json +0 -50
- package/examples/basic-usage.js +0 -140
- package/jest.config.js +0 -32
- package/readme.md +0 -201
- package/src/declare.d.ts +0 -7
- package/src/errorUtils.ts +0 -83
- package/src/hardware-wallet-manager.ts +0 -655
- package/src/index.ts +0 -12
- package/src/initial-state.ts +0 -108
- package/src/keyring-manager.ts +0 -2698
- package/src/ledger/bitcoin_client/index.ts +0 -19
- package/src/ledger/bitcoin_client/lib/appClient.ts +0 -405
- package/src/ledger/bitcoin_client/lib/bip32.ts +0 -61
- package/src/ledger/bitcoin_client/lib/buffertools.ts +0 -134
- package/src/ledger/bitcoin_client/lib/clientCommands.ts +0 -356
- package/src/ledger/bitcoin_client/lib/constants.ts +0 -12
- package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +0 -65
- package/src/ledger/bitcoin_client/lib/merkle.ts +0 -136
- package/src/ledger/bitcoin_client/lib/merkleMap.ts +0 -49
- package/src/ledger/bitcoin_client/lib/policy.ts +0 -91
- package/src/ledger/bitcoin_client/lib/psbtv2.ts +0 -768
- package/src/ledger/bitcoin_client/lib/varint.ts +0 -120
- package/src/ledger/consts.ts +0 -3
- package/src/ledger/index.ts +0 -685
- package/src/ledger/types.ts +0 -74
- package/src/network-utils.ts +0 -99
- package/src/providers.ts +0 -345
- package/src/signers.ts +0 -158
- package/src/storage.ts +0 -63
- package/src/transactions/__tests__/integration.test.ts +0 -303
- package/src/transactions/__tests__/syscoin.test.ts +0 -409
- package/src/transactions/ethereum.ts +0 -2503
- package/src/transactions/index.ts +0 -2
- package/src/transactions/syscoin.ts +0 -542
- package/src/trezor/index.ts +0 -1050
- package/src/types.ts +0 -366
- package/src/utils/derivation-paths.ts +0 -133
- package/src/utils/psbt.ts +0 -24
- package/src/utils.ts +0 -191
- package/test/README.md +0 -158
- package/test/__mocks__/ledger-mock.js +0 -20
- package/test/__mocks__/trezor-mock.js +0 -75
- package/test/cleanup-summary.md +0 -167
- package/test/helpers/README.md +0 -78
- package/test/helpers/constants.ts +0 -79
- package/test/helpers/setup.ts +0 -714
- package/test/integration/import-validation.spec.ts +0 -588
- package/test/unit/hardware/ledger.spec.ts +0 -869
- package/test/unit/hardware/trezor.spec.ts +0 -828
- package/test/unit/keyring-manager/account-management.spec.ts +0 -970
- package/test/unit/keyring-manager/import-watchonly.spec.ts +0 -181
- package/test/unit/keyring-manager/import-wif.spec.ts +0 -126
- package/test/unit/keyring-manager/initialization.spec.ts +0 -782
- package/test/unit/keyring-manager/key-derivation.spec.ts +0 -996
- package/test/unit/keyring-manager/security.spec.ts +0 -505
- package/test/unit/keyring-manager/state-management.spec.ts +0 -375
- package/test/unit/network/network-management.spec.ts +0 -372
- package/test/unit/transactions/ethereum-transactions.spec.ts +0 -382
- package/test/unit/transactions/syscoin-transactions.spec.ts +0 -615
- package/tsconfig.json +0 -14
- /package/{dist/README.md → README.md} +0 -0
- /package/{dist/cjs → cjs}/errorUtils.js +0 -0
- /package/{dist/cjs → cjs}/errorUtils.js.map +0 -0
- /package/{dist/cjs → cjs}/hardware-wallet-manager.js +0 -0
- /package/{dist/cjs → cjs}/hardware-wallet-manager.js.map +0 -0
- /package/{dist/cjs → cjs}/index.js +0 -0
- /package/{dist/cjs → cjs}/index.js.map +0 -0
- /package/{dist/cjs → cjs}/initial-state.js +0 -0
- /package/{dist/cjs → cjs}/initial-state.js.map +0 -0
- /package/{dist/cjs → cjs}/keyring-manager.js +0 -0
- /package/{dist/cjs → cjs}/keyring-manager.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/consts.js +0 -0
- /package/{dist/cjs → cjs}/ledger/consts.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/index.js +0 -0
- /package/{dist/cjs → cjs}/ledger/index.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/types.js +0 -0
- /package/{dist/cjs → cjs}/ledger/types.js.map +0 -0
- /package/{dist/cjs → cjs}/network-utils.js +0 -0
- /package/{dist/cjs → cjs}/network-utils.js.map +0 -0
- /package/{dist/cjs → cjs}/providers.js +0 -0
- /package/{dist/cjs → cjs}/providers.js.map +0 -0
- /package/{dist/cjs → cjs}/signers.js +0 -0
- /package/{dist/cjs → cjs}/signers.js.map +0 -0
- /package/{dist/cjs → cjs}/storage.js +0 -0
- /package/{dist/cjs → cjs}/storage.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/ethereum.js +0 -0
- /package/{dist/cjs → cjs}/transactions/ethereum.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/index.js +0 -0
- /package/{dist/cjs → cjs}/transactions/index.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/syscoin.js +0 -0
- /package/{dist/cjs → cjs}/transactions/syscoin.js.map +0 -0
- /package/{dist/cjs → cjs}/trezor/index.js +0 -0
- /package/{dist/cjs → cjs}/trezor/index.js.map +0 -0
- /package/{dist/cjs → cjs}/types.js +0 -0
- /package/{dist/cjs → cjs}/types.js.map +0 -0
- /package/{dist/cjs → cjs}/utils/derivation-paths.js +0 -0
- /package/{dist/cjs → cjs}/utils/derivation-paths.js.map +0 -0
- /package/{dist/cjs → cjs}/utils/psbt.js +0 -0
- /package/{dist/cjs → cjs}/utils/psbt.js.map +0 -0
- /package/{dist/cjs → cjs}/utils.js +0 -0
- /package/{dist/cjs → cjs}/utils.js.map +0 -0
- /package/{dist/types → types}/errorUtils.d.ts +0 -0
- /package/{dist/types → types}/hardware-wallet-manager.d.ts +0 -0
- /package/{dist/types → types}/index.d.ts +0 -0
- /package/{dist/types → types}/initial-state.d.ts +0 -0
- /package/{dist/types → types}/keyring-manager.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/index.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
- /package/{dist/types → types}/ledger/consts.d.ts +0 -0
- /package/{dist/types → types}/ledger/index.d.ts +0 -0
- /package/{dist/types → types}/ledger/types.d.ts +0 -0
- /package/{dist/types → types}/network-utils.d.ts +0 -0
- /package/{dist/types → types}/providers.d.ts +0 -0
- /package/{dist/types → types}/signers.d.ts +0 -0
- /package/{dist/types → types}/storage.d.ts +0 -0
- /package/{dist/types → types}/transactions/__tests__/integration.test.d.ts +0 -0
- /package/{dist/types → types}/transactions/__tests__/syscoin.test.d.ts +0 -0
- /package/{dist/types → types}/transactions/ethereum.d.ts +0 -0
- /package/{dist/types → types}/transactions/index.d.ts +0 -0
- /package/{dist/types → types}/transactions/syscoin.d.ts +0 -0
- /package/{dist/types → types}/trezor/index.d.ts +0 -0
- /package/{dist/types → types}/types.d.ts +0 -0
- /package/{dist/types → types}/utils/derivation-paths.d.ts +0 -0
- /package/{dist/types → types}/utils/psbt.d.ts +0 -0
- /package/{dist/types → types}/utils.d.ts +0 -0
|
@@ -1,1371 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<title>Code coverage report for src/ledger/index.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/ledger</a> index.ts
|
|
23
|
-
</h1>
|
|
24
|
-
<div class="clearfix">
|
|
25
|
-
<div class="fl pad1y space-right2">
|
|
26
|
-
<span class="strong">19.85% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class="fraction">28/141</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div class="fl pad1y space-right2">
|
|
32
|
-
<span class="strong">0% </span>
|
|
33
|
-
<span class="quiet">Branches</span>
|
|
34
|
-
<span class="fraction">0/31</span>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<div class="fl pad1y space-right2">
|
|
38
|
-
<span class="strong">4.54% </span>
|
|
39
|
-
<span class="quiet">Functions</span>
|
|
40
|
-
<span class="fraction">1/22</span>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
43
|
-
<div class="fl pad1y space-right2">
|
|
44
|
-
<span class="strong">20.74% </span>
|
|
45
|
-
<span class="quiet">Lines</span>
|
|
46
|
-
<span class="fraction">28/135</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
492
|
-
<span class="cline-any cline-neutral"> </span>
|
|
493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
494
|
-
<span class="cline-any cline-yes">2x</span>
|
|
495
|
-
<span class="cline-any cline-yes">2x</span>
|
|
496
|
-
<span class="cline-any cline-yes">2x</span>
|
|
497
|
-
<span class="cline-any cline-yes">2x</span>
|
|
498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
502
|
-
<span class="cline-any cline-neutral"> </span>
|
|
503
|
-
<span class="cline-any cline-yes">2x</span>
|
|
504
|
-
<span class="cline-any cline-yes">2x</span>
|
|
505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-yes">2x</span>
|
|
507
|
-
<span class="cline-any cline-yes">2x</span>
|
|
508
|
-
<span class="cline-any cline-yes">2x</span>
|
|
509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
510
|
-
<span class="cline-any cline-neutral"> </span>
|
|
511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
513
|
-
<span class="cline-any cline-yes">2x</span>
|
|
514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-yes">2x</span>
|
|
516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
521
|
-
<span class="cline-any cline-yes">43x</span>
|
|
522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
524
|
-
<span class="cline-any cline-yes">43x</span>
|
|
525
|
-
<span class="cline-any cline-neutral"> </span>
|
|
526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
530
|
-
<span class="cline-any cline-yes">43x</span>
|
|
531
|
-
<span class="cline-any cline-neutral"> </span>
|
|
532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
535
|
-
<span class="cline-any cline-neutral"> </span>
|
|
536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
538
|
-
<span class="cline-any cline-yes">43x</span>
|
|
539
|
-
<span class="cline-any cline-no"> </span>
|
|
540
|
-
<span class="cline-any cline-no"> </span>
|
|
541
|
-
<span class="cline-any cline-no"> </span>
|
|
542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
543
|
-
<span class="cline-any cline-no"> </span>
|
|
544
|
-
<span class="cline-any cline-no"> </span>
|
|
545
|
-
<span class="cline-any cline-no"> </span>
|
|
546
|
-
<span class="cline-any cline-no"> </span>
|
|
547
|
-
<span class="cline-any cline-neutral"> </span>
|
|
548
|
-
<span class="cline-any cline-no"> </span>
|
|
549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
551
|
-
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-yes">43x</span>
|
|
553
|
-
<span class="cline-any cline-neutral"> </span>
|
|
554
|
-
<span class="cline-any cline-neutral"> </span>
|
|
555
|
-
<span class="cline-any cline-neutral"> </span>
|
|
556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
558
|
-
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
560
|
-
<span class="cline-any cline-neutral"> </span>
|
|
561
|
-
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-neutral"> </span>
|
|
563
|
-
<span class="cline-any cline-no"> </span>
|
|
564
|
-
<span class="cline-any cline-no"> </span>
|
|
565
|
-
<span class="cline-any cline-no"> </span>
|
|
566
|
-
<span class="cline-any cline-no"> </span>
|
|
567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
568
|
-
<span class="cline-any cline-no"> </span>
|
|
569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-no"> </span>
|
|
573
|
-
<span class="cline-any cline-neutral"> </span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
577
|
-
<span class="cline-any cline-no"> </span>
|
|
578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-neutral"> </span>
|
|
580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
581
|
-
<span class="cline-any cline-neutral"> </span>
|
|
582
|
-
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-no"> </span>
|
|
586
|
-
<span class="cline-any cline-neutral"> </span>
|
|
587
|
-
<span class="cline-any cline-no"> </span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
591
|
-
<span class="cline-any cline-yes">43x</span>
|
|
592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
596
|
-
<span class="cline-any cline-no"> </span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
603
|
-
<span class="cline-any cline-yes">43x</span>
|
|
604
|
-
<span class="cline-any cline-neutral"> </span>
|
|
605
|
-
<span class="cline-any cline-neutral"> </span>
|
|
606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
609
|
-
<span class="cline-any cline-neutral"> </span>
|
|
610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
611
|
-
<span class="cline-any cline-neutral"> </span>
|
|
612
|
-
<span class="cline-any cline-no"> </span>
|
|
613
|
-
<span class="cline-any cline-no"> </span>
|
|
614
|
-
<span class="cline-any cline-no"> </span>
|
|
615
|
-
<span class="cline-any cline-no"> </span>
|
|
616
|
-
<span class="cline-any cline-no"> </span>
|
|
617
|
-
<span class="cline-any cline-neutral"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
621
|
-
<span class="cline-any cline-no"> </span>
|
|
622
|
-
<span class="cline-any cline-no"> </span>
|
|
623
|
-
<span class="cline-any cline-no"> </span>
|
|
624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
625
|
-
<span class="cline-any cline-neutral"> </span>
|
|
626
|
-
<span class="cline-any cline-yes">43x</span>
|
|
627
|
-
<span class="cline-any cline-neutral"> </span>
|
|
628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-neutral"> </span>
|
|
630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
636
|
-
<span class="cline-any cline-neutral"> </span>
|
|
637
|
-
<span class="cline-any cline-no"> </span>
|
|
638
|
-
<span class="cline-any cline-no"> </span>
|
|
639
|
-
<span class="cline-any cline-no"> </span>
|
|
640
|
-
<span class="cline-any cline-no"> </span>
|
|
641
|
-
<span class="cline-any cline-no"> </span>
|
|
642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
646
|
-
<span class="cline-any cline-neutral"> </span>
|
|
647
|
-
<span class="cline-any cline-no"> </span>
|
|
648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
649
|
-
<span class="cline-any cline-no"> </span>
|
|
650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
651
|
-
<span class="cline-any cline-neutral"> </span>
|
|
652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
653
|
-
<span class="cline-any cline-yes">43x</span>
|
|
654
|
-
<span class="cline-any cline-no"> </span>
|
|
655
|
-
<span class="cline-any cline-no"> </span>
|
|
656
|
-
<span class="cline-any cline-no"> </span>
|
|
657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-no"> </span>
|
|
661
|
-
<span class="cline-any cline-neutral"> </span>
|
|
662
|
-
<span class="cline-any cline-no"> </span>
|
|
663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
664
|
-
<span class="cline-any cline-neutral"> </span>
|
|
665
|
-
<span class="cline-any cline-neutral"> </span>
|
|
666
|
-
<span class="cline-any cline-yes">43x</span>
|
|
667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
670
|
-
<span class="cline-any cline-neutral"> </span>
|
|
671
|
-
<span class="cline-any cline-neutral"> </span>
|
|
672
|
-
<span class="cline-any cline-neutral"> </span>
|
|
673
|
-
<span class="cline-any cline-no"> </span>
|
|
674
|
-
<span class="cline-any cline-no"> </span>
|
|
675
|
-
<span class="cline-any cline-neutral"> </span>
|
|
676
|
-
<span class="cline-any cline-no"> </span>
|
|
677
|
-
<span class="cline-any cline-neutral"> </span>
|
|
678
|
-
<span class="cline-any cline-neutral"> </span>
|
|
679
|
-
<span class="cline-any cline-neutral"> </span>
|
|
680
|
-
<span class="cline-any cline-neutral"> </span>
|
|
681
|
-
<span class="cline-any cline-neutral"> </span>
|
|
682
|
-
<span class="cline-any cline-no"> </span>
|
|
683
|
-
<span class="cline-any cline-neutral"> </span>
|
|
684
|
-
<span class="cline-any cline-neutral"> </span>
|
|
685
|
-
<span class="cline-any cline-yes">43x</span>
|
|
686
|
-
<span class="cline-any cline-neutral"> </span>
|
|
687
|
-
<span class="cline-any cline-neutral"> </span>
|
|
688
|
-
<span class="cline-any cline-neutral"> </span>
|
|
689
|
-
<span class="cline-any cline-neutral"> </span>
|
|
690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
691
|
-
<span class="cline-any cline-neutral"> </span>
|
|
692
|
-
<span class="cline-any cline-no"> </span>
|
|
693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
694
|
-
<span class="cline-any cline-no"> </span>
|
|
695
|
-
<span class="cline-any cline-neutral"> </span>
|
|
696
|
-
<span class="cline-any cline-neutral"> </span>
|
|
697
|
-
<span class="cline-any cline-neutral"> </span>
|
|
698
|
-
<span class="cline-any cline-neutral"> </span>
|
|
699
|
-
<span class="cline-any cline-no"> </span>
|
|
700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
703
|
-
<span class="cline-any cline-no"> </span>
|
|
704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
705
|
-
<span class="cline-any cline-no"> </span>
|
|
706
|
-
<span class="cline-any cline-neutral"> </span>
|
|
707
|
-
<span class="cline-any cline-neutral"> </span>
|
|
708
|
-
<span class="cline-any cline-neutral"> </span>
|
|
709
|
-
<span class="cline-any cline-no"> </span>
|
|
710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
711
|
-
<span class="cline-any cline-neutral"> </span>
|
|
712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
713
|
-
<span class="cline-any cline-no"> </span>
|
|
714
|
-
<span class="cline-any cline-neutral"> </span>
|
|
715
|
-
<span class="cline-any cline-neutral"> </span>
|
|
716
|
-
<span class="cline-any cline-no"> </span>
|
|
717
|
-
<span class="cline-any cline-neutral"> </span>
|
|
718
|
-
<span class="cline-any cline-neutral"> </span>
|
|
719
|
-
<span class="cline-any cline-no"> </span>
|
|
720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
721
|
-
<span class="cline-any cline-neutral"> </span>
|
|
722
|
-
<span class="cline-any cline-neutral"> </span>
|
|
723
|
-
<span class="cline-any cline-yes">43x</span>
|
|
724
|
-
<span class="cline-any cline-neutral"> </span>
|
|
725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
727
|
-
<span class="cline-any cline-no"> </span>
|
|
728
|
-
<span class="cline-any cline-no"> </span>
|
|
729
|
-
<span class="cline-any cline-neutral"> </span>
|
|
730
|
-
<span class="cline-any cline-neutral"> </span>
|
|
731
|
-
<span class="cline-any cline-neutral"> </span>
|
|
732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-no"> </span>
|
|
734
|
-
<span class="cline-any cline-neutral"> </span>
|
|
735
|
-
<span class="cline-any cline-no"> </span>
|
|
736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
738
|
-
<span class="cline-any cline-neutral"> </span>
|
|
739
|
-
<span class="cline-any cline-neutral"> </span>
|
|
740
|
-
<span class="cline-any cline-neutral"> </span>
|
|
741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-no"> </span>
|
|
743
|
-
<span class="cline-any cline-neutral"> </span>
|
|
744
|
-
<span class="cline-any cline-no"> </span>
|
|
745
|
-
<span class="cline-any cline-no"> </span>
|
|
746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
748
|
-
<span class="cline-any cline-neutral"> </span>
|
|
749
|
-
<span class="cline-any cline-neutral"> </span>
|
|
750
|
-
<span class="cline-any cline-neutral"> </span>
|
|
751
|
-
<span class="cline-any cline-neutral"> </span>
|
|
752
|
-
<span class="cline-any cline-neutral"> </span>
|
|
753
|
-
<span class="cline-any cline-no"> </span>
|
|
754
|
-
<span class="cline-any cline-neutral"> </span>
|
|
755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-neutral"> </span>
|
|
757
|
-
<span class="cline-any cline-neutral"> </span>
|
|
758
|
-
<span class="cline-any cline-neutral"> </span>
|
|
759
|
-
<span class="cline-any cline-neutral"> </span>
|
|
760
|
-
<span class="cline-any cline-yes">43x</span>
|
|
761
|
-
<span class="cline-any cline-neutral"> </span>
|
|
762
|
-
<span class="cline-any cline-neutral"> </span>
|
|
763
|
-
<span class="cline-any cline-neutral"> </span>
|
|
764
|
-
<span class="cline-any cline-neutral"> </span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
|
-
<span class="cline-any cline-no"> </span>
|
|
767
|
-
<span class="cline-any cline-no"> </span>
|
|
768
|
-
<span class="cline-any cline-neutral"> </span>
|
|
769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
770
|
-
<span class="cline-any cline-no"> </span>
|
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
772
|
-
<span class="cline-any cline-no"> </span>
|
|
773
|
-
<span class="cline-any cline-neutral"> </span>
|
|
774
|
-
<span class="cline-any cline-neutral"> </span>
|
|
775
|
-
<span class="cline-any cline-neutral"> </span>
|
|
776
|
-
<span class="cline-any cline-yes">43x</span>
|
|
777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
779
|
-
<span class="cline-any cline-neutral"> </span>
|
|
780
|
-
<span class="cline-any cline-neutral"> </span>
|
|
781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
782
|
-
<span class="cline-any cline-neutral"> </span>
|
|
783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-neutral"> </span>
|
|
785
|
-
<span class="cline-any cline-no"> </span>
|
|
786
|
-
<span class="cline-any cline-no"> </span>
|
|
787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
788
|
-
<span class="cline-any cline-no"> </span>
|
|
789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
790
|
-
<span class="cline-any cline-no"> </span>
|
|
791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
793
|
-
<span class="cline-any cline-neutral"> </span>
|
|
794
|
-
<span class="cline-any cline-neutral"> </span>
|
|
795
|
-
<span class="cline-any cline-neutral"> </span>
|
|
796
|
-
<span class="cline-any cline-no"> </span>
|
|
797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
799
|
-
<span class="cline-any cline-yes">43x</span>
|
|
800
|
-
<span class="cline-any cline-no"> </span>
|
|
801
|
-
<span class="cline-any cline-neutral"> </span>
|
|
802
|
-
<span class="cline-any cline-no"> </span>
|
|
803
|
-
<span class="cline-any cline-no"> </span>
|
|
804
|
-
<span class="cline-any cline-neutral"> </span>
|
|
805
|
-
<span class="cline-any cline-no"> </span>
|
|
806
|
-
<span class="cline-any cline-no"> </span>
|
|
807
|
-
<span class="cline-any cline-neutral"> </span>
|
|
808
|
-
<span class="cline-any cline-neutral"> </span>
|
|
809
|
-
<span class="cline-any cline-neutral"> </span>
|
|
810
|
-
<span class="cline-any cline-yes">43x</span>
|
|
811
|
-
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-no"> </span>
|
|
813
|
-
<span class="cline-any cline-neutral"> </span>
|
|
814
|
-
<span class="cline-any cline-no"> </span>
|
|
815
|
-
<span class="cline-any cline-neutral"> </span>
|
|
816
|
-
<span class="cline-any cline-neutral"> </span>
|
|
817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
820
|
-
<span class="cline-any cline-neutral"> </span>
|
|
821
|
-
<span class="cline-any cline-neutral"> </span>
|
|
822
|
-
<span class="cline-any cline-neutral"> </span>
|
|
823
|
-
<span class="cline-any cline-no"> </span>
|
|
824
|
-
<span class="cline-any cline-neutral"> </span>
|
|
825
|
-
<span class="cline-any cline-neutral"> </span>
|
|
826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
827
|
-
<span class="cline-any cline-neutral"> </span>
|
|
828
|
-
<span class="cline-any cline-yes">43x</span>
|
|
829
|
-
<span class="cline-any cline-neutral"> </span>
|
|
830
|
-
<span class="cline-any cline-neutral"> </span>
|
|
831
|
-
<span class="cline-any cline-neutral"> </span>
|
|
832
|
-
<span class="cline-any cline-neutral"> </span>
|
|
833
|
-
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-neutral"> </span>
|
|
835
|
-
<span class="cline-any cline-no"> </span>
|
|
836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
837
|
-
<span class="cline-any cline-no"> </span>
|
|
838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-no"> </span>
|
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-neutral"> </span>
|
|
843
|
-
<span class="cline-any cline-no"> </span>
|
|
844
|
-
<span class="cline-any cline-no"> </span>
|
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-no"> </span>
|
|
848
|
-
<span class="cline-any cline-no"> </span>
|
|
849
|
-
<span class="cline-any cline-neutral"> </span>
|
|
850
|
-
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-no"> </span>
|
|
853
|
-
<span class="cline-any cline-no"> </span>
|
|
854
|
-
<span class="cline-any cline-no"> </span>
|
|
855
|
-
<span class="cline-any cline-no"> </span>
|
|
856
|
-
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-no"> </span>
|
|
858
|
-
<span class="cline-any cline-no"> </span>
|
|
859
|
-
<span class="cline-any cline-neutral"> </span>
|
|
860
|
-
<span class="cline-any cline-neutral"> </span>
|
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
862
|
-
<span class="cline-any cline-neutral"> </span>
|
|
863
|
-
<span class="cline-any cline-neutral"> </span>
|
|
864
|
-
<span class="cline-any cline-neutral"> </span>
|
|
865
|
-
<span class="cline-any cline-neutral"> </span>
|
|
866
|
-
<span class="cline-any cline-no"> </span>
|
|
867
|
-
<span class="cline-any cline-neutral"> </span>
|
|
868
|
-
<span class="cline-any cline-neutral"> </span>
|
|
869
|
-
<span class="cline-any cline-neutral"> </span>
|
|
870
|
-
<span class="cline-any cline-neutral"> </span>
|
|
871
|
-
<span class="cline-any cline-no"> </span>
|
|
872
|
-
<span class="cline-any cline-no"> </span>
|
|
873
|
-
<span class="cline-any cline-neutral"> </span>
|
|
874
|
-
<span class="cline-any cline-neutral"> </span>
|
|
875
|
-
<span class="cline-any cline-neutral"> </span>
|
|
876
|
-
<span class="cline-any cline-neutral"> </span>
|
|
877
|
-
<span class="cline-any cline-no"> </span>
|
|
878
|
-
<span class="cline-any cline-neutral"> </span>
|
|
879
|
-
<span class="cline-any cline-neutral"> </span>
|
|
880
|
-
<span class="cline-any cline-no"> </span>
|
|
881
|
-
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-no"> </span>
|
|
883
|
-
<span class="cline-any cline-neutral"> </span>
|
|
884
|
-
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-no"> </span>
|
|
887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
888
|
-
<span class="cline-any cline-no"> </span>
|
|
889
|
-
<span class="cline-any cline-neutral"> </span>
|
|
890
|
-
<span class="cline-any cline-neutral"> </span>
|
|
891
|
-
<span class="cline-any cline-neutral"> </span>
|
|
892
|
-
<span class="cline-any cline-neutral"> </span>
|
|
893
|
-
<span class="cline-any cline-no"> </span>
|
|
894
|
-
<span class="cline-any cline-neutral"> </span>
|
|
895
|
-
<span class="cline-any cline-no"> </span>
|
|
896
|
-
<span class="cline-any cline-neutral"> </span>
|
|
897
|
-
<span class="cline-any cline-no"> </span>
|
|
898
|
-
<span class="cline-any cline-neutral"> </span>
|
|
899
|
-
<span class="cline-any cline-neutral"> </span>
|
|
900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
901
|
-
<span class="cline-any cline-neutral"> </span>
|
|
902
|
-
<span class="cline-any cline-neutral"> </span>
|
|
903
|
-
<span class="cline-any cline-no"> </span>
|
|
904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
906
|
-
<span class="cline-any cline-neutral"> </span>
|
|
907
|
-
<span class="cline-any cline-neutral"> </span>
|
|
908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
910
|
-
<span class="cline-any cline-no"> </span>
|
|
911
|
-
<span class="cline-any cline-neutral"> </span>
|
|
912
|
-
<span class="cline-any cline-no"> </span>
|
|
913
|
-
<span class="cline-any cline-neutral"> </span>
|
|
914
|
-
<span class="cline-any cline-no"> </span>
|
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
916
|
-
<span class="cline-any cline-neutral"> </span>
|
|
917
|
-
<span class="cline-any cline-neutral"> </span>
|
|
918
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable camelcase */
|
|
919
|
-
/* eslint-disable import/no-named-as-default */
|
|
920
|
-
/* eslint-disable import/order */
|
|
921
|
-
import Transport from '@ledgerhq/hw-transport';
|
|
922
|
-
import HIDTransport from '@ledgerhq/hw-transport-webhid';
|
|
923
|
-
import { listen } from '@ledgerhq/logs';
|
|
924
|
-
import SysUtxoClient, { DefaultWalletPolicy } from './bitcoin_client';
|
|
925
|
-
import {
|
|
926
|
-
BLOCKBOOK_API_URL,
|
|
927
|
-
DESCRIPTOR,
|
|
928
|
-
RECEIVING_ADDRESS_INDEX,
|
|
929
|
-
WILL_NOT_DISPLAY,
|
|
930
|
-
} from './consts';
|
|
931
|
-
import { getXpubWithDescriptor } from './utils';
|
|
932
|
-
import { fromBase58 } from '@trezor/utxo-lib/lib/bip32';
|
|
933
|
-
import { IEvmMethods, IUTXOMethods, MessageTypes, UTXOPayload } from './types';
|
|
934
|
-
import LedgerEthClient, { ledgerService } from '@ledgerhq/hw-app-eth';
|
|
935
|
-
import { TypedDataUtils, TypedMessage, Version } from 'eth-sig-util';
|
|
936
|
-
import {
|
|
937
|
-
getAccountDerivationPath,
|
|
938
|
-
getAddressDerivationPath,
|
|
939
|
-
isEvmCoin,
|
|
940
|
-
} from '../utils/derivation-paths';
|
|
941
|
-
import { Transaction } from 'syscoinjs-lib';
|
|
942
|
-
|
|
943
|
-
export class LedgerKeyring {
|
|
944
|
-
public ledgerUtxoClient: SysUtxoClient;
|
|
945
|
-
public ledgerEVMClient: LedgerEthClient;
|
|
946
|
-
public ledgerTransport: Transport;
|
|
947
|
-
public utxo: IUTXOMethods;
|
|
948
|
-
public evm: IEvmMethods;
|
|
949
|
-
public hdPath = '';
|
|
950
|
-
|
|
951
|
-
constructor() {
|
|
952
|
-
this.utxo = {
|
|
953
|
-
getUtxos: this.getUtxos,
|
|
954
|
-
getUtxoAddress: this.getUtxoAddress,
|
|
955
|
-
getXpub: this.getXpub,
|
|
956
|
-
verifyUtxoAddress: this.verifyUtxoAddress,
|
|
957
|
-
};
|
|
958
|
-
this.evm = {
|
|
959
|
-
getEvmAddressAndPubKey: this.getEvmAddressAndPubKey,
|
|
960
|
-
signEVMTransaction: this.signEVMTransaction,
|
|
961
|
-
signPersonalMessage: this.signPersonalMessage,
|
|
962
|
-
signTypedData: this.signTypedData,
|
|
963
|
-
};
|
|
964
|
-
}
|
|
965
|
-
|
|
966
|
-
public connectToLedgerDevice = <span class="fstat-no" title="function not covered" >async </span>() => {
|
|
967
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
968
|
-
const connectionResponse = <span class="cstat-no" title="statement not covered" >await HIDTransport.create();</span>
|
|
969
|
-
<span class="cstat-no" title="statement not covered" > listen(<span class="fstat-no" title="function not covered" >(l</span>og) => <span class="cstat-no" title="statement not covered" >console.log(log))</span>;</span>
|
|
970
|
-
|
|
971
|
-
<span class="cstat-no" title="statement not covered" > this.ledgerUtxoClient = new SysUtxoClient(connectionResponse);</span>
|
|
972
|
-
<span class="cstat-no" title="statement not covered" > this.ledgerEVMClient = new LedgerEthClient(connectionResponse);</span>
|
|
973
|
-
<span class="cstat-no" title="statement not covered" > this.ledgerTransport = connectionResponse;</span>
|
|
974
|
-
<span class="cstat-no" title="statement not covered" > return connectionResponse;</span>
|
|
975
|
-
} catch (error) {
|
|
976
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(error);</span>
|
|
977
|
-
}
|
|
978
|
-
};
|
|
979
|
-
|
|
980
|
-
private getUtxoAddress = <span class="fstat-no" title="function not covered" >async </span>({
|
|
981
|
-
coin,
|
|
982
|
-
index, // account index
|
|
983
|
-
slip44,
|
|
984
|
-
showInLedger,
|
|
985
|
-
}: {
|
|
986
|
-
coin: string;
|
|
987
|
-
index: number;
|
|
988
|
-
showInLedger?: boolean;
|
|
989
|
-
slip44: number;
|
|
990
|
-
}) => {
|
|
991
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
992
|
-
const fingerprint = <span class="cstat-no" title="statement not covered" >await this.getMasterFingerprint();</span>
|
|
993
|
-
const xpub = <span class="cstat-no" title="statement not covered" >await this.getXpub({ index, coin, slip44 });</span>
|
|
994
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath(coin, index, slip44);</span>
|
|
995
|
-
|
|
996
|
-
const xpubWithDescriptor = <span class="cstat-no" title="statement not covered" >`[${this.hdPath}]${xpub}`.replace(</span>
|
|
997
|
-
'm',
|
|
998
|
-
fingerprint
|
|
999
|
-
);
|
|
1000
|
-
const walletPolicy = <span class="cstat-no" title="statement not covered" >new DefaultWalletPolicy(</span>
|
|
1001
|
-
DESCRIPTOR,
|
|
1002
|
-
xpubWithDescriptor
|
|
1003
|
-
);
|
|
1004
|
-
|
|
1005
|
-
const address = <span class="cstat-no" title="statement not covered" >await this.ledgerUtxoClient.getWalletAddress(</span>
|
|
1006
|
-
walletPolicy,
|
|
1007
|
-
null,
|
|
1008
|
-
RECEIVING_ADDRESS_INDEX,
|
|
1009
|
-
index,
|
|
1010
|
-
showInLedger ? showInLedger : WILL_NOT_DISPLAY
|
|
1011
|
-
);
|
|
1012
|
-
|
|
1013
|
-
<span class="cstat-no" title="statement not covered" > return address;</span>
|
|
1014
|
-
} catch (error) {
|
|
1015
|
-
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1016
|
-
}
|
|
1017
|
-
};
|
|
1018
|
-
|
|
1019
|
-
private verifyUtxoAddress = <span class="fstat-no" title="function not covered" >async </span>(
|
|
1020
|
-
accountIndex: number,
|
|
1021
|
-
currency: string,
|
|
1022
|
-
slip44: number
|
|
1023
|
-
) =>
|
|
1024
|
-
<span class="cstat-no" title="statement not covered" > await this.getUtxoAddress({</span>
|
|
1025
|
-
coin: currency,
|
|
1026
|
-
index: accountIndex,
|
|
1027
|
-
slip44: slip44,
|
|
1028
|
-
showInLedger: true,
|
|
1029
|
-
});
|
|
1030
|
-
|
|
1031
|
-
private getUtxos = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1032
|
-
accountIndex,
|
|
1033
|
-
currency,
|
|
1034
|
-
slip44,
|
|
1035
|
-
}: {
|
|
1036
|
-
accountIndex: number;
|
|
1037
|
-
currency: string;
|
|
1038
|
-
slip44: number;
|
|
1039
|
-
}) => {
|
|
1040
|
-
const coin = <span class="cstat-no" title="statement not covered" >currency;</span>
|
|
1041
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath(coin, accountIndex, slip44);</span>
|
|
1042
|
-
const fingerprint = <span class="cstat-no" title="statement not covered" >await this.getMasterFingerprint();</span>
|
|
1043
|
-
const xpub = <span class="cstat-no" title="statement not covered" >await this.ledgerUtxoClient.getExtendedPubkey(this.hdPath);</span>
|
|
1044
|
-
const xpubWithDescriptor = <span class="cstat-no" title="statement not covered" >getXpubWithDescriptor(</span>
|
|
1045
|
-
xpub,
|
|
1046
|
-
this.hdPath,
|
|
1047
|
-
fingerprint
|
|
1048
|
-
);
|
|
1049
|
-
const url = <span class="cstat-no" title="statement not covered" >`${BLOCKBOOK_API_URL}/api/v2/utxo/${xpubWithDescriptor}`;</span>
|
|
1050
|
-
const resp: UTXOPayload = <span class="cstat-no" title="statement not covered" >await fetch(url).then(<span class="fstat-no" title="function not covered" >(r</span>esp) => <span class="cstat-no" title="statement not covered" >resp.json())</span>;</span>
|
|
1051
|
-
<span class="cstat-no" title="statement not covered" > return resp.utxos;</span>
|
|
1052
|
-
};
|
|
1053
|
-
|
|
1054
|
-
private getXpub = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1055
|
-
index,
|
|
1056
|
-
coin,
|
|
1057
|
-
slip44,
|
|
1058
|
-
withDecriptor,
|
|
1059
|
-
}: {
|
|
1060
|
-
coin: string;
|
|
1061
|
-
index: number;
|
|
1062
|
-
slip44: number;
|
|
1063
|
-
withDecriptor?: boolean;
|
|
1064
|
-
}) => {
|
|
1065
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1066
|
-
const fingerprint = <span class="cstat-no" title="statement not covered" >await this.getMasterFingerprint();</span>
|
|
1067
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath(coin, index, slip44);</span>
|
|
1068
|
-
const xpub = <span class="cstat-no" title="statement not covered" >await this.ledgerUtxoClient.getExtendedPubkey(this.hdPath);</span>
|
|
1069
|
-
const xpubWithDescriptor = <span class="cstat-no" title="statement not covered" >getXpubWithDescriptor(</span>
|
|
1070
|
-
xpub,
|
|
1071
|
-
this.hdPath,
|
|
1072
|
-
fingerprint
|
|
1073
|
-
);
|
|
1074
|
-
|
|
1075
|
-
<span class="cstat-no" title="statement not covered" > return withDecriptor ? xpubWithDescriptor : xpub;</span>
|
|
1076
|
-
} catch (error) {
|
|
1077
|
-
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1078
|
-
}
|
|
1079
|
-
};
|
|
1080
|
-
|
|
1081
|
-
public signUtxoMessage = <span class="fstat-no" title="function not covered" >async </span>(path: string, message: string) => {
|
|
1082
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1083
|
-
const bufferMessage = <span class="cstat-no" title="statement not covered" >Buffer.from(message);</span>
|
|
1084
|
-
const signature = <span class="cstat-no" title="statement not covered" >await this.ledgerUtxoClient.signMessage(</span>
|
|
1085
|
-
bufferMessage,
|
|
1086
|
-
path
|
|
1087
|
-
);
|
|
1088
|
-
<span class="cstat-no" title="statement not covered" > return signature;</span>
|
|
1089
|
-
} catch (error) {
|
|
1090
|
-
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1091
|
-
}
|
|
1092
|
-
};
|
|
1093
|
-
|
|
1094
|
-
private signEVMTransaction = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1095
|
-
rawTx,
|
|
1096
|
-
accountIndex,
|
|
1097
|
-
}: {
|
|
1098
|
-
accountIndex: number;
|
|
1099
|
-
rawTx: string;
|
|
1100
|
-
}) => {
|
|
1101
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath('eth', accountIndex, 60);</span>
|
|
1102
|
-
const resolution = <span class="cstat-no" title="statement not covered" >await ledgerService.resolveTransaction(rawTx, {}, {});</span>
|
|
1103
|
-
|
|
1104
|
-
const signature = <span class="cstat-no" title="statement not covered" >await this.ledgerEVMClient.signTransaction(</span>
|
|
1105
|
-
this.hdPath,
|
|
1106
|
-
rawTx,
|
|
1107
|
-
resolution
|
|
1108
|
-
);
|
|
1109
|
-
|
|
1110
|
-
<span class="cstat-no" title="statement not covered" > return signature;</span>
|
|
1111
|
-
};
|
|
1112
|
-
|
|
1113
|
-
private signPersonalMessage = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1114
|
-
message,
|
|
1115
|
-
accountIndex,
|
|
1116
|
-
}: {
|
|
1117
|
-
accountIndex: number;
|
|
1118
|
-
message: string;
|
|
1119
|
-
}) => {
|
|
1120
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath('eth', accountIndex, 60);</span>
|
|
1121
|
-
|
|
1122
|
-
const signature = <span class="cstat-no" title="statement not covered" >await this.ledgerEVMClient.signPersonalMessage(</span>
|
|
1123
|
-
this.hdPath,
|
|
1124
|
-
message
|
|
1125
|
-
);
|
|
1126
|
-
|
|
1127
|
-
<span class="cstat-no" title="statement not covered" > return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;</span>
|
|
1128
|
-
};
|
|
1129
|
-
|
|
1130
|
-
private <span class="fstat-no" title="function not covered" >sanitizeData(</span>data: any): any {
|
|
1131
|
-
<span class="cstat-no" title="statement not covered" > switch (Object.prototype.toString.call(data)) {</span>
|
|
1132
|
-
case '[object Object]': {
|
|
1133
|
-
const entries = <span class="cstat-no" title="statement not covered" >Object.keys(data).map(<span class="fstat-no" title="function not covered" >(k</span>) => <span class="cstat-no" title="statement not covered" >[</span></span>
|
|
1134
|
-
k,
|
|
1135
|
-
this.sanitizeData(data[k]),
|
|
1136
|
-
]);
|
|
1137
|
-
<span class="cstat-no" title="statement not covered" > return Object.fromEntries(entries);</span>
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
case '[object Array]':
|
|
1141
|
-
<span class="cstat-no" title="statement not covered" > return data.map(<span class="fstat-no" title="function not covered" >(v</span>: any[]) => <span class="cstat-no" title="statement not covered" >this.sanitizeData(v))</span>;</span>
|
|
1142
|
-
|
|
1143
|
-
case '[object BigInt]':
|
|
1144
|
-
<span class="cstat-no" title="statement not covered" > return data.toString();</span>
|
|
1145
|
-
|
|
1146
|
-
default:
|
|
1147
|
-
<span class="cstat-no" title="statement not covered" > return data;</span>
|
|
1148
|
-
}
|
|
1149
|
-
}
|
|
1150
|
-
|
|
1151
|
-
private transformTypedData = <span class="fstat-no" title="function not covered" ><T extends MessageTypes>(</span>
|
|
1152
|
-
data: TypedMessage<T>,
|
|
1153
|
-
metamaskV4Compat: boolean
|
|
1154
|
-
) => {
|
|
1155
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!metamaskV4Compat) {</span>
|
|
1156
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1157
|
-
'Ledger: Only version 4 of typed data signing is supported'
|
|
1158
|
-
);
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
const { types, primaryType, domain, message } = <span class="cstat-no" title="statement not covered" >this.sanitizeData(data);</span>
|
|
1162
|
-
|
|
1163
|
-
const domainSeparatorHash = <span class="cstat-no" title="statement not covered" >TypedDataUtils.hashStruct(</span>
|
|
1164
|
-
'EIP712Domain',
|
|
1165
|
-
this.sanitizeData(domain),
|
|
1166
|
-
types,
|
|
1167
|
-
true
|
|
1168
|
-
).toString('hex');
|
|
1169
|
-
|
|
1170
|
-
let messageHash: string | null = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
1171
|
-
|
|
1172
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (primaryType !== 'EIP712Domain') {</span>
|
|
1173
|
-
<span class="cstat-no" title="statement not covered" > messageHash = TypedDataUtils.hashStruct(</span>
|
|
1174
|
-
primaryType as string,
|
|
1175
|
-
this.sanitizeData(message),
|
|
1176
|
-
types,
|
|
1177
|
-
true
|
|
1178
|
-
).toString('hex');
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1182
|
-
domain_separator_hash: domainSeparatorHash,
|
|
1183
|
-
message_hash: messageHash,
|
|
1184
|
-
...data,
|
|
1185
|
-
};
|
|
1186
|
-
};
|
|
1187
|
-
|
|
1188
|
-
private getEvmAddressAndPubKey = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1189
|
-
accountIndex,
|
|
1190
|
-
}: {
|
|
1191
|
-
accountIndex: number;
|
|
1192
|
-
}) => {
|
|
1193
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath('eth', accountIndex, 60);</span>
|
|
1194
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1195
|
-
const { address, publicKey } = <span class="cstat-no" title="statement not covered" >await this.ledgerEVMClient.getAddress(</span>
|
|
1196
|
-
this.hdPath
|
|
1197
|
-
);
|
|
1198
|
-
<span class="cstat-no" title="statement not covered" > return { address, publicKey: `0x${publicKey}` };</span>
|
|
1199
|
-
} catch (error) {
|
|
1200
|
-
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1201
|
-
}
|
|
1202
|
-
};
|
|
1203
|
-
|
|
1204
|
-
private signTypedData = <span class="fstat-no" title="function not covered" >async </span>({
|
|
1205
|
-
version,
|
|
1206
|
-
data,
|
|
1207
|
-
accountIndex,
|
|
1208
|
-
}: {
|
|
1209
|
-
accountIndex: number;
|
|
1210
|
-
data: any;
|
|
1211
|
-
version: Version;
|
|
1212
|
-
}) => {
|
|
1213
|
-
<span class="cstat-no" title="statement not covered" > this.setHdPath('eth', accountIndex, 60);</span>
|
|
1214
|
-
const dataWithHashes = <span class="cstat-no" title="statement not covered" >this.transformTypedData(data, version === 'V4');</span>
|
|
1215
|
-
|
|
1216
|
-
const { domain_separator_hash, message_hash } = <span class="cstat-no" title="statement not covered" >dataWithHashes;</span>
|
|
1217
|
-
|
|
1218
|
-
const signature = <span class="cstat-no" title="statement not covered" >await this.ledgerEVMClient.signEIP712HashedMessage(</span>
|
|
1219
|
-
this.hdPath,
|
|
1220
|
-
domain_separator_hash,
|
|
1221
|
-
message_hash ? message_hash : ''
|
|
1222
|
-
);
|
|
1223
|
-
|
|
1224
|
-
<span class="cstat-no" title="statement not covered" > return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;</span>
|
|
1225
|
-
};
|
|
1226
|
-
|
|
1227
|
-
private getMasterFingerprint = <span class="fstat-no" title="function not covered" >async </span>() => {
|
|
1228
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1229
|
-
const masterFingerprint =
|
|
1230
|
-
<span class="cstat-no" title="statement not covered" > await this.ledgerUtxoClient.getMasterFingerprint();</span>
|
|
1231
|
-
<span class="cstat-no" title="statement not covered" > return masterFingerprint;</span>
|
|
1232
|
-
} catch (error) {
|
|
1233
|
-
<span class="cstat-no" title="statement not covered" > console.log('Fingerprint error: ', error);</span>
|
|
1234
|
-
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1235
|
-
}
|
|
1236
|
-
};
|
|
1237
|
-
|
|
1238
|
-
private setHdPath = <span class="fstat-no" title="function not covered" >(c</span>oin: string, accountIndex: number, slip44: number) => {
|
|
1239
|
-
// Use dynamic coin type detection instead of hardcoded checks
|
|
1240
|
-
<span class="cstat-no" title="statement not covered" > if (isEvmCoin(coin, slip44)) {</span>
|
|
1241
|
-
// For EVM, use address-level derivation path
|
|
1242
|
-
<span class="cstat-no" title="statement not covered" > this.hdPath = getAddressDerivationPath(</span>
|
|
1243
|
-
coin,
|
|
1244
|
-
slip44,
|
|
1245
|
-
0,
|
|
1246
|
-
false,
|
|
1247
|
-
accountIndex || 0
|
|
1248
|
-
);
|
|
1249
|
-
} else {
|
|
1250
|
-
// For UTXO, use account-level derivation path
|
|
1251
|
-
<span class="cstat-no" title="statement not covered" > this.hdPath = getAccountDerivationPath(coin, slip44, accountIndex);</span>
|
|
1252
|
-
}
|
|
1253
|
-
};
|
|
1254
|
-
|
|
1255
|
-
// Convert PSBT to Ledger-compatible format by adding bip32Derivation
|
|
1256
|
-
public convertToLedgerFormat = <span class="fstat-no" title="function not covered" >async </span>(
|
|
1257
|
-
psbt: any,
|
|
1258
|
-
accountXpub: string,
|
|
1259
|
-
accountId: number,
|
|
1260
|
-
currency: string,
|
|
1261
|
-
slip44: number
|
|
1262
|
-
): Promise<any> => {
|
|
1263
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1264
|
-
// Create BIP32 node from account xpub
|
|
1265
|
-
const accountNode = <span class="cstat-no" title="statement not covered" >fromBase58(accountXpub);</span>
|
|
1266
|
-
|
|
1267
|
-
// Get master fingerprint
|
|
1268
|
-
const fingerprint = <span class="cstat-no" title="statement not covered" >await this.getMasterFingerprint();</span>
|
|
1269
|
-
|
|
1270
|
-
// Enhance each input with bip32Derivation
|
|
1271
|
-
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < psbt.inputCount; i++) {</span>
|
|
1272
|
-
const dataInput = <span class="cstat-no" title="statement not covered" >psbt.data.inputs[i];</span>
|
|
1273
|
-
|
|
1274
|
-
// Skip if already has bip32Derivation
|
|
1275
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (dataInput.bip32Derivation && dataInput.bip32Derivation.length > 0) {</span>
|
|
1276
|
-
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1277
|
-
}
|
|
1278
|
-
|
|
1279
|
-
// Ensure witnessUtxo is present if nonWitnessUtxo exists
|
|
1280
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!dataInput.witnessUtxo && dataInput.nonWitnessUtxo) {</span>
|
|
1281
|
-
const txBuffer = <span class="cstat-no" title="statement not covered" >dataInput.nonWitnessUtxo;</span>
|
|
1282
|
-
const tx = <span class="cstat-no" title="statement not covered" >Transaction.fromBuffer(txBuffer);</span>
|
|
1283
|
-
const vout = <span class="cstat-no" title="statement not covered" >psbt.txInputs[i].index;</span>
|
|
1284
|
-
|
|
1285
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (tx.outs[vout]) {</span>
|
|
1286
|
-
<span class="cstat-no" title="statement not covered" > dataInput.witnessUtxo = {</span>
|
|
1287
|
-
script: tx.outs[vout].script,
|
|
1288
|
-
value: tx.outs[vout].value,
|
|
1289
|
-
};
|
|
1290
|
-
}
|
|
1291
|
-
}
|
|
1292
|
-
|
|
1293
|
-
// Extract path from unknownKeyVals
|
|
1294
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1295
|
-
dataInput.unknownKeyVals &&
|
|
1296
|
-
dataInput.unknownKeyVals.length > 1 &&
|
|
1297
|
-
dataInput.unknownKeyVals[1].key.equals(Buffer.from('path'))
|
|
1298
|
-
) {
|
|
1299
|
-
const fullPath = <span class="cstat-no" title="statement not covered" >dataInput.unknownKeyVals[1].value.toString();</span>
|
|
1300
|
-
const accountPath = <span class="cstat-no" title="statement not covered" >getAccountDerivationPath(</span>
|
|
1301
|
-
currency,
|
|
1302
|
-
slip44,
|
|
1303
|
-
accountId
|
|
1304
|
-
);
|
|
1305
|
-
const relativePath = <span class="cstat-no" title="statement not covered" >fullPath</span>
|
|
1306
|
-
.replace(accountPath, '')
|
|
1307
|
-
.replace(/^\//, '');
|
|
1308
|
-
const derivationTokens = <span class="cstat-no" title="statement not covered" >relativePath.split('/').filter(<span class="fstat-no" title="function not covered" >(t</span>) => <span class="cstat-no" title="statement not covered" >t)</span>;</span>
|
|
1309
|
-
|
|
1310
|
-
const derivedAccount = <span class="cstat-no" title="statement not covered" >derivationTokens.reduce(</span>
|
|
1311
|
-
<span class="fstat-no" title="function not covered" > (a</span>cc: any, token: string) => {
|
|
1312
|
-
const index = <span class="cstat-no" title="statement not covered" >parseInt(token);</span>
|
|
1313
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(index)) {</span>
|
|
1314
|
-
<span class="cstat-no" title="statement not covered" > return acc;</span>
|
|
1315
|
-
}
|
|
1316
|
-
<span class="cstat-no" title="statement not covered" > return acc.derive(index);</span>
|
|
1317
|
-
},
|
|
1318
|
-
accountNode
|
|
1319
|
-
);
|
|
1320
|
-
|
|
1321
|
-
const pubkey = <span class="cstat-no" title="statement not covered" >derivedAccount.publicKey;</span>
|
|
1322
|
-
|
|
1323
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (pubkey && Buffer.isBuffer(pubkey)) {</span>
|
|
1324
|
-
// Add the bip32Derivation that Ledger needs
|
|
1325
|
-
const bip32Derivation = <span class="cstat-no" title="statement not covered" >{</span>
|
|
1326
|
-
masterFingerprint: Buffer.from(fingerprint, 'hex'),
|
|
1327
|
-
path: fullPath,
|
|
1328
|
-
pubkey: pubkey,
|
|
1329
|
-
};
|
|
1330
|
-
|
|
1331
|
-
<span class="cstat-no" title="statement not covered" > psbt.updateInput(i, {</span>
|
|
1332
|
-
bip32Derivation: [bip32Derivation],
|
|
1333
|
-
});
|
|
1334
|
-
}
|
|
1335
|
-
}
|
|
1336
|
-
}
|
|
1337
|
-
|
|
1338
|
-
<span class="cstat-no" title="statement not covered" > return psbt;</span>
|
|
1339
|
-
} catch (error) {
|
|
1340
|
-
<span class="cstat-no" title="statement not covered" > console.error('Error converting PSBT to Ledger format:', error);</span>
|
|
1341
|
-
// Return original PSBT if conversion fails
|
|
1342
|
-
<span class="cstat-no" title="statement not covered" > return psbt;</span>
|
|
1343
|
-
}
|
|
1344
|
-
};
|
|
1345
|
-
}
|
|
1346
|
-
</pre></td></tr></table></pre>
|
|
1347
|
-
|
|
1348
|
-
<div class="push"></div>
|
|
1349
|
-
<!-- for sticky footer -->
|
|
1350
|
-
</div>
|
|
1351
|
-
<!-- /wrapper -->
|
|
1352
|
-
<div class="footer quiet pad2 space-top1 center small">
|
|
1353
|
-
Code coverage generated by
|
|
1354
|
-
<a
|
|
1355
|
-
href="https://istanbul.js.org/"
|
|
1356
|
-
target="_blank"
|
|
1357
|
-
rel="noopener noreferrer"
|
|
1358
|
-
>istanbul</a
|
|
1359
|
-
>
|
|
1360
|
-
at 2025-06-20T17:45:56.456Z
|
|
1361
|
-
</div>
|
|
1362
|
-
<script src="../../prettify.js"></script>
|
|
1363
|
-
<script>
|
|
1364
|
-
window.onload = function () {
|
|
1365
|
-
prettyPrint();
|
|
1366
|
-
};
|
|
1367
|
-
</script>
|
|
1368
|
-
<script src="../../sorter.js"></script>
|
|
1369
|
-
<script src="../../block-navigation.js"></script>
|
|
1370
|
-
</body>
|
|
1371
|
-
</html>
|