bsv-bap 0.0.1 → 0.0.3
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/dist/api.d.ts +10 -0
- package/dist/apiTypes.d.ts +36 -0
- package/dist/{src/constants.d.ts → constants.d.ts} +2 -2
- package/dist/{src/id.d.ts → id.d.ts} +13 -32
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +234 -0
- package/dist/index.modern.js +2 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/index.module.js +2 -0
- package/dist/index.module.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/{src/interface.d.ts → interface.d.ts} +8 -4
- package/dist/{src/poa.d.ts → poa.d.ts} +1 -1
- package/dist/{src/utils.d.ts → utils.d.ts} +0 -1
- package/package.json +30 -57
- package/.babelrc +0 -20
- package/.eslintrc +0 -46
- package/babel.config.js +0 -6
- package/bun.lockb +0 -0
- package/coverage/clover.xml +0 -6
- package/coverage/coverage-final.json +0 -1
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -101
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/src/constants.ts.html +0 -113
- package/coverage/lcov-report/src/id.ts.html +0 -2207
- package/coverage/lcov-report/src/index.html +0 -156
- package/coverage/lcov-report/src/index.ts.html +0 -1877
- package/coverage/lcov-report/src/utils.ts.html +0 -404
- package/coverage/lcov-report/tests/data/index.html +0 -111
- package/coverage/lcov-report/tests/data/keys.js.html +0 -86
- package/coverage/lcov.info +0 -0
- package/dist/jest.config.d.ts +0 -8
- package/dist/src/index.d.ts +0 -238
- package/dist/typescript-npm-package.cjs.d.ts +0 -554
- package/dist/typescript-npm-package.cjs.js +0 -1320
- package/dist/typescript-npm-package.cjs.js.map +0 -1
- package/dist/typescript-npm-package.esm.d.ts +0 -554
- package/dist/typescript-npm-package.esm.js +0 -1312
- package/dist/typescript-npm-package.esm.js.map +0 -1
- package/dist/typescript-npm-package.umd.d.ts +0 -554
- package/dist/typescript-npm-package.umd.js +0 -110193
- package/dist/typescript-npm-package.umd.js.map +0 -1
- package/jest.config.ts +0 -196
- package/jsdoc.json +0 -16
- package/rollup.config.js +0 -64
- package/setup-jest.js +0 -1
- package/src/README.md +0 -80
- package/src/attributes.json +0 -119
- package/src/constants.ts +0 -11
- package/src/id.ts +0 -783
- package/src/index.ts +0 -631
- package/src/interface.ts +0 -26
- package/src/poa.ts +0 -9
- package/src/utils.ts +0 -111
- package/tests/data/ids.json +0 -30
- package/tests/data/keys.js +0 -2
- package/tests/data/old-ids.json +0 -25
- package/tests/data/test-vectors.json +0 -122
- package/tests/id.test.js +0 -286
- package/tests/index.test.js +0 -335
- package/tests/regression.test.js +0 -28
- package/tests/utils.test.js +0 -27
- package/tsconfig.json +0 -17
@@ -1,2207 +0,0 @@
|
|
1
|
-
|
2
|
-
<!doctype html>
|
3
|
-
<html lang="en">
|
4
|
-
|
5
|
-
<head>
|
6
|
-
<title>Code coverage report for src/id.ts</title>
|
7
|
-
<meta charset="utf-8" />
|
8
|
-
<link rel="stylesheet" href="../prettify.css" />
|
9
|
-
<link rel="stylesheet" href="../base.css" />
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
12
|
-
<style type='text/css'>
|
13
|
-
.coverage-summary .sorter {
|
14
|
-
background-image: url(../sort-arrow-sprite.png);
|
15
|
-
}
|
16
|
-
</style>
|
17
|
-
</head>
|
18
|
-
|
19
|
-
<body>
|
20
|
-
<div class='wrapper'>
|
21
|
-
<div class='pad1'>
|
22
|
-
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> id.ts</h1>
|
23
|
-
<div class='clearfix'>
|
24
|
-
|
25
|
-
<div class='fl pad1y space-right2'>
|
26
|
-
<span class="strong">7.98% </span>
|
27
|
-
<span class="quiet">Statements</span>
|
28
|
-
<span class='fraction'>15/188</span>
|
29
|
-
</div>
|
30
|
-
|
31
|
-
|
32
|
-
<div class='fl pad1y space-right2'>
|
33
|
-
<span class="strong">4.88% </span>
|
34
|
-
<span class="quiet">Branches</span>
|
35
|
-
<span class='fraction'>4/82</span>
|
36
|
-
</div>
|
37
|
-
|
38
|
-
|
39
|
-
<div class='fl pad1y space-right2'>
|
40
|
-
<span class="strong">3.92% </span>
|
41
|
-
<span class="quiet">Functions</span>
|
42
|
-
<span class='fraction'>2/51</span>
|
43
|
-
</div>
|
44
|
-
|
45
|
-
|
46
|
-
<div class='fl pad1y space-right2'>
|
47
|
-
<span class="strong">8.02% </span>
|
48
|
-
<span class="quiet">Lines</span>
|
49
|
-
<span class='fraction'>15/187</span>
|
50
|
-
</div>
|
51
|
-
|
52
|
-
|
53
|
-
</div>
|
54
|
-
<p class="quiet">
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
56
|
-
</p>
|
57
|
-
</div>
|
58
|
-
<div class='status-line low'></div>
|
59
|
-
<pre><table class="coverage">
|
60
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
61
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
62
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
63
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
64
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
65
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
66
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
67
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
68
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
69
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
70
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
71
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
72
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
73
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
74
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
75
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
76
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
77
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
78
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
79
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
80
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
81
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
82
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
83
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
84
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
85
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
86
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
87
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
88
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
89
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
90
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
91
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
92
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
93
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
94
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
95
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
96
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
97
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
98
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
99
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
100
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
101
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
102
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
103
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
104
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
105
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
106
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
107
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
108
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
109
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
110
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
111
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
112
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
113
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
114
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
115
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
116
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
117
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
118
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
119
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
120
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
121
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
122
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
123
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
124
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
125
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
126
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
127
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
128
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
129
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
130
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
131
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
132
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
133
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
134
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
135
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
136
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
137
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
138
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
139
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
140
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
141
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
142
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
143
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
144
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
145
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
146
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
147
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
148
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
149
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
150
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
151
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
152
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
153
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
154
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
155
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
156
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
157
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
158
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
159
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
160
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
161
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
162
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
163
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
164
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
165
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
166
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
167
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
168
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
169
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
170
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
171
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
172
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
173
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
174
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
175
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
176
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
177
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
178
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
179
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
180
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
181
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
182
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
183
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
184
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
185
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
186
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
187
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
188
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
189
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
190
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
191
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
192
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
193
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
194
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
195
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
196
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
197
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
198
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
199
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
200
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
201
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
202
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
203
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
204
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
205
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
206
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
207
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
208
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
209
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
210
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
211
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
212
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
213
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
214
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
215
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
216
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
217
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
218
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
219
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
220
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
221
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
222
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
223
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
224
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
225
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
226
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
227
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
228
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
229
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
230
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
231
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
232
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
233
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
234
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
235
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
236
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
237
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
238
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
239
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
240
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
241
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
242
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
243
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
244
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
245
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
246
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
247
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
248
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
249
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
250
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
251
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
252
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
253
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
254
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
255
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
256
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
257
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
258
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
259
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
260
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
261
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
262
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
263
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
264
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
265
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
266
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
267
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
268
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
269
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
270
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
271
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
272
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
273
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
274
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
275
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
276
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
277
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
278
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
279
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
280
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
281
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
282
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
283
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
284
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
285
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
286
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
287
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
288
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
289
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
290
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
291
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
292
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
293
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
294
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
295
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
296
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
297
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
298
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
299
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
300
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
301
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
302
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
303
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
304
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
305
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
306
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
307
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
308
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
309
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
310
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
311
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
312
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
313
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
314
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
315
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
316
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
317
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
318
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
319
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
320
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
321
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
322
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
323
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
324
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
325
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
326
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
327
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
328
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
329
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
330
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
331
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
332
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
333
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
334
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
335
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
336
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
337
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
338
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
339
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
340
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
341
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
342
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
343
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
344
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
345
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
346
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
347
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
348
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
349
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
350
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
351
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
352
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
353
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
354
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
355
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
356
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
357
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
358
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
359
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
360
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
361
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
362
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
363
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
364
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
365
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
366
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
367
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
368
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
369
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
370
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
371
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
372
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
373
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
374
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
375
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
376
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
377
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
378
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
379
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
380
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
381
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
382
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
383
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
384
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
385
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
386
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
387
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
388
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
389
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
390
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
391
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
392
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
393
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
394
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
395
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
396
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
397
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
398
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
399
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
400
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
401
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
402
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
403
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
404
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
405
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
406
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
407
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
408
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
409
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
410
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
411
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
412
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
413
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
414
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
415
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
416
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
417
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
418
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
419
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
420
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
421
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
422
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
423
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
424
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
425
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
426
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
427
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
428
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
429
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
430
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
431
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
432
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
433
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
434
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
435
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
436
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
437
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
438
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
439
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
440
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
441
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
442
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
443
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
444
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
445
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
446
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
447
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
448
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
449
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
450
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
451
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
452
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
453
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
454
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
455
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
456
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
457
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
458
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
459
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
460
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
461
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
462
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
463
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
464
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
465
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
466
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
467
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
468
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
469
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
470
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
471
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
472
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
473
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
474
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
475
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
476
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
477
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
478
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
479
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
480
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
481
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
482
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
483
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
484
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
485
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
486
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
487
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
488
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
489
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
490
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
491
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
492
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
493
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
494
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
495
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
496
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
497
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
498
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
499
|
-
<a name='L440'></a><a href='#L440'>440</a>
|
500
|
-
<a name='L441'></a><a href='#L441'>441</a>
|
501
|
-
<a name='L442'></a><a href='#L442'>442</a>
|
502
|
-
<a name='L443'></a><a href='#L443'>443</a>
|
503
|
-
<a name='L444'></a><a href='#L444'>444</a>
|
504
|
-
<a name='L445'></a><a href='#L445'>445</a>
|
505
|
-
<a name='L446'></a><a href='#L446'>446</a>
|
506
|
-
<a name='L447'></a><a href='#L447'>447</a>
|
507
|
-
<a name='L448'></a><a href='#L448'>448</a>
|
508
|
-
<a name='L449'></a><a href='#L449'>449</a>
|
509
|
-
<a name='L450'></a><a href='#L450'>450</a>
|
510
|
-
<a name='L451'></a><a href='#L451'>451</a>
|
511
|
-
<a name='L452'></a><a href='#L452'>452</a>
|
512
|
-
<a name='L453'></a><a href='#L453'>453</a>
|
513
|
-
<a name='L454'></a><a href='#L454'>454</a>
|
514
|
-
<a name='L455'></a><a href='#L455'>455</a>
|
515
|
-
<a name='L456'></a><a href='#L456'>456</a>
|
516
|
-
<a name='L457'></a><a href='#L457'>457</a>
|
517
|
-
<a name='L458'></a><a href='#L458'>458</a>
|
518
|
-
<a name='L459'></a><a href='#L459'>459</a>
|
519
|
-
<a name='L460'></a><a href='#L460'>460</a>
|
520
|
-
<a name='L461'></a><a href='#L461'>461</a>
|
521
|
-
<a name='L462'></a><a href='#L462'>462</a>
|
522
|
-
<a name='L463'></a><a href='#L463'>463</a>
|
523
|
-
<a name='L464'></a><a href='#L464'>464</a>
|
524
|
-
<a name='L465'></a><a href='#L465'>465</a>
|
525
|
-
<a name='L466'></a><a href='#L466'>466</a>
|
526
|
-
<a name='L467'></a><a href='#L467'>467</a>
|
527
|
-
<a name='L468'></a><a href='#L468'>468</a>
|
528
|
-
<a name='L469'></a><a href='#L469'>469</a>
|
529
|
-
<a name='L470'></a><a href='#L470'>470</a>
|
530
|
-
<a name='L471'></a><a href='#L471'>471</a>
|
531
|
-
<a name='L472'></a><a href='#L472'>472</a>
|
532
|
-
<a name='L473'></a><a href='#L473'>473</a>
|
533
|
-
<a name='L474'></a><a href='#L474'>474</a>
|
534
|
-
<a name='L475'></a><a href='#L475'>475</a>
|
535
|
-
<a name='L476'></a><a href='#L476'>476</a>
|
536
|
-
<a name='L477'></a><a href='#L477'>477</a>
|
537
|
-
<a name='L478'></a><a href='#L478'>478</a>
|
538
|
-
<a name='L479'></a><a href='#L479'>479</a>
|
539
|
-
<a name='L480'></a><a href='#L480'>480</a>
|
540
|
-
<a name='L481'></a><a href='#L481'>481</a>
|
541
|
-
<a name='L482'></a><a href='#L482'>482</a>
|
542
|
-
<a name='L483'></a><a href='#L483'>483</a>
|
543
|
-
<a name='L484'></a><a href='#L484'>484</a>
|
544
|
-
<a name='L485'></a><a href='#L485'>485</a>
|
545
|
-
<a name='L486'></a><a href='#L486'>486</a>
|
546
|
-
<a name='L487'></a><a href='#L487'>487</a>
|
547
|
-
<a name='L488'></a><a href='#L488'>488</a>
|
548
|
-
<a name='L489'></a><a href='#L489'>489</a>
|
549
|
-
<a name='L490'></a><a href='#L490'>490</a>
|
550
|
-
<a name='L491'></a><a href='#L491'>491</a>
|
551
|
-
<a name='L492'></a><a href='#L492'>492</a>
|
552
|
-
<a name='L493'></a><a href='#L493'>493</a>
|
553
|
-
<a name='L494'></a><a href='#L494'>494</a>
|
554
|
-
<a name='L495'></a><a href='#L495'>495</a>
|
555
|
-
<a name='L496'></a><a href='#L496'>496</a>
|
556
|
-
<a name='L497'></a><a href='#L497'>497</a>
|
557
|
-
<a name='L498'></a><a href='#L498'>498</a>
|
558
|
-
<a name='L499'></a><a href='#L499'>499</a>
|
559
|
-
<a name='L500'></a><a href='#L500'>500</a>
|
560
|
-
<a name='L501'></a><a href='#L501'>501</a>
|
561
|
-
<a name='L502'></a><a href='#L502'>502</a>
|
562
|
-
<a name='L503'></a><a href='#L503'>503</a>
|
563
|
-
<a name='L504'></a><a href='#L504'>504</a>
|
564
|
-
<a name='L505'></a><a href='#L505'>505</a>
|
565
|
-
<a name='L506'></a><a href='#L506'>506</a>
|
566
|
-
<a name='L507'></a><a href='#L507'>507</a>
|
567
|
-
<a name='L508'></a><a href='#L508'>508</a>
|
568
|
-
<a name='L509'></a><a href='#L509'>509</a>
|
569
|
-
<a name='L510'></a><a href='#L510'>510</a>
|
570
|
-
<a name='L511'></a><a href='#L511'>511</a>
|
571
|
-
<a name='L512'></a><a href='#L512'>512</a>
|
572
|
-
<a name='L513'></a><a href='#L513'>513</a>
|
573
|
-
<a name='L514'></a><a href='#L514'>514</a>
|
574
|
-
<a name='L515'></a><a href='#L515'>515</a>
|
575
|
-
<a name='L516'></a><a href='#L516'>516</a>
|
576
|
-
<a name='L517'></a><a href='#L517'>517</a>
|
577
|
-
<a name='L518'></a><a href='#L518'>518</a>
|
578
|
-
<a name='L519'></a><a href='#L519'>519</a>
|
579
|
-
<a name='L520'></a><a href='#L520'>520</a>
|
580
|
-
<a name='L521'></a><a href='#L521'>521</a>
|
581
|
-
<a name='L522'></a><a href='#L522'>522</a>
|
582
|
-
<a name='L523'></a><a href='#L523'>523</a>
|
583
|
-
<a name='L524'></a><a href='#L524'>524</a>
|
584
|
-
<a name='L525'></a><a href='#L525'>525</a>
|
585
|
-
<a name='L526'></a><a href='#L526'>526</a>
|
586
|
-
<a name='L527'></a><a href='#L527'>527</a>
|
587
|
-
<a name='L528'></a><a href='#L528'>528</a>
|
588
|
-
<a name='L529'></a><a href='#L529'>529</a>
|
589
|
-
<a name='L530'></a><a href='#L530'>530</a>
|
590
|
-
<a name='L531'></a><a href='#L531'>531</a>
|
591
|
-
<a name='L532'></a><a href='#L532'>532</a>
|
592
|
-
<a name='L533'></a><a href='#L533'>533</a>
|
593
|
-
<a name='L534'></a><a href='#L534'>534</a>
|
594
|
-
<a name='L535'></a><a href='#L535'>535</a>
|
595
|
-
<a name='L536'></a><a href='#L536'>536</a>
|
596
|
-
<a name='L537'></a><a href='#L537'>537</a>
|
597
|
-
<a name='L538'></a><a href='#L538'>538</a>
|
598
|
-
<a name='L539'></a><a href='#L539'>539</a>
|
599
|
-
<a name='L540'></a><a href='#L540'>540</a>
|
600
|
-
<a name='L541'></a><a href='#L541'>541</a>
|
601
|
-
<a name='L542'></a><a href='#L542'>542</a>
|
602
|
-
<a name='L543'></a><a href='#L543'>543</a>
|
603
|
-
<a name='L544'></a><a href='#L544'>544</a>
|
604
|
-
<a name='L545'></a><a href='#L545'>545</a>
|
605
|
-
<a name='L546'></a><a href='#L546'>546</a>
|
606
|
-
<a name='L547'></a><a href='#L547'>547</a>
|
607
|
-
<a name='L548'></a><a href='#L548'>548</a>
|
608
|
-
<a name='L549'></a><a href='#L549'>549</a>
|
609
|
-
<a name='L550'></a><a href='#L550'>550</a>
|
610
|
-
<a name='L551'></a><a href='#L551'>551</a>
|
611
|
-
<a name='L552'></a><a href='#L552'>552</a>
|
612
|
-
<a name='L553'></a><a href='#L553'>553</a>
|
613
|
-
<a name='L554'></a><a href='#L554'>554</a>
|
614
|
-
<a name='L555'></a><a href='#L555'>555</a>
|
615
|
-
<a name='L556'></a><a href='#L556'>556</a>
|
616
|
-
<a name='L557'></a><a href='#L557'>557</a>
|
617
|
-
<a name='L558'></a><a href='#L558'>558</a>
|
618
|
-
<a name='L559'></a><a href='#L559'>559</a>
|
619
|
-
<a name='L560'></a><a href='#L560'>560</a>
|
620
|
-
<a name='L561'></a><a href='#L561'>561</a>
|
621
|
-
<a name='L562'></a><a href='#L562'>562</a>
|
622
|
-
<a name='L563'></a><a href='#L563'>563</a>
|
623
|
-
<a name='L564'></a><a href='#L564'>564</a>
|
624
|
-
<a name='L565'></a><a href='#L565'>565</a>
|
625
|
-
<a name='L566'></a><a href='#L566'>566</a>
|
626
|
-
<a name='L567'></a><a href='#L567'>567</a>
|
627
|
-
<a name='L568'></a><a href='#L568'>568</a>
|
628
|
-
<a name='L569'></a><a href='#L569'>569</a>
|
629
|
-
<a name='L570'></a><a href='#L570'>570</a>
|
630
|
-
<a name='L571'></a><a href='#L571'>571</a>
|
631
|
-
<a name='L572'></a><a href='#L572'>572</a>
|
632
|
-
<a name='L573'></a><a href='#L573'>573</a>
|
633
|
-
<a name='L574'></a><a href='#L574'>574</a>
|
634
|
-
<a name='L575'></a><a href='#L575'>575</a>
|
635
|
-
<a name='L576'></a><a href='#L576'>576</a>
|
636
|
-
<a name='L577'></a><a href='#L577'>577</a>
|
637
|
-
<a name='L578'></a><a href='#L578'>578</a>
|
638
|
-
<a name='L579'></a><a href='#L579'>579</a>
|
639
|
-
<a name='L580'></a><a href='#L580'>580</a>
|
640
|
-
<a name='L581'></a><a href='#L581'>581</a>
|
641
|
-
<a name='L582'></a><a href='#L582'>582</a>
|
642
|
-
<a name='L583'></a><a href='#L583'>583</a>
|
643
|
-
<a name='L584'></a><a href='#L584'>584</a>
|
644
|
-
<a name='L585'></a><a href='#L585'>585</a>
|
645
|
-
<a name='L586'></a><a href='#L586'>586</a>
|
646
|
-
<a name='L587'></a><a href='#L587'>587</a>
|
647
|
-
<a name='L588'></a><a href='#L588'>588</a>
|
648
|
-
<a name='L589'></a><a href='#L589'>589</a>
|
649
|
-
<a name='L590'></a><a href='#L590'>590</a>
|
650
|
-
<a name='L591'></a><a href='#L591'>591</a>
|
651
|
-
<a name='L592'></a><a href='#L592'>592</a>
|
652
|
-
<a name='L593'></a><a href='#L593'>593</a>
|
653
|
-
<a name='L594'></a><a href='#L594'>594</a>
|
654
|
-
<a name='L595'></a><a href='#L595'>595</a>
|
655
|
-
<a name='L596'></a><a href='#L596'>596</a>
|
656
|
-
<a name='L597'></a><a href='#L597'>597</a>
|
657
|
-
<a name='L598'></a><a href='#L598'>598</a>
|
658
|
-
<a name='L599'></a><a href='#L599'>599</a>
|
659
|
-
<a name='L600'></a><a href='#L600'>600</a>
|
660
|
-
<a name='L601'></a><a href='#L601'>601</a>
|
661
|
-
<a name='L602'></a><a href='#L602'>602</a>
|
662
|
-
<a name='L603'></a><a href='#L603'>603</a>
|
663
|
-
<a name='L604'></a><a href='#L604'>604</a>
|
664
|
-
<a name='L605'></a><a href='#L605'>605</a>
|
665
|
-
<a name='L606'></a><a href='#L606'>606</a>
|
666
|
-
<a name='L607'></a><a href='#L607'>607</a>
|
667
|
-
<a name='L608'></a><a href='#L608'>608</a>
|
668
|
-
<a name='L609'></a><a href='#L609'>609</a>
|
669
|
-
<a name='L610'></a><a href='#L610'>610</a>
|
670
|
-
<a name='L611'></a><a href='#L611'>611</a>
|
671
|
-
<a name='L612'></a><a href='#L612'>612</a>
|
672
|
-
<a name='L613'></a><a href='#L613'>613</a>
|
673
|
-
<a name='L614'></a><a href='#L614'>614</a>
|
674
|
-
<a name='L615'></a><a href='#L615'>615</a>
|
675
|
-
<a name='L616'></a><a href='#L616'>616</a>
|
676
|
-
<a name='L617'></a><a href='#L617'>617</a>
|
677
|
-
<a name='L618'></a><a href='#L618'>618</a>
|
678
|
-
<a name='L619'></a><a href='#L619'>619</a>
|
679
|
-
<a name='L620'></a><a href='#L620'>620</a>
|
680
|
-
<a name='L621'></a><a href='#L621'>621</a>
|
681
|
-
<a name='L622'></a><a href='#L622'>622</a>
|
682
|
-
<a name='L623'></a><a href='#L623'>623</a>
|
683
|
-
<a name='L624'></a><a href='#L624'>624</a>
|
684
|
-
<a name='L625'></a><a href='#L625'>625</a>
|
685
|
-
<a name='L626'></a><a href='#L626'>626</a>
|
686
|
-
<a name='L627'></a><a href='#L627'>627</a>
|
687
|
-
<a name='L628'></a><a href='#L628'>628</a>
|
688
|
-
<a name='L629'></a><a href='#L629'>629</a>
|
689
|
-
<a name='L630'></a><a href='#L630'>630</a>
|
690
|
-
<a name='L631'></a><a href='#L631'>631</a>
|
691
|
-
<a name='L632'></a><a href='#L632'>632</a>
|
692
|
-
<a name='L633'></a><a href='#L633'>633</a>
|
693
|
-
<a name='L634'></a><a href='#L634'>634</a>
|
694
|
-
<a name='L635'></a><a href='#L635'>635</a>
|
695
|
-
<a name='L636'></a><a href='#L636'>636</a>
|
696
|
-
<a name='L637'></a><a href='#L637'>637</a>
|
697
|
-
<a name='L638'></a><a href='#L638'>638</a>
|
698
|
-
<a name='L639'></a><a href='#L639'>639</a>
|
699
|
-
<a name='L640'></a><a href='#L640'>640</a>
|
700
|
-
<a name='L641'></a><a href='#L641'>641</a>
|
701
|
-
<a name='L642'></a><a href='#L642'>642</a>
|
702
|
-
<a name='L643'></a><a href='#L643'>643</a>
|
703
|
-
<a name='L644'></a><a href='#L644'>644</a>
|
704
|
-
<a name='L645'></a><a href='#L645'>645</a>
|
705
|
-
<a name='L646'></a><a href='#L646'>646</a>
|
706
|
-
<a name='L647'></a><a href='#L647'>647</a>
|
707
|
-
<a name='L648'></a><a href='#L648'>648</a>
|
708
|
-
<a name='L649'></a><a href='#L649'>649</a>
|
709
|
-
<a name='L650'></a><a href='#L650'>650</a>
|
710
|
-
<a name='L651'></a><a href='#L651'>651</a>
|
711
|
-
<a name='L652'></a><a href='#L652'>652</a>
|
712
|
-
<a name='L653'></a><a href='#L653'>653</a>
|
713
|
-
<a name='L654'></a><a href='#L654'>654</a>
|
714
|
-
<a name='L655'></a><a href='#L655'>655</a>
|
715
|
-
<a name='L656'></a><a href='#L656'>656</a>
|
716
|
-
<a name='L657'></a><a href='#L657'>657</a>
|
717
|
-
<a name='L658'></a><a href='#L658'>658</a>
|
718
|
-
<a name='L659'></a><a href='#L659'>659</a>
|
719
|
-
<a name='L660'></a><a href='#L660'>660</a>
|
720
|
-
<a name='L661'></a><a href='#L661'>661</a>
|
721
|
-
<a name='L662'></a><a href='#L662'>662</a>
|
722
|
-
<a name='L663'></a><a href='#L663'>663</a>
|
723
|
-
<a name='L664'></a><a href='#L664'>664</a>
|
724
|
-
<a name='L665'></a><a href='#L665'>665</a>
|
725
|
-
<a name='L666'></a><a href='#L666'>666</a>
|
726
|
-
<a name='L667'></a><a href='#L667'>667</a>
|
727
|
-
<a name='L668'></a><a href='#L668'>668</a>
|
728
|
-
<a name='L669'></a><a href='#L669'>669</a>
|
729
|
-
<a name='L670'></a><a href='#L670'>670</a>
|
730
|
-
<a name='L671'></a><a href='#L671'>671</a>
|
731
|
-
<a name='L672'></a><a href='#L672'>672</a>
|
732
|
-
<a name='L673'></a><a href='#L673'>673</a>
|
733
|
-
<a name='L674'></a><a href='#L674'>674</a>
|
734
|
-
<a name='L675'></a><a href='#L675'>675</a>
|
735
|
-
<a name='L676'></a><a href='#L676'>676</a>
|
736
|
-
<a name='L677'></a><a href='#L677'>677</a>
|
737
|
-
<a name='L678'></a><a href='#L678'>678</a>
|
738
|
-
<a name='L679'></a><a href='#L679'>679</a>
|
739
|
-
<a name='L680'></a><a href='#L680'>680</a>
|
740
|
-
<a name='L681'></a><a href='#L681'>681</a>
|
741
|
-
<a name='L682'></a><a href='#L682'>682</a>
|
742
|
-
<a name='L683'></a><a href='#L683'>683</a>
|
743
|
-
<a name='L684'></a><a href='#L684'>684</a>
|
744
|
-
<a name='L685'></a><a href='#L685'>685</a>
|
745
|
-
<a name='L686'></a><a href='#L686'>686</a>
|
746
|
-
<a name='L687'></a><a href='#L687'>687</a>
|
747
|
-
<a name='L688'></a><a href='#L688'>688</a>
|
748
|
-
<a name='L689'></a><a href='#L689'>689</a>
|
749
|
-
<a name='L690'></a><a href='#L690'>690</a>
|
750
|
-
<a name='L691'></a><a href='#L691'>691</a>
|
751
|
-
<a name='L692'></a><a href='#L692'>692</a>
|
752
|
-
<a name='L693'></a><a href='#L693'>693</a>
|
753
|
-
<a name='L694'></a><a href='#L694'>694</a>
|
754
|
-
<a name='L695'></a><a href='#L695'>695</a>
|
755
|
-
<a name='L696'></a><a href='#L696'>696</a>
|
756
|
-
<a name='L697'></a><a href='#L697'>697</a>
|
757
|
-
<a name='L698'></a><a href='#L698'>698</a>
|
758
|
-
<a name='L699'></a><a href='#L699'>699</a>
|
759
|
-
<a name='L700'></a><a href='#L700'>700</a>
|
760
|
-
<a name='L701'></a><a href='#L701'>701</a>
|
761
|
-
<a name='L702'></a><a href='#L702'>702</a>
|
762
|
-
<a name='L703'></a><a href='#L703'>703</a>
|
763
|
-
<a name='L704'></a><a href='#L704'>704</a>
|
764
|
-
<a name='L705'></a><a href='#L705'>705</a>
|
765
|
-
<a name='L706'></a><a href='#L706'>706</a>
|
766
|
-
<a name='L707'></a><a href='#L707'>707</a>
|
767
|
-
<a name='L708'></a><a href='#L708'>708</a>
|
768
|
-
<a name='L709'></a><a href='#L709'>709</a>
|
769
|
-
<a name='L710'></a><a href='#L710'>710</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
770
|
-
<span class="cline-any cline-neutral"> </span>
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
772
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </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-neutral"> </span>
|
786
|
-
<span class="cline-any cline-neutral"> </span>
|
787
|
-
<span class="cline-any cline-neutral"> </span>
|
788
|
-
<span class="cline-any cline-yes">32x</span>
|
789
|
-
<span class="cline-any cline-yes">32x</span>
|
790
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
797
|
-
<span class="cline-any cline-neutral"> </span>
|
798
|
-
<span class="cline-any cline-neutral"> </span>
|
799
|
-
<span class="cline-any cline-neutral"> </span>
|
800
|
-
<span class="cline-any cline-neutral"> </span>
|
801
|
-
<span class="cline-any cline-neutral"> </span>
|
802
|
-
<span class="cline-any cline-neutral"> </span>
|
803
|
-
<span class="cline-any cline-yes">32x</span>
|
804
|
-
<span class="cline-any cline-yes">32x</span>
|
805
|
-
<span class="cline-any cline-neutral"> </span>
|
806
|
-
<span class="cline-any cline-yes">1x</span>
|
807
|
-
<span class="cline-any cline-no"> </span>
|
808
|
-
<span class="cline-any cline-no"> </span>
|
809
|
-
<span class="cline-any cline-neutral"> </span>
|
810
|
-
<span class="cline-any cline-yes">31x</span>
|
811
|
-
<span class="cline-any cline-neutral"> </span>
|
812
|
-
<span class="cline-any cline-neutral"> </span>
|
813
|
-
<span class="cline-any cline-yes">31x</span>
|
814
|
-
<span class="cline-any cline-yes">31x</span>
|
815
|
-
<span class="cline-any cline-neutral"> </span>
|
816
|
-
<span class="cline-any cline-yes">31x</span>
|
817
|
-
<span class="cline-any cline-yes">31x</span>
|
818
|
-
<span class="cline-any cline-yes">31x</span>
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
820
|
-
<span class="cline-any cline-yes">31x</span>
|
821
|
-
<span class="cline-any cline-yes">31x</span>
|
822
|
-
<span class="cline-any cline-yes">31x</span>
|
823
|
-
<span class="cline-any cline-neutral"> </span>
|
824
|
-
<span class="cline-any cline-neutral"> </span>
|
825
|
-
<span class="cline-any cline-no"> </span>
|
826
|
-
<span class="cline-any cline-no"> </span>
|
827
|
-
<span class="cline-any cline-neutral"> </span>
|
828
|
-
<span class="cline-any cline-neutral"> </span>
|
829
|
-
<span class="cline-any cline-neutral"> </span>
|
830
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
835
|
-
<span class="cline-any cline-neutral"> </span>
|
836
|
-
<span class="cline-any cline-neutral"> </span>
|
837
|
-
<span class="cline-any cline-neutral"> </span>
|
838
|
-
<span class="cline-any cline-no"> </span>
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
840
|
-
<span class="cline-any cline-neutral"> </span>
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
842
|
-
<span class="cline-any cline-no"> </span>
|
843
|
-
<span class="cline-any cline-neutral"> </span>
|
844
|
-
<span class="cline-any cline-neutral"> </span>
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
846
|
-
<span class="cline-any cline-yes">31x</span>
|
847
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
853
|
-
<span class="cline-any cline-neutral"> </span>
|
854
|
-
<span class="cline-any cline-neutral"> </span>
|
855
|
-
<span class="cline-any cline-neutral"> </span>
|
856
|
-
<span class="cline-any cline-neutral"> </span>
|
857
|
-
<span class="cline-any cline-neutral"> </span>
|
858
|
-
<span class="cline-any cline-no"> </span>
|
859
|
-
<span class="cline-any cline-no"> </span>
|
860
|
-
<span class="cline-any cline-neutral"> </span>
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
862
|
-
<span class="cline-any cline-no"> </span>
|
863
|
-
<span class="cline-any cline-no"> </span>
|
864
|
-
<span class="cline-any cline-neutral"> </span>
|
865
|
-
<span class="cline-any cline-neutral"> </span>
|
866
|
-
<span class="cline-any cline-neutral"> </span>
|
867
|
-
<span class="cline-any cline-no"> </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-neutral"> </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-neutral"> </span>
|
878
|
-
<span class="cline-any cline-neutral"> </span>
|
879
|
-
<span class="cline-any cline-neutral"> </span>
|
880
|
-
<span class="cline-any cline-neutral"> </span>
|
881
|
-
<span class="cline-any cline-neutral"> </span>
|
882
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
887
|
-
<span class="cline-any cline-neutral"> </span>
|
888
|
-
<span class="cline-any cline-neutral"> </span>
|
889
|
-
<span class="cline-any cline-no"> </span>
|
890
|
-
<span class="cline-any cline-no"> </span>
|
891
|
-
<span class="cline-any cline-no"> </span>
|
892
|
-
<span class="cline-any cline-no"> </span>
|
893
|
-
<span class="cline-any cline-neutral"> </span>
|
894
|
-
<span class="cline-any cline-neutral"> </span>
|
895
|
-
<span class="cline-any cline-neutral"> </span>
|
896
|
-
<span class="cline-any cline-neutral"> </span>
|
897
|
-
<span class="cline-any cline-neutral"> </span>
|
898
|
-
<span class="cline-any cline-neutral"> </span>
|
899
|
-
<span class="cline-any cline-no"> </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-neutral"> </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-no"> </span>
|
909
|
-
<span class="cline-any cline-neutral"> </span>
|
910
|
-
<span class="cline-any cline-neutral"> </span>
|
911
|
-
<span class="cline-any cline-neutral"> </span>
|
912
|
-
<span class="cline-any cline-neutral"> </span>
|
913
|
-
<span class="cline-any cline-neutral"> </span>
|
914
|
-
<span class="cline-any cline-neutral"> </span>
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
916
|
-
<span class="cline-any cline-neutral"> </span>
|
917
|
-
<span class="cline-any cline-no"> </span>
|
918
|
-
<span class="cline-any cline-neutral"> </span>
|
919
|
-
<span class="cline-any cline-neutral"> </span>
|
920
|
-
<span class="cline-any cline-neutral"> </span>
|
921
|
-
<span class="cline-any cline-neutral"> </span>
|
922
|
-
<span class="cline-any cline-neutral"> </span>
|
923
|
-
<span class="cline-any cline-neutral"> </span>
|
924
|
-
<span class="cline-any cline-neutral"> </span>
|
925
|
-
<span class="cline-any cline-neutral"> </span>
|
926
|
-
<span class="cline-any cline-neutral"> </span>
|
927
|
-
<span class="cline-any cline-no"> </span>
|
928
|
-
<span class="cline-any cline-no"> </span>
|
929
|
-
<span class="cline-any cline-neutral"> </span>
|
930
|
-
<span class="cline-any cline-neutral"> </span>
|
931
|
-
<span class="cline-any cline-no"> </span>
|
932
|
-
<span class="cline-any cline-neutral"> </span>
|
933
|
-
<span class="cline-any cline-neutral"> </span>
|
934
|
-
<span class="cline-any cline-neutral"> </span>
|
935
|
-
<span class="cline-any cline-neutral"> </span>
|
936
|
-
<span class="cline-any cline-neutral"> </span>
|
937
|
-
<span class="cline-any cline-neutral"> </span>
|
938
|
-
<span class="cline-any cline-neutral"> </span>
|
939
|
-
<span class="cline-any cline-neutral"> </span>
|
940
|
-
<span class="cline-any cline-neutral"> </span>
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
942
|
-
<span class="cline-any cline-neutral"> </span>
|
943
|
-
<span class="cline-any cline-neutral"> </span>
|
944
|
-
<span class="cline-any cline-no"> </span>
|
945
|
-
<span class="cline-any cline-no"> </span>
|
946
|
-
<span class="cline-any cline-no"> </span>
|
947
|
-
<span class="cline-any cline-neutral"> </span>
|
948
|
-
<span class="cline-any cline-no"> </span>
|
949
|
-
<span class="cline-any cline-neutral"> </span>
|
950
|
-
<span class="cline-any cline-neutral"> </span>
|
951
|
-
<span class="cline-any cline-neutral"> </span>
|
952
|
-
<span class="cline-any cline-neutral"> </span>
|
953
|
-
<span class="cline-any cline-neutral"> </span>
|
954
|
-
<span class="cline-any cline-neutral"> </span>
|
955
|
-
<span class="cline-any cline-neutral"> </span>
|
956
|
-
<span class="cline-any cline-neutral"> </span>
|
957
|
-
<span class="cline-any cline-neutral"> </span>
|
958
|
-
<span class="cline-any cline-neutral"> </span>
|
959
|
-
<span class="cline-any cline-neutral"> </span>
|
960
|
-
<span class="cline-any cline-no"> </span>
|
961
|
-
<span class="cline-any cline-neutral"> </span>
|
962
|
-
<span class="cline-any cline-neutral"> </span>
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
964
|
-
<span class="cline-any cline-neutral"> </span>
|
965
|
-
<span class="cline-any cline-neutral"> </span>
|
966
|
-
<span class="cline-any cline-neutral"> </span>
|
967
|
-
<span class="cline-any cline-neutral"> </span>
|
968
|
-
<span class="cline-any cline-neutral"> </span>
|
969
|
-
<span class="cline-any cline-no"> </span>
|
970
|
-
<span class="cline-any cline-no"> </span>
|
971
|
-
<span class="cline-any cline-neutral"> </span>
|
972
|
-
<span class="cline-any cline-no"> </span>
|
973
|
-
<span class="cline-any cline-no"> </span>
|
974
|
-
<span class="cline-any cline-no"> </span>
|
975
|
-
<span class="cline-any cline-neutral"> </span>
|
976
|
-
<span class="cline-any cline-neutral"> </span>
|
977
|
-
<span class="cline-any cline-neutral"> </span>
|
978
|
-
<span class="cline-any cline-no"> </span>
|
979
|
-
<span class="cline-any cline-neutral"> </span>
|
980
|
-
<span class="cline-any cline-neutral"> </span>
|
981
|
-
<span class="cline-any cline-neutral"> </span>
|
982
|
-
<span class="cline-any cline-neutral"> </span>
|
983
|
-
<span class="cline-any cline-neutral"> </span>
|
984
|
-
<span class="cline-any cline-neutral"> </span>
|
985
|
-
<span class="cline-any cline-neutral"> </span>
|
986
|
-
<span class="cline-any cline-neutral"> </span>
|
987
|
-
<span class="cline-any cline-neutral"> </span>
|
988
|
-
<span class="cline-any cline-no"> </span>
|
989
|
-
<span class="cline-any cline-no"> </span>
|
990
|
-
<span class="cline-any cline-no"> </span>
|
991
|
-
<span class="cline-any cline-neutral"> </span>
|
992
|
-
<span class="cline-any cline-neutral"> </span>
|
993
|
-
<span class="cline-any cline-no"> </span>
|
994
|
-
<span class="cline-any cline-neutral"> </span>
|
995
|
-
<span class="cline-any cline-neutral"> </span>
|
996
|
-
<span class="cline-any cline-neutral"> </span>
|
997
|
-
<span class="cline-any cline-neutral"> </span>
|
998
|
-
<span class="cline-any cline-neutral"> </span>
|
999
|
-
<span class="cline-any cline-neutral"> </span>
|
1000
|
-
<span class="cline-any cline-neutral"> </span>
|
1001
|
-
<span class="cline-any cline-neutral"> </span>
|
1002
|
-
<span class="cline-any cline-neutral"> </span>
|
1003
|
-
<span class="cline-any cline-neutral"> </span>
|
1004
|
-
<span class="cline-any cline-no"> </span>
|
1005
|
-
<span class="cline-any cline-no"> </span>
|
1006
|
-
<span class="cline-any cline-neutral"> </span>
|
1007
|
-
<span class="cline-any cline-neutral"> </span>
|
1008
|
-
<span class="cline-any cline-no"> </span>
|
1009
|
-
<span class="cline-any cline-neutral"> </span>
|
1010
|
-
<span class="cline-any cline-neutral"> </span>
|
1011
|
-
<span class="cline-any cline-neutral"> </span>
|
1012
|
-
<span class="cline-any cline-neutral"> </span>
|
1013
|
-
<span class="cline-any cline-neutral"> </span>
|
1014
|
-
<span class="cline-any cline-neutral"> </span>
|
1015
|
-
<span class="cline-any cline-neutral"> </span>
|
1016
|
-
<span class="cline-any cline-neutral"> </span>
|
1017
|
-
<span class="cline-any cline-neutral"> </span>
|
1018
|
-
<span class="cline-any cline-neutral"> </span>
|
1019
|
-
<span class="cline-any cline-neutral"> </span>
|
1020
|
-
<span class="cline-any cline-neutral"> </span>
|
1021
|
-
<span class="cline-any cline-no"> </span>
|
1022
|
-
<span class="cline-any cline-no"> </span>
|
1023
|
-
<span class="cline-any cline-no"> </span>
|
1024
|
-
<span class="cline-any cline-neutral"> </span>
|
1025
|
-
<span class="cline-any cline-neutral"> </span>
|
1026
|
-
<span class="cline-any cline-no"> </span>
|
1027
|
-
<span class="cline-any cline-no"> </span>
|
1028
|
-
<span class="cline-any cline-neutral"> </span>
|
1029
|
-
<span class="cline-any cline-neutral"> </span>
|
1030
|
-
<span class="cline-any cline-no"> </span>
|
1031
|
-
<span class="cline-any cline-neutral"> </span>
|
1032
|
-
<span class="cline-any cline-no"> </span>
|
1033
|
-
<span class="cline-any cline-no"> </span>
|
1034
|
-
<span class="cline-any cline-neutral"> </span>
|
1035
|
-
<span class="cline-any cline-neutral"> </span>
|
1036
|
-
<span class="cline-any cline-no"> </span>
|
1037
|
-
<span class="cline-any cline-neutral"> </span>
|
1038
|
-
<span class="cline-any cline-neutral"> </span>
|
1039
|
-
<span class="cline-any cline-no"> </span>
|
1040
|
-
<span class="cline-any cline-no"> </span>
|
1041
|
-
<span class="cline-any cline-neutral"> </span>
|
1042
|
-
<span class="cline-any cline-neutral"> </span>
|
1043
|
-
<span class="cline-any cline-neutral"> </span>
|
1044
|
-
<span class="cline-any cline-neutral"> </span>
|
1045
|
-
<span class="cline-any cline-no"> </span>
|
1046
|
-
<span class="cline-any cline-neutral"> </span>
|
1047
|
-
<span class="cline-any cline-neutral"> </span>
|
1048
|
-
<span class="cline-any cline-neutral"> </span>
|
1049
|
-
<span class="cline-any cline-no"> </span>
|
1050
|
-
<span class="cline-any cline-neutral"> </span>
|
1051
|
-
<span class="cline-any cline-neutral"> </span>
|
1052
|
-
<span class="cline-any cline-neutral"> </span>
|
1053
|
-
<span class="cline-any cline-neutral"> </span>
|
1054
|
-
<span class="cline-any cline-neutral"> </span>
|
1055
|
-
<span class="cline-any cline-neutral"> </span>
|
1056
|
-
<span class="cline-any cline-neutral"> </span>
|
1057
|
-
<span class="cline-any cline-neutral"> </span>
|
1058
|
-
<span class="cline-any cline-neutral"> </span>
|
1059
|
-
<span class="cline-any cline-no"> </span>
|
1060
|
-
<span class="cline-any cline-no"> </span>
|
1061
|
-
<span class="cline-any cline-neutral"> </span>
|
1062
|
-
<span class="cline-any cline-neutral"> </span>
|
1063
|
-
<span class="cline-any cline-no"> </span>
|
1064
|
-
<span class="cline-any cline-no"> </span>
|
1065
|
-
<span class="cline-any cline-neutral"> </span>
|
1066
|
-
<span class="cline-any cline-neutral"> </span>
|
1067
|
-
<span class="cline-any cline-no"> </span>
|
1068
|
-
<span class="cline-any cline-no"> </span>
|
1069
|
-
<span class="cline-any cline-neutral"> </span>
|
1070
|
-
<span class="cline-any cline-neutral"> </span>
|
1071
|
-
<span class="cline-any cline-neutral"> </span>
|
1072
|
-
<span class="cline-any cline-no"> </span>
|
1073
|
-
<span class="cline-any cline-neutral"> </span>
|
1074
|
-
<span class="cline-any cline-neutral"> </span>
|
1075
|
-
<span class="cline-any cline-neutral"> </span>
|
1076
|
-
<span class="cline-any cline-no"> </span>
|
1077
|
-
<span class="cline-any cline-neutral"> </span>
|
1078
|
-
<span class="cline-any cline-neutral"> </span>
|
1079
|
-
<span class="cline-any cline-neutral"> </span>
|
1080
|
-
<span class="cline-any cline-neutral"> </span>
|
1081
|
-
<span class="cline-any cline-neutral"> </span>
|
1082
|
-
<span class="cline-any cline-neutral"> </span>
|
1083
|
-
<span class="cline-any cline-neutral"> </span>
|
1084
|
-
<span class="cline-any cline-neutral"> </span>
|
1085
|
-
<span class="cline-any cline-no"> </span>
|
1086
|
-
<span class="cline-any cline-neutral"> </span>
|
1087
|
-
<span class="cline-any cline-neutral"> </span>
|
1088
|
-
<span class="cline-any cline-neutral"> </span>
|
1089
|
-
<span class="cline-any cline-neutral"> </span>
|
1090
|
-
<span class="cline-any cline-neutral"> </span>
|
1091
|
-
<span class="cline-any cline-neutral"> </span>
|
1092
|
-
<span class="cline-any cline-neutral"> </span>
|
1093
|
-
<span class="cline-any cline-neutral"> </span>
|
1094
|
-
<span class="cline-any cline-no"> </span>
|
1095
|
-
<span class="cline-any cline-neutral"> </span>
|
1096
|
-
<span class="cline-any cline-neutral"> </span>
|
1097
|
-
<span class="cline-any cline-neutral"> </span>
|
1098
|
-
<span class="cline-any cline-neutral"> </span>
|
1099
|
-
<span class="cline-any cline-neutral"> </span>
|
1100
|
-
<span class="cline-any cline-neutral"> </span>
|
1101
|
-
<span class="cline-any cline-neutral"> </span>
|
1102
|
-
<span class="cline-any cline-neutral"> </span>
|
1103
|
-
<span class="cline-any cline-neutral"> </span>
|
1104
|
-
<span class="cline-any cline-neutral"> </span>
|
1105
|
-
<span class="cline-any cline-neutral"> </span>
|
1106
|
-
<span class="cline-any cline-no"> </span>
|
1107
|
-
<span class="cline-any cline-no"> </span>
|
1108
|
-
<span class="cline-any cline-no"> </span>
|
1109
|
-
<span class="cline-any cline-neutral"> </span>
|
1110
|
-
<span class="cline-any cline-neutral"> </span>
|
1111
|
-
<span class="cline-any cline-neutral"> </span>
|
1112
|
-
<span class="cline-any cline-neutral"> </span>
|
1113
|
-
<span class="cline-any cline-neutral"> </span>
|
1114
|
-
<span class="cline-any cline-neutral"> </span>
|
1115
|
-
<span class="cline-any cline-neutral"> </span>
|
1116
|
-
<span class="cline-any cline-no"> </span>
|
1117
|
-
<span class="cline-any cline-neutral"> </span>
|
1118
|
-
<span class="cline-any cline-neutral"> </span>
|
1119
|
-
<span class="cline-any cline-neutral"> </span>
|
1120
|
-
<span class="cline-any cline-no"> </span>
|
1121
|
-
<span class="cline-any cline-neutral"> </span>
|
1122
|
-
<span class="cline-any cline-neutral"> </span>
|
1123
|
-
<span class="cline-any cline-neutral"> </span>
|
1124
|
-
<span class="cline-any cline-neutral"> </span>
|
1125
|
-
<span class="cline-any cline-neutral"> </span>
|
1126
|
-
<span class="cline-any cline-neutral"> </span>
|
1127
|
-
<span class="cline-any cline-neutral"> </span>
|
1128
|
-
<span class="cline-any cline-neutral"> </span>
|
1129
|
-
<span class="cline-any cline-no"> </span>
|
1130
|
-
<span class="cline-any cline-neutral"> </span>
|
1131
|
-
<span class="cline-any cline-neutral"> </span>
|
1132
|
-
<span class="cline-any cline-neutral"> </span>
|
1133
|
-
<span class="cline-any cline-neutral"> </span>
|
1134
|
-
<span class="cline-any cline-neutral"> </span>
|
1135
|
-
<span class="cline-any cline-neutral"> </span>
|
1136
|
-
<span class="cline-any cline-neutral"> </span>
|
1137
|
-
<span class="cline-any cline-neutral"> </span>
|
1138
|
-
<span class="cline-any cline-no"> </span>
|
1139
|
-
<span class="cline-any cline-no"> </span>
|
1140
|
-
<span class="cline-any cline-neutral"> </span>
|
1141
|
-
<span class="cline-any cline-neutral"> </span>
|
1142
|
-
<span class="cline-any cline-no"> </span>
|
1143
|
-
<span class="cline-any cline-neutral"> </span>
|
1144
|
-
<span class="cline-any cline-neutral"> </span>
|
1145
|
-
<span class="cline-any cline-neutral"> </span>
|
1146
|
-
<span class="cline-any cline-neutral"> </span>
|
1147
|
-
<span class="cline-any cline-neutral"> </span>
|
1148
|
-
<span class="cline-any cline-neutral"> </span>
|
1149
|
-
<span class="cline-any cline-no"> </span>
|
1150
|
-
<span class="cline-any cline-neutral"> </span>
|
1151
|
-
<span class="cline-any cline-no"> </span>
|
1152
|
-
<span class="cline-any cline-neutral"> </span>
|
1153
|
-
<span class="cline-any cline-neutral"> </span>
|
1154
|
-
<span class="cline-any cline-neutral"> </span>
|
1155
|
-
<span class="cline-any cline-neutral"> </span>
|
1156
|
-
<span class="cline-any cline-neutral"> </span>
|
1157
|
-
<span class="cline-any cline-neutral"> </span>
|
1158
|
-
<span class="cline-any cline-neutral"> </span>
|
1159
|
-
<span class="cline-any cline-neutral"> </span>
|
1160
|
-
<span class="cline-any cline-neutral"> </span>
|
1161
|
-
<span class="cline-any cline-no"> </span>
|
1162
|
-
<span class="cline-any cline-no"> </span>
|
1163
|
-
<span class="cline-any cline-neutral"> </span>
|
1164
|
-
<span class="cline-any cline-neutral"> </span>
|
1165
|
-
<span class="cline-any cline-neutral"> </span>
|
1166
|
-
<span class="cline-any cline-neutral"> </span>
|
1167
|
-
<span class="cline-any cline-neutral"> </span>
|
1168
|
-
<span class="cline-any cline-neutral"> </span>
|
1169
|
-
<span class="cline-any cline-neutral"> </span>
|
1170
|
-
<span class="cline-any cline-neutral"> </span>
|
1171
|
-
<span class="cline-any cline-no"> </span>
|
1172
|
-
<span class="cline-any cline-neutral"> </span>
|
1173
|
-
<span class="cline-any cline-neutral"> </span>
|
1174
|
-
<span class="cline-any cline-neutral"> </span>
|
1175
|
-
<span class="cline-any cline-neutral"> </span>
|
1176
|
-
<span class="cline-any cline-neutral"> </span>
|
1177
|
-
<span class="cline-any cline-neutral"> </span>
|
1178
|
-
<span class="cline-any cline-no"> </span>
|
1179
|
-
<span class="cline-any cline-no"> </span>
|
1180
|
-
<span class="cline-any cline-neutral"> </span>
|
1181
|
-
<span class="cline-any cline-no"> </span>
|
1182
|
-
<span class="cline-any cline-neutral"> </span>
|
1183
|
-
<span class="cline-any cline-neutral"> </span>
|
1184
|
-
<span class="cline-any cline-neutral"> </span>
|
1185
|
-
<span class="cline-any cline-neutral"> </span>
|
1186
|
-
<span class="cline-any cline-neutral"> </span>
|
1187
|
-
<span class="cline-any cline-neutral"> </span>
|
1188
|
-
<span class="cline-any cline-no"> </span>
|
1189
|
-
<span class="cline-any cline-neutral"> </span>
|
1190
|
-
<span class="cline-any cline-no"> </span>
|
1191
|
-
<span class="cline-any cline-neutral"> </span>
|
1192
|
-
<span class="cline-any cline-neutral"> </span>
|
1193
|
-
<span class="cline-any cline-neutral"> </span>
|
1194
|
-
<span class="cline-any cline-neutral"> </span>
|
1195
|
-
<span class="cline-any cline-neutral"> </span>
|
1196
|
-
<span class="cline-any cline-neutral"> </span>
|
1197
|
-
<span class="cline-any cline-neutral"> </span>
|
1198
|
-
<span class="cline-any cline-neutral"> </span>
|
1199
|
-
<span class="cline-any cline-neutral"> </span>
|
1200
|
-
<span class="cline-any cline-no"> </span>
|
1201
|
-
<span class="cline-any cline-no"> </span>
|
1202
|
-
<span class="cline-any cline-no"> </span>
|
1203
|
-
<span class="cline-any cline-neutral"> </span>
|
1204
|
-
<span class="cline-any cline-no"> </span>
|
1205
|
-
<span class="cline-any cline-no"> </span>
|
1206
|
-
<span class="cline-any cline-no"> </span>
|
1207
|
-
<span class="cline-any cline-no"> </span>
|
1208
|
-
<span class="cline-any cline-neutral"> </span>
|
1209
|
-
<span class="cline-any cline-no"> </span>
|
1210
|
-
<span class="cline-any cline-neutral"> </span>
|
1211
|
-
<span class="cline-any cline-no"> </span>
|
1212
|
-
<span class="cline-any cline-neutral"> </span>
|
1213
|
-
<span class="cline-any cline-neutral"> </span>
|
1214
|
-
<span class="cline-any cline-neutral"> </span>
|
1215
|
-
<span class="cline-any cline-neutral"> </span>
|
1216
|
-
<span class="cline-any cline-neutral"> </span>
|
1217
|
-
<span class="cline-any cline-neutral"> </span>
|
1218
|
-
<span class="cline-any cline-neutral"> </span>
|
1219
|
-
<span class="cline-any cline-neutral"> </span>
|
1220
|
-
<span class="cline-any cline-no"> </span>
|
1221
|
-
<span class="cline-any cline-no"> </span>
|
1222
|
-
<span class="cline-any cline-no"> </span>
|
1223
|
-
<span class="cline-any cline-no"> </span>
|
1224
|
-
<span class="cline-any cline-no"> </span>
|
1225
|
-
<span class="cline-any cline-no"> </span>
|
1226
|
-
<span class="cline-any cline-neutral"> </span>
|
1227
|
-
<span class="cline-any cline-no"> </span>
|
1228
|
-
<span class="cline-any cline-neutral"> </span>
|
1229
|
-
<span class="cline-any cline-neutral"> </span>
|
1230
|
-
<span class="cline-any cline-neutral"> </span>
|
1231
|
-
<span class="cline-any cline-neutral"> </span>
|
1232
|
-
<span class="cline-any cline-neutral"> </span>
|
1233
|
-
<span class="cline-any cline-neutral"> </span>
|
1234
|
-
<span class="cline-any cline-neutral"> </span>
|
1235
|
-
<span class="cline-any cline-neutral"> </span>
|
1236
|
-
<span class="cline-any cline-neutral"> </span>
|
1237
|
-
<span class="cline-any cline-neutral"> </span>
|
1238
|
-
<span class="cline-any cline-no"> </span>
|
1239
|
-
<span class="cline-any cline-no"> </span>
|
1240
|
-
<span class="cline-any cline-neutral"> </span>
|
1241
|
-
<span class="cline-any cline-no"> </span>
|
1242
|
-
<span class="cline-any cline-no"> </span>
|
1243
|
-
<span class="cline-any cline-no"> </span>
|
1244
|
-
<span class="cline-any cline-no"> </span>
|
1245
|
-
<span class="cline-any cline-neutral"> </span>
|
1246
|
-
<span class="cline-any cline-no"> </span>
|
1247
|
-
<span class="cline-any cline-neutral"> </span>
|
1248
|
-
<span class="cline-any cline-no"> </span>
|
1249
|
-
<span class="cline-any cline-neutral"> </span>
|
1250
|
-
<span class="cline-any cline-neutral"> </span>
|
1251
|
-
<span class="cline-any cline-neutral"> </span>
|
1252
|
-
<span class="cline-any cline-neutral"> </span>
|
1253
|
-
<span class="cline-any cline-neutral"> </span>
|
1254
|
-
<span class="cline-any cline-neutral"> </span>
|
1255
|
-
<span class="cline-any cline-neutral"> </span>
|
1256
|
-
<span class="cline-any cline-neutral"> </span>
|
1257
|
-
<span class="cline-any cline-neutral"> </span>
|
1258
|
-
<span class="cline-any cline-no"> </span>
|
1259
|
-
<span class="cline-any cline-no"> </span>
|
1260
|
-
<span class="cline-any cline-no"> </span>
|
1261
|
-
<span class="cline-any cline-no"> </span>
|
1262
|
-
<span class="cline-any cline-no"> </span>
|
1263
|
-
<span class="cline-any cline-neutral"> </span>
|
1264
|
-
<span class="cline-any cline-no"> </span>
|
1265
|
-
<span class="cline-any cline-neutral"> </span>
|
1266
|
-
<span class="cline-any cline-neutral"> </span>
|
1267
|
-
<span class="cline-any cline-neutral"> </span>
|
1268
|
-
<span class="cline-any cline-no"> </span>
|
1269
|
-
<span class="cline-any cline-no"> </span>
|
1270
|
-
<span class="cline-any cline-neutral"> </span>
|
1271
|
-
<span class="cline-any cline-no"> </span>
|
1272
|
-
<span class="cline-any cline-no"> </span>
|
1273
|
-
<span class="cline-any cline-neutral"> </span>
|
1274
|
-
<span class="cline-any cline-neutral"> </span>
|
1275
|
-
<span class="cline-any cline-neutral"> </span>
|
1276
|
-
<span class="cline-any cline-neutral"> </span>
|
1277
|
-
<span class="cline-any cline-neutral"> </span>
|
1278
|
-
<span class="cline-any cline-neutral"> </span>
|
1279
|
-
<span class="cline-any cline-neutral"> </span>
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
1281
|
-
<span class="cline-any cline-neutral"> </span>
|
1282
|
-
<span class="cline-any cline-no"> </span>
|
1283
|
-
<span class="cline-any cline-no"> </span>
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
1285
|
-
<span class="cline-any cline-neutral"> </span>
|
1286
|
-
<span class="cline-any cline-neutral"> </span>
|
1287
|
-
<span class="cline-any cline-neutral"> </span>
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
1290
|
-
<span class="cline-any cline-neutral"> </span>
|
1291
|
-
<span class="cline-any cline-neutral"> </span>
|
1292
|
-
<span class="cline-any cline-neutral"> </span>
|
1293
|
-
<span class="cline-any cline-no"> </span>
|
1294
|
-
<span class="cline-any cline-no"> </span>
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
1296
|
-
<span class="cline-any cline-no"> </span>
|
1297
|
-
<span class="cline-any cline-no"> </span>
|
1298
|
-
<span class="cline-any cline-neutral"> </span>
|
1299
|
-
<span class="cline-any cline-no"> </span>
|
1300
|
-
<span class="cline-any cline-neutral"> </span>
|
1301
|
-
<span class="cline-any cline-neutral"> </span>
|
1302
|
-
<span class="cline-any cline-neutral"> </span>
|
1303
|
-
<span class="cline-any cline-neutral"> </span>
|
1304
|
-
<span class="cline-any cline-neutral"> </span>
|
1305
|
-
<span class="cline-any cline-neutral"> </span>
|
1306
|
-
<span class="cline-any cline-neutral"> </span>
|
1307
|
-
<span class="cline-any cline-neutral"> </span>
|
1308
|
-
<span class="cline-any cline-neutral"> </span>
|
1309
|
-
<span class="cline-any cline-neutral"> </span>
|
1310
|
-
<span class="cline-any cline-no"> </span>
|
1311
|
-
<span class="cline-any cline-no"> </span>
|
1312
|
-
<span class="cline-any cline-neutral"> </span>
|
1313
|
-
<span class="cline-any cline-neutral"> </span>
|
1314
|
-
<span class="cline-any cline-no"> </span>
|
1315
|
-
<span class="cline-any cline-no"> </span>
|
1316
|
-
<span class="cline-any cline-no"> </span>
|
1317
|
-
<span class="cline-any cline-no"> </span>
|
1318
|
-
<span class="cline-any cline-neutral"> </span>
|
1319
|
-
<span class="cline-any cline-no"> </span>
|
1320
|
-
<span class="cline-any cline-neutral"> </span>
|
1321
|
-
<span class="cline-any cline-neutral"> </span>
|
1322
|
-
<span class="cline-any cline-neutral"> </span>
|
1323
|
-
<span class="cline-any cline-neutral"> </span>
|
1324
|
-
<span class="cline-any cline-neutral"> </span>
|
1325
|
-
<span class="cline-any cline-neutral"> </span>
|
1326
|
-
<span class="cline-any cline-neutral"> </span>
|
1327
|
-
<span class="cline-any cline-neutral"> </span>
|
1328
|
-
<span class="cline-any cline-neutral"> </span>
|
1329
|
-
<span class="cline-any cline-neutral"> </span>
|
1330
|
-
<span class="cline-any cline-neutral"> </span>
|
1331
|
-
<span class="cline-any cline-neutral"> </span>
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
1334
|
-
<span class="cline-any cline-neutral"> </span>
|
1335
|
-
<span class="cline-any cline-no"> </span>
|
1336
|
-
<span class="cline-any cline-no"> </span>
|
1337
|
-
<span class="cline-any cline-neutral"> </span>
|
1338
|
-
<span class="cline-any cline-no"> </span>
|
1339
|
-
<span class="cline-any cline-no"> </span>
|
1340
|
-
<span class="cline-any cline-no"> </span>
|
1341
|
-
<span class="cline-any cline-no"> </span>
|
1342
|
-
<span class="cline-any cline-neutral"> </span>
|
1343
|
-
<span class="cline-any cline-no"> </span>
|
1344
|
-
<span class="cline-any cline-neutral"> </span>
|
1345
|
-
<span class="cline-any cline-neutral"> </span>
|
1346
|
-
<span class="cline-any cline-neutral"> </span>
|
1347
|
-
<span class="cline-any cline-neutral"> </span>
|
1348
|
-
<span class="cline-any cline-neutral"> </span>
|
1349
|
-
<span class="cline-any cline-neutral"> </span>
|
1350
|
-
<span class="cline-any cline-neutral"> </span>
|
1351
|
-
<span class="cline-any cline-neutral"> </span>
|
1352
|
-
<span class="cline-any cline-neutral"> </span>
|
1353
|
-
<span class="cline-any cline-neutral"> </span>
|
1354
|
-
<span class="cline-any cline-no"> </span>
|
1355
|
-
<span class="cline-any cline-no"> </span>
|
1356
|
-
<span class="cline-any cline-neutral"> </span>
|
1357
|
-
<span class="cline-any cline-no"> </span>
|
1358
|
-
<span class="cline-any cline-neutral"> </span>
|
1359
|
-
<span class="cline-any cline-neutral"> </span>
|
1360
|
-
<span class="cline-any cline-neutral"> </span>
|
1361
|
-
<span class="cline-any cline-neutral"> </span>
|
1362
|
-
<span class="cline-any cline-neutral"> </span>
|
1363
|
-
<span class="cline-any cline-neutral"> </span>
|
1364
|
-
<span class="cline-any cline-neutral"> </span>
|
1365
|
-
<span class="cline-any cline-neutral"> </span>
|
1366
|
-
<span class="cline-any cline-neutral"> </span>
|
1367
|
-
<span class="cline-any cline-neutral"> </span>
|
1368
|
-
<span class="cline-any cline-neutral"> </span>
|
1369
|
-
<span class="cline-any cline-neutral"> </span>
|
1370
|
-
<span class="cline-any cline-neutral"> </span>
|
1371
|
-
<span class="cline-any cline-neutral"> </span>
|
1372
|
-
<span class="cline-any cline-no"> </span>
|
1373
|
-
<span class="cline-any cline-no"> </span>
|
1374
|
-
<span class="cline-any cline-neutral"> </span>
|
1375
|
-
<span class="cline-any cline-no"> </span>
|
1376
|
-
<span class="cline-any cline-neutral"> </span>
|
1377
|
-
<span class="cline-any cline-no"> </span>
|
1378
|
-
<span class="cline-any cline-no"> </span>
|
1379
|
-
<span class="cline-any cline-neutral"> </span>
|
1380
|
-
<span class="cline-any cline-neutral"> </span>
|
1381
|
-
<span class="cline-any cline-no"> </span>
|
1382
|
-
<span class="cline-any cline-neutral"> </span>
|
1383
|
-
<span class="cline-any cline-no"> </span>
|
1384
|
-
<span class="cline-any cline-neutral"> </span>
|
1385
|
-
<span class="cline-any cline-neutral"> </span>
|
1386
|
-
<span class="cline-any cline-neutral"> </span>
|
1387
|
-
<span class="cline-any cline-neutral"> </span>
|
1388
|
-
<span class="cline-any cline-neutral"> </span>
|
1389
|
-
<span class="cline-any cline-neutral"> </span>
|
1390
|
-
<span class="cline-any cline-no"> </span>
|
1391
|
-
<span class="cline-any cline-neutral"> </span>
|
1392
|
-
<span class="cline-any cline-neutral"> </span>
|
1393
|
-
<span class="cline-any cline-no"> </span>
|
1394
|
-
<span class="cline-any cline-neutral"> </span>
|
1395
|
-
<span class="cline-any cline-no"> </span>
|
1396
|
-
<span class="cline-any cline-neutral"> </span>
|
1397
|
-
<span class="cline-any cline-neutral"> </span>
|
1398
|
-
<span class="cline-any cline-neutral"> </span>
|
1399
|
-
<span class="cline-any cline-neutral"> </span>
|
1400
|
-
<span class="cline-any cline-neutral"> </span>
|
1401
|
-
<span class="cline-any cline-neutral"> </span>
|
1402
|
-
<span class="cline-any cline-neutral"> </span>
|
1403
|
-
<span class="cline-any cline-neutral"> </span>
|
1404
|
-
<span class="cline-any cline-neutral"> </span>
|
1405
|
-
<span class="cline-any cline-neutral"> </span>
|
1406
|
-
<span class="cline-any cline-no"> </span>
|
1407
|
-
<span class="cline-any cline-neutral"> </span>
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
1409
|
-
<span class="cline-any cline-no"> </span>
|
1410
|
-
<span class="cline-any cline-neutral"> </span>
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
1412
|
-
<span class="cline-any cline-no"> </span>
|
1413
|
-
<span class="cline-any cline-neutral"> </span>
|
1414
|
-
<span class="cline-any cline-no"> </span>
|
1415
|
-
<span class="cline-any cline-neutral"> </span>
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
1418
|
-
<span class="cline-any cline-neutral"> </span>
|
1419
|
-
<span class="cline-any cline-neutral"> </span>
|
1420
|
-
<span class="cline-any cline-neutral"> </span>
|
1421
|
-
<span class="cline-any cline-neutral"> </span>
|
1422
|
-
<span class="cline-any cline-neutral"> </span>
|
1423
|
-
<span class="cline-any cline-neutral"> </span>
|
1424
|
-
<span class="cline-any cline-neutral"> </span>
|
1425
|
-
<span class="cline-any cline-no"> </span>
|
1426
|
-
<span class="cline-any cline-no"> </span>
|
1427
|
-
<span class="cline-any cline-neutral"> </span>
|
1428
|
-
<span class="cline-any cline-neutral"> </span>
|
1429
|
-
<span class="cline-any cline-neutral"> </span>
|
1430
|
-
<span class="cline-any cline-neutral"> </span>
|
1431
|
-
<span class="cline-any cline-neutral"> </span>
|
1432
|
-
<span class="cline-any cline-neutral"> </span>
|
1433
|
-
<span class="cline-any cline-neutral"> </span>
|
1434
|
-
<span class="cline-any cline-neutral"> </span>
|
1435
|
-
<span class="cline-any cline-no"> </span>
|
1436
|
-
<span class="cline-any cline-neutral"> </span>
|
1437
|
-
<span class="cline-any cline-neutral"> </span>
|
1438
|
-
<span class="cline-any cline-neutral"> </span>
|
1439
|
-
<span class="cline-any cline-neutral"> </span>
|
1440
|
-
<span class="cline-any cline-neutral"> </span>
|
1441
|
-
<span class="cline-any cline-neutral"> </span>
|
1442
|
-
<span class="cline-any cline-neutral"> </span>
|
1443
|
-
<span class="cline-any cline-neutral"> </span>
|
1444
|
-
<span class="cline-any cline-no"> </span>
|
1445
|
-
<span class="cline-any cline-no"> </span>
|
1446
|
-
<span class="cline-any cline-no"> </span>
|
1447
|
-
<span class="cline-any cline-no"> </span>
|
1448
|
-
<span class="cline-any cline-no"> </span>
|
1449
|
-
<span class="cline-any cline-no"> </span>
|
1450
|
-
<span class="cline-any cline-no"> </span>
|
1451
|
-
<span class="cline-any cline-no"> </span>
|
1452
|
-
<span class="cline-any cline-no"> </span>
|
1453
|
-
<span class="cline-any cline-neutral"> </span>
|
1454
|
-
<span class="cline-any cline-neutral"> </span>
|
1455
|
-
<span class="cline-any cline-neutral"> </span>
|
1456
|
-
<span class="cline-any cline-neutral"> </span>
|
1457
|
-
<span class="cline-any cline-neutral"> </span>
|
1458
|
-
<span class="cline-any cline-neutral"> </span>
|
1459
|
-
<span class="cline-any cline-neutral"> </span>
|
1460
|
-
<span class="cline-any cline-no"> </span>
|
1461
|
-
<span class="cline-any cline-neutral"> </span>
|
1462
|
-
<span class="cline-any cline-neutral"> </span>
|
1463
|
-
<span class="cline-any cline-neutral"> </span>
|
1464
|
-
<span class="cline-any cline-neutral"> </span>
|
1465
|
-
<span class="cline-any cline-neutral"> </span>
|
1466
|
-
<span class="cline-any cline-neutral"> </span>
|
1467
|
-
<span class="cline-any cline-neutral"> </span>
|
1468
|
-
<span class="cline-any cline-neutral"> </span>
|
1469
|
-
<span class="cline-any cline-neutral"> </span>
|
1470
|
-
<span class="cline-any cline-neutral"> </span>
|
1471
|
-
<span class="cline-any cline-neutral"> </span>
|
1472
|
-
<span class="cline-any cline-neutral"> </span>
|
1473
|
-
<span class="cline-any cline-neutral"> </span>
|
1474
|
-
<span class="cline-any cline-neutral"> </span>
|
1475
|
-
<span class="cline-any cline-neutral"> </span>
|
1476
|
-
<span class="cline-any cline-neutral"> </span>
|
1477
|
-
<span class="cline-any cline-neutral"> </span>
|
1478
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
1479
|
-
MAX_INT,
|
1480
|
-
SIGNING_PATH_PREFIX,
|
1481
|
-
BAP_SERVER,
|
1482
|
-
BAP_BITCOM_ADDRESS,
|
1483
|
-
AIP_BITCOM_ADDRESS, ENCRYPTION_PATH,
|
1484
|
-
} from './constants';
|
1485
|
-
import { Utils } from './utils';
|
1486
|
-
import type {Identity} from "./interface";
|
1487
|
-
|
1488
|
-
/**
|
1489
|
-
* BAP_ID class
|
1490
|
-
*
|
1491
|
-
* This class should be used in conjunction with the BAP class
|
1492
|
-
*
|
1493
|
-
* @type {BAP_ID}
|
1494
|
-
*/
|
1495
|
-
class BAP_ID {
|
1496
|
-
#HDPrivateKey: bsv.HDPrivateKey;
|
1497
|
-
#BAP_SERVER: string = BAP_SERVER;
|
1498
|
-
#BAP_TOKEN = '';
|
1499
|
-
#rootPath: string;
|
1500
|
-
#previousPath: string;
|
1501
|
-
#currentPath: string;
|
1502
|
-
#idSeed: string;
|
1503
|
-
|
1504
|
-
idName: string;
|
1505
|
-
description: string;
|
1506
|
-
|
1507
|
-
rootAddress: string;
|
1508
|
-
identityKey: string;
|
1509
|
-
identityAttributes: { [key: string]: any }
|
1510
|
-
|
1511
|
-
constructor(HDPrivateKey: bsv.HDPrivateKey, identityAttributes: { [key: string]: any } = {}, idSeed = '') {
|
1512
|
-
this.#idSeed = idSeed;
|
1513
|
-
if (idSeed) {
|
1514
|
-
// create a new HDPrivateKey based on the seed
|
1515
|
-
const seedHex = bsv.crypto.Hash.sha256(Buffer.from(idSeed)).toString('hex');
|
1516
|
-
const seedPath = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(seedHex);</span>
|
1517
|
-
<span class="cstat-no" title="statement not covered" > this.#HDPrivateKey = HDPrivateKey.deriveChild(seedPath);</span>
|
1518
|
-
} else {
|
1519
|
-
this.#HDPrivateKey = HDPrivateKey;
|
1520
|
-
}
|
1521
|
-
|
1522
|
-
this.idName = 'ID 1';
|
1523
|
-
this.description = '';
|
1524
|
-
|
1525
|
-
this.#rootPath = `${SIGNING_PATH_PREFIX}/0/0/0`;
|
1526
|
-
this.#previousPath = `${SIGNING_PATH_PREFIX}/0/0/0`;
|
1527
|
-
this.#currentPath = `${SIGNING_PATH_PREFIX}/0/0/1`;
|
1528
|
-
|
1529
|
-
const rootChild = this.#HDPrivateKey.deriveChild(this.#rootPath);
|
1530
|
-
this.rootAddress = rootChild.privateKey.publicKey.toAddress().toString();
|
1531
|
-
this.identityKey = this.deriveIdentityKey(this.rootAddress);
|
1532
|
-
|
1533
|
-
// unlink the object
|
1534
|
-
<span class="cstat-no" title="statement not covered" > identityAttributes = { ...identityAttributes };</span>
|
1535
|
-
<span class="cstat-no" title="statement not covered" > this.identityAttributes = this.parseAttributes(identityAttributes);</span>
|
1536
|
-
}
|
1537
|
-
|
1538
|
-
<span class="fstat-no" title="function not covered" > se</span>t BAP_SERVER(bapServer) {
|
1539
|
-
<span class="cstat-no" title="statement not covered" > this.#BAP_SERVER = bapServer;</span>
|
1540
|
-
}
|
1541
|
-
|
1542
|
-
<span class="fstat-no" title="function not covered" > ge</span>t BAP_SERVER(): string {
|
1543
|
-
<span class="cstat-no" title="statement not covered" > return this.#BAP_SERVER;</span>
|
1544
|
-
}
|
1545
|
-
|
1546
|
-
<span class="fstat-no" title="function not covered" > se</span>t BAP_TOKEN(token) {
|
1547
|
-
<span class="cstat-no" title="statement not covered" > this.#BAP_TOKEN = token;</span>
|
1548
|
-
}
|
1549
|
-
|
1550
|
-
<span class="fstat-no" title="function not covered" > ge</span>t BAP_TOKEN(): string {
|
1551
|
-
<span class="cstat-no" title="statement not covered" > return this.#BAP_TOKEN;</span>
|
1552
|
-
}
|
1553
|
-
|
1554
|
-
deriveIdentityKey(address: string): string {
|
1555
|
-
const rootAddressHash = bsv.crypto.Hash.sha256(Buffer.from(address));
|
1556
|
-
// @ts-ignore
|
1557
|
-
<span class="cstat-no" title="statement not covered" > return bsv.encoding.Base58(bsv.crypto.Hash.ripemd160(rootAddressHash)).toString();</span>
|
1558
|
-
}
|
1559
|
-
|
1560
|
-
/**
|
1561
|
-
* Helper function to parse identity attributes
|
1562
|
-
*
|
1563
|
-
* @param identityAttributes
|
1564
|
-
* @returns {{}}
|
1565
|
-
*/
|
1566
|
-
<span class="fstat-no" title="function not covered" > pa</span>rseAttributes(identityAttributes: { [key: string]: any } | string): { [key: string]: any } {
|
1567
|
-
<span class="cstat-no" title="statement not covered" > if (typeof identityAttributes === 'string') {</span>
|
1568
|
-
<span class="cstat-no" title="statement not covered" > return this.parseStringUrns(identityAttributes);</span>
|
1569
|
-
}
|
1570
|
-
|
1571
|
-
<span class="cstat-no" title="statement not covered" > Object.keys(identityAttributes).forEach(<span class="fstat-no" title="function not covered" >(k</span>ey) => {</span>
|
1572
|
-
<span class="cstat-no" title="statement not covered" > if (</span>
|
1573
|
-
!identityAttributes[key].hasOwnProperty('value')
|
1574
|
-
|| !identityAttributes[key].hasOwnProperty('nonce')
|
1575
|
-
) {
|
1576
|
-
<span class="cstat-no" title="statement not covered" > throw new Error('Invalid identity attribute');</span>
|
1577
|
-
}
|
1578
|
-
});
|
1579
|
-
|
1580
|
-
<span class="cstat-no" title="statement not covered" > return identityAttributes || {};</span>
|
1581
|
-
}
|
1582
|
-
|
1583
|
-
/**
|
1584
|
-
* Parse a text of urn string into identity attributes
|
1585
|
-
*
|
1586
|
-
* urn:bap:id:name:John Doe:e2c6fb4063cc04af58935737eaffc938011dff546d47b7fbb18ed346f8c4d4fa
|
1587
|
-
* urn:bap:id:birthday:1990-05-22:e61f23cbbb2284842d77965e2b0e32f0ca890b1894ca4ce652831347ee3596d9
|
1588
|
-
* urn:bap:id:over18:1:480ca17ccaacd671b28dc811332525f2f2cd594d8e8e7825de515ce5d52d30e8
|
1589
|
-
*
|
1590
|
-
* @param urnIdentityAttributes
|
1591
|
-
*/
|
1592
|
-
<span class="fstat-no" title="function not covered" > pa</span>rseStringUrns(urnIdentityAttributes: string): { [key: string]: any } {
|
1593
|
-
const identityAttributes: { [key: string]: any } = <span class="cstat-no" title="statement not covered" >{};</span>
|
1594
|
-
<span class="cstat-no" title="statement not covered" > urnIdentityAttributes.replace(/^\s+/g, '').replace(/\r/gm, '')</span>
|
1595
|
-
.split('\n')
|
1596
|
-
.forEach(<span class="fstat-no" title="function not covered" >(l</span>ine) => {
|
1597
|
-
// remove any whitespace from the string (trim)
|
1598
|
-
<span class="cstat-no" title="statement not covered" > line = line.replace(/^\s+/g, '').replace(/\s+$/g, '');</span>
|
1599
|
-
const urn = <span class="cstat-no" title="statement not covered" >line.split(':');</span>
|
1600
|
-
<span class="cstat-no" title="statement not covered" > if (urn[0] === 'urn' && urn[1] === 'bap' && urn[2] === 'id' && urn[3] && urn[4] && urn[5]) {</span>
|
1601
|
-
<span class="cstat-no" title="statement not covered" > identityAttributes[urn[3]] = {</span>
|
1602
|
-
value: urn[4],
|
1603
|
-
nonce: urn[5],
|
1604
|
-
};
|
1605
|
-
}
|
1606
|
-
});
|
1607
|
-
|
1608
|
-
<span class="cstat-no" title="statement not covered" > return identityAttributes;</span>
|
1609
|
-
}
|
1610
|
-
|
1611
|
-
/**
|
1612
|
-
* Returns the identity key
|
1613
|
-
*
|
1614
|
-
* @returns {*|string}
|
1615
|
-
*/
|
1616
|
-
<span class="fstat-no" title="function not covered" > ge</span>tIdentityKey(): string {
|
1617
|
-
<span class="cstat-no" title="statement not covered" > return this.identityKey;</span>
|
1618
|
-
}
|
1619
|
-
|
1620
|
-
/**
|
1621
|
-
* Returns all the attributes in the identity
|
1622
|
-
*
|
1623
|
-
* @returns {*}
|
1624
|
-
*/
|
1625
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttributes(): { [key: string]: any } {
|
1626
|
-
<span class="cstat-no" title="statement not covered" > return this.identityAttributes;</span>
|
1627
|
-
}
|
1628
|
-
|
1629
|
-
/**
|
1630
|
-
* Get the value of the given attribute
|
1631
|
-
*
|
1632
|
-
* @param attributeName
|
1633
|
-
* @returns {{}|null}
|
1634
|
-
*/
|
1635
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttribute(attributeName: string): any {
|
1636
|
-
<span class="cstat-no" title="statement not covered" > if (this.identityAttributes.hasOwnProperty(attributeName)) {</span>
|
1637
|
-
<span class="cstat-no" title="statement not covered" > return this.identityAttributes[attributeName];</span>
|
1638
|
-
}
|
1639
|
-
|
1640
|
-
<span class="cstat-no" title="statement not covered" > return null;</span>
|
1641
|
-
}
|
1642
|
-
|
1643
|
-
/**
|
1644
|
-
* Set the value of the given attribute
|
1645
|
-
*
|
1646
|
-
* If an empty value ('' || null || false) is given, the attribute is removed from the ID
|
1647
|
-
*
|
1648
|
-
* @param attributeName string
|
1649
|
-
* @param attributeValue any
|
1650
|
-
* @returns {{}|null}
|
1651
|
-
*/
|
1652
|
-
<span class="fstat-no" title="function not covered" > se</span>tAttribute(attributeName: string, attributeValue: any): void {
|
1653
|
-
<span class="cstat-no" title="statement not covered" > if (attributeValue) {</span>
|
1654
|
-
<span class="cstat-no" title="statement not covered" > if (this.identityAttributes.hasOwnProperty(attributeName)) {</span>
|
1655
|
-
<span class="cstat-no" title="statement not covered" > this.identityAttributes[attributeName].value = attributeValue;</span>
|
1656
|
-
} else {
|
1657
|
-
<span class="cstat-no" title="statement not covered" > this.addAttribute(attributeName, attributeValue);</span>
|
1658
|
-
}
|
1659
|
-
}
|
1660
|
-
}
|
1661
|
-
|
1662
|
-
/**
|
1663
|
-
* Unset the given attribute from the ID
|
1664
|
-
*
|
1665
|
-
* @param attributeName
|
1666
|
-
* @returns {{}|null}
|
1667
|
-
*/
|
1668
|
-
<span class="fstat-no" title="function not covered" > un</span>setAttribute(attributeName: string): void {
|
1669
|
-
<span class="cstat-no" title="statement not covered" > delete this.identityAttributes[attributeName];</span>
|
1670
|
-
}
|
1671
|
-
|
1672
|
-
/**
|
1673
|
-
* Get all attribute urn's for this id
|
1674
|
-
*
|
1675
|
-
* @returns {string}
|
1676
|
-
*/
|
1677
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttributeUrns(): string {
|
1678
|
-
let urns = <span class="cstat-no" title="statement not covered" >'';</span>
|
1679
|
-
<span class="cstat-no" title="statement not covered" > Object.keys(this.identityAttributes)</span>
|
1680
|
-
.forEach(<span class="fstat-no" title="function not covered" >(k</span>ey) => {
|
1681
|
-
const urn = <span class="cstat-no" title="statement not covered" >this.getAttributeUrn(key);</span>
|
1682
|
-
<span class="cstat-no" title="statement not covered" > if (urn) {</span>
|
1683
|
-
<span class="cstat-no" title="statement not covered" > urns += `${urn}\n`;</span>
|
1684
|
-
}
|
1685
|
-
});
|
1686
|
-
|
1687
|
-
<span class="cstat-no" title="statement not covered" > return urns;</span>
|
1688
|
-
}
|
1689
|
-
|
1690
|
-
/**
|
1691
|
-
* Create an return the attribute urn for the given attribute
|
1692
|
-
*
|
1693
|
-
* @param attributeName
|
1694
|
-
* @returns {string|null}
|
1695
|
-
*/
|
1696
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttributeUrn(attributeName: string) {
|
1697
|
-
const attribute = <span class="cstat-no" title="statement not covered" >this.identityAttributes[attributeName];</span>
|
1698
|
-
<span class="cstat-no" title="statement not covered" > if (attribute) {</span>
|
1699
|
-
<span class="cstat-no" title="statement not covered" > return `urn:bap:id:${attributeName}:${attribute.value}:${attribute.nonce}`;</span>
|
1700
|
-
}
|
1701
|
-
|
1702
|
-
<span class="cstat-no" title="statement not covered" > return null;</span>
|
1703
|
-
}
|
1704
|
-
|
1705
|
-
/**
|
1706
|
-
* Add an attribute to this identity
|
1707
|
-
*
|
1708
|
-
* @param attributeName
|
1709
|
-
* @param value
|
1710
|
-
* @param nonce
|
1711
|
-
*/
|
1712
|
-
<span class="fstat-no" title="function not covered" > ad</span>dAttribute(attributeName: string, value: any, nonce = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span>: void {
|
1713
|
-
<span class="cstat-no" title="statement not covered" > if (!nonce) {</span>
|
1714
|
-
<span class="cstat-no" title="statement not covered" > nonce = Utils.getRandomString();</span>
|
1715
|
-
}
|
1716
|
-
|
1717
|
-
<span class="cstat-no" title="statement not covered" > this.identityAttributes[attributeName] = {</span>
|
1718
|
-
value,
|
1719
|
-
nonce,
|
1720
|
-
};
|
1721
|
-
}
|
1722
|
-
|
1723
|
-
/**
|
1724
|
-
* This should be called with the last part of the signing path (/.../.../...)
|
1725
|
-
* This library assumes the first part is m/424150'/0'/0' as defined at the top of this file
|
1726
|
-
*
|
1727
|
-
* @param path The second path of the signing path in the format [0-9]{0,9}/[0-9]{0,9}/[0-9]{0,9}
|
1728
|
-
*/
|
1729
|
-
<span class="fstat-no" title="function not covered" > se</span>t rootPath(path) {
|
1730
|
-
<span class="cstat-no" title="statement not covered" > if (this.#HDPrivateKey) {</span>
|
1731
|
-
<span class="cstat-no" title="statement not covered" > if (path.split('/').length < 5) {</span>
|
1732
|
-
<span class="cstat-no" title="statement not covered" > path = `${SIGNING_PATH_PREFIX}${path}`;</span>
|
1733
|
-
}
|
1734
|
-
|
1735
|
-
<span class="cstat-no" title="statement not covered" > if (!this.validatePath(path)) {</span>
|
1736
|
-
<span class="cstat-no" title="statement not covered" > throw new Error('invalid signing path given ' + path);</span>
|
1737
|
-
}
|
1738
|
-
|
1739
|
-
<span class="cstat-no" title="statement not covered" > this.#rootPath = path;</span>
|
1740
|
-
|
1741
|
-
const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(path);</span>
|
1742
|
-
<span class="cstat-no" title="statement not covered" > this.rootAddress = derivedChild.publicKey.toAddress().toString();</span>
|
1743
|
-
// Identity keys should be derivatives of the root address - this allows checking
|
1744
|
-
// of the creation transaction
|
1745
|
-
<span class="cstat-no" title="statement not covered" > this.identityKey = this.deriveIdentityKey(this.rootAddress);</span>
|
1746
|
-
|
1747
|
-
// we also set this previousPath / currentPath to the root as we seem to be (re)setting this ID
|
1748
|
-
<span class="cstat-no" title="statement not covered" > this.#previousPath = path;</span>
|
1749
|
-
<span class="cstat-no" title="statement not covered" > this.#currentPath = path;</span>
|
1750
|
-
}
|
1751
|
-
}
|
1752
|
-
|
1753
|
-
<span class="fstat-no" title="function not covered" > ge</span>t rootPath(): string {
|
1754
|
-
<span class="cstat-no" title="statement not covered" > return this.#rootPath;</span>
|
1755
|
-
}
|
1756
|
-
|
1757
|
-
<span class="fstat-no" title="function not covered" > ge</span>tRootPath(): string {
|
1758
|
-
<span class="cstat-no" title="statement not covered" > return this.#rootPath;</span>
|
1759
|
-
}
|
1760
|
-
|
1761
|
-
/**
|
1762
|
-
* This should be called with the last part of the signing path (/.../.../...)
|
1763
|
-
* This library assumes the first part is m/424150'/0'/0' as defined at the top of this file
|
1764
|
-
*
|
1765
|
-
* @param path The second path of the signing path in the format [0-9]{0,9}/[0-9]{0,9}/[0-9]{0,9}
|
1766
|
-
*/
|
1767
|
-
<span class="fstat-no" title="function not covered" > se</span>t currentPath(path) {
|
1768
|
-
<span class="cstat-no" title="statement not covered" > if (path.split('/').length < 5) {</span>
|
1769
|
-
<span class="cstat-no" title="statement not covered" > path = `${SIGNING_PATH_PREFIX}${path}`;</span>
|
1770
|
-
}
|
1771
|
-
|
1772
|
-
<span class="cstat-no" title="statement not covered" > if (!this.validatePath(path)) {</span>
|
1773
|
-
<span class="cstat-no" title="statement not covered" > throw new Error('invalid signing path given');</span>
|
1774
|
-
}
|
1775
|
-
|
1776
|
-
<span class="cstat-no" title="statement not covered" > this.#previousPath = this.#currentPath;</span>
|
1777
|
-
<span class="cstat-no" title="statement not covered" > this.#currentPath = path;</span>
|
1778
|
-
}
|
1779
|
-
|
1780
|
-
<span class="fstat-no" title="function not covered" > ge</span>t currentPath(): string {
|
1781
|
-
<span class="cstat-no" title="statement not covered" > return this.#currentPath;</span>
|
1782
|
-
}
|
1783
|
-
|
1784
|
-
<span class="fstat-no" title="function not covered" > ge</span>t previousPath(): string {
|
1785
|
-
<span class="cstat-no" title="statement not covered" > return this.#previousPath;</span>
|
1786
|
-
}
|
1787
|
-
|
1788
|
-
/**
|
1789
|
-
* This can be used to break the deterministic way child keys are created to make it harder for
|
1790
|
-
* an attacker to steal the identites when the root key is compromised. This does however require
|
1791
|
-
* the seeds to be stored at all times. If the seed is lost, the identity will not be recoverable.
|
1792
|
-
*/
|
1793
|
-
<span class="fstat-no" title="function not covered" > ge</span>t idSeed(): string {
|
1794
|
-
<span class="cstat-no" title="statement not covered" > return this.#idSeed;</span>
|
1795
|
-
}
|
1796
|
-
|
1797
|
-
/**
|
1798
|
-
* Increment current path to a new path
|
1799
|
-
*
|
1800
|
-
* @returns {*}
|
1801
|
-
*/
|
1802
|
-
<span class="fstat-no" title="function not covered" > in</span>crementPath(): void {
|
1803
|
-
<span class="cstat-no" title="statement not covered" > this.currentPath = Utils.getNextPath(this.currentPath);</span>
|
1804
|
-
}
|
1805
|
-
|
1806
|
-
/**
|
1807
|
-
* Check whether the given path is a valid path for use with this class
|
1808
|
-
* The signing paths used here always have a length of 3
|
1809
|
-
*
|
1810
|
-
* @param path The last part of the signing path (example "/0/0/1")
|
1811
|
-
* @returns {boolean}
|
1812
|
-
*/
|
1813
|
-
<span class="fstat-no" title="function not covered" > va</span>lidatePath(path: string) {
|
1814
|
-
/* eslint-disable max-len */
|
1815
|
-
<span class="cstat-no" title="statement not covered" > if (path.match(/\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?/)) {</span>
|
1816
|
-
const pathValues = <span class="cstat-no" title="statement not covered" >path.split('/');</span>
|
1817
|
-
<span class="cstat-no" title="statement not covered" > if (pathValues.length === 7</span>
|
1818
|
-
&& Number(pathValues[1].replace('\'', '')) <= MAX_INT
|
1819
|
-
&& Number(pathValues[2].replace('\'', '')) <= MAX_INT
|
1820
|
-
&& Number(pathValues[3].replace('\'', '')) <= MAX_INT
|
1821
|
-
&& Number(pathValues[4].replace('\'', '')) <= MAX_INT
|
1822
|
-
&& Number(pathValues[5].replace('\'', '')) <= MAX_INT
|
1823
|
-
&& Number(pathValues[6].replace('\'', '')) <= MAX_INT
|
1824
|
-
) {
|
1825
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
1826
|
-
}
|
1827
|
-
}
|
1828
|
-
|
1829
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
1830
|
-
}
|
1831
|
-
|
1832
|
-
/**
|
1833
|
-
* Get the OP_RETURN for the initial ID transaction (signed with root address)
|
1834
|
-
*
|
1835
|
-
* @returns {[]}
|
1836
|
-
*/
|
1837
|
-
<span class="fstat-no" title="function not covered" > ge</span>tInitialIdTransaction() {
|
1838
|
-
<span class="cstat-no" title="statement not covered" > return this.getIdTransaction(this.#rootPath);</span>
|
1839
|
-
}
|
1840
|
-
|
1841
|
-
/**
|
1842
|
-
* Get the OP_RETURN for the ID transaction of the current address / path
|
1843
|
-
*
|
1844
|
-
* @returns {[]}
|
1845
|
-
*/
|
1846
|
-
<span class="fstat-no" title="function not covered" > ge</span>tIdTransaction(previousPath = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span> {
|
1847
|
-
<span class="cstat-no" title="statement not covered" > if (this.#currentPath === this.#rootPath) {</span>
|
1848
|
-
<span class="cstat-no" title="statement not covered" > throw new Error('Current path equals rootPath. ID was probably not initialized properly');</span>
|
1849
|
-
}
|
1850
|
-
|
1851
|
-
const opReturn = <span class="cstat-no" title="statement not covered" >[</span>
|
1852
|
-
Buffer.from(BAP_BITCOM_ADDRESS).toString('hex'),
|
1853
|
-
Buffer.from('ID').toString('hex'),
|
1854
|
-
Buffer.from(this.identityKey).toString('hex'),
|
1855
|
-
Buffer.from(this.getCurrentAddress()).toString('hex'),
|
1856
|
-
];
|
1857
|
-
|
1858
|
-
<span class="cstat-no" title="statement not covered" > previousPath = previousPath || this.#previousPath;</span>
|
1859
|
-
|
1860
|
-
<span class="cstat-no" title="statement not covered" > return this.signOpReturnWithAIP(opReturn, previousPath);</span>
|
1861
|
-
}
|
1862
|
-
|
1863
|
-
/**
|
1864
|
-
* Get address for given path
|
1865
|
-
*
|
1866
|
-
* @param path
|
1867
|
-
* @returns {*}
|
1868
|
-
*/
|
1869
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAddress(path: string): string {
|
1870
|
-
const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(path);</span>
|
1871
|
-
<span class="cstat-no" title="statement not covered" > return derivedChild.privateKey.publicKey.toAddress().toString();</span>
|
1872
|
-
}
|
1873
|
-
|
1874
|
-
/**
|
1875
|
-
* Get current signing address
|
1876
|
-
*
|
1877
|
-
* @returns {*}
|
1878
|
-
*/
|
1879
|
-
<span class="fstat-no" title="function not covered" > ge</span>tCurrentAddress(): string {
|
1880
|
-
<span class="cstat-no" title="statement not covered" > return this.getAddress(this.#currentPath);</span>
|
1881
|
-
}
|
1882
|
-
|
1883
|
-
/**
|
1884
|
-
* Get the public key for encrypting data for this identity
|
1885
|
-
*/
|
1886
|
-
<span class="fstat-no" title="function not covered" > ge</span>tEncryptionPublicKey(): string {
|
1887
|
-
const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
|
1888
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
|
1889
|
-
// @ts-ignore
|
1890
|
-
<span class="cstat-no" title="statement not covered" > return encryptionKey.publicKey.toString('hex');</span>
|
1891
|
-
}
|
1892
|
-
|
1893
|
-
/**
|
1894
|
-
* Get the public key for encrypting data for this identity, using a seed for the encryption
|
1895
|
-
*/
|
1896
|
-
<span class="fstat-no" title="function not covered" > ge</span>tEncryptionPublicKeyWithSeed(seed: string): string {
|
1897
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
|
1898
|
-
// @ts-ignore
|
1899
|
-
<span class="cstat-no" title="statement not covered" > return encryptionKey.publicKey.toString('hex');</span>
|
1900
|
-
}
|
1901
|
-
|
1902
|
-
/**
|
1903
|
-
* Encrypt the given string data with the identity encryption key
|
1904
|
-
* @param stringData
|
1905
|
-
* @param counterPartyPublicKey Optional public key of the counterparty
|
1906
|
-
* @return string Base64
|
1907
|
-
*/
|
1908
|
-
<span class="fstat-no" title="function not covered" > en</span>crypt(stringData: string, counterPartyPublicKey?: string): string {
|
1909
|
-
const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
|
1910
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
|
1911
|
-
const publicKey = <span class="cstat-no" title="statement not covered" >encryptionKey.publicKey;</span>
|
1912
|
-
|
1913
|
-
const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
|
1914
|
-
<span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
|
1915
|
-
<span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey)</span>
|
1916
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
|
1917
|
-
} else {
|
1918
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(publicKey);</span>
|
1919
|
-
}
|
1920
|
-
<span class="cstat-no" title="statement not covered" > return ecies.encrypt(stringData).toString('base64');</span>
|
1921
|
-
}
|
1922
|
-
|
1923
|
-
/**
|
1924
|
-
* Decrypt the given ciphertext with the identity encryption key
|
1925
|
-
* @param ciphertext
|
1926
|
-
* @param counterPartyPublicKey Optional public key of the counterparty
|
1927
|
-
*/
|
1928
|
-
<span class="fstat-no" title="function not covered" > de</span>crypt(ciphertext: string, counterPartyPublicKey?: string): string {
|
1929
|
-
const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
|
1930
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
|
1931
|
-
const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
|
1932
|
-
<span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
|
1933
|
-
<span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
|
1934
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
|
1935
|
-
}
|
1936
|
-
<span class="cstat-no" title="statement not covered" > return ecies.decrypt(Buffer.from(ciphertext, 'base64')).toString();</span>
|
1937
|
-
}
|
1938
|
-
|
1939
|
-
/**
|
1940
|
-
* Encrypt the given string data with the identity encryption key
|
1941
|
-
* @param stringData
|
1942
|
-
* @param seed String seed
|
1943
|
-
* @param counterPartyPublicKey Optional public key of the counterparty
|
1944
|
-
* @return string Base64
|
1945
|
-
*/
|
1946
|
-
<span class="fstat-no" title="function not covered" > en</span>cryptWithSeed(stringData: string, seed: string, counterPartyPublicKey?: string): string {
|
1947
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
|
1948
|
-
const publicKey = <span class="cstat-no" title="statement not covered" >encryptionKey.publicKey;</span>
|
1949
|
-
|
1950
|
-
const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
|
1951
|
-
<span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
|
1952
|
-
<span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
|
1953
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
|
1954
|
-
} else {
|
1955
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(publicKey);</span>
|
1956
|
-
}
|
1957
|
-
<span class="cstat-no" title="statement not covered" > return ecies.encrypt(stringData).toString('base64');</span>
|
1958
|
-
}
|
1959
|
-
|
1960
|
-
/**
|
1961
|
-
* Decrypt the given ciphertext with the identity encryption key
|
1962
|
-
* @param ciphertext
|
1963
|
-
* @param seed String seed
|
1964
|
-
* @param counterPartyPublicKey Public key of the counterparty
|
1965
|
-
*/
|
1966
|
-
<span class="fstat-no" title="function not covered" > de</span>cryptWithSeed(ciphertext: string, seed: string, counterPartyPublicKey?: string): string {
|
1967
|
-
const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
|
1968
|
-
const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
|
1969
|
-
<span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
|
1970
|
-
<span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
|
1971
|
-
<span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
|
1972
|
-
}
|
1973
|
-
<span class="cstat-no" title="statement not covered" > return ecies.decrypt(Buffer.from(ciphertext, 'base64')).toString();</span>
|
1974
|
-
}
|
1975
|
-
|
1976
|
-
<span class="fstat-no" title="function not covered" > pr</span>ivate getEncryptionPrivateKeyWithSeed(seed: string) {
|
1977
|
-
const pathHex = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(seed)).toString('hex');</span>
|
1978
|
-
const path = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(pathHex);</span>
|
1979
|
-
|
1980
|
-
const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
|
1981
|
-
<span class="cstat-no" title="statement not covered" > return HDPrivateKey.deriveChild(path).privateKey;</span>
|
1982
|
-
}
|
1983
|
-
|
1984
|
-
/**
|
1985
|
-
* Get an attestation string for the given urn for this identity
|
1986
|
-
*
|
1987
|
-
* @param urn
|
1988
|
-
* @returns {string}
|
1989
|
-
*/
|
1990
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttestation(urn: string) {
|
1991
|
-
const urnHash = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(urn));</span>
|
1992
|
-
<span class="cstat-no" title="statement not covered" > return `bap:attest:${urnHash.toString('hex')}:${this.getIdentityKey()}`;</span>
|
1993
|
-
}
|
1994
|
-
|
1995
|
-
/**
|
1996
|
-
* Generate and return the attestation hash for the given attribute of this identity
|
1997
|
-
*
|
1998
|
-
* @param attribute Attribute name (name, email etc.)
|
1999
|
-
* @returns {string}
|
2000
|
-
*/
|
2001
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAttestationHash(attribute: string) {
|
2002
|
-
const urn = <span class="cstat-no" title="statement not covered" >this.getAttributeUrn(attribute);</span>
|
2003
|
-
<span class="cstat-no" title="statement not covered" > if (!urn) <span class="cstat-no" title="statement not covered" >return null;</span></span>
|
2004
|
-
|
2005
|
-
const attestation = <span class="cstat-no" title="statement not covered" >this.getAttestation(urn);</span>
|
2006
|
-
const attestationHash = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(attestation));</span>
|
2007
|
-
|
2008
|
-
<span class="cstat-no" title="statement not covered" > return attestationHash.toString('hex');</span>
|
2009
|
-
}
|
2010
|
-
|
2011
|
-
/**
|
2012
|
-
* Sign a message with the current signing address of this identity
|
2013
|
-
*
|
2014
|
-
* @param message
|
2015
|
-
* @param signingPath
|
2016
|
-
* @returns {{address, signature}}
|
2017
|
-
*/
|
2018
|
-
<span class="fstat-no" title="function not covered" > si</span>gnMessage(message: string | Buffer, signingPath = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span> {
|
2019
|
-
<span class="cstat-no" title="statement not covered" > if (!(message instanceof Buffer)) {</span>
|
2020
|
-
<span class="cstat-no" title="statement not covered" > message = Buffer.from(message);</span>
|
2021
|
-
}
|
2022
|
-
|
2023
|
-
<span class="cstat-no" title="statement not covered" > signingPath = signingPath || this.#currentPath;</span>
|
2024
|
-
const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(signingPath);</span>
|
2025
|
-
const address = <span class="cstat-no" title="statement not covered" >derivedChild.privateKey.publicKey.toAddress().toString();</span>
|
2026
|
-
const signature = <span class="cstat-no" title="statement not covered" >Message(message).sign(derivedChild.privateKey);</span>
|
2027
|
-
|
2028
|
-
<span class="cstat-no" title="statement not covered" > return { address, signature };</span>
|
2029
|
-
}
|
2030
|
-
|
2031
|
-
/**
|
2032
|
-
* Sign a message using a key based on the given string seed
|
2033
|
-
*
|
2034
|
-
* This works by creating a private key from the root key of this identity. It will always
|
2035
|
-
* work with the rootPath / rootKey, to be deterministic. It will not change even if the keys
|
2036
|
-
* are rotated for this ID.
|
2037
|
-
*
|
2038
|
-
* This is used in for instance deterministic login systems, that do not support BAP.
|
2039
|
-
*
|
2040
|
-
* @param message
|
2041
|
-
* @param seed {string} String seed that will be used to generate a path
|
2042
|
-
*/
|
2043
|
-
<span class="fstat-no" title="function not covered" > si</span>gnMessageWithSeed(message: string, seed: string): { address: string, signature: string } {
|
2044
|
-
const pathHex = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(seed)).toString('hex');</span>
|
2045
|
-
const path = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(pathHex);</span>
|
2046
|
-
|
2047
|
-
const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
|
2048
|
-
const derivedChild = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(path);</span>
|
2049
|
-
const address = <span class="cstat-no" title="statement not covered" >derivedChild.privateKey.publicKey.toAddress().toString();</span>
|
2050
|
-
const signature = <span class="cstat-no" title="statement not covered" >Message(message).sign(derivedChild.privateKey);</span>
|
2051
|
-
|
2052
|
-
<span class="cstat-no" title="statement not covered" > return { address, signature };</span>
|
2053
|
-
}
|
2054
|
-
|
2055
|
-
/**
|
2056
|
-
* Sign an op_return hex array with AIP
|
2057
|
-
* @param opReturn {array}
|
2058
|
-
* @param signingPath {string}
|
2059
|
-
* @param outputType {string}
|
2060
|
-
* @return {[]}
|
2061
|
-
*/
|
2062
|
-
<span class="fstat-no" title="function not covered" > si</span>gnOpReturnWithAIP(opReturn: string[], signingPath = <span class="branch-0 cbranch-no" title="branch not covered" >'',</span> outputType: BufferEncoding = <span class="branch-0 cbranch-no" title="branch not covered" >'hex')</span>: string[] {
|
2063
|
-
const aipMessageBuffer = <span class="cstat-no" title="statement not covered" >this.getAIPMessageBuffer(opReturn);</span>
|
2064
|
-
const { address, signature } = <span class="cstat-no" title="statement not covered" >this.signMessage(aipMessageBuffer, signingPath);</span>
|
2065
|
-
|
2066
|
-
<span class="cstat-no" title="statement not covered" > return opReturn.concat([</span>
|
2067
|
-
Buffer.from('|').toString(outputType),
|
2068
|
-
Buffer.from(AIP_BITCOM_ADDRESS).toString(outputType),
|
2069
|
-
Buffer.from('BITCOIN_ECDSA').toString(outputType),
|
2070
|
-
Buffer.from(address).toString(outputType),
|
2071
|
-
Buffer.from(signature, 'base64').toString(outputType),
|
2072
|
-
]);
|
2073
|
-
}
|
2074
|
-
|
2075
|
-
/**
|
2076
|
-
* Construct an AIP buffer from the op return data
|
2077
|
-
* @param opReturn
|
2078
|
-
* @returns {Buffer}
|
2079
|
-
*/
|
2080
|
-
<span class="fstat-no" title="function not covered" > ge</span>tAIPMessageBuffer(opReturn: string[]): Buffer {
|
2081
|
-
const buffers = <span class="cstat-no" title="statement not covered" >[];</span>
|
2082
|
-
<span class="cstat-no" title="statement not covered" > if (opReturn[0].replace('0x', '') !== '6a') {</span>
|
2083
|
-
// include OP_RETURN in constructing the signature buffer
|
2084
|
-
<span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from('6a', 'hex'));</span>
|
2085
|
-
}
|
2086
|
-
<span class="cstat-no" title="statement not covered" > opReturn.forEach(<span class="fstat-no" title="function not covered" >(o</span>p) => {</span>
|
2087
|
-
<span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from(op.replace('0x', ''), 'hex'));</span>
|
2088
|
-
});
|
2089
|
-
// add a trailing "|" - this is the AIP way
|
2090
|
-
<span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from('|'));</span>
|
2091
|
-
|
2092
|
-
<span class="cstat-no" title="statement not covered" > return Buffer.concat([...buffers]);</span>
|
2093
|
-
}
|
2094
|
-
|
2095
|
-
/**
|
2096
|
-
* Get all signing keys for this identity
|
2097
|
-
*/
|
2098
|
-
<span class="fstat-no" title="function not covered" > as</span>ync getIdSigningKeys(): Promise<any> {
|
2099
|
-
const signingKeys = <span class="cstat-no" title="statement not covered" >await this.getApiData('/signing-keys', {</span>
|
2100
|
-
idKey: this.identityKey,
|
2101
|
-
});
|
2102
|
-
<span class="cstat-no" title="statement not covered" > console.log('getIdSigningKeys', signingKeys);</span>
|
2103
|
-
|
2104
|
-
<span class="cstat-no" title="statement not covered" > return signingKeys;</span>
|
2105
|
-
}
|
2106
|
-
|
2107
|
-
/**
|
2108
|
-
* Get all attestations for the given attribute
|
2109
|
-
*
|
2110
|
-
* @param attribute
|
2111
|
-
*/
|
2112
|
-
<span class="fstat-no" title="function not covered" > as</span>ync getAttributeAttestations(attribute: string): Promise<any> {
|
2113
|
-
// This function needs to make a call to a BAP server to get all the attestations for this
|
2114
|
-
// identity for the given attribute
|
2115
|
-
const attestationHash = <span class="cstat-no" title="statement not covered" >this.getAttestationHash(attribute);</span>
|
2116
|
-
|
2117
|
-
// get all BAP ATTEST records for the given attestationHash
|
2118
|
-
const attestations = <span class="cstat-no" title="statement not covered" >await this.getApiData('/attestations', {</span>
|
2119
|
-
hash: attestationHash,
|
2120
|
-
});
|
2121
|
-
<span class="cstat-no" title="statement not covered" > console.log('getAttestations', attribute, attestationHash, attestations);</span>
|
2122
|
-
|
2123
|
-
<span class="cstat-no" title="statement not covered" > return attestations;</span>
|
2124
|
-
}
|
2125
|
-
|
2126
|
-
/**
|
2127
|
-
* Helper function to get attestation from a BAP API server
|
2128
|
-
*
|
2129
|
-
* @param apiUrl
|
2130
|
-
* @param apiData
|
2131
|
-
* @returns {Promise<any>}
|
2132
|
-
*/
|
2133
|
-
<span class="fstat-no" title="function not covered" > as</span>ync getApiData(apiUrl: string, apiData: any): Promise<any> {
|
2134
|
-
const url = <span class="cstat-no" title="statement not covered" >`${this.#BAP_SERVER}${apiUrl}`;</span>
|
2135
|
-
const response = <span class="cstat-no" title="statement not covered" >await fetch(url, {</span>
|
2136
|
-
method: 'post',
|
2137
|
-
headers: {
|
2138
|
-
'Content-type': 'application/json; charset=utf-8',
|
2139
|
-
token: this.#BAP_TOKEN,
|
2140
|
-
format: 'json',
|
2141
|
-
},
|
2142
|
-
body: JSON.stringify(apiData),
|
2143
|
-
});
|
2144
|
-
<span class="cstat-no" title="statement not covered" > return response.json();</span>
|
2145
|
-
}
|
2146
|
-
|
2147
|
-
/**
|
2148
|
-
* Import an identity from a JSON object
|
2149
|
-
*
|
2150
|
-
* @param identity{{}}
|
2151
|
-
*/
|
2152
|
-
<span class="fstat-no" title="function not covered" > im</span>port(identity: Identity): void {
|
2153
|
-
<span class="cstat-no" title="statement not covered" > this.idName = identity.name;</span>
|
2154
|
-
<span class="cstat-no" title="statement not covered" > this.description = identity.description || '';</span>
|
2155
|
-
<span class="cstat-no" title="statement not covered" > this.identityKey = identity.identityKey;</span>
|
2156
|
-
<span class="cstat-no" title="statement not covered" > this.#rootPath = identity.rootPath;</span>
|
2157
|
-
<span class="cstat-no" title="statement not covered" > this.rootAddress = identity.rootAddress;</span>
|
2158
|
-
<span class="cstat-no" title="statement not covered" > this.#previousPath = identity.previousPath;</span>
|
2159
|
-
<span class="cstat-no" title="statement not covered" > this.#currentPath = identity.currentPath;</span>
|
2160
|
-
<span class="cstat-no" title="statement not covered" > this.#idSeed = identity.idSeed || '';</span>
|
2161
|
-
<span class="cstat-no" title="statement not covered" > this.identityAttributes = this.parseAttributes(identity.identityAttributes);</span>
|
2162
|
-
}
|
2163
|
-
|
2164
|
-
/**
|
2165
|
-
* Export this identity to a JSON object
|
2166
|
-
* @returns {{}}
|
2167
|
-
*/
|
2168
|
-
<span class="fstat-no" title="function not covered" > ex</span>port(): Identity {
|
2169
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
2170
|
-
name: this.idName,
|
2171
|
-
description: this.description,
|
2172
|
-
identityKey: this.identityKey,
|
2173
|
-
rootPath: this.#rootPath,
|
2174
|
-
rootAddress: this.rootAddress,
|
2175
|
-
previousPath: this.#previousPath,
|
2176
|
-
currentPath: this.#currentPath,
|
2177
|
-
idSeed: this.#idSeed,
|
2178
|
-
identityAttributes: this.getAttributes(),
|
2179
|
-
lastIdPath: ''
|
2180
|
-
};
|
2181
|
-
}
|
2182
|
-
}
|
2183
|
-
|
2184
|
-
export {
|
2185
|
-
BAP_ID,
|
2186
|
-
}
|
2187
|
-
</pre></td></tr></table></pre>
|
2188
|
-
|
2189
|
-
<div class='push'></div><!-- for sticky footer -->
|
2190
|
-
</div><!-- /wrapper -->
|
2191
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
2192
|
-
Code coverage generated by
|
2193
|
-
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
2194
|
-
at Tue Aug 27 2024 10:04:22 GMT-0400 (Eastern Daylight Time)
|
2195
|
-
</div>
|
2196
|
-
</div>
|
2197
|
-
<script src="../prettify.js"></script>
|
2198
|
-
<script>
|
2199
|
-
window.onload = function () {
|
2200
|
-
prettyPrint();
|
2201
|
-
};
|
2202
|
-
</script>
|
2203
|
-
<script src="../sorter.js"></script>
|
2204
|
-
<script src="../block-navigation.js"></script>
|
2205
|
-
</body>
|
2206
|
-
</html>
|
2207
|
-
|