projax 3.3.58 → 3.3.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/electron/script-runner.js +52 -20
  2. package/dist/index.js +1 -1
  3. package/dist/prxi.js +844 -109
  4. package/dist/prxi.tsx +1234 -179
  5. package/dist/script-runner.js +52 -20
  6. package/package.json +1 -1
  7. package/coverage/base.css +0 -224
  8. package/coverage/block-navigation.js +0 -87
  9. package/coverage/core-bridge.ts.html +0 -292
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +0 -191
  12. package/coverage/lcov-report/base.css +0 -224
  13. package/coverage/lcov-report/block-navigation.js +0 -87
  14. package/coverage/lcov-report/core-bridge.ts.html +0 -292
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +0 -191
  17. package/coverage/lcov-report/port-extractor.ts.html +0 -1174
  18. package/coverage/lcov-report/port-scanner.ts.html +0 -301
  19. package/coverage/lcov-report/port-utils.ts.html +0 -670
  20. package/coverage/lcov-report/prettify.css +0 -1
  21. package/coverage/lcov-report/prettify.js +0 -2
  22. package/coverage/lcov-report/script-runner.ts.html +0 -3346
  23. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  24. package/coverage/lcov-report/sorter.js +0 -210
  25. package/coverage/lcov-report/test-parser.ts.html +0 -799
  26. package/coverage/lcov.info +0 -1338
  27. package/coverage/port-extractor.ts.html +0 -1174
  28. package/coverage/port-scanner.ts.html +0 -301
  29. package/coverage/port-utils.ts.html +0 -670
  30. package/coverage/prettify.css +0 -1
  31. package/coverage/prettify.js +0 -2
  32. package/coverage/script-runner.ts.html +0 -3346
  33. package/coverage/sort-arrow-sprite.png +0 -0
  34. package/coverage/sorter.js +0 -210
  35. package/coverage/test-parser.ts.html +0 -799
  36. package/dist/__tests__/core-bridge.test.d.ts +0 -1
  37. package/dist/__tests__/core-bridge.test.js +0 -135
  38. package/dist/__tests__/port-extractor.test.d.ts +0 -1
  39. package/dist/__tests__/port-extractor.test.js +0 -407
  40. package/dist/__tests__/port-scanner.test.d.ts +0 -1
  41. package/dist/__tests__/port-scanner.test.js +0 -170
  42. package/dist/__tests__/port-utils.test.d.ts +0 -1
  43. package/dist/__tests__/port-utils.test.js +0 -127
  44. package/dist/__tests__/script-runner.test.d.ts +0 -1
  45. package/dist/__tests__/script-runner.test.js +0 -491
  46. package/dist/__tests__/test-parser.test.d.ts +0 -1
  47. package/dist/__tests__/test-parser.test.js +0 -276
  48. package/dist/api/__tests__/database.test.d.ts +0 -2
  49. package/dist/api/__tests__/database.test.d.ts.map +0 -1
  50. package/dist/api/__tests__/database.test.js +0 -485
  51. package/dist/api/__tests__/database.test.js.map +0 -1
  52. package/dist/api/__tests__/routes.test.d.ts +0 -2
  53. package/dist/api/__tests__/routes.test.d.ts.map +0 -1
  54. package/dist/api/__tests__/routes.test.js +0 -484
  55. package/dist/api/__tests__/routes.test.js.map +0 -1
  56. package/dist/api/__tests__/scanner.test.d.ts +0 -2
  57. package/dist/api/__tests__/scanner.test.d.ts.map +0 -1
  58. package/dist/api/__tests__/scanner.test.js +0 -403
  59. package/dist/api/__tests__/scanner.test.js.map +0 -1
  60. package/dist/core/__tests__/database.test.d.ts +0 -1
  61. package/dist/core/__tests__/database.test.js +0 -557
  62. package/dist/core/__tests__/detector.test.d.ts +0 -1
  63. package/dist/core/__tests__/detector.test.js +0 -375
  64. package/dist/core/__tests__/index.test.d.ts +0 -1
  65. package/dist/core/__tests__/index.test.js +0 -469
  66. package/dist/core/__tests__/scanner.test.d.ts +0 -1
  67. package/dist/core/__tests__/scanner.test.js +0 -406
  68. package/dist/core/__tests__/settings.test.d.ts +0 -1
  69. package/dist/core/__tests__/settings.test.js +0 -280
  70. package/dist/electron/core/__tests__/database.test.d.ts +0 -1
  71. package/dist/electron/core/__tests__/database.test.js +0 -557
  72. package/dist/electron/core/__tests__/detector.test.d.ts +0 -1
  73. package/dist/electron/core/__tests__/detector.test.js +0 -375
  74. package/dist/electron/core/__tests__/index.test.d.ts +0 -1
  75. package/dist/electron/core/__tests__/index.test.js +0 -469
  76. package/dist/electron/core/__tests__/scanner.test.d.ts +0 -1
  77. package/dist/electron/core/__tests__/scanner.test.js +0 -406
  78. package/dist/electron/core/__tests__/settings.test.d.ts +0 -1
  79. package/dist/electron/core/__tests__/settings.test.js +0 -280
  80. package/jest.config.js +0 -26
@@ -1,3346 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for script-runner.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> script-runner.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">25% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>122/488</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">21.89% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>30/137</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">26% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>13/50</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">25.21% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>120/476</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
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a>
799
- <a name='L734'></a><a href='#L734'>734</a>
800
- <a name='L735'></a><a href='#L735'>735</a>
801
- <a name='L736'></a><a href='#L736'>736</a>
802
- <a name='L737'></a><a href='#L737'>737</a>
803
- <a name='L738'></a><a href='#L738'>738</a>
804
- <a name='L739'></a><a href='#L739'>739</a>
805
- <a name='L740'></a><a href='#L740'>740</a>
806
- <a name='L741'></a><a href='#L741'>741</a>
807
- <a name='L742'></a><a href='#L742'>742</a>
808
- <a name='L743'></a><a href='#L743'>743</a>
809
- <a name='L744'></a><a href='#L744'>744</a>
810
- <a name='L745'></a><a href='#L745'>745</a>
811
- <a name='L746'></a><a href='#L746'>746</a>
812
- <a name='L747'></a><a href='#L747'>747</a>
813
- <a name='L748'></a><a href='#L748'>748</a>
814
- <a name='L749'></a><a href='#L749'>749</a>
815
- <a name='L750'></a><a href='#L750'>750</a>
816
- <a name='L751'></a><a href='#L751'>751</a>
817
- <a name='L752'></a><a href='#L752'>752</a>
818
- <a name='L753'></a><a href='#L753'>753</a>
819
- <a name='L754'></a><a href='#L754'>754</a>
820
- <a name='L755'></a><a href='#L755'>755</a>
821
- <a name='L756'></a><a href='#L756'>756</a>
822
- <a name='L757'></a><a href='#L757'>757</a>
823
- <a name='L758'></a><a href='#L758'>758</a>
824
- <a name='L759'></a><a href='#L759'>759</a>
825
- <a name='L760'></a><a href='#L760'>760</a>
826
- <a name='L761'></a><a href='#L761'>761</a>
827
- <a name='L762'></a><a href='#L762'>762</a>
828
- <a name='L763'></a><a href='#L763'>763</a>
829
- <a name='L764'></a><a href='#L764'>764</a>
830
- <a name='L765'></a><a href='#L765'>765</a>
831
- <a name='L766'></a><a href='#L766'>766</a>
832
- <a name='L767'></a><a href='#L767'>767</a>
833
- <a name='L768'></a><a href='#L768'>768</a>
834
- <a name='L769'></a><a href='#L769'>769</a>
835
- <a name='L770'></a><a href='#L770'>770</a>
836
- <a name='L771'></a><a href='#L771'>771</a>
837
- <a name='L772'></a><a href='#L772'>772</a>
838
- <a name='L773'></a><a href='#L773'>773</a>
839
- <a name='L774'></a><a href='#L774'>774</a>
840
- <a name='L775'></a><a href='#L775'>775</a>
841
- <a name='L776'></a><a href='#L776'>776</a>
842
- <a name='L777'></a><a href='#L777'>777</a>
843
- <a name='L778'></a><a href='#L778'>778</a>
844
- <a name='L779'></a><a href='#L779'>779</a>
845
- <a name='L780'></a><a href='#L780'>780</a>
846
- <a name='L781'></a><a href='#L781'>781</a>
847
- <a name='L782'></a><a href='#L782'>782</a>
848
- <a name='L783'></a><a href='#L783'>783</a>
849
- <a name='L784'></a><a href='#L784'>784</a>
850
- <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a>
852
- <a name='L787'></a><a href='#L787'>787</a>
853
- <a name='L788'></a><a href='#L788'>788</a>
854
- <a name='L789'></a><a href='#L789'>789</a>
855
- <a name='L790'></a><a href='#L790'>790</a>
856
- <a name='L791'></a><a href='#L791'>791</a>
857
- <a name='L792'></a><a href='#L792'>792</a>
858
- <a name='L793'></a><a href='#L793'>793</a>
859
- <a name='L794'></a><a href='#L794'>794</a>
860
- <a name='L795'></a><a href='#L795'>795</a>
861
- <a name='L796'></a><a href='#L796'>796</a>
862
- <a name='L797'></a><a href='#L797'>797</a>
863
- <a name='L798'></a><a href='#L798'>798</a>
864
- <a name='L799'></a><a href='#L799'>799</a>
865
- <a name='L800'></a><a href='#L800'>800</a>
866
- <a name='L801'></a><a href='#L801'>801</a>
867
- <a name='L802'></a><a href='#L802'>802</a>
868
- <a name='L803'></a><a href='#L803'>803</a>
869
- <a name='L804'></a><a href='#L804'>804</a>
870
- <a name='L805'></a><a href='#L805'>805</a>
871
- <a name='L806'></a><a href='#L806'>806</a>
872
- <a name='L807'></a><a href='#L807'>807</a>
873
- <a name='L808'></a><a href='#L808'>808</a>
874
- <a name='L809'></a><a href='#L809'>809</a>
875
- <a name='L810'></a><a href='#L810'>810</a>
876
- <a name='L811'></a><a href='#L811'>811</a>
877
- <a name='L812'></a><a href='#L812'>812</a>
878
- <a name='L813'></a><a href='#L813'>813</a>
879
- <a name='L814'></a><a href='#L814'>814</a>
880
- <a name='L815'></a><a href='#L815'>815</a>
881
- <a name='L816'></a><a href='#L816'>816</a>
882
- <a name='L817'></a><a href='#L817'>817</a>
883
- <a name='L818'></a><a href='#L818'>818</a>
884
- <a name='L819'></a><a href='#L819'>819</a>
885
- <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a>
887
- <a name='L822'></a><a href='#L822'>822</a>
888
- <a name='L823'></a><a href='#L823'>823</a>
889
- <a name='L824'></a><a href='#L824'>824</a>
890
- <a name='L825'></a><a href='#L825'>825</a>
891
- <a name='L826'></a><a href='#L826'>826</a>
892
- <a name='L827'></a><a href='#L827'>827</a>
893
- <a name='L828'></a><a href='#L828'>828</a>
894
- <a name='L829'></a><a href='#L829'>829</a>
895
- <a name='L830'></a><a href='#L830'>830</a>
896
- <a name='L831'></a><a href='#L831'>831</a>
897
- <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a>
900
- <a name='L835'></a><a href='#L835'>835</a>
901
- <a name='L836'></a><a href='#L836'>836</a>
902
- <a name='L837'></a><a href='#L837'>837</a>
903
- <a name='L838'></a><a href='#L838'>838</a>
904
- <a name='L839'></a><a href='#L839'>839</a>
905
- <a name='L840'></a><a href='#L840'>840</a>
906
- <a name='L841'></a><a href='#L841'>841</a>
907
- <a name='L842'></a><a href='#L842'>842</a>
908
- <a name='L843'></a><a href='#L843'>843</a>
909
- <a name='L844'></a><a href='#L844'>844</a>
910
- <a name='L845'></a><a href='#L845'>845</a>
911
- <a name='L846'></a><a href='#L846'>846</a>
912
- <a name='L847'></a><a href='#L847'>847</a>
913
- <a name='L848'></a><a href='#L848'>848</a>
914
- <a name='L849'></a><a href='#L849'>849</a>
915
- <a name='L850'></a><a href='#L850'>850</a>
916
- <a name='L851'></a><a href='#L851'>851</a>
917
- <a name='L852'></a><a href='#L852'>852</a>
918
- <a name='L853'></a><a href='#L853'>853</a>
919
- <a name='L854'></a><a href='#L854'>854</a>
920
- <a name='L855'></a><a href='#L855'>855</a>
921
- <a name='L856'></a><a href='#L856'>856</a>
922
- <a name='L857'></a><a href='#L857'>857</a>
923
- <a name='L858'></a><a href='#L858'>858</a>
924
- <a name='L859'></a><a href='#L859'>859</a>
925
- <a name='L860'></a><a href='#L860'>860</a>
926
- <a name='L861'></a><a href='#L861'>861</a>
927
- <a name='L862'></a><a href='#L862'>862</a>
928
- <a name='L863'></a><a href='#L863'>863</a>
929
- <a name='L864'></a><a href='#L864'>864</a>
930
- <a name='L865'></a><a href='#L865'>865</a>
931
- <a name='L866'></a><a href='#L866'>866</a>
932
- <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
1154
- <span class="cline-any cline-yes">1x</span>
1155
- <span class="cline-any cline-yes">1x</span>
1156
- <span class="cline-any cline-yes">1x</span>
1157
- <span class="cline-any cline-yes">1x</span>
1158
- <span class="cline-any cline-yes">1x</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-neutral">&nbsp;</span>
1162
- <span class="cline-any cline-neutral">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-neutral">&nbsp;</span>
1165
- <span class="cline-any cline-neutral">&nbsp;</span>
1166
- <span class="cline-any cline-neutral">&nbsp;</span>
1167
- <span class="cline-any cline-neutral">&nbsp;</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-neutral">&nbsp;</span>
1172
- <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-neutral">&nbsp;</span>
1175
- <span class="cline-any cline-neutral">&nbsp;</span>
1176
- <span class="cline-any cline-neutral">&nbsp;</span>
1177
- <span class="cline-any cline-yes">1x</span>
1178
- <span class="cline-any cline-yes">26x</span>
1179
- <span class="cline-any cline-yes">7x</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-yes">19x</span>
1182
- <span class="cline-any cline-yes">5x</span>
1183
- <span class="cline-any cline-neutral">&nbsp;</span>
1184
- <span class="cline-any cline-yes">14x</span>
1185
- <span class="cline-any cline-yes">2x</span>
1186
- <span class="cline-any cline-neutral">&nbsp;</span>
1187
- <span class="cline-any cline-yes">12x</span>
1188
- <span class="cline-any cline-yes">3x</span>
1189
- <span class="cline-any cline-neutral">&nbsp;</span>
1190
- <span class="cline-any cline-yes">9x</span>
1191
- <span class="cline-any cline-yes">7x</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-yes">2x</span>
1194
- <span class="cline-any cline-neutral">&nbsp;</span>
1195
- <span class="cline-any cline-neutral">&nbsp;</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-yes">5x</span>
1201
- <span class="cline-any cline-yes">5x</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-neutral">&nbsp;</span>
1204
- <span class="cline-any cline-neutral">&nbsp;</span>
1205
- <span class="cline-any cline-yes">5x</span>
1206
- <span class="cline-any cline-yes">5x</span>
1207
- <span class="cline-any cline-yes">4x</span>
1208
- <span class="cline-any cline-yes">4x</span>
1209
- <span class="cline-any cline-neutral">&nbsp;</span>
1210
- <span class="cline-any cline-yes">4x</span>
1211
- <span class="cline-any cline-yes">6x</span>
1212
- <span class="cline-any cline-yes">5x</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-neutral">&nbsp;</span>
1215
- <span class="cline-any cline-neutral">&nbsp;</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-neutral">&nbsp;</span>
1218
- <span class="cline-any cline-neutral">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-neutral">&nbsp;</span>
1221
- <span class="cline-any cline-yes">4x</span>
1222
- <span class="cline-any cline-neutral">&nbsp;</span>
1223
- <span class="cline-any cline-yes">1x</span>
1224
- <span class="cline-any cline-neutral">&nbsp;</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-neutral">&nbsp;</span>
1228
- <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-neutral">&nbsp;</span>
1230
- <span class="cline-any cline-neutral">&nbsp;</span>
1231
- <span class="cline-any cline-yes">4x</span>
1232
- <span class="cline-any cline-yes">4x</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-neutral">&nbsp;</span>
1236
- <span class="cline-any cline-yes">4x</span>
1237
- <span class="cline-any cline-yes">4x</span>
1238
- <span class="cline-any cline-yes">4x</span>
1239
- <span class="cline-any cline-neutral">&nbsp;</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-neutral">&nbsp;</span>
1242
- <span class="cline-any cline-yes">4x</span>
1243
- <span class="cline-any cline-yes">4x</span>
1244
- <span class="cline-any cline-yes">2x</span>
1245
- <span class="cline-any cline-yes">2x</span>
1246
- <span class="cline-any cline-neutral">&nbsp;</span>
1247
- <span class="cline-any cline-yes">2x</span>
1248
- <span class="cline-any cline-yes">6x</span>
1249
- <span class="cline-any cline-yes">6x</span>
1250
- <span class="cline-any cline-yes">3x</span>
1251
- <span class="cline-any cline-yes">3x</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-neutral">&nbsp;</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-neutral">&nbsp;</span>
1259
- <span class="cline-any cline-neutral">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-yes">4x</span>
1263
- <span class="cline-any cline-yes">4x</span>
1264
- <span class="cline-any cline-yes">2x</span>
1265
- <span class="cline-any cline-yes">2x</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-yes">2x</span>
1268
- <span class="cline-any cline-yes">5x</span>
1269
- <span class="cline-any cline-yes">5x</span>
1270
- <span class="cline-any cline-yes">3x</span>
1271
- <span class="cline-any cline-yes">3x</span>
1272
- <span class="cline-any cline-neutral">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-neutral">&nbsp;</span>
1276
- <span class="cline-any cline-neutral">&nbsp;</span>
1277
- <span class="cline-any cline-neutral">&nbsp;</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</span>
1281
- <span class="cline-any cline-yes">4x</span>
1282
- <span class="cline-any cline-neutral">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-neutral">&nbsp;</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-neutral">&nbsp;</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-yes">1x</span>
1293
- <span class="cline-any cline-neutral">&nbsp;</span>
1294
- <span class="cline-any cline-neutral">&nbsp;</span>
1295
- <span class="cline-any cline-yes">1x</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-yes">1x</span>
1305
- <span class="cline-any cline-yes">6x</span>
1306
- <span class="cline-any cline-neutral">&nbsp;</span>
1307
- <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-neutral">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-neutral">&nbsp;</span>
1313
- <span class="cline-any cline-yes">1x</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-neutral">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-neutral">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-neutral">&nbsp;</span>
1320
- <span class="cline-any cline-yes">8x</span>
1321
- <span class="cline-any cline-neutral">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-yes">8x</span>
1325
- <span class="cline-any cline-yes">2x</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-yes">6x</span>
1329
- <span class="cline-any cline-yes">6x</span>
1330
- <span class="cline-any cline-yes">6x</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-yes">6x</span>
1335
- <span class="cline-any cline-neutral">&nbsp;</span>
1336
- <span class="cline-any cline-neutral">&nbsp;</span>
1337
- <span class="cline-any cline-yes">6x</span>
1338
- <span class="cline-any cline-yes">12x</span>
1339
- <span class="cline-any cline-neutral">&nbsp;</span>
1340
- <span class="cline-any cline-yes">12x</span>
1341
- <span class="cline-any cline-yes">12x</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-neutral">&nbsp;</span>
1350
- <span class="cline-any cline-yes">6x</span>
1351
- <span class="cline-any cline-neutral">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-neutral">&nbsp;</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-yes">1x</span>
1360
- <span class="cline-any cline-yes">18x</span>
1361
- <span class="cline-any cline-yes">18x</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-yes">18x</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-yes">5x</span>
1366
- <span class="cline-any cline-yes">5x</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-yes">4x</span>
1369
- <span class="cline-any cline-yes">4x</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-yes">1x</span>
1372
- <span class="cline-any cline-yes">1x</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-yes">5x</span>
1375
- <span class="cline-any cline-yes">5x</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-yes">2x</span>
1380
- <span class="cline-any cline-yes">2x</span>
1381
- <span class="cline-any cline-yes">1x</span>
1382
- <span class="cline-any cline-neutral">&nbsp;</span>
1383
- <span class="cline-any cline-neutral">&nbsp;</span>
1384
- <span class="cline-any cline-yes">1x</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-neutral">&nbsp;</span>
1387
- <span class="cline-any cline-neutral">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-yes">1x</span>
1391
- <span class="cline-any cline-neutral">&nbsp;</span>
1392
- <span class="cline-any cline-neutral">&nbsp;</span>
1393
- <span class="cline-any cline-neutral">&nbsp;</span>
1394
- <span class="cline-any cline-neutral">&nbsp;</span>
1395
- <span class="cline-any cline-neutral">&nbsp;</span>
1396
- <span class="cline-any cline-yes">1x</span>
1397
- <span class="cline-any cline-neutral">&nbsp;</span>
1398
- <span class="cline-any cline-neutral">&nbsp;</span>
1399
- <span class="cline-any cline-neutral">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-neutral">&nbsp;</span>
1403
- <span class="cline-any cline-yes">2x</span>
1404
- <span class="cline-any cline-neutral">&nbsp;</span>
1405
- <span class="cline-any cline-neutral">&nbsp;</span>
1406
- <span class="cline-any cline-yes">1x</span>
1407
- <span class="cline-any cline-yes">1x</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-neutral">&nbsp;</span>
1410
- <span class="cline-any cline-yes">18x</span>
1411
- <span class="cline-any cline-neutral">&nbsp;</span>
1412
- <span class="cline-any cline-neutral">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-neutral">&nbsp;</span>
1417
- <span class="cline-any cline-neutral">&nbsp;</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-neutral">&nbsp;</span>
1420
- <span class="cline-any cline-neutral">&nbsp;</span>
1421
- <span class="cline-any cline-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-neutral">&nbsp;</span>
1423
- <span class="cline-any cline-neutral">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-neutral">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-neutral">&nbsp;</span>
1452
- <span class="cline-any cline-neutral">&nbsp;</span>
1453
- <span class="cline-any cline-neutral">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-no">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-neutral">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-neutral">&nbsp;</span>
1467
- <span class="cline-any cline-neutral">&nbsp;</span>
1468
- <span class="cline-any cline-neutral">&nbsp;</span>
1469
- <span class="cline-any cline-neutral">&nbsp;</span>
1470
- <span class="cline-any cline-neutral">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-neutral">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&nbsp;</span>
1475
- <span class="cline-any cline-neutral">&nbsp;</span>
1476
- <span class="cline-any cline-neutral">&nbsp;</span>
1477
- <span class="cline-any cline-neutral">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-neutral">&nbsp;</span>
1482
- <span class="cline-any cline-no">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-neutral">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-neutral">&nbsp;</span>
1491
- <span class="cline-any cline-neutral">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-neutral">&nbsp;</span>
1494
- <span class="cline-any cline-neutral">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-neutral">&nbsp;</span>
1500
- <span class="cline-any cline-neutral">&nbsp;</span>
1501
- <span class="cline-any cline-neutral">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-neutral">&nbsp;</span>
1504
- <span class="cline-any cline-neutral">&nbsp;</span>
1505
- <span class="cline-any cline-neutral">&nbsp;</span>
1506
- <span class="cline-any cline-neutral">&nbsp;</span>
1507
- <span class="cline-any cline-neutral">&nbsp;</span>
1508
- <span class="cline-any cline-yes">1x</span>
1509
- <span class="cline-any cline-neutral">&nbsp;</span>
1510
- <span class="cline-any cline-neutral">&nbsp;</span>
1511
- <span class="cline-any cline-neutral">&nbsp;</span>
1512
- <span class="cline-any cline-neutral">&nbsp;</span>
1513
- <span class="cline-any cline-neutral">&nbsp;</span>
1514
- <span class="cline-any cline-no">&nbsp;</span>
1515
- <span class="cline-any cline-no">&nbsp;</span>
1516
- <span class="cline-any cline-no">&nbsp;</span>
1517
- <span class="cline-any cline-neutral">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-neutral">&nbsp;</span>
1523
- <span class="cline-any cline-neutral">&nbsp;</span>
1524
- <span class="cline-any cline-no">&nbsp;</span>
1525
- <span class="cline-any cline-no">&nbsp;</span>
1526
- <span class="cline-any cline-no">&nbsp;</span>
1527
- <span class="cline-any cline-no">&nbsp;</span>
1528
- <span class="cline-any cline-neutral">&nbsp;</span>
1529
- <span class="cline-any cline-neutral">&nbsp;</span>
1530
- <span class="cline-any cline-neutral">&nbsp;</span>
1531
- <span class="cline-any cline-neutral">&nbsp;</span>
1532
- <span class="cline-any cline-neutral">&nbsp;</span>
1533
- <span class="cline-any cline-no">&nbsp;</span>
1534
- <span class="cline-any cline-neutral">&nbsp;</span>
1535
- <span class="cline-any cline-no">&nbsp;</span>
1536
- <span class="cline-any cline-no">&nbsp;</span>
1537
- <span class="cline-any cline-no">&nbsp;</span>
1538
- <span class="cline-any cline-neutral">&nbsp;</span>
1539
- <span class="cline-any cline-no">&nbsp;</span>
1540
- <span class="cline-any cline-no">&nbsp;</span>
1541
- <span class="cline-any cline-no">&nbsp;</span>
1542
- <span class="cline-any cline-neutral">&nbsp;</span>
1543
- <span class="cline-any cline-no">&nbsp;</span>
1544
- <span class="cline-any cline-no">&nbsp;</span>
1545
- <span class="cline-any cline-no">&nbsp;</span>
1546
- <span class="cline-any cline-neutral">&nbsp;</span>
1547
- <span class="cline-any cline-no">&nbsp;</span>
1548
- <span class="cline-any cline-no">&nbsp;</span>
1549
- <span class="cline-any cline-no">&nbsp;</span>
1550
- <span class="cline-any cline-neutral">&nbsp;</span>
1551
- <span class="cline-any cline-no">&nbsp;</span>
1552
- <span class="cline-any cline-neutral">&nbsp;</span>
1553
- <span class="cline-any cline-no">&nbsp;</span>
1554
- <span class="cline-any cline-no">&nbsp;</span>
1555
- <span class="cline-any cline-no">&nbsp;</span>
1556
- <span class="cline-any cline-neutral">&nbsp;</span>
1557
- <span class="cline-any cline-no">&nbsp;</span>
1558
- <span class="cline-any cline-no">&nbsp;</span>
1559
- <span class="cline-any cline-no">&nbsp;</span>
1560
- <span class="cline-any cline-neutral">&nbsp;</span>
1561
- <span class="cline-any cline-no">&nbsp;</span>
1562
- <span class="cline-any cline-no">&nbsp;</span>
1563
- <span class="cline-any cline-no">&nbsp;</span>
1564
- <span class="cline-any cline-no">&nbsp;</span>
1565
- <span class="cline-any cline-neutral">&nbsp;</span>
1566
- <span class="cline-any cline-no">&nbsp;</span>
1567
- <span class="cline-any cline-neutral">&nbsp;</span>
1568
- <span class="cline-any cline-no">&nbsp;</span>
1569
- <span class="cline-any cline-neutral">&nbsp;</span>
1570
- <span class="cline-any cline-no">&nbsp;</span>
1571
- <span class="cline-any cline-no">&nbsp;</span>
1572
- <span class="cline-any cline-no">&nbsp;</span>
1573
- <span class="cline-any cline-neutral">&nbsp;</span>
1574
- <span class="cline-any cline-neutral">&nbsp;</span>
1575
- <span class="cline-any cline-no">&nbsp;</span>
1576
- <span class="cline-any cline-no">&nbsp;</span>
1577
- <span class="cline-any cline-no">&nbsp;</span>
1578
- <span class="cline-any cline-no">&nbsp;</span>
1579
- <span class="cline-any cline-neutral">&nbsp;</span>
1580
- <span class="cline-any cline-neutral">&nbsp;</span>
1581
- <span class="cline-any cline-no">&nbsp;</span>
1582
- <span class="cline-any cline-no">&nbsp;</span>
1583
- <span class="cline-any cline-neutral">&nbsp;</span>
1584
- <span class="cline-any cline-neutral">&nbsp;</span>
1585
- <span class="cline-any cline-no">&nbsp;</span>
1586
- <span class="cline-any cline-no">&nbsp;</span>
1587
- <span class="cline-any cline-neutral">&nbsp;</span>
1588
- <span class="cline-any cline-no">&nbsp;</span>
1589
- <span class="cline-any cline-neutral">&nbsp;</span>
1590
- <span class="cline-any cline-neutral">&nbsp;</span>
1591
- <span class="cline-any cline-neutral">&nbsp;</span>
1592
- <span class="cline-any cline-neutral">&nbsp;</span>
1593
- <span class="cline-any cline-neutral">&nbsp;</span>
1594
- <span class="cline-any cline-neutral">&nbsp;</span>
1595
- <span class="cline-any cline-no">&nbsp;</span>
1596
- <span class="cline-any cline-no">&nbsp;</span>
1597
- <span class="cline-any cline-no">&nbsp;</span>
1598
- <span class="cline-any cline-no">&nbsp;</span>
1599
- <span class="cline-any cline-neutral">&nbsp;</span>
1600
- <span class="cline-any cline-neutral">&nbsp;</span>
1601
- <span class="cline-any cline-neutral">&nbsp;</span>
1602
- <span class="cline-any cline-no">&nbsp;</span>
1603
- <span class="cline-any cline-no">&nbsp;</span>
1604
- <span class="cline-any cline-no">&nbsp;</span>
1605
- <span class="cline-any cline-no">&nbsp;</span>
1606
- <span class="cline-any cline-neutral">&nbsp;</span>
1607
- <span class="cline-any cline-neutral">&nbsp;</span>
1608
- <span class="cline-any cline-neutral">&nbsp;</span>
1609
- <span class="cline-any cline-no">&nbsp;</span>
1610
- <span class="cline-any cline-no">&nbsp;</span>
1611
- <span class="cline-any cline-no">&nbsp;</span>
1612
- <span class="cline-any cline-neutral">&nbsp;</span>
1613
- <span class="cline-any cline-neutral">&nbsp;</span>
1614
- <span class="cline-any cline-no">&nbsp;</span>
1615
- <span class="cline-any cline-no">&nbsp;</span>
1616
- <span class="cline-any cline-neutral">&nbsp;</span>
1617
- <span class="cline-any cline-no">&nbsp;</span>
1618
- <span class="cline-any cline-no">&nbsp;</span>
1619
- <span class="cline-any cline-no">&nbsp;</span>
1620
- <span class="cline-any cline-no">&nbsp;</span>
1621
- <span class="cline-any cline-neutral">&nbsp;</span>
1622
- <span class="cline-any cline-no">&nbsp;</span>
1623
- <span class="cline-any cline-no">&nbsp;</span>
1624
- <span class="cline-any cline-neutral">&nbsp;</span>
1625
- <span class="cline-any cline-no">&nbsp;</span>
1626
- <span class="cline-any cline-no">&nbsp;</span>
1627
- <span class="cline-any cline-no">&nbsp;</span>
1628
- <span class="cline-any cline-neutral">&nbsp;</span>
1629
- <span class="cline-any cline-no">&nbsp;</span>
1630
- <span class="cline-any cline-neutral">&nbsp;</span>
1631
- <span class="cline-any cline-neutral">&nbsp;</span>
1632
- <span class="cline-any cline-no">&nbsp;</span>
1633
- <span class="cline-any cline-neutral">&nbsp;</span>
1634
- <span class="cline-any cline-neutral">&nbsp;</span>
1635
- <span class="cline-any cline-no">&nbsp;</span>
1636
- <span class="cline-any cline-neutral">&nbsp;</span>
1637
- <span class="cline-any cline-neutral">&nbsp;</span>
1638
- <span class="cline-any cline-neutral">&nbsp;</span>
1639
- <span class="cline-any cline-neutral">&nbsp;</span>
1640
- <span class="cline-any cline-no">&nbsp;</span>
1641
- <span class="cline-any cline-no">&nbsp;</span>
1642
- <span class="cline-any cline-neutral">&nbsp;</span>
1643
- <span class="cline-any cline-neutral">&nbsp;</span>
1644
- <span class="cline-any cline-neutral">&nbsp;</span>
1645
- <span class="cline-any cline-neutral">&nbsp;</span>
1646
- <span class="cline-any cline-neutral">&nbsp;</span>
1647
- <span class="cline-any cline-neutral">&nbsp;</span>
1648
- <span class="cline-any cline-neutral">&nbsp;</span>
1649
- <span class="cline-any cline-neutral">&nbsp;</span>
1650
- <span class="cline-any cline-neutral">&nbsp;</span>
1651
- <span class="cline-any cline-neutral">&nbsp;</span>
1652
- <span class="cline-any cline-neutral">&nbsp;</span>
1653
- <span class="cline-any cline-neutral">&nbsp;</span>
1654
- <span class="cline-any cline-neutral">&nbsp;</span>
1655
- <span class="cline-any cline-neutral">&nbsp;</span>
1656
- <span class="cline-any cline-neutral">&nbsp;</span>
1657
- <span class="cline-any cline-neutral">&nbsp;</span>
1658
- <span class="cline-any cline-neutral">&nbsp;</span>
1659
- <span class="cline-any cline-neutral">&nbsp;</span>
1660
- <span class="cline-any cline-neutral">&nbsp;</span>
1661
- <span class="cline-any cline-neutral">&nbsp;</span>
1662
- <span class="cline-any cline-yes">12x</span>
1663
- <span class="cline-any cline-yes">12x</span>
1664
- <span class="cline-any cline-yes">2x</span>
1665
- <span class="cline-any cline-neutral">&nbsp;</span>
1666
- <span class="cline-any cline-yes">12x</span>
1667
- <span class="cline-any cline-neutral">&nbsp;</span>
1668
- <span class="cline-any cline-neutral">&nbsp;</span>
1669
- <span class="cline-any cline-neutral">&nbsp;</span>
1670
- <span class="cline-any cline-neutral">&nbsp;</span>
1671
- <span class="cline-any cline-neutral">&nbsp;</span>
1672
- <span class="cline-any cline-yes">1x</span>
1673
- <span class="cline-any cline-yes">10x</span>
1674
- <span class="cline-any cline-yes">10x</span>
1675
- <span class="cline-any cline-yes">2x</span>
1676
- <span class="cline-any cline-neutral">&nbsp;</span>
1677
- <span class="cline-any cline-yes">8x</span>
1678
- <span class="cline-any cline-yes">8x</span>
1679
- <span class="cline-any cline-yes">8x</span>
1680
- <span class="cline-any cline-neutral">&nbsp;</span>
1681
- <span class="cline-any cline-yes">1x</span>
1682
- <span class="cline-any cline-neutral">&nbsp;</span>
1683
- <span class="cline-any cline-neutral">&nbsp;</span>
1684
- <span class="cline-any cline-neutral">&nbsp;</span>
1685
- <span class="cline-any cline-neutral">&nbsp;</span>
1686
- <span class="cline-any cline-neutral">&nbsp;</span>
1687
- <span class="cline-any cline-neutral">&nbsp;</span>
1688
- <span class="cline-any cline-neutral">&nbsp;</span>
1689
- <span class="cline-any cline-yes">2x</span>
1690
- <span class="cline-any cline-yes">2x</span>
1691
- <span class="cline-any cline-neutral">&nbsp;</span>
1692
- <span class="cline-any cline-neutral">&nbsp;</span>
1693
- <span class="cline-any cline-neutral">&nbsp;</span>
1694
- <span class="cline-any cline-neutral">&nbsp;</span>
1695
- <span class="cline-any cline-neutral">&nbsp;</span>
1696
- <span class="cline-any cline-neutral">&nbsp;</span>
1697
- <span class="cline-any cline-no">&nbsp;</span>
1698
- <span class="cline-any cline-no">&nbsp;</span>
1699
- <span class="cline-any cline-no">&nbsp;</span>
1700
- <span class="cline-any cline-neutral">&nbsp;</span>
1701
- <span class="cline-any cline-neutral">&nbsp;</span>
1702
- <span class="cline-any cline-neutral">&nbsp;</span>
1703
- <span class="cline-any cline-neutral">&nbsp;</span>
1704
- <span class="cline-any cline-neutral">&nbsp;</span>
1705
- <span class="cline-any cline-yes">1x</span>
1706
- <span class="cline-any cline-yes">2x</span>
1707
- <span class="cline-any cline-yes">3x</span>
1708
- <span class="cline-any cline-yes">2x</span>
1709
- <span class="cline-any cline-neutral">&nbsp;</span>
1710
- <span class="cline-any cline-neutral">&nbsp;</span>
1711
- <span class="cline-any cline-neutral">&nbsp;</span>
1712
- <span class="cline-any cline-neutral">&nbsp;</span>
1713
- <span class="cline-any cline-neutral">&nbsp;</span>
1714
- <span class="cline-any cline-yes">1x</span>
1715
- <span class="cline-any cline-yes">3x</span>
1716
- <span class="cline-any cline-yes">6x</span>
1717
- <span class="cline-any cline-neutral">&nbsp;</span>
1718
- <span class="cline-any cline-neutral">&nbsp;</span>
1719
- <span class="cline-any cline-neutral">&nbsp;</span>
1720
- <span class="cline-any cline-neutral">&nbsp;</span>
1721
- <span class="cline-any cline-neutral">&nbsp;</span>
1722
- <span class="cline-any cline-neutral">&nbsp;</span>
1723
- <span class="cline-any cline-no">&nbsp;</span>
1724
- <span class="cline-any cline-no">&nbsp;</span>
1725
- <span class="cline-any cline-no">&nbsp;</span>
1726
- <span class="cline-any cline-no">&nbsp;</span>
1727
- <span class="cline-any cline-no">&nbsp;</span>
1728
- <span class="cline-any cline-no">&nbsp;</span>
1729
- <span class="cline-any cline-no">&nbsp;</span>
1730
- <span class="cline-any cline-neutral">&nbsp;</span>
1731
- <span class="cline-any cline-neutral">&nbsp;</span>
1732
- <span class="cline-any cline-no">&nbsp;</span>
1733
- <span class="cline-any cline-no">&nbsp;</span>
1734
- <span class="cline-any cline-no">&nbsp;</span>
1735
- <span class="cline-any cline-neutral">&nbsp;</span>
1736
- <span class="cline-any cline-no">&nbsp;</span>
1737
- <span class="cline-any cline-neutral">&nbsp;</span>
1738
- <span class="cline-any cline-neutral">&nbsp;</span>
1739
- <span class="cline-any cline-neutral">&nbsp;</span>
1740
- <span class="cline-any cline-no">&nbsp;</span>
1741
- <span class="cline-any cline-neutral">&nbsp;</span>
1742
- <span class="cline-any cline-neutral">&nbsp;</span>
1743
- <span class="cline-any cline-neutral">&nbsp;</span>
1744
- <span class="cline-any cline-neutral">&nbsp;</span>
1745
- <span class="cline-any cline-neutral">&nbsp;</span>
1746
- <span class="cline-any cline-neutral">&nbsp;</span>
1747
- <span class="cline-any cline-neutral">&nbsp;</span>
1748
- <span class="cline-any cline-no">&nbsp;</span>
1749
- <span class="cline-any cline-no">&nbsp;</span>
1750
- <span class="cline-any cline-neutral">&nbsp;</span>
1751
- <span class="cline-any cline-no">&nbsp;</span>
1752
- <span class="cline-any cline-no">&nbsp;</span>
1753
- <span class="cline-any cline-no">&nbsp;</span>
1754
- <span class="cline-any cline-no">&nbsp;</span>
1755
- <span class="cline-any cline-neutral">&nbsp;</span>
1756
- <span class="cline-any cline-neutral">&nbsp;</span>
1757
- <span class="cline-any cline-neutral">&nbsp;</span>
1758
- <span class="cline-any cline-no">&nbsp;</span>
1759
- <span class="cline-any cline-no">&nbsp;</span>
1760
- <span class="cline-any cline-neutral">&nbsp;</span>
1761
- <span class="cline-any cline-neutral">&nbsp;</span>
1762
- <span class="cline-any cline-neutral">&nbsp;</span>
1763
- <span class="cline-any cline-neutral">&nbsp;</span>
1764
- <span class="cline-any cline-neutral">&nbsp;</span>
1765
- <span class="cline-any cline-neutral">&nbsp;</span>
1766
- <span class="cline-any cline-yes">1x</span>
1767
- <span class="cline-any cline-no">&nbsp;</span>
1768
- <span class="cline-any cline-neutral">&nbsp;</span>
1769
- <span class="cline-any cline-neutral">&nbsp;</span>
1770
- <span class="cline-any cline-neutral">&nbsp;</span>
1771
- <span class="cline-any cline-neutral">&nbsp;</span>
1772
- <span class="cline-any cline-neutral">&nbsp;</span>
1773
- <span class="cline-any cline-yes">1x</span>
1774
- <span class="cline-any cline-no">&nbsp;</span>
1775
- <span class="cline-any cline-no">&nbsp;</span>
1776
- <span class="cline-any cline-neutral">&nbsp;</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-neutral">&nbsp;</span>
1779
- <span class="cline-any cline-neutral">&nbsp;</span>
1780
- <span class="cline-any cline-neutral">&nbsp;</span>
1781
- <span class="cline-any cline-neutral">&nbsp;</span>
1782
- <span class="cline-any cline-no">&nbsp;</span>
1783
- <span class="cline-any cline-no">&nbsp;</span>
1784
- <span class="cline-any cline-neutral">&nbsp;</span>
1785
- <span class="cline-any cline-neutral">&nbsp;</span>
1786
- <span class="cline-any cline-neutral">&nbsp;</span>
1787
- <span class="cline-any cline-neutral">&nbsp;</span>
1788
- <span class="cline-any cline-neutral">&nbsp;</span>
1789
- <span class="cline-any cline-neutral">&nbsp;</span>
1790
- <span class="cline-any cline-neutral">&nbsp;</span>
1791
- <span class="cline-any cline-no">&nbsp;</span>
1792
- <span class="cline-any cline-no">&nbsp;</span>
1793
- <span class="cline-any cline-no">&nbsp;</span>
1794
- <span class="cline-any cline-no">&nbsp;</span>
1795
- <span class="cline-any cline-no">&nbsp;</span>
1796
- <span class="cline-any cline-no">&nbsp;</span>
1797
- <span class="cline-any cline-neutral">&nbsp;</span>
1798
- <span class="cline-any cline-neutral">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-neutral">&nbsp;</span>
1801
- <span class="cline-any cline-no">&nbsp;</span>
1802
- <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-neutral">&nbsp;</span>
1804
- <span class="cline-any cline-neutral">&nbsp;</span>
1805
- <span class="cline-any cline-neutral">&nbsp;</span>
1806
- <span class="cline-any cline-neutral">&nbsp;</span>
1807
- <span class="cline-any cline-neutral">&nbsp;</span>
1808
- <span class="cline-any cline-no">&nbsp;</span>
1809
- <span class="cline-any cline-no">&nbsp;</span>
1810
- <span class="cline-any cline-no">&nbsp;</span>
1811
- <span class="cline-any cline-no">&nbsp;</span>
1812
- <span class="cline-any cline-neutral">&nbsp;</span>
1813
- <span class="cline-any cline-no">&nbsp;</span>
1814
- <span class="cline-any cline-no">&nbsp;</span>
1815
- <span class="cline-any cline-no">&nbsp;</span>
1816
- <span class="cline-any cline-no">&nbsp;</span>
1817
- <span class="cline-any cline-no">&nbsp;</span>
1818
- <span class="cline-any cline-neutral">&nbsp;</span>
1819
- <span class="cline-any cline-neutral">&nbsp;</span>
1820
- <span class="cline-any cline-no">&nbsp;</span>
1821
- <span class="cline-any cline-no">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
- <span class="cline-any cline-neutral">&nbsp;</span>
1825
- <span class="cline-any cline-neutral">&nbsp;</span>
1826
- <span class="cline-any cline-neutral">&nbsp;</span>
1827
- <span class="cline-any cline-neutral">&nbsp;</span>
1828
- <span class="cline-any cline-yes">1x</span>
1829
- <span class="cline-any cline-no">&nbsp;</span>
1830
- <span class="cline-any cline-no">&nbsp;</span>
1831
- <span class="cline-any cline-no">&nbsp;</span>
1832
- <span class="cline-any cline-neutral">&nbsp;</span>
1833
- <span class="cline-any cline-no">&nbsp;</span>
1834
- <span class="cline-any cline-no">&nbsp;</span>
1835
- <span class="cline-any cline-neutral">&nbsp;</span>
1836
- <span class="cline-any cline-neutral">&nbsp;</span>
1837
- <span class="cline-any cline-neutral">&nbsp;</span>
1838
- <span class="cline-any cline-no">&nbsp;</span>
1839
- <span class="cline-any cline-no">&nbsp;</span>
1840
- <span class="cline-any cline-no">&nbsp;</span>
1841
- <span class="cline-any cline-no">&nbsp;</span>
1842
- <span class="cline-any cline-no">&nbsp;</span>
1843
- <span class="cline-any cline-no">&nbsp;</span>
1844
- <span class="cline-any cline-no">&nbsp;</span>
1845
- <span class="cline-any cline-no">&nbsp;</span>
1846
- <span class="cline-any cline-neutral">&nbsp;</span>
1847
- <span class="cline-any cline-no">&nbsp;</span>
1848
- <span class="cline-any cline-no">&nbsp;</span>
1849
- <span class="cline-any cline-no">&nbsp;</span>
1850
- <span class="cline-any cline-no">&nbsp;</span>
1851
- <span class="cline-any cline-no">&nbsp;</span>
1852
- <span class="cline-any cline-neutral">&nbsp;</span>
1853
- <span class="cline-any cline-neutral">&nbsp;</span>
1854
- <span class="cline-any cline-neutral">&nbsp;</span>
1855
- <span class="cline-any cline-no">&nbsp;</span>
1856
- <span class="cline-any cline-neutral">&nbsp;</span>
1857
- <span class="cline-any cline-neutral">&nbsp;</span>
1858
- <span class="cline-any cline-neutral">&nbsp;</span>
1859
- <span class="cline-any cline-no">&nbsp;</span>
1860
- <span class="cline-any cline-no">&nbsp;</span>
1861
- <span class="cline-any cline-no">&nbsp;</span>
1862
- <span class="cline-any cline-no">&nbsp;</span>
1863
- <span class="cline-any cline-no">&nbsp;</span>
1864
- <span class="cline-any cline-no">&nbsp;</span>
1865
- <span class="cline-any cline-no">&nbsp;</span>
1866
- <span class="cline-any cline-neutral">&nbsp;</span>
1867
- <span class="cline-any cline-no">&nbsp;</span>
1868
- <span class="cline-any cline-no">&nbsp;</span>
1869
- <span class="cline-any cline-no">&nbsp;</span>
1870
- <span class="cline-any cline-no">&nbsp;</span>
1871
- <span class="cline-any cline-neutral">&nbsp;</span>
1872
- <span class="cline-any cline-neutral">&nbsp;</span>
1873
- <span class="cline-any cline-neutral">&nbsp;</span>
1874
- <span class="cline-any cline-no">&nbsp;</span>
1875
- <span class="cline-any cline-neutral">&nbsp;</span>
1876
- <span class="cline-any cline-neutral">&nbsp;</span>
1877
- <span class="cline-any cline-neutral">&nbsp;</span>
1878
- <span class="cline-any cline-neutral">&nbsp;</span>
1879
- <span class="cline-any cline-no">&nbsp;</span>
1880
- <span class="cline-any cline-no">&nbsp;</span>
1881
- <span class="cline-any cline-neutral">&nbsp;</span>
1882
- <span class="cline-any cline-no">&nbsp;</span>
1883
- <span class="cline-any cline-no">&nbsp;</span>
1884
- <span class="cline-any cline-neutral">&nbsp;</span>
1885
- <span class="cline-any cline-neutral">&nbsp;</span>
1886
- <span class="cline-any cline-neutral">&nbsp;</span>
1887
- <span class="cline-any cline-neutral">&nbsp;</span>
1888
- <span class="cline-any cline-neutral">&nbsp;</span>
1889
- <span class="cline-any cline-neutral">&nbsp;</span>
1890
- <span class="cline-any cline-yes">1x</span>
1891
- <span class="cline-any cline-no">&nbsp;</span>
1892
- <span class="cline-any cline-no">&nbsp;</span>
1893
- <span class="cline-any cline-no">&nbsp;</span>
1894
- <span class="cline-any cline-no">&nbsp;</span>
1895
- <span class="cline-any cline-neutral">&nbsp;</span>
1896
- <span class="cline-any cline-neutral">&nbsp;</span>
1897
- <span class="cline-any cline-neutral">&nbsp;</span>
1898
- <span class="cline-any cline-no">&nbsp;</span>
1899
- <span class="cline-any cline-no">&nbsp;</span>
1900
- <span class="cline-any cline-neutral">&nbsp;</span>
1901
- <span class="cline-any cline-no">&nbsp;</span>
1902
- <span class="cline-any cline-neutral">&nbsp;</span>
1903
- <span class="cline-any cline-no">&nbsp;</span>
1904
- <span class="cline-any cline-neutral">&nbsp;</span>
1905
- <span class="cline-any cline-neutral">&nbsp;</span>
1906
- <span class="cline-any cline-no">&nbsp;</span>
1907
- <span class="cline-any cline-no">&nbsp;</span>
1908
- <span class="cline-any cline-neutral">&nbsp;</span>
1909
- <span class="cline-any cline-neutral">&nbsp;</span>
1910
- <span class="cline-any cline-no">&nbsp;</span>
1911
- <span class="cline-any cline-neutral">&nbsp;</span>
1912
- <span class="cline-any cline-neutral">&nbsp;</span>
1913
- <span class="cline-any cline-neutral">&nbsp;</span>
1914
- <span class="cline-any cline-neutral">&nbsp;</span>
1915
- <span class="cline-any cline-neutral">&nbsp;</span>
1916
- <span class="cline-any cline-neutral">&nbsp;</span>
1917
- <span class="cline-any cline-yes">1x</span>
1918
- <span class="cline-any cline-no">&nbsp;</span>
1919
- <span class="cline-any cline-no">&nbsp;</span>
1920
- <span class="cline-any cline-neutral">&nbsp;</span>
1921
- <span class="cline-any cline-no">&nbsp;</span>
1922
- <span class="cline-any cline-no">&nbsp;</span>
1923
- <span class="cline-any cline-no">&nbsp;</span>
1924
- <span class="cline-any cline-neutral">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-neutral">&nbsp;</span>
1927
- <span class="cline-any cline-no">&nbsp;</span>
1928
- <span class="cline-any cline-neutral">&nbsp;</span>
1929
- <span class="cline-any cline-neutral">&nbsp;</span>
1930
- <span class="cline-any cline-neutral">&nbsp;</span>
1931
- <span class="cline-any cline-neutral">&nbsp;</span>
1932
- <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-yes">1x</span>
1934
- <span class="cline-any cline-neutral">&nbsp;</span>
1935
- <span class="cline-any cline-neutral">&nbsp;</span>
1936
- <span class="cline-any cline-neutral">&nbsp;</span>
1937
- <span class="cline-any cline-neutral">&nbsp;</span>
1938
- <span class="cline-any cline-neutral">&nbsp;</span>
1939
- <span class="cline-any cline-neutral">&nbsp;</span>
1940
- <span class="cline-any cline-no">&nbsp;</span>
1941
- <span class="cline-any cline-no">&nbsp;</span>
1942
- <span class="cline-any cline-no">&nbsp;</span>
1943
- <span class="cline-any cline-neutral">&nbsp;</span>
1944
- <span class="cline-any cline-no">&nbsp;</span>
1945
- <span class="cline-any cline-no">&nbsp;</span>
1946
- <span class="cline-any cline-no">&nbsp;</span>
1947
- <span class="cline-any cline-neutral">&nbsp;</span>
1948
- <span class="cline-any cline-neutral">&nbsp;</span>
1949
- <span class="cline-any cline-neutral">&nbsp;</span>
1950
- <span class="cline-any cline-no">&nbsp;</span>
1951
- <span class="cline-any cline-no">&nbsp;</span>
1952
- <span class="cline-any cline-no">&nbsp;</span>
1953
- <span class="cline-any cline-no">&nbsp;</span>
1954
- <span class="cline-any cline-neutral">&nbsp;</span>
1955
- <span class="cline-any cline-neutral">&nbsp;</span>
1956
- <span class="cline-any cline-neutral">&nbsp;</span>
1957
- <span class="cline-any cline-neutral">&nbsp;</span>
1958
- <span class="cline-any cline-neutral">&nbsp;</span>
1959
- <span class="cline-any cline-no">&nbsp;</span>
1960
- <span class="cline-any cline-neutral">&nbsp;</span>
1961
- <span class="cline-any cline-no">&nbsp;</span>
1962
- <span class="cline-any cline-no">&nbsp;</span>
1963
- <span class="cline-any cline-no">&nbsp;</span>
1964
- <span class="cline-any cline-neutral">&nbsp;</span>
1965
- <span class="cline-any cline-no">&nbsp;</span>
1966
- <span class="cline-any cline-no">&nbsp;</span>
1967
- <span class="cline-any cline-no">&nbsp;</span>
1968
- <span class="cline-any cline-neutral">&nbsp;</span>
1969
- <span class="cline-any cline-no">&nbsp;</span>
1970
- <span class="cline-any cline-no">&nbsp;</span>
1971
- <span class="cline-any cline-no">&nbsp;</span>
1972
- <span class="cline-any cline-neutral">&nbsp;</span>
1973
- <span class="cline-any cline-no">&nbsp;</span>
1974
- <span class="cline-any cline-no">&nbsp;</span>
1975
- <span class="cline-any cline-no">&nbsp;</span>
1976
- <span class="cline-any cline-neutral">&nbsp;</span>
1977
- <span class="cline-any cline-no">&nbsp;</span>
1978
- <span class="cline-any cline-no">&nbsp;</span>
1979
- <span class="cline-any cline-no">&nbsp;</span>
1980
- <span class="cline-any cline-no">&nbsp;</span>
1981
- <span class="cline-any cline-neutral">&nbsp;</span>
1982
- <span class="cline-any cline-no">&nbsp;</span>
1983
- <span class="cline-any cline-no">&nbsp;</span>
1984
- <span class="cline-any cline-no">&nbsp;</span>
1985
- <span class="cline-any cline-neutral">&nbsp;</span>
1986
- <span class="cline-any cline-no">&nbsp;</span>
1987
- <span class="cline-any cline-no">&nbsp;</span>
1988
- <span class="cline-any cline-no">&nbsp;</span>
1989
- <span class="cline-any cline-no">&nbsp;</span>
1990
- <span class="cline-any cline-neutral">&nbsp;</span>
1991
- <span class="cline-any cline-no">&nbsp;</span>
1992
- <span class="cline-any cline-neutral">&nbsp;</span>
1993
- <span class="cline-any cline-no">&nbsp;</span>
1994
- <span class="cline-any cline-neutral">&nbsp;</span>
1995
- <span class="cline-any cline-no">&nbsp;</span>
1996
- <span class="cline-any cline-no">&nbsp;</span>
1997
- <span class="cline-any cline-no">&nbsp;</span>
1998
- <span class="cline-any cline-neutral">&nbsp;</span>
1999
- <span class="cline-any cline-no">&nbsp;</span>
2000
- <span class="cline-any cline-no">&nbsp;</span>
2001
- <span class="cline-any cline-no">&nbsp;</span>
2002
- <span class="cline-any cline-no">&nbsp;</span>
2003
- <span class="cline-any cline-neutral">&nbsp;</span>
2004
- <span class="cline-any cline-neutral">&nbsp;</span>
2005
- <span class="cline-any cline-neutral">&nbsp;</span>
2006
- <span class="cline-any cline-no">&nbsp;</span>
2007
- <span class="cline-any cline-no">&nbsp;</span>
2008
- <span class="cline-any cline-no">&nbsp;</span>
2009
- <span class="cline-any cline-no">&nbsp;</span>
2010
- <span class="cline-any cline-neutral">&nbsp;</span>
2011
- <span class="cline-any cline-no">&nbsp;</span>
2012
- <span class="cline-any cline-neutral">&nbsp;</span>
2013
- <span class="cline-any cline-neutral">&nbsp;</span>
2014
- <span class="cline-any cline-no">&nbsp;</span>
2015
- <span class="cline-any cline-neutral">&nbsp;</span>
2016
- <span class="cline-any cline-neutral">&nbsp;</span>
2017
- <span class="cline-any cline-neutral">&nbsp;</span>
2018
- <span class="cline-any cline-no">&nbsp;</span>
2019
- <span class="cline-any cline-no">&nbsp;</span>
2020
- <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-neutral">&nbsp;</span>
2022
- <span class="cline-any cline-neutral">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-neutral">&nbsp;</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
- <span class="cline-any cline-no">&nbsp;</span>
2027
- <span class="cline-any cline-no">&nbsp;</span>
2028
- <span class="cline-any cline-no">&nbsp;</span>
2029
- <span class="cline-any cline-neutral">&nbsp;</span>
2030
- <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-no">&nbsp;</span>
2032
- <span class="cline-any cline-no">&nbsp;</span>
2033
- <span class="cline-any cline-no">&nbsp;</span>
2034
- <span class="cline-any cline-no">&nbsp;</span>
2035
- <span class="cline-any cline-neutral">&nbsp;</span>
2036
- <span class="cline-any cline-neutral">&nbsp;</span>
2037
- <span class="cline-any cline-neutral">&nbsp;</span>
2038
- <span class="cline-any cline-no">&nbsp;</span>
2039
- <span class="cline-any cline-no">&nbsp;</span>
2040
- <span class="cline-any cline-no">&nbsp;</span>
2041
- <span class="cline-any cline-neutral">&nbsp;</span>
2042
- <span class="cline-any cline-neutral">&nbsp;</span>
2043
- <span class="cline-any cline-neutral">&nbsp;</span>
2044
- <span class="cline-any cline-neutral">&nbsp;</span>
2045
- <span class="cline-any cline-no">&nbsp;</span>
2046
- <span class="cline-any cline-no">&nbsp;</span>
2047
- <span class="cline-any cline-no">&nbsp;</span>
2048
- <span class="cline-any cline-neutral">&nbsp;</span>
2049
- <span class="cline-any cline-neutral">&nbsp;</span>
2050
- <span class="cline-any cline-neutral">&nbsp;</span>
2051
- <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-neutral">&nbsp;</span>
2053
- <span class="cline-any cline-neutral">&nbsp;</span>
2054
- <span class="cline-any cline-no">&nbsp;</span>
2055
- <span class="cline-any cline-neutral">&nbsp;</span>
2056
- <span class="cline-any cline-neutral">&nbsp;</span>
2057
- <span class="cline-any cline-neutral">&nbsp;</span>
2058
- <span class="cline-any cline-neutral">&nbsp;</span>
2059
- <span class="cline-any cline-neutral">&nbsp;</span>
2060
- <span class="cline-any cline-neutral">&nbsp;</span>
2061
- <span class="cline-any cline-neutral">&nbsp;</span>
2062
- <span class="cline-any cline-neutral">&nbsp;</span>
2063
- <span class="cline-any cline-neutral">&nbsp;</span>
2064
- <span class="cline-any cline-no">&nbsp;</span>
2065
- <span class="cline-any cline-neutral">&nbsp;</span>
2066
- <span class="cline-any cline-neutral">&nbsp;</span>
2067
- <span class="cline-any cline-no">&nbsp;</span>
2068
- <span class="cline-any cline-neutral">&nbsp;</span>
2069
- <span class="cline-any cline-no">&nbsp;</span>
2070
- <span class="cline-any cline-neutral">&nbsp;</span>
2071
- <span class="cline-any cline-neutral">&nbsp;</span>
2072
- <span class="cline-any cline-no">&nbsp;</span>
2073
- <span class="cline-any cline-no">&nbsp;</span>
2074
- <span class="cline-any cline-no">&nbsp;</span>
2075
- <span class="cline-any cline-no">&nbsp;</span>
2076
- <span class="cline-any cline-neutral">&nbsp;</span>
2077
- <span class="cline-any cline-neutral">&nbsp;</span>
2078
- <span class="cline-any cline-neutral">&nbsp;</span>
2079
- <span class="cline-any cline-no">&nbsp;</span>
2080
- <span class="cline-any cline-neutral">&nbsp;</span>
2081
- <span class="cline-any cline-neutral">&nbsp;</span>
2082
- <span class="cline-any cline-neutral">&nbsp;</span>
2083
- <span class="cline-any cline-no">&nbsp;</span>
2084
- <span class="cline-any cline-neutral">&nbsp;</span>
2085
- <span class="cline-any cline-neutral">&nbsp;</span>
2086
- <span class="cline-any cline-no">&nbsp;</span>
2087
- <span class="cline-any cline-no">&nbsp;</span>
2088
- <span class="cline-any cline-no">&nbsp;</span>
2089
- <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-neutral">&nbsp;</span>
2091
- <span class="cline-any cline-neutral">&nbsp;</span>
2092
- <span class="cline-any cline-no">&nbsp;</span>
2093
- <span class="cline-any cline-no">&nbsp;</span>
2094
- <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-no">&nbsp;</span>
2096
- <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-no">&nbsp;</span>
2098
- <span class="cline-any cline-no">&nbsp;</span>
2099
- <span class="cline-any cline-neutral">&nbsp;</span>
2100
- <span class="cline-any cline-neutral">&nbsp;</span>
2101
- <span class="cline-any cline-no">&nbsp;</span>
2102
- <span class="cline-any cline-no">&nbsp;</span>
2103
- <span class="cline-any cline-no">&nbsp;</span>
2104
- <span class="cline-any cline-no">&nbsp;</span>
2105
- <span class="cline-any cline-no">&nbsp;</span>
2106
- <span class="cline-any cline-neutral">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
- <span class="cline-any cline-neutral">&nbsp;</span>
2109
- <span class="cline-any cline-no">&nbsp;</span>
2110
- <span class="cline-any cline-no">&nbsp;</span>
2111
- <span class="cline-any cline-no">&nbsp;</span>
2112
- <span class="cline-any cline-neutral">&nbsp;</span>
2113
- <span class="cline-any cline-neutral">&nbsp;</span>
2114
- <span class="cline-any cline-neutral">&nbsp;</span>
2115
- <span class="cline-any cline-neutral">&nbsp;</span>
2116
- <span class="cline-any cline-neutral">&nbsp;</span>
2117
- <span class="cline-any cline-neutral">&nbsp;</span>
2118
- <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-no">&nbsp;</span>
2121
- <span class="cline-any cline-no">&nbsp;</span>
2122
- <span class="cline-any cline-no">&nbsp;</span>
2123
- <span class="cline-any cline-no">&nbsp;</span>
2124
- <span class="cline-any cline-no">&nbsp;</span>
2125
- <span class="cline-any cline-no">&nbsp;</span>
2126
- <span class="cline-any cline-no">&nbsp;</span>
2127
- <span class="cline-any cline-no">&nbsp;</span>
2128
- <span class="cline-any cline-no">&nbsp;</span>
2129
- <span class="cline-any cline-no">&nbsp;</span>
2130
- <span class="cline-any cline-neutral">&nbsp;</span>
2131
- <span class="cline-any cline-neutral">&nbsp;</span>
2132
- <span class="cline-any cline-no">&nbsp;</span>
2133
- <span class="cline-any cline-no">&nbsp;</span>
2134
- <span class="cline-any cline-neutral">&nbsp;</span>
2135
- <span class="cline-any cline-neutral">&nbsp;</span>
2136
- <span class="cline-any cline-neutral">&nbsp;</span>
2137
- <span class="cline-any cline-neutral">&nbsp;</span>
2138
- <span class="cline-any cline-neutral">&nbsp;</span>
2139
- <span class="cline-any cline-neutral">&nbsp;</span>
2140
- <span class="cline-any cline-neutral">&nbsp;</span>
2141
- <span class="cline-any cline-neutral">&nbsp;</span>
2142
- <span class="cline-any cline-neutral">&nbsp;</span>
2143
- <span class="cline-any cline-no">&nbsp;</span>
2144
- <span class="cline-any cline-no">&nbsp;</span>
2145
- <span class="cline-any cline-no">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-neutral">&nbsp;</span>
2148
- <span class="cline-any cline-no">&nbsp;</span>
2149
- <span class="cline-any cline-no">&nbsp;</span>
2150
- <span class="cline-any cline-no">&nbsp;</span>
2151
- <span class="cline-any cline-neutral">&nbsp;</span>
2152
- <span class="cline-any cline-neutral">&nbsp;</span>
2153
- <span class="cline-any cline-no">&nbsp;</span>
2154
- <span class="cline-any cline-neutral">&nbsp;</span>
2155
- <span class="cline-any cline-neutral">&nbsp;</span>
2156
- <span class="cline-any cline-no">&nbsp;</span>
2157
- <span class="cline-any cline-no">&nbsp;</span>
2158
- <span class="cline-any cline-no">&nbsp;</span>
2159
- <span class="cline-any cline-no">&nbsp;</span>
2160
- <span class="cline-any cline-neutral">&nbsp;</span>
2161
- <span class="cline-any cline-neutral">&nbsp;</span>
2162
- <span class="cline-any cline-neutral">&nbsp;</span>
2163
- <span class="cline-any cline-no">&nbsp;</span>
2164
- <span class="cline-any cline-neutral">&nbsp;</span>
2165
- <span class="cline-any cline-neutral">&nbsp;</span>
2166
- <span class="cline-any cline-neutral">&nbsp;</span>
2167
- <span class="cline-any cline-neutral">&nbsp;</span>
2168
- <span class="cline-any cline-no">&nbsp;</span>
2169
- <span class="cline-any cline-neutral">&nbsp;</span>
2170
- <span class="cline-any cline-neutral">&nbsp;</span>
2171
- <span class="cline-any cline-neutral">&nbsp;</span>
2172
- <span class="cline-any cline-neutral">&nbsp;</span>
2173
- <span class="cline-any cline-neutral">&nbsp;</span>
2174
- <span class="cline-any cline-neutral">&nbsp;</span>
2175
- <span class="cline-any cline-neutral">&nbsp;</span>
2176
- <span class="cline-any cline-no">&nbsp;</span>
2177
- <span class="cline-any cline-neutral">&nbsp;</span>
2178
- <span class="cline-any cline-no">&nbsp;</span>
2179
- <span class="cline-any cline-no">&nbsp;</span>
2180
- <span class="cline-any cline-neutral">&nbsp;</span>
2181
- <span class="cline-any cline-no">&nbsp;</span>
2182
- <span class="cline-any cline-no">&nbsp;</span>
2183
- <span class="cline-any cline-neutral">&nbsp;</span>
2184
- <span class="cline-any cline-neutral">&nbsp;</span>
2185
- <span class="cline-any cline-neutral">&nbsp;</span>
2186
- <span class="cline-any cline-no">&nbsp;</span>
2187
- <span class="cline-any cline-no">&nbsp;</span>
2188
- <span class="cline-any cline-neutral">&nbsp;</span>
2189
- <span class="cline-any cline-neutral">&nbsp;</span>
2190
- <span class="cline-any cline-no">&nbsp;</span>
2191
- <span class="cline-any cline-neutral">&nbsp;</span>
2192
- <span class="cline-any cline-neutral">&nbsp;</span>
2193
- <span class="cline-any cline-no">&nbsp;</span>
2194
- <span class="cline-any cline-no">&nbsp;</span>
2195
- <span class="cline-any cline-neutral">&nbsp;</span>
2196
- <span class="cline-any cline-no">&nbsp;</span>
2197
- <span class="cline-any cline-neutral">&nbsp;</span>
2198
- <span class="cline-any cline-neutral">&nbsp;</span>
2199
- <span class="cline-any cline-no">&nbsp;</span>
2200
- <span class="cline-any cline-neutral">&nbsp;</span>
2201
- <span class="cline-any cline-neutral">&nbsp;</span>
2202
- <span class="cline-any cline-no">&nbsp;</span>
2203
- <span class="cline-any cline-no">&nbsp;</span>
2204
- <span class="cline-any cline-neutral">&nbsp;</span>
2205
- <span class="cline-any cline-neutral">&nbsp;</span>
2206
- <span class="cline-any cline-neutral">&nbsp;</span>
2207
- <span class="cline-any cline-no">&nbsp;</span>
2208
- <span class="cline-any cline-no">&nbsp;</span>
2209
- <span class="cline-any cline-no">&nbsp;</span>
2210
- <span class="cline-any cline-neutral">&nbsp;</span>
2211
- <span class="cline-any cline-neutral">&nbsp;</span>
2212
- <span class="cline-any cline-neutral">&nbsp;</span>
2213
- <span class="cline-any cline-no">&nbsp;</span>
2214
- <span class="cline-any cline-no">&nbsp;</span>
2215
- <span class="cline-any cline-no">&nbsp;</span>
2216
- <span class="cline-any cline-no">&nbsp;</span>
2217
- <span class="cline-any cline-neutral">&nbsp;</span>
2218
- <span class="cline-any cline-neutral">&nbsp;</span>
2219
- <span class="cline-any cline-neutral">&nbsp;</span>
2220
- <span class="cline-any cline-no">&nbsp;</span>
2221
- <span class="cline-any cline-neutral">&nbsp;</span>
2222
- <span class="cline-any cline-neutral">&nbsp;</span>
2223
- <span class="cline-any cline-neutral">&nbsp;</span>
2224
- <span class="cline-any cline-neutral">&nbsp;</span>
2225
- <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-neutral">&nbsp;</span>
2227
- <span class="cline-any cline-neutral">&nbsp;</span>
2228
- <span class="cline-any cline-neutral">&nbsp;</span>
2229
- <span class="cline-any cline-neutral">&nbsp;</span>
2230
- <span class="cline-any cline-neutral">&nbsp;</span>
2231
- <span class="cline-any cline-neutral">&nbsp;</span>
2232
- <span class="cline-any cline-neutral">&nbsp;</span>
2233
- <span class="cline-any cline-no">&nbsp;</span>
2234
- <span class="cline-any cline-neutral">&nbsp;</span>
2235
- <span class="cline-any cline-neutral">&nbsp;</span>
2236
- <span class="cline-any cline-no">&nbsp;</span>
2237
- <span class="cline-any cline-neutral">&nbsp;</span>
2238
- <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-neutral">&nbsp;</span>
2240
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as fs from 'fs';
2241
- import * as path from 'path';
2242
- import * as os from 'os';
2243
- import { spawn } from 'child_process';
2244
- import { getDatabaseManager } from './core-bridge';
2245
- import { detectPortInUse, getProcessOnPort, killProcessOnPort, extractPortFromError } from './port-utils';
2246
- &nbsp;
2247
- export interface ScriptInfo {
2248
- name: string;
2249
- command: string;
2250
- runner: string;
2251
- projectType: string;
2252
- }
2253
- &nbsp;
2254
- export type ProjectType = 'node' | 'python' | 'rust' | 'go' | 'makefile' | 'unknown';
2255
- &nbsp;
2256
- export interface ProjectScripts {
2257
- type: ProjectType;
2258
- scripts: Map&lt;string, ScriptInfo&gt;;
2259
- }
2260
- &nbsp;
2261
- /**
2262
- * Detect the project type based on files in the directory
2263
- */
2264
- export function detectProjectType(projectPath: string): ProjectType {
2265
- if (fs.existsSync(path.join(projectPath, 'package.json'))) {
2266
- return 'node';
2267
- }
2268
- if (fs.existsSync(path.join(projectPath, 'pyproject.toml'))) {
2269
- return 'python';
2270
- }
2271
- if (fs.existsSync(path.join(projectPath, 'Cargo.toml'))) {
2272
- return 'rust';
2273
- }
2274
- if (fs.existsSync(path.join(projectPath, 'go.mod'))) {
2275
- return 'go';
2276
- }
2277
- if (fs.existsSync(path.join(projectPath, 'Makefile')) || fs.existsSync(path.join(projectPath, 'makefile'))) {
2278
- return 'makefile';
2279
- }
2280
- return 'unknown';
2281
- }
2282
- &nbsp;
2283
- /**
2284
- * Parse scripts from package.json (Node.js)
2285
- */
2286
- function parseNodeScripts(projectPath: string): Map&lt;string, ScriptInfo&gt; {
2287
- const packageJsonPath = path.join(projectPath, 'package.json');
2288
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(packageJsonPath)) {
2289
- <span class="cstat-no" title="statement not covered" > return new Map();</span>
2290
- }
2291
- &nbsp;
2292
- try {
2293
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
2294
- const scripts = packageJson.scripts || {};
2295
- const scriptMap = new Map&lt;string, ScriptInfo&gt;();
2296
- &nbsp;
2297
- for (const [name, command] of Object.entries(scripts)) {
2298
- if (typeof command === 'string') {
2299
- scriptMap.set(name, {
2300
- name,
2301
- command: command as string,
2302
- runner: 'npm',
2303
- projectType: 'node',
2304
- });
2305
- }
2306
- }
2307
- &nbsp;
2308
- return scriptMap;
2309
- } catch (error) {
2310
- return new Map();
2311
- }
2312
- }
2313
- &nbsp;
2314
- /**
2315
- * Parse scripts from pyproject.toml (Python)
2316
- */
2317
- function parsePythonScripts(projectPath: string): Map&lt;string, ScriptInfo&gt; {
2318
- const pyprojectPath = path.join(projectPath, 'pyproject.toml');
2319
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(pyprojectPath)) {
2320
- <span class="cstat-no" title="statement not covered" > return new Map();</span>
2321
- }
2322
- &nbsp;
2323
- try {
2324
- const content = fs.readFileSync(pyprojectPath, 'utf-8');
2325
- const scriptMap = new Map&lt;string, ScriptInfo&gt;();
2326
- &nbsp;
2327
- // Simple TOML parsing for [project.scripts] section
2328
- // This is a basic implementation - for production, consider using a TOML parser
2329
- const scriptsMatch = content.match(/\[project\.scripts\]\s*\n((?:[^\[]+\n?)+)/);
2330
- if (scriptsMatch) {
2331
- const scriptsSection = scriptsMatch[1];
2332
- const scriptLines = scriptsSection.split('\n');
2333
-
2334
- for (const line of scriptLines) {
2335
- const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
2336
- if (match) {
2337
- const [, name, command] = match;
2338
- scriptMap.set(name, {
2339
- name,
2340
- command,
2341
- runner: 'python',
2342
- projectType: 'python',
2343
- });
2344
- }
2345
- }
2346
- }
2347
- &nbsp;
2348
- // Also check for [tool.poetry.scripts]
2349
- const poetryMatch = content.match(/\[tool\.poetry\.scripts\]\s*\n((?:[^\[]+\n?)+)/);
2350
- if (poetryMatch) {
2351
- const scriptsSection = poetryMatch[1];
2352
- const scriptLines = scriptsSection.split('\n');
2353
-
2354
- for (const line of scriptLines) {
2355
- const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
2356
- if (match) {
2357
- const [, name, command] = match;
2358
- scriptMap.set(name, {
2359
- name,
2360
- command,
2361
- runner: 'poetry',
2362
- projectType: 'python',
2363
- });
2364
- }
2365
- }
2366
- }
2367
- &nbsp;
2368
- return scriptMap;
2369
- } catch (error) {
2370
- <span class="cstat-no" title="statement not covered" > return new Map();</span>
2371
- }
2372
- }
2373
- &nbsp;
2374
- /**
2375
- * Parse scripts from Cargo.toml (Rust)
2376
- * Cargo doesn't have a scripts section, but we can detect common cargo commands
2377
- */
2378
- function parseRustScripts(projectPath: string): Map&lt;string, ScriptInfo&gt; {
2379
- const scriptMap = new Map&lt;string, ScriptInfo&gt;();
2380
-
2381
- // Common cargo commands that can be run
2382
- const commonCommands = [
2383
- { name: 'build', command: 'cargo build', runner: 'cargo' },
2384
- { name: 'run', command: 'cargo run', runner: 'cargo' },
2385
- { name: 'test', command: 'cargo test', runner: 'cargo' },
2386
- { name: 'check', command: 'cargo check', runner: 'cargo' },
2387
- { name: 'clippy', command: 'cargo clippy', runner: 'cargo' },
2388
- { name: 'fmt', command: 'cargo fmt', runner: 'cargo' },
2389
- ];
2390
- &nbsp;
2391
- for (const cmd of commonCommands) {
2392
- scriptMap.set(cmd.name, {
2393
- name: cmd.name,
2394
- command: cmd.command,
2395
- runner: cmd.runner,
2396
- projectType: 'rust',
2397
- });
2398
- }
2399
- &nbsp;
2400
- return scriptMap;
2401
- }
2402
- &nbsp;
2403
- /**
2404
- * Parse Makefile targets
2405
- */
2406
- function parseMakefileScripts(projectPath: string): Map&lt;string, ScriptInfo&gt; {
2407
- const makefilePath = fs.existsSync(path.join(projectPath, 'Makefile'))
2408
- ? path.join(projectPath, 'Makefile')
2409
- : path.join(projectPath, 'makefile');
2410
-
2411
- if (!fs.existsSync(makefilePath)) {
2412
- return new Map();
2413
- }
2414
- &nbsp;
2415
- try {
2416
- const content = fs.readFileSync(makefilePath, 'utf-8');
2417
- const scriptMap = new Map&lt;string, ScriptInfo&gt;();
2418
- &nbsp;
2419
- // Parse Makefile targets (basic implementation)
2420
- // Match lines that look like targets: target: dependencies
2421
- const targetRegex = /^([a-zA-Z0-9_-]+)\s*:.*$/gm;
2422
- let match;
2423
-
2424
- while ((match = targetRegex.exec(content)) !== null) {
2425
- const targetName = match[1];
2426
- // Skip special targets
2427
- if (!targetName.startsWith('.') &amp;&amp; targetName !== 'PHONY') {
2428
- scriptMap.set(targetName, {
2429
- name: targetName,
2430
- command: `make ${targetName}`,
2431
- runner: 'make',
2432
- projectType: 'makefile',
2433
- });
2434
- }
2435
- }
2436
- &nbsp;
2437
- return scriptMap;
2438
- } catch (error) {
2439
- <span class="cstat-no" title="statement not covered" > return new Map();</span>
2440
- }
2441
- }
2442
- &nbsp;
2443
- /**
2444
- * Get all available scripts for a project
2445
- */
2446
- export function getProjectScripts(projectPath: string): ProjectScripts {
2447
- const type = detectProjectType(projectPath);
2448
- let scripts = new Map&lt;string, ScriptInfo&gt;();
2449
- &nbsp;
2450
- switch (type) {
2451
- case 'node':
2452
- scripts = parseNodeScripts(projectPath);
2453
- break;
2454
- case 'python':
2455
- scripts = parsePythonScripts(projectPath);
2456
- break;
2457
- case 'rust':
2458
- scripts = parseRustScripts(projectPath);
2459
- break;
2460
- case 'makefile':
2461
- scripts = parseMakefileScripts(projectPath);
2462
- break;
2463
- case 'go':
2464
- // Go projects typically use Makefile or direct go commands
2465
- // Check for Makefile first, otherwise provide common go commands
2466
- const makefileScripts = parseMakefileScripts(projectPath);
2467
- if (makefileScripts.size &gt; 0) {
2468
- scripts = makefileScripts;
2469
- } else {
2470
- // Common go commands
2471
- scripts.set('run', {
2472
- name: 'run',
2473
- command: 'go run .',
2474
- runner: 'go',
2475
- projectType: 'go',
2476
- });
2477
- scripts.set('build', {
2478
- name: 'build',
2479
- command: 'go build',
2480
- runner: 'go',
2481
- projectType: 'go',
2482
- });
2483
- scripts.set('test', {
2484
- name: 'test',
2485
- command: 'go test ./...',
2486
- runner: 'go',
2487
- projectType: 'go',
2488
- });
2489
- }
2490
- break;
2491
- default:
2492
- // For unknown projects, check for Makefile as fallback
2493
- scripts = parseMakefileScripts(projectPath);
2494
- break;
2495
- }
2496
- &nbsp;
2497
- return {
2498
- type,
2499
- scripts,
2500
- };
2501
- }
2502
- &nbsp;
2503
- /**
2504
- * Handle port conflict - prompt user or auto-kill based on force flag
2505
- */
2506
- async function <span class="fstat-no" title="function not covered" >handlePortConflict(</span>
2507
- port: number,
2508
- projectName: string,
2509
- force: boolean
2510
- ): Promise&lt;boolean&gt; {
2511
- const processInfo = <span class="cstat-no" title="statement not covered" >await getProcessOnPort(port);</span>
2512
- &nbsp;
2513
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
2514
- <span class="cstat-no" title="statement not covered" > console.error(`Port ${port} appears to be in use, but couldn't identify the process.`);</span>
2515
- <span class="cstat-no" title="statement not covered" > return false;</span>
2516
- }
2517
- &nbsp;
2518
- <span class="cstat-no" title="statement not covered" > console.error(`\nāš ļø Port ${port} is already in use by process ${processInfo.pid} (${processInfo.command})`);</span>
2519
- &nbsp;
2520
- <span class="cstat-no" title="statement not covered" > if (force) {</span>
2521
- <span class="cstat-no" title="statement not covered" > console.log(`Killing process ${processInfo.pid} on port ${port}...`);</span>
2522
- const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
2523
- <span class="cstat-no" title="statement not covered" > if (killed) {</span>
2524
- <span class="cstat-no" title="statement not covered" > console.log(`āœ“ Process killed. Retrying...\n`);</span>
2525
- <span class="cstat-no" title="statement not covered" > return true;</span>
2526
- } else {
2527
- <span class="cstat-no" title="statement not covered" > console.error(`Failed to kill process on port ${port}`);</span>
2528
- <span class="cstat-no" title="statement not covered" > return false;</span>
2529
- }
2530
- } else {
2531
- const inquirer = <span class="cstat-no" title="statement not covered" >(<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >await import('</span>inquirer'))</span>.default;</span>
2532
- const answer = <span class="cstat-no" title="statement not covered" >await inquirer.prompt([</span>
2533
- {
2534
- type: 'confirm',
2535
- name: 'kill',
2536
- message: `Kill process ${processInfo.pid} (${processInfo.command}) and continue?`,
2537
- default: false,
2538
- },
2539
- ]);
2540
- &nbsp;
2541
- <span class="cstat-no" title="statement not covered" > if (answer.kill) {</span>
2542
- const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
2543
- <span class="cstat-no" title="statement not covered" > if (killed) {</span>
2544
- <span class="cstat-no" title="statement not covered" > console.log(`āœ“ Process killed. Retrying...\n`);</span>
2545
- <span class="cstat-no" title="statement not covered" > return true;</span>
2546
- } else {
2547
- <span class="cstat-no" title="statement not covered" > console.error(`Failed to kill process on port ${port}`);</span>
2548
- <span class="cstat-no" title="statement not covered" > return false;</span>
2549
- }
2550
- } else {
2551
- <span class="cstat-no" title="statement not covered" > console.log('Cancelled.');</span>
2552
- <span class="cstat-no" title="statement not covered" > return false;</span>
2553
- }
2554
- }
2555
- }
2556
- &nbsp;
2557
- /**
2558
- * Check ports proactively before script execution
2559
- */
2560
- async function <span class="fstat-no" title="function not covered" >checkPortsBeforeExecution(</span>
2561
- projectPath: string,
2562
- scriptName: string,
2563
- force: boolean
2564
- ): Promise&lt;boolean&gt; {
2565
- const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
2566
- const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
2567
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!project) <span class="cstat-no" title="statement not covered" >return true; </span></span>// Can't check if project not in DB
2568
- &nbsp;
2569
- const ports = <span class="cstat-no" title="statement not covered" >db.getProjectPortsByScript(project.id, scriptName);</span>
2570
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ports.length === 0) {</span>
2571
- // Also check ports without script name (general project ports)
2572
- const allPorts = <span class="cstat-no" title="statement not covered" >db.getProjectPorts(project.id);</span>
2573
- <span class="cstat-no" title="statement not covered" > for (const portInfo of allPorts) {</span>
2574
- const inUse = <span class="cstat-no" title="statement not covered" >await detectPortInUse(portInfo.port);</span>
2575
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (inUse) {</span>
2576
- <span class="cstat-no" title="statement not covered" > return await handlePortConflict(portInfo.port, project.name, force);</span>
2577
- }
2578
- }
2579
- <span class="cstat-no" title="statement not covered" > return true;</span>
2580
- }
2581
- &nbsp;
2582
- <span class="cstat-no" title="statement not covered" > for (const portInfo of ports) {</span>
2583
- const inUse = <span class="cstat-no" title="statement not covered" >await detectPortInUse(portInfo.port);</span>
2584
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (inUse) {</span>
2585
- <span class="cstat-no" title="statement not covered" > return await handlePortConflict(portInfo.port, project.name, force);</span>
2586
- }
2587
- }
2588
- &nbsp;
2589
- <span class="cstat-no" title="statement not covered" > return true;</span>
2590
- }
2591
- &nbsp;
2592
- /**
2593
- * Execute a script in a project directory
2594
- */
2595
- export function <span class="fstat-no" title="function not covered" >runScript(</span>
2596
- projectPath: string,
2597
- scriptName: string,
2598
- args: string[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
2599
- force: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
2600
- ): Promise&lt;number&gt; {
2601
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >async </span>(resolve, reject) =&gt; {</span>
2602
- const projectScripts = <span class="cstat-no" title="statement not covered" >getProjectScripts(projectPath);</span>
2603
- const script = <span class="cstat-no" title="statement not covered" >projectScripts.scripts.get(scriptName);</span>
2604
- &nbsp;
2605
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!script) {</span>
2606
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Script "${scriptName}" not found in project`));</span>
2607
- <span class="cstat-no" title="statement not covered" > return;</span>
2608
- }
2609
- &nbsp;
2610
- // Proactive port checking
2611
- const canProceed = <span class="cstat-no" title="statement not covered" >await checkPortsBeforeExecution(projectPath, scriptName, force);</span>
2612
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!canProceed) {</span>
2613
- <span class="cstat-no" title="statement not covered" > reject(new Error('Port conflict not resolved'));</span>
2614
- <span class="cstat-no" title="statement not covered" > return;</span>
2615
- }
2616
- &nbsp;
2617
- let command: string;
2618
- let commandArgs: string[];
2619
- &nbsp;
2620
- <span class="cstat-no" title="statement not covered" > switch (script.runner) {</span>
2621
- case 'npm':
2622
- <span class="cstat-no" title="statement not covered" > command = 'npm';</span>
2623
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
2624
- <span class="cstat-no" title="statement not covered" > break;</span>
2625
- case 'yarn':
2626
- <span class="cstat-no" title="statement not covered" > command = 'yarn';</span>
2627
- <span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
2628
- <span class="cstat-no" title="statement not covered" > break;</span>
2629
- case 'pnpm':
2630
- <span class="cstat-no" title="statement not covered" > command = 'pnpm';</span>
2631
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
2632
- <span class="cstat-no" title="statement not covered" > break;</span>
2633
- case 'python':
2634
- <span class="cstat-no" title="statement not covered" > command = 'python';</span>
2635
- <span class="cstat-no" title="statement not covered" > commandArgs = ['-m', ...script.command.split(' ').slice(1), ...args];</span>
2636
- <span class="cstat-no" title="statement not covered" > break;</span>
2637
- case 'poetry':
2638
- <span class="cstat-no" title="statement not covered" > command = 'poetry';</span>
2639
- // For poetry, the command is already the module path, use 'run' to execute it
2640
- const modulePath = <span class="cstat-no" title="statement not covered" >script.command.split(' ').slice(1).join(' ');</span>
2641
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', 'python', '-m', modulePath, ...args];</span>
2642
- <span class="cstat-no" title="statement not covered" > break;</span>
2643
- case 'cargo':
2644
- <span class="cstat-no" title="statement not covered" > command = 'cargo';</span>
2645
- <span class="cstat-no" title="statement not covered" > commandArgs = scriptName === 'run' ? ['run', ...args] : [scriptName, ...args];</span>
2646
- <span class="cstat-no" title="statement not covered" > break;</span>
2647
- case 'go':
2648
- <span class="cstat-no" title="statement not covered" > command = 'go';</span>
2649
- <span class="cstat-no" title="statement not covered" > commandArgs = script.command.split(' ').slice(1);</span>
2650
- <span class="cstat-no" title="statement not covered" > if (scriptName === 'run' &amp;&amp; args.length &gt; 0) {</span>
2651
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', ...args];</span>
2652
- } else {
2653
- <span class="cstat-no" title="statement not covered" > commandArgs = [...commandArgs, ...args];</span>
2654
- }
2655
- <span class="cstat-no" title="statement not covered" > break;</span>
2656
- case 'make':
2657
- <span class="cstat-no" title="statement not covered" > command = 'make';</span>
2658
- <span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
2659
- <span class="cstat-no" title="statement not covered" > break;</span>
2660
- default:
2661
- // Fallback: try to run the command directly
2662
- const parts = <span class="cstat-no" title="statement not covered" >script.command.split(' ');</span>
2663
- <span class="cstat-no" title="statement not covered" > command = parts[0];</span>
2664
- <span class="cstat-no" title="statement not covered" > commandArgs = [...parts.slice(1), ...args];</span>
2665
- <span class="cstat-no" title="statement not covered" > break;</span>
2666
- }
2667
- &nbsp;
2668
- <span class="cstat-no" title="statement not covered" > console.log(`Running: ${command} ${commandArgs.join(' ')}`);</span>
2669
- <span class="cstat-no" title="statement not covered" > console.log(`In directory: ${projectPath}\n`);</span>
2670
- &nbsp;
2671
- // Capture stderr for reactive port conflict detection
2672
- let stderrOutput = <span class="cstat-no" title="statement not covered" >'';</span>
2673
- let stdoutOutput = <span class="cstat-no" title="statement not covered" >'';</span>
2674
- &nbsp;
2675
- const child = <span class="cstat-no" title="statement not covered" >spawn(command, commandArgs, {</span>
2676
- cwd: projectPath,
2677
- stdio: ['inherit', 'pipe', 'pipe'],
2678
- shell: process.platform === 'win32',
2679
- });
2680
- &nbsp;
2681
- // Capture output for error analysis
2682
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (child.stdout) {</span>
2683
- <span class="cstat-no" title="statement not covered" > child.stdout.on('data', <span class="fstat-no" title="function not covered" >(d</span>ata: Buffer) =&gt; {</span>
2684
- <span class="cstat-no" title="statement not covered" > stdoutOutput += data.toString();</span>
2685
- <span class="cstat-no" title="statement not covered" > process.stdout.write(data);</span>
2686
- });
2687
- }
2688
- &nbsp;
2689
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (child.stderr) {</span>
2690
- <span class="cstat-no" title="statement not covered" > child.stderr.on('data', <span class="fstat-no" title="function not covered" >(d</span>ata: Buffer) =&gt; {</span>
2691
- <span class="cstat-no" title="statement not covered" > stderrOutput += data.toString();</span>
2692
- <span class="cstat-no" title="statement not covered" > process.stderr.write(data);</span>
2693
- });
2694
- }
2695
- &nbsp;
2696
- <span class="cstat-no" title="statement not covered" > child.on('close', <span class="fstat-no" title="function not covered" >async </span>(code) =&gt; {</span>
2697
- <span class="cstat-no" title="statement not covered" > if (code === 0) {</span>
2698
- <span class="cstat-no" title="statement not covered" > resolve(0);</span>
2699
- } else {
2700
- // Reactive port conflict detection
2701
- const errorOutput = <span class="cstat-no" title="statement not covered" >stderrOutput + stdoutOutput;</span>
2702
- const port = <span class="cstat-no" title="statement not covered" >extractPortFromError(errorOutput);</span>
2703
-
2704
- <span class="cstat-no" title="statement not covered" > if (port) {</span>
2705
- const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
2706
- const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
2707
- const projectName = <span class="cstat-no" title="statement not covered" >project?.name || 'project';</span>
2708
-
2709
- const resolved = <span class="cstat-no" title="statement not covered" >await handlePortConflict(port, projectName, force);</span>
2710
- <span class="cstat-no" title="statement not covered" > if (resolved) {</span>
2711
- // Retry script execution
2712
- <span class="cstat-no" title="statement not covered" > try {</span>
2713
- const retryResult = <span class="cstat-no" title="statement not covered" >await runScript(projectPath, scriptName, args, force);</span>
2714
- <span class="cstat-no" title="statement not covered" > resolve(retryResult);</span>
2715
- } catch (retryError) {
2716
- <span class="cstat-no" title="statement not covered" > reject(retryError);</span>
2717
- }
2718
- } else {
2719
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Script exited with code ${code} (port ${port} conflict)`));</span>
2720
- }
2721
- } else {
2722
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Script exited with code ${code}`));</span>
2723
- }
2724
- }
2725
- });
2726
- &nbsp;
2727
- <span class="cstat-no" title="statement not covered" > child.on('error', <span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {</span>
2728
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Failed to execute script: ${error.message}`));</span>
2729
- });
2730
- });
2731
- }
2732
- &nbsp;
2733
- export interface BackgroundProcess {
2734
- pid: number;
2735
- projectPath: string;
2736
- projectName: string;
2737
- scriptName: string;
2738
- command: string;
2739
- startedAt: number;
2740
- logFile: string;
2741
- detectedUrls?: string[];
2742
- detectedPorts?: number[];
2743
- }
2744
- &nbsp;
2745
- /**
2746
- * Get the path to the processes file
2747
- */
2748
- function getProcessesFilePath(): string {
2749
- const dataDir = path.join(os.homedir(), '.projax');
2750
- if (!fs.existsSync(dataDir)) {
2751
- fs.mkdirSync(dataDir, { recursive: true });
2752
- }
2753
- return path.join(dataDir, 'processes.json');
2754
- }
2755
- &nbsp;
2756
- /**
2757
- * Load running processes from disk
2758
- */
2759
- export function loadProcesses(): BackgroundProcess[] {
2760
- const filePath = getProcessesFilePath();
2761
- if (!fs.existsSync(filePath)) {
2762
- return [];
2763
- }
2764
- try {
2765
- const content = fs.readFileSync(filePath, 'utf-8');
2766
- return JSON.parse(content);
2767
- } catch (error) {
2768
- return [];
2769
- }
2770
- }
2771
- &nbsp;
2772
- /**
2773
- * Save running processes to disk
2774
- */
2775
- function saveProcesses(processes: BackgroundProcess[]): void {
2776
- const filePath = getProcessesFilePath();
2777
- fs.writeFileSync(filePath, JSON.stringify(processes, null, 2));
2778
- }
2779
- &nbsp;
2780
- /**
2781
- * Add a process to the tracking file
2782
- */
2783
- function <span class="fstat-no" title="function not covered" >addProcess(</span>process: BackgroundProcess): void {
2784
- const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
2785
- <span class="cstat-no" title="statement not covered" > processes.push(process);</span>
2786
- <span class="cstat-no" title="statement not covered" > saveProcesses(processes);</span>
2787
- }
2788
- &nbsp;
2789
- /**
2790
- * Remove a process from tracking by PID
2791
- */
2792
- export function removeProcess(pid: number): void {
2793
- const processes = loadProcesses();
2794
- const filtered = processes.filter(p =&gt; p.pid !== pid);
2795
- saveProcesses(filtered);
2796
- }
2797
- &nbsp;
2798
- /**
2799
- * Get all running processes for a project
2800
- */
2801
- export function getProjectProcesses(projectPath: string): BackgroundProcess[] {
2802
- const processes = loadProcesses();
2803
- return processes.filter(p =&gt; p.projectPath === projectPath);
2804
- }
2805
- &nbsp;
2806
- /**
2807
- * Check if a process is still running
2808
- */
2809
- async function <span class="fstat-no" title="function not covered" >isProcessRunning(</span>pid: number): Promise&lt;boolean&gt; {
2810
- <span class="cstat-no" title="statement not covered" > try {</span>
2811
- <span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
2812
- const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
2813
- const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
2814
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
2815
- const { stdout } = <span class="cstat-no" title="statement not covered" >await execAsync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`);</span>
2816
- <span class="cstat-no" title="statement not covered" > return stdout.includes(`"${pid}"`);</span>
2817
- } else {
2818
- // On Unix-like systems, kill with signal 0 checks if process exists
2819
- <span class="cstat-no" title="statement not covered" > try {</span>
2820
- <span class="cstat-no" title="statement not covered" > process.kill(pid, 0);</span>
2821
- <span class="cstat-no" title="statement not covered" > return true;</span>
2822
- } catch {
2823
- <span class="cstat-no" title="statement not covered" > return false;</span>
2824
- }
2825
- }
2826
- } catch {
2827
- <span class="cstat-no" title="statement not covered" > return false;</span>
2828
- }
2829
- }
2830
- &nbsp;
2831
- /**
2832
- * Clean up dead processes from tracking
2833
- */
2834
- async function <span class="fstat-no" title="function not covered" >cleanupDeadProcesses(</span>): Promise&lt;void&gt; {
2835
- const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
2836
- const aliveProcesses: BackgroundProcess[] = <span class="cstat-no" title="statement not covered" >[];</span>
2837
-
2838
- <span class="cstat-no" title="statement not covered" > for (const proc of processes) {</span>
2839
- const isAlive = <span class="cstat-no" title="statement not covered" >await isProcessRunning(proc.pid);</span>
2840
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isAlive) {</span>
2841
- <span class="cstat-no" title="statement not covered" > aliveProcesses.push(proc);</span>
2842
- }
2843
- }
2844
-
2845
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (aliveProcesses.length !== processes.length) {</span>
2846
- <span class="cstat-no" title="statement not covered" > saveProcesses(aliveProcesses);</span>
2847
- }
2848
- }
2849
- &nbsp;
2850
- /**
2851
- * Get all running processes (synchronous version that returns potentially stale data)
2852
- */
2853
- export function <span class="fstat-no" title="function not covered" >getRunningProcesses(</span>): BackgroundProcess[] {
2854
- <span class="cstat-no" title="statement not covered" > return loadProcesses();</span>
2855
- }
2856
- &nbsp;
2857
- /**
2858
- * Get all running processes with cleanup (async version)
2859
- */
2860
- export async function <span class="fstat-no" title="function not covered" >getRunningProcessesClean(</span>): Promise&lt;BackgroundProcess[]&gt; {
2861
- <span class="cstat-no" title="statement not covered" > await cleanupDeadProcesses();</span>
2862
- <span class="cstat-no" title="statement not covered" > return loadProcesses();</span>
2863
- }
2864
- &nbsp;
2865
- /**
2866
- * Extract URLs from text output
2867
- */
2868
- function <span class="fstat-no" title="function not covered" >extractUrlsFromOutput(</span>output: string): string[] {
2869
- const urls: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2870
- const urlPatterns = <span class="cstat-no" title="statement not covered" >[</span>
2871
- /(?:Local|Network):\s*(https?:\/\/[^\s]+)/gi,
2872
- /(?:https?:\/\/localhost:\d+)/gi,
2873
- /(?:https?:\/\/127\.0\.0\.1:\d+)/gi,
2874
- /(?:https?:\/\/0\.0\.0\.0:\d+)/gi,
2875
- /(?:https?:\/\/[^\s:]+:\d+)/gi,
2876
- ];
2877
- &nbsp;
2878
- <span class="cstat-no" title="statement not covered" > for (const pattern of urlPatterns) {</span>
2879
- const matches = <span class="cstat-no" title="statement not covered" >output.matchAll(pattern);</span>
2880
- <span class="cstat-no" title="statement not covered" > for (const match of matches) {</span>
2881
- const url = <span class="cstat-no" title="statement not covered" >match[0] || match[1];</span>
2882
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (url &amp;&amp; !urls.includes(url)) {</span>
2883
- <span class="cstat-no" title="statement not covered" > urls.push(url);</span>
2884
- }
2885
- }
2886
- }
2887
- &nbsp;
2888
- <span class="cstat-no" title="statement not covered" > return urls;</span>
2889
- }
2890
- &nbsp;
2891
- /**
2892
- * Update process with detected URLs and ports
2893
- */
2894
- function <span class="fstat-no" title="function not covered" >updateProcessUrls(</span>pid: number, urls: string[]): void {
2895
- const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
2896
- const process = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=&gt; <span class="cstat-no" title="statement not covered" >p.pid === pid)</span>;</span>
2897
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (process) {</span>
2898
- <span class="cstat-no" title="statement not covered" > process.detectedUrls = urls;</span>
2899
- // Extract ports from URLs
2900
- const ports = <span class="cstat-no" title="statement not covered" >new Set&lt;number&gt;();</span>
2901
- <span class="cstat-no" title="statement not covered" > for (const url of urls) {</span>
2902
- const match = <span class="cstat-no" title="statement not covered" >url.match(/:(\d+)/);</span>
2903
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (match) {</span>
2904
- <span class="cstat-no" title="statement not covered" > ports.add(parseInt(match[1], 10));</span>
2905
- }
2906
- }
2907
- <span class="cstat-no" title="statement not covered" > process.detectedPorts = Array.from(ports).sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; <span class="cstat-no" title="statement not covered" >a - b)</span>;</span>
2908
- <span class="cstat-no" title="statement not covered" > saveProcesses(processes);</span>
2909
- }
2910
- }
2911
- &nbsp;
2912
- /**
2913
- * Stop a script by PID
2914
- */
2915
- export async function <span class="fstat-no" title="function not covered" >stopScript(</span>pid: number): Promise&lt;boolean&gt; {
2916
- <span class="cstat-no" title="statement not covered" > try {</span>
2917
- const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
2918
- const processInfo = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=&gt; <span class="cstat-no" title="statement not covered" >p.pid === pid)</span>;</span>
2919
-
2920
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
2921
- <span class="cstat-no" title="statement not covered" > return false;</span>
2922
- }
2923
- &nbsp;
2924
- // Check if process is still running before trying to kill it
2925
- let processExists = <span class="cstat-no" title="statement not covered" >false;</span>
2926
- <span class="cstat-no" title="statement not covered" > try {</span>
2927
- <span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
2928
- const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
2929
- const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
2930
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
2931
- <span class="cstat-no" title="statement not covered" > await execAsync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`);</span>
2932
- <span class="cstat-no" title="statement not covered" > processExists = true;</span>
2933
- } else {
2934
- const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
2935
- const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
2936
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
2937
- <span class="cstat-no" title="statement not covered" > await execAsync(`ps -p ${pid} -o pid=`);</span>
2938
- <span class="cstat-no" title="statement not covered" > processExists = true;</span>
2939
- }
2940
- } catch {
2941
- // Process doesn't exist anymore
2942
- <span class="cstat-no" title="statement not covered" > processExists = false;</span>
2943
- }
2944
- &nbsp;
2945
- // Try to kill the process (cross-platform)
2946
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (processExists) {</span>
2947
- <span class="cstat-no" title="statement not covered" > try {</span>
2948
- <span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
2949
- const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
2950
- const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
2951
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
2952
- <span class="cstat-no" title="statement not covered" > await execAsync(`taskkill /F /PID ${pid}`);</span>
2953
- } else {
2954
- const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
2955
- const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
2956
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
2957
- <span class="cstat-no" title="statement not covered" > await execAsync(`kill -9 ${pid}`);</span>
2958
- }
2959
- } catch (error) {
2960
- // Process may have already exited
2961
- <span class="cstat-no" title="statement not covered" > console.error(`Error killing process ${pid}:`, error);</span>
2962
- }
2963
- }
2964
- &nbsp;
2965
- // Remove from tracking regardless of whether kill succeeded
2966
- <span class="cstat-no" title="statement not covered" > removeProcess(pid);</span>
2967
- <span class="cstat-no" title="statement not covered" > return true;</span>
2968
- } catch (error) {
2969
- <span class="cstat-no" title="statement not covered" > console.error(`Error stopping script ${pid}:`, error);</span>
2970
- <span class="cstat-no" title="statement not covered" > return false;</span>
2971
- }
2972
- }
2973
- &nbsp;
2974
- /**
2975
- * Stop a script by port (finds process using port and kills it)
2976
- */
2977
- export async function <span class="fstat-no" title="function not covered" >stopScriptByPort(</span>port: number): Promise&lt;boolean&gt; {
2978
- <span class="cstat-no" title="statement not covered" > try {</span>
2979
- const processInfo = <span class="cstat-no" title="statement not covered" >await getProcessOnPort(port);</span>
2980
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
2981
- <span class="cstat-no" title="statement not covered" > return false;</span>
2982
- }
2983
- &nbsp;
2984
- // Check if this is a tracked process
2985
- const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
2986
- const trackedProcess = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=&gt; <span class="cstat-no" title="statement not covered" >p.pid === processInfo.pid)</span>;</span>
2987
-
2988
- <span class="cstat-no" title="statement not covered" > if (trackedProcess) {</span>
2989
- // Use the tracked process removal
2990
- <span class="cstat-no" title="statement not covered" > return await stopScript(processInfo.pid);</span>
2991
- } else {
2992
- // Kill the process directly
2993
- const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
2994
- <span class="cstat-no" title="statement not covered" > return killed;</span>
2995
- }
2996
- } catch (error) {
2997
- <span class="cstat-no" title="statement not covered" > return false;</span>
2998
- }
2999
- }
3000
- &nbsp;
3001
- /**
3002
- * Stop all processes for a project
3003
- */
3004
- export async function <span class="fstat-no" title="function not covered" >stopProjectProcesses(</span>projectPath: string): Promise&lt;number&gt; {
3005
- const processes = <span class="cstat-no" title="statement not covered" >getProjectProcesses(projectPath);</span>
3006
- let stopped = <span class="cstat-no" title="statement not covered" >0;</span>
3007
-
3008
- <span class="cstat-no" title="statement not covered" > for (const process of processes) {</span>
3009
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (await stopScript(process.pid)) {</span>
3010
- <span class="cstat-no" title="statement not covered" > stopped++;</span>
3011
- }
3012
- }
3013
-
3014
- <span class="cstat-no" title="statement not covered" > return stopped;</span>
3015
- }
3016
- &nbsp;
3017
- /**
3018
- * Execute a script in the background (minimal logging)
3019
- */
3020
- export function <span class="fstat-no" title="function not covered" >runScriptInBackground(</span>
3021
- projectPath: string,
3022
- projectName: string,
3023
- scriptName: string,
3024
- args: string[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
3025
- force: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
3026
- ): Promise&lt;number&gt; {
3027
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >async </span>(resolve, reject) =&gt; {</span>
3028
- const projectScripts = <span class="cstat-no" title="statement not covered" >getProjectScripts(projectPath);</span>
3029
- const script = <span class="cstat-no" title="statement not covered" >projectScripts.scripts.get(scriptName);</span>
3030
- &nbsp;
3031
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!script) {</span>
3032
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Script "${scriptName}" not found in project`));</span>
3033
- <span class="cstat-no" title="statement not covered" > return;</span>
3034
- }
3035
- &nbsp;
3036
- // Proactive port checking
3037
- const canProceed = <span class="cstat-no" title="statement not covered" >await checkPortsBeforeExecution(projectPath, scriptName, force);</span>
3038
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!canProceed) {</span>
3039
- <span class="cstat-no" title="statement not covered" > reject(new Error('Port conflict not resolved'));</span>
3040
- <span class="cstat-no" title="statement not covered" > return;</span>
3041
- }
3042
- &nbsp;
3043
- let command: string;
3044
- let commandArgs: string[];
3045
- &nbsp;
3046
- <span class="cstat-no" title="statement not covered" > switch (script.runner) {</span>
3047
- case 'npm':
3048
- <span class="cstat-no" title="statement not covered" > command = 'npm';</span>
3049
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
3050
- <span class="cstat-no" title="statement not covered" > break;</span>
3051
- case 'yarn':
3052
- <span class="cstat-no" title="statement not covered" > command = 'yarn';</span>
3053
- <span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
3054
- <span class="cstat-no" title="statement not covered" > break;</span>
3055
- case 'pnpm':
3056
- <span class="cstat-no" title="statement not covered" > command = 'pnpm';</span>
3057
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
3058
- <span class="cstat-no" title="statement not covered" > break;</span>
3059
- case 'python':
3060
- <span class="cstat-no" title="statement not covered" > command = 'python';</span>
3061
- <span class="cstat-no" title="statement not covered" > commandArgs = ['-m', ...script.command.split(' ').slice(1), ...args];</span>
3062
- <span class="cstat-no" title="statement not covered" > break;</span>
3063
- case 'poetry':
3064
- <span class="cstat-no" title="statement not covered" > command = 'poetry';</span>
3065
- const modulePath = <span class="cstat-no" title="statement not covered" >script.command.split(' ').slice(1).join(' ');</span>
3066
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', 'python', '-m', modulePath, ...args];</span>
3067
- <span class="cstat-no" title="statement not covered" > break;</span>
3068
- case 'cargo':
3069
- <span class="cstat-no" title="statement not covered" > command = 'cargo';</span>
3070
- <span class="cstat-no" title="statement not covered" > commandArgs = scriptName === 'run' ? ['run', ...args] : [scriptName, ...args];</span>
3071
- <span class="cstat-no" title="statement not covered" > break;</span>
3072
- case 'go':
3073
- <span class="cstat-no" title="statement not covered" > command = 'go';</span>
3074
- <span class="cstat-no" title="statement not covered" > commandArgs = script.command.split(' ').slice(1);</span>
3075
- <span class="cstat-no" title="statement not covered" > if (scriptName === 'run' &amp;&amp; args.length &gt; 0) {</span>
3076
- <span class="cstat-no" title="statement not covered" > commandArgs = ['run', ...args];</span>
3077
- } else {
3078
- <span class="cstat-no" title="statement not covered" > commandArgs = [...commandArgs, ...args];</span>
3079
- }
3080
- <span class="cstat-no" title="statement not covered" > break;</span>
3081
- case 'make':
3082
- <span class="cstat-no" title="statement not covered" > command = 'make';</span>
3083
- <span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
3084
- <span class="cstat-no" title="statement not covered" > break;</span>
3085
- default:
3086
- const parts = <span class="cstat-no" title="statement not covered" >script.command.split(' ');</span>
3087
- <span class="cstat-no" title="statement not covered" > command = parts[0];</span>
3088
- <span class="cstat-no" title="statement not covered" > commandArgs = [...parts.slice(1), ...args];</span>
3089
- <span class="cstat-no" title="statement not covered" > break;</span>
3090
- }
3091
- &nbsp;
3092
- // Create log file for the process
3093
- const dataDir = <span class="cstat-no" title="statement not covered" >path.join(os.homedir(), '.projax');</span>
3094
- const logsDir = <span class="cstat-no" title="statement not covered" >path.join(dataDir, 'logs');</span>
3095
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(logsDir)) {</span>
3096
- <span class="cstat-no" title="statement not covered" > fs.mkdirSync(logsDir, { recursive: true });</span>
3097
- }
3098
- const logFile = <span class="cstat-no" title="statement not covered" >path.join(logsDir, `process-${Date.now()}-${scriptName}.log`);</span>
3099
- &nbsp;
3100
- // Open log file with file descriptors that can be inherited by child process
3101
- const logFd = <span class="cstat-no" title="statement not covered" >fs.openSync(logFile, 'a');</span>
3102
-
3103
- // Spawn process in detached mode with output redirected to log file
3104
- let child;
3105
- <span class="cstat-no" title="statement not covered" > try {</span>
3106
- <span class="cstat-no" title="statement not covered" > child = spawn(command, commandArgs, {</span>
3107
- cwd: projectPath,
3108
- stdio: ['ignore', logFd, logFd], // Redirect stdout and stderr to log file descriptor
3109
- detached: true,
3110
- shell: process.platform === 'win32',
3111
- });
3112
- } catch (spawnError) {
3113
- <span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
3114
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Failed to spawn process: ${spawnError instanceof Error ? spawnError.message : String(spawnError)}`));</span>
3115
- <span class="cstat-no" title="statement not covered" > return;</span>
3116
- }
3117
-
3118
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!child.pid) {</span>
3119
- <span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
3120
- <span class="cstat-no" title="statement not covered" > reject(new Error('Failed to start process: no PID assigned'));</span>
3121
- <span class="cstat-no" title="statement not covered" > return;</span>
3122
- }
3123
-
3124
- // Handle spawn errors
3125
- <span class="cstat-no" title="statement not covered" > child.on('error', <span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {</span>
3126
- <span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
3127
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Process spawn error: ${error.message}`));</span>
3128
- });
3129
-
3130
- // Close the file descriptor in parent process after a short delay
3131
- // The child process will have its own copy
3132
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3133
- <span class="cstat-no" title="statement not covered" > try {</span>
3134
- <span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
3135
- } catch {
3136
- // Already closed or error, ignore
3137
- }
3138
- }, 1000);
3139
- &nbsp;
3140
- // Store process info
3141
- const processInfo: BackgroundProcess = <span class="cstat-no" title="statement not covered" >{</span>
3142
- pid: child.pid,
3143
- projectPath,
3144
- projectName,
3145
- scriptName,
3146
- command: `${command} ${commandArgs.join(' ')}`,
3147
- startedAt: Date.now(),
3148
- logFile,
3149
- };
3150
- &nbsp;
3151
- <span class="cstat-no" title="statement not covered" > addProcess(processInfo);</span>
3152
- &nbsp;
3153
- // Listen for process exit to clean up tracking
3154
- <span class="cstat-no" title="statement not covered" > child.on('exit', <span class="fstat-no" title="function not covered" >async </span>(code, signal) =&gt; {</span>
3155
- // Remove from tracking when process exits
3156
- <span class="cstat-no" title="statement not covered" > removeProcess(child.pid!);</span>
3157
-
3158
- // Log exit information
3159
- <span class="cstat-no" title="statement not covered" > if (code !== null) {</span>
3160
- <span class="cstat-no" title="statement not covered" > fs.appendFileSync(logFile, `\n\n[Process exited with code ${code}]\n`);</span>
3161
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (signal !== null) {</span>
3162
- <span class="cstat-no" title="statement not covered" > fs.appendFileSync(logFile, `\n\n[Process killed by signal ${signal}]\n`);</span>
3163
- }
3164
-
3165
- // Check if this was a test script and parse results
3166
- <span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
3167
- });
3168
- &nbsp;
3169
- // Unref so parent can exit and process runs independently
3170
- <span class="cstat-no" title="statement not covered" > child.unref();</span>
3171
- &nbsp;
3172
- // Show minimal output
3173
- <span class="cstat-no" title="statement not covered" > console.log(`āœ“ Started "${projectName}" (${scriptName}) in background [PID: ${child.pid}]`);</span>
3174
- <span class="cstat-no" title="statement not covered" > console.log(` Logs: ${logFile}`);</span>
3175
- <span class="cstat-no" title="statement not covered" > console.log(` Command: ${command} ${commandArgs.join(' ')}\n`);</span>
3176
- &nbsp;
3177
- // For background processes, we can't easily do reactive detection
3178
- // But we can check the log file after a short delay for port conflicts and URLs
3179
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {</span>
3180
- <span class="cstat-no" title="statement not covered" > try {</span>
3181
- // Wait a bit for process to start and potentially fail
3182
- <span class="cstat-no" title="statement not covered" > await new Promise(<span class="fstat-no" title="function not covered" >resolve </span>=&gt; <span class="cstat-no" title="statement not covered" >setTimeout(resolve, 2000))</span>;</span>
3183
-
3184
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (fs.existsSync(logFile)) {</span>
3185
- const logContent = <span class="cstat-no" title="statement not covered" >fs.readFileSync(logFile, 'utf-8');</span>
3186
-
3187
- // Check for port conflicts
3188
- const port = <span class="cstat-no" title="statement not covered" >extractPortFromError(logContent);</span>
3189
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (port) {</span>
3190
- <span class="cstat-no" title="statement not covered" > console.error(`\nāš ļø Port conflict detected in background process: port ${port} is in use`);</span>
3191
- <span class="cstat-no" title="statement not covered" > console.error(` Check log file: ${logFile}`);</span>
3192
- <span class="cstat-no" title="statement not covered" > console.error(` Use: prx &lt;project&gt; &lt;script&gt; --force to auto-resolve port conflicts\n`);</span>
3193
- }
3194
-
3195
- // Extract URLs from output
3196
- const urls = <span class="cstat-no" title="statement not covered" >extractUrlsFromOutput(logContent);</span>
3197
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (urls.length &gt; 0) {</span>
3198
- <span class="cstat-no" title="statement not covered" > updateProcessUrls(child.pid!, urls);</span>
3199
- }
3200
- }
3201
- } catch {
3202
- // Ignore errors checking log file
3203
- }
3204
- }, 3000);
3205
-
3206
- // Also check for URLs from detected ports
3207
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {</span>
3208
- <span class="cstat-no" title="statement not covered" > try {</span>
3209
- const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
3210
- const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
3211
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (project) {</span>
3212
- const ports = <span class="cstat-no" title="statement not covered" >db.getProjectPorts(project.id);</span>
3213
- const urls: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
3214
- <span class="cstat-no" title="statement not covered" > for (const portInfo of ports) {</span>
3215
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (portInfo.script_name === scriptName) {</span>
3216
- <span class="cstat-no" title="statement not covered" > urls.push(`http://localhost:${portInfo.port}`);</span>
3217
- }
3218
- }
3219
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (urls.length &gt; 0) {</span>
3220
- <span class="cstat-no" title="statement not covered" > updateProcessUrls(child.pid!, urls);</span>
3221
- }
3222
- }
3223
- } catch {
3224
- // Ignore errors
3225
- }
3226
- }, 5000);
3227
- &nbsp;
3228
- // Check for test results periodically (for watch mode tests)
3229
- // Parse results every 10 seconds for the first 60 seconds, then every 30 seconds
3230
- let parseAttempt = <span class="cstat-no" title="statement not covered" >0;</span>
3231
- const parseInterval = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {</span>
3232
- <span class="cstat-no" title="statement not covered" > parseAttempt++;</span>
3233
-
3234
- // Stop parsing after 10 minutes or if process is dead
3235
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (parseAttempt &gt; 20 || !child.pid) {</span>
3236
- <span class="cstat-no" title="statement not covered" > clearInterval(parseInterval);</span>
3237
- <span class="cstat-no" title="statement not covered" > return;</span>
3238
- }
3239
-
3240
- <span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
3241
-
3242
- // After first minute, slow down to every 30 seconds
3243
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (parseAttempt &gt;= 6) {</span>
3244
- <span class="cstat-no" title="statement not covered" > clearInterval(parseInterval);</span>
3245
- const slowInterval = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {</span>
3246
- <span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
3247
- }, 30000);
3248
-
3249
- // Stop after 10 minutes total
3250
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >clearInterval(slowInterval),</span> 540000);</span>
3251
- }
3252
- }, 10000); // Initial interval: every 10 seconds
3253
- &nbsp;
3254
- // Resolve with PID since process is running in background
3255
- <span class="cstat-no" title="statement not covered" > resolve(child.pid);</span>
3256
- });
3257
- }
3258
- &nbsp;
3259
- /**
3260
- * Check log file for test output and parse results
3261
- */
3262
- async function <span class="fstat-no" title="function not covered" >checkAndParseTestResults(</span>logFile: string, projectPath: string, scriptName: string): Promise&lt;void&gt; {
3263
- <span class="cstat-no" title="statement not covered" > try {</span>
3264
- // Only parse if script name suggests it's a test command
3265
- const testScriptPatterns = <span class="cstat-no" title="statement not covered" >['test', 'spec', 'jest', 'vitest', 'mocha', 'pytest', 'unittest'];</span>
3266
- const isTestScript = <span class="cstat-no" title="statement not covered" >testScriptPatterns.some(<span class="fstat-no" title="function not covered" >pattern </span>=&gt; <span class="cstat-no" title="statement not covered" >scriptName.toLowerCase().includes(pattern))</span>;</span>
3267
-
3268
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isTestScript) {</span>
3269
- <span class="cstat-no" title="statement not covered" > return;</span>
3270
- }
3271
-
3272
- // Read the log file
3273
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(logFile)) {</span>
3274
- <span class="cstat-no" title="statement not covered" > return;</span>
3275
- }
3276
-
3277
- const logContent = <span class="cstat-no" title="statement not covered" >fs.readFileSync(logFile, 'utf-8');</span>
3278
-
3279
- // Import test parser (dynamic to avoid circular dependency issues)
3280
- const testParserPath = <span class="cstat-no" title="statement not covered" >path.join(__dirname, 'test-parser.js');</span>
3281
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(testParserPath)) {</span>
3282
- // Parser not available (might be in development mode)
3283
- <span class="cstat-no" title="statement not covered" > return;</span>
3284
- }
3285
-
3286
- const { parseTestOutput, isTestOutput } = <span class="cstat-no" title="statement not covered" >await import(testParserPath<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >);</span></span></span>
3287
-
3288
- // Check if output contains test results
3289
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isTestOutput(logContent)) {</span>
3290
- <span class="cstat-no" title="statement not covered" > return;</span>
3291
- }
3292
-
3293
- // Parse test results
3294
- const parsed = <span class="cstat-no" title="statement not covered" >parseTestOutput(logContent);</span>
3295
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!parsed) {</span>
3296
- <span class="cstat-no" title="statement not covered" > return;</span>
3297
- }
3298
-
3299
- // Get project from database
3300
- const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
3301
- const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
3302
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!project) {</span>
3303
- <span class="cstat-no" title="statement not covered" > return;</span>
3304
- }
3305
-
3306
- // Save test results to database
3307
- <span class="cstat-no" title="statement not covered" > db.addTestResult(</span>
3308
- project.id,
3309
- scriptName,
3310
- parsed.passed,
3311
- parsed.failed,
3312
- parsed.skipped,
3313
- parsed.total,
3314
- parsed.duration,
3315
- parsed.coverage,
3316
- parsed.framework,
3317
- logContent.slice(-5000) // Store last 5000 chars of output
3318
- );
3319
-
3320
- <span class="cstat-no" title="statement not covered" > console.log(`\nšŸ“Š Test results saved: ${parsed.passed} passed, ${parsed.failed} failed, ${parsed.skipped} skipped`);</span>
3321
- } catch (error) {
3322
- // Silently fail - test parsing is optional
3323
- <span class="cstat-no" title="statement not covered" > console.error('Error parsing test results:', error);</span>
3324
- }
3325
- }
3326
- &nbsp;
3327
- &nbsp;</pre></td></tr></table></pre>
3328
-
3329
- <div class='push'></div><!-- for sticky footer -->
3330
- </div><!-- /wrapper -->
3331
- <div class='footer quiet pad2 space-top1 center small'>
3332
- Code coverage generated by
3333
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3334
- at 2026-01-08T07:29:04.482Z
3335
- </div>
3336
- <script src="prettify.js"></script>
3337
- <script>
3338
- window.onload = function () {
3339
- prettyPrint();
3340
- };
3341
- </script>
3342
- <script src="sorter.js"></script>
3343
- <script src="block-navigation.js"></script>
3344
- </body>
3345
- </html>
3346
-