@arela/uploader 1.0.2 → 1.0.4

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 (61) hide show
  1. package/.env.local +316 -0
  2. package/.env.template +70 -0
  3. package/coverage/IdentifyCommand.js.html +1462 -0
  4. package/coverage/PropagateCommand.js.html +1507 -0
  5. package/coverage/PushCommand.js.html +1504 -0
  6. package/coverage/ScanCommand.js.html +1654 -0
  7. package/coverage/UploadCommand.js.html +1846 -0
  8. package/coverage/WatchCommand.js.html +4111 -0
  9. package/coverage/base.css +224 -0
  10. package/coverage/block-navigation.js +87 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +191 -0
  13. package/coverage/lcov-report/IdentifyCommand.js.html +1462 -0
  14. package/coverage/lcov-report/PropagateCommand.js.html +1507 -0
  15. package/coverage/lcov-report/PushCommand.js.html +1504 -0
  16. package/coverage/lcov-report/ScanCommand.js.html +1654 -0
  17. package/coverage/lcov-report/UploadCommand.js.html +1846 -0
  18. package/coverage/lcov-report/WatchCommand.js.html +4111 -0
  19. package/coverage/lcov-report/base.css +224 -0
  20. package/coverage/lcov-report/block-navigation.js +87 -0
  21. package/coverage/lcov-report/favicon.png +0 -0
  22. package/coverage/lcov-report/index.html +191 -0
  23. package/coverage/lcov-report/prettify.css +1 -0
  24. package/coverage/lcov-report/prettify.js +2 -0
  25. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  26. package/coverage/lcov-report/sorter.js +210 -0
  27. package/coverage/lcov.info +1937 -0
  28. package/coverage/prettify.css +1 -0
  29. package/coverage/prettify.js +2 -0
  30. package/coverage/sort-arrow-sprite.png +0 -0
  31. package/coverage/sorter.js +210 -0
  32. package/docs/API_RETRY_MECHANISM.md +338 -0
  33. package/docs/ARELA_IDENTIFY_IMPLEMENTATION.md +489 -0
  34. package/docs/ARELA_IDENTIFY_QUICKREF.md +186 -0
  35. package/docs/ARELA_PROPAGATE_IMPLEMENTATION.md +581 -0
  36. package/docs/ARELA_PROPAGATE_QUICKREF.md +272 -0
  37. package/docs/ARELA_PUSH_IMPLEMENTATION.md +577 -0
  38. package/docs/ARELA_PUSH_QUICKREF.md +322 -0
  39. package/docs/ARELA_SCAN_IMPLEMENTATION.md +373 -0
  40. package/docs/ARELA_SCAN_QUICKREF.md +139 -0
  41. package/docs/CROSS_PLATFORM_PATH_HANDLING.md +593 -0
  42. package/docs/DETECTION_ATTEMPT_TRACKING.md +414 -0
  43. package/docs/MIGRATION_UPLOADER_TO_FILE_STATS.md +1020 -0
  44. package/docs/MULTI_LEVEL_DIRECTORY_SCANNING.md +494 -0
  45. package/docs/STATS_COMMAND_SEQUENCE_DIAGRAM.md +287 -0
  46. package/docs/STATS_COMMAND_SIMPLE.md +93 -0
  47. package/package.json +31 -3
  48. package/src/commands/IdentifyCommand.js +459 -0
  49. package/src/commands/PropagateCommand.js +474 -0
  50. package/src/commands/PushCommand.js +473 -0
  51. package/src/commands/ScanCommand.js +523 -0
  52. package/src/config/config.js +154 -7
  53. package/src/file-detection.js +9 -10
  54. package/src/index.js +150 -0
  55. package/src/services/ScanApiService.js +645 -0
  56. package/src/utils/PathNormalizer.js +220 -0
  57. package/tests/commands/IdentifyCommand.test.js +570 -0
  58. package/tests/commands/PropagateCommand.test.js +568 -0
  59. package/tests/commands/PushCommand.test.js +754 -0
  60. package/tests/commands/ScanCommand.test.js +382 -0
  61. package/tests/unit/PathAndTableNameGeneration.test.js +1211 -0
@@ -0,0 +1,4111 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for WatchCommand.js</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> WatchCommand.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/417</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/182</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/37</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/412</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>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1174
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1175
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1176
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1177
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1178
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1179
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1180
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1181
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1182
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1183
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1184
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1185
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1186
+ <a name='L1121'></a><a href='#L1121'>1121</a>
1187
+ <a name='L1122'></a><a href='#L1122'>1122</a>
1188
+ <a name='L1123'></a><a href='#L1123'>1123</a>
1189
+ <a name='L1124'></a><a href='#L1124'>1124</a>
1190
+ <a name='L1125'></a><a href='#L1125'>1125</a>
1191
+ <a name='L1126'></a><a href='#L1126'>1126</a>
1192
+ <a name='L1127'></a><a href='#L1127'>1127</a>
1193
+ <a name='L1128'></a><a href='#L1128'>1128</a>
1194
+ <a name='L1129'></a><a href='#L1129'>1129</a>
1195
+ <a name='L1130'></a><a href='#L1130'>1130</a>
1196
+ <a name='L1131'></a><a href='#L1131'>1131</a>
1197
+ <a name='L1132'></a><a href='#L1132'>1132</a>
1198
+ <a name='L1133'></a><a href='#L1133'>1133</a>
1199
+ <a name='L1134'></a><a href='#L1134'>1134</a>
1200
+ <a name='L1135'></a><a href='#L1135'>1135</a>
1201
+ <a name='L1136'></a><a href='#L1136'>1136</a>
1202
+ <a name='L1137'></a><a href='#L1137'>1137</a>
1203
+ <a name='L1138'></a><a href='#L1138'>1138</a>
1204
+ <a name='L1139'></a><a href='#L1139'>1139</a>
1205
+ <a name='L1140'></a><a href='#L1140'>1140</a>
1206
+ <a name='L1141'></a><a href='#L1141'>1141</a>
1207
+ <a name='L1142'></a><a href='#L1142'>1142</a>
1208
+ <a name='L1143'></a><a href='#L1143'>1143</a>
1209
+ <a name='L1144'></a><a href='#L1144'>1144</a>
1210
+ <a name='L1145'></a><a href='#L1145'>1145</a>
1211
+ <a name='L1146'></a><a href='#L1146'>1146</a>
1212
+ <a name='L1147'></a><a href='#L1147'>1147</a>
1213
+ <a name='L1148'></a><a href='#L1148'>1148</a>
1214
+ <a name='L1149'></a><a href='#L1149'>1149</a>
1215
+ <a name='L1150'></a><a href='#L1150'>1150</a>
1216
+ <a name='L1151'></a><a href='#L1151'>1151</a>
1217
+ <a name='L1152'></a><a href='#L1152'>1152</a>
1218
+ <a name='L1153'></a><a href='#L1153'>1153</a>
1219
+ <a name='L1154'></a><a href='#L1154'>1154</a>
1220
+ <a name='L1155'></a><a href='#L1155'>1155</a>
1221
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1222
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1223
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1224
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1225
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1226
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1227
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1228
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1229
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1230
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1231
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1232
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1233
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1234
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1235
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1236
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1237
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1238
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1239
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1240
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1241
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1242
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1243
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1244
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1245
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1246
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1247
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1248
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1249
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1250
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1251
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1252
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1253
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1254
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1255
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1256
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1257
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1258
+ <a name='L1193'></a><a href='#L1193'>1193</a>
1259
+ <a name='L1194'></a><a href='#L1194'>1194</a>
1260
+ <a name='L1195'></a><a href='#L1195'>1195</a>
1261
+ <a name='L1196'></a><a href='#L1196'>1196</a>
1262
+ <a name='L1197'></a><a href='#L1197'>1197</a>
1263
+ <a name='L1198'></a><a href='#L1198'>1198</a>
1264
+ <a name='L1199'></a><a href='#L1199'>1199</a>
1265
+ <a name='L1200'></a><a href='#L1200'>1200</a>
1266
+ <a name='L1201'></a><a href='#L1201'>1201</a>
1267
+ <a name='L1202'></a><a href='#L1202'>1202</a>
1268
+ <a name='L1203'></a><a href='#L1203'>1203</a>
1269
+ <a name='L1204'></a><a href='#L1204'>1204</a>
1270
+ <a name='L1205'></a><a href='#L1205'>1205</a>
1271
+ <a name='L1206'></a><a href='#L1206'>1206</a>
1272
+ <a name='L1207'></a><a href='#L1207'>1207</a>
1273
+ <a name='L1208'></a><a href='#L1208'>1208</a>
1274
+ <a name='L1209'></a><a href='#L1209'>1209</a>
1275
+ <a name='L1210'></a><a href='#L1210'>1210</a>
1276
+ <a name='L1211'></a><a href='#L1211'>1211</a>
1277
+ <a name='L1212'></a><a href='#L1212'>1212</a>
1278
+ <a name='L1213'></a><a href='#L1213'>1213</a>
1279
+ <a name='L1214'></a><a href='#L1214'>1214</a>
1280
+ <a name='L1215'></a><a href='#L1215'>1215</a>
1281
+ <a name='L1216'></a><a href='#L1216'>1216</a>
1282
+ <a name='L1217'></a><a href='#L1217'>1217</a>
1283
+ <a name='L1218'></a><a href='#L1218'>1218</a>
1284
+ <a name='L1219'></a><a href='#L1219'>1219</a>
1285
+ <a name='L1220'></a><a href='#L1220'>1220</a>
1286
+ <a name='L1221'></a><a href='#L1221'>1221</a>
1287
+ <a name='L1222'></a><a href='#L1222'>1222</a>
1288
+ <a name='L1223'></a><a href='#L1223'>1223</a>
1289
+ <a name='L1224'></a><a href='#L1224'>1224</a>
1290
+ <a name='L1225'></a><a href='#L1225'>1225</a>
1291
+ <a name='L1226'></a><a href='#L1226'>1226</a>
1292
+ <a name='L1227'></a><a href='#L1227'>1227</a>
1293
+ <a name='L1228'></a><a href='#L1228'>1228</a>
1294
+ <a name='L1229'></a><a href='#L1229'>1229</a>
1295
+ <a name='L1230'></a><a href='#L1230'>1230</a>
1296
+ <a name='L1231'></a><a href='#L1231'>1231</a>
1297
+ <a name='L1232'></a><a href='#L1232'>1232</a>
1298
+ <a name='L1233'></a><a href='#L1233'>1233</a>
1299
+ <a name='L1234'></a><a href='#L1234'>1234</a>
1300
+ <a name='L1235'></a><a href='#L1235'>1235</a>
1301
+ <a name='L1236'></a><a href='#L1236'>1236</a>
1302
+ <a name='L1237'></a><a href='#L1237'>1237</a>
1303
+ <a name='L1238'></a><a href='#L1238'>1238</a>
1304
+ <a name='L1239'></a><a href='#L1239'>1239</a>
1305
+ <a name='L1240'></a><a href='#L1240'>1240</a>
1306
+ <a name='L1241'></a><a href='#L1241'>1241</a>
1307
+ <a name='L1242'></a><a href='#L1242'>1242</a>
1308
+ <a name='L1243'></a><a href='#L1243'>1243</a>
1309
+ <a name='L1244'></a><a href='#L1244'>1244</a>
1310
+ <a name='L1245'></a><a href='#L1245'>1245</a>
1311
+ <a name='L1246'></a><a href='#L1246'>1246</a>
1312
+ <a name='L1247'></a><a href='#L1247'>1247</a>
1313
+ <a name='L1248'></a><a href='#L1248'>1248</a>
1314
+ <a name='L1249'></a><a href='#L1249'>1249</a>
1315
+ <a name='L1250'></a><a href='#L1250'>1250</a>
1316
+ <a name='L1251'></a><a href='#L1251'>1251</a>
1317
+ <a name='L1252'></a><a href='#L1252'>1252</a>
1318
+ <a name='L1253'></a><a href='#L1253'>1253</a>
1319
+ <a name='L1254'></a><a href='#L1254'>1254</a>
1320
+ <a name='L1255'></a><a href='#L1255'>1255</a>
1321
+ <a name='L1256'></a><a href='#L1256'>1256</a>
1322
+ <a name='L1257'></a><a href='#L1257'>1257</a>
1323
+ <a name='L1258'></a><a href='#L1258'>1258</a>
1324
+ <a name='L1259'></a><a href='#L1259'>1259</a>
1325
+ <a name='L1260'></a><a href='#L1260'>1260</a>
1326
+ <a name='L1261'></a><a href='#L1261'>1261</a>
1327
+ <a name='L1262'></a><a href='#L1262'>1262</a>
1328
+ <a name='L1263'></a><a href='#L1263'>1263</a>
1329
+ <a name='L1264'></a><a href='#L1264'>1264</a>
1330
+ <a name='L1265'></a><a href='#L1265'>1265</a>
1331
+ <a name='L1266'></a><a href='#L1266'>1266</a>
1332
+ <a name='L1267'></a><a href='#L1267'>1267</a>
1333
+ <a name='L1268'></a><a href='#L1268'>1268</a>
1334
+ <a name='L1269'></a><a href='#L1269'>1269</a>
1335
+ <a name='L1270'></a><a href='#L1270'>1270</a>
1336
+ <a name='L1271'></a><a href='#L1271'>1271</a>
1337
+ <a name='L1272'></a><a href='#L1272'>1272</a>
1338
+ <a name='L1273'></a><a href='#L1273'>1273</a>
1339
+ <a name='L1274'></a><a href='#L1274'>1274</a>
1340
+ <a name='L1275'></a><a href='#L1275'>1275</a>
1341
+ <a name='L1276'></a><a href='#L1276'>1276</a>
1342
+ <a name='L1277'></a><a href='#L1277'>1277</a>
1343
+ <a name='L1278'></a><a href='#L1278'>1278</a>
1344
+ <a name='L1279'></a><a href='#L1279'>1279</a>
1345
+ <a name='L1280'></a><a href='#L1280'>1280</a>
1346
+ <a name='L1281'></a><a href='#L1281'>1281</a>
1347
+ <a name='L1282'></a><a href='#L1282'>1282</a>
1348
+ <a name='L1283'></a><a href='#L1283'>1283</a>
1349
+ <a name='L1284'></a><a href='#L1284'>1284</a>
1350
+ <a name='L1285'></a><a href='#L1285'>1285</a>
1351
+ <a name='L1286'></a><a href='#L1286'>1286</a>
1352
+ <a name='L1287'></a><a href='#L1287'>1287</a>
1353
+ <a name='L1288'></a><a href='#L1288'>1288</a>
1354
+ <a name='L1289'></a><a href='#L1289'>1289</a>
1355
+ <a name='L1290'></a><a href='#L1290'>1290</a>
1356
+ <a name='L1291'></a><a href='#L1291'>1291</a>
1357
+ <a name='L1292'></a><a href='#L1292'>1292</a>
1358
+ <a name='L1293'></a><a href='#L1293'>1293</a>
1359
+ <a name='L1294'></a><a href='#L1294'>1294</a>
1360
+ <a name='L1295'></a><a href='#L1295'>1295</a>
1361
+ <a name='L1296'></a><a href='#L1296'>1296</a>
1362
+ <a name='L1297'></a><a href='#L1297'>1297</a>
1363
+ <a name='L1298'></a><a href='#L1298'>1298</a>
1364
+ <a name='L1299'></a><a href='#L1299'>1299</a>
1365
+ <a name='L1300'></a><a href='#L1300'>1300</a>
1366
+ <a name='L1301'></a><a href='#L1301'>1301</a>
1367
+ <a name='L1302'></a><a href='#L1302'>1302</a>
1368
+ <a name='L1303'></a><a href='#L1303'>1303</a>
1369
+ <a name='L1304'></a><a href='#L1304'>1304</a>
1370
+ <a name='L1305'></a><a href='#L1305'>1305</a>
1371
+ <a name='L1306'></a><a href='#L1306'>1306</a>
1372
+ <a name='L1307'></a><a href='#L1307'>1307</a>
1373
+ <a name='L1308'></a><a href='#L1308'>1308</a>
1374
+ <a name='L1309'></a><a href='#L1309'>1309</a>
1375
+ <a name='L1310'></a><a href='#L1310'>1310</a>
1376
+ <a name='L1311'></a><a href='#L1311'>1311</a>
1377
+ <a name='L1312'></a><a href='#L1312'>1312</a>
1378
+ <a name='L1313'></a><a href='#L1313'>1313</a>
1379
+ <a name='L1314'></a><a href='#L1314'>1314</a>
1380
+ <a name='L1315'></a><a href='#L1315'>1315</a>
1381
+ <a name='L1316'></a><a href='#L1316'>1316</a>
1382
+ <a name='L1317'></a><a href='#L1317'>1317</a>
1383
+ <a name='L1318'></a><a href='#L1318'>1318</a>
1384
+ <a name='L1319'></a><a href='#L1319'>1319</a>
1385
+ <a name='L1320'></a><a href='#L1320'>1320</a>
1386
+ <a name='L1321'></a><a href='#L1321'>1321</a>
1387
+ <a name='L1322'></a><a href='#L1322'>1322</a>
1388
+ <a name='L1323'></a><a href='#L1323'>1323</a>
1389
+ <a name='L1324'></a><a href='#L1324'>1324</a>
1390
+ <a name='L1325'></a><a href='#L1325'>1325</a>
1391
+ <a name='L1326'></a><a href='#L1326'>1326</a>
1392
+ <a name='L1327'></a><a href='#L1327'>1327</a>
1393
+ <a name='L1328'></a><a href='#L1328'>1328</a>
1394
+ <a name='L1329'></a><a href='#L1329'>1329</a>
1395
+ <a name='L1330'></a><a href='#L1330'>1330</a>
1396
+ <a name='L1331'></a><a href='#L1331'>1331</a>
1397
+ <a name='L1332'></a><a href='#L1332'>1332</a>
1398
+ <a name='L1333'></a><a href='#L1333'>1333</a>
1399
+ <a name='L1334'></a><a href='#L1334'>1334</a>
1400
+ <a name='L1335'></a><a href='#L1335'>1335</a>
1401
+ <a name='L1336'></a><a href='#L1336'>1336</a>
1402
+ <a name='L1337'></a><a href='#L1337'>1337</a>
1403
+ <a name='L1338'></a><a href='#L1338'>1338</a>
1404
+ <a name='L1339'></a><a href='#L1339'>1339</a>
1405
+ <a name='L1340'></a><a href='#L1340'>1340</a>
1406
+ <a name='L1341'></a><a href='#L1341'>1341</a>
1407
+ <a name='L1342'></a><a href='#L1342'>1342</a>
1408
+ <a name='L1343'></a><a href='#L1343'>1343</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-no">&nbsp;</span>
1443
+ <span class="cline-any cline-no">&nbsp;</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&nbsp;</span>
1465
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1493
+ <span class="cline-any cline-no">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-no">&nbsp;</span>
1505
+ <span class="cline-any cline-no">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-no">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&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-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-no">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-neutral">&nbsp;</span>
1528
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-no">&nbsp;</span>
1553
+ <span class="cline-any cline-no">&nbsp;</span>
1554
+ <span class="cline-any cline-neutral">&nbsp;</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-no">&nbsp;</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-no">&nbsp;</span>
1560
+ <span class="cline-any cline-no">&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-no">&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-neutral">&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-no">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1592
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-neutral">&nbsp;</span>
1599
+ <span class="cline-any cline-no">&nbsp;</span>
1600
+ <span class="cline-any cline-no">&nbsp;</span>
1601
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
+ <span class="cline-any cline-neutral">&nbsp;</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-no">&nbsp;</span>
1614
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
+ <span class="cline-any cline-neutral">&nbsp;</span>
1616
+ <span class="cline-any cline-no">&nbsp;</span>
1617
+ <span class="cline-any cline-neutral">&nbsp;</span>
1618
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1624
+ <span class="cline-any cline-neutral">&nbsp;</span>
1625
+ <span class="cline-any cline-neutral">&nbsp;</span>
1626
+ <span class="cline-any cline-neutral">&nbsp;</span>
1627
+ <span class="cline-any cline-neutral">&nbsp;</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1641
+ <span class="cline-any cline-neutral">&nbsp;</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-no">&nbsp;</span>
1644
+ <span class="cline-any cline-neutral">&nbsp;</span>
1645
+ <span class="cline-any cline-no">&nbsp;</span>
1646
+ <span class="cline-any cline-no">&nbsp;</span>
1647
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1652
+ <span class="cline-any cline-no">&nbsp;</span>
1653
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1658
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-neutral">&nbsp;</span>
1664
+ <span class="cline-any cline-neutral">&nbsp;</span>
1665
+ <span class="cline-any cline-no">&nbsp;</span>
1666
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-no">&nbsp;</span>
1672
+ <span class="cline-any cline-no">&nbsp;</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-no">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-no">&nbsp;</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-no">&nbsp;</span>
1680
+ <span class="cline-any cline-neutral">&nbsp;</span>
1681
+ <span class="cline-any cline-no">&nbsp;</span>
1682
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1690
+ <span class="cline-any cline-no">&nbsp;</span>
1691
+ <span class="cline-any cline-neutral">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-neutral">&nbsp;</span>
1694
+ <span class="cline-any cline-no">&nbsp;</span>
1695
+ <span class="cline-any cline-no">&nbsp;</span>
1696
+ <span class="cline-any cline-neutral">&nbsp;</span>
1697
+ <span class="cline-any cline-neutral">&nbsp;</span>
1698
+ <span class="cline-any cline-neutral">&nbsp;</span>
1699
+ <span class="cline-any cline-neutral">&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-no">&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-no">&nbsp;</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-no">&nbsp;</span>
1708
+ <span class="cline-any cline-neutral">&nbsp;</span>
1709
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1714
+ <span class="cline-any cline-no">&nbsp;</span>
1715
+ <span class="cline-any cline-neutral">&nbsp;</span>
1716
+ <span class="cline-any cline-neutral">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-no">&nbsp;</span>
1719
+ <span class="cline-any cline-no">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-no">&nbsp;</span>
1722
+ <span class="cline-any cline-no">&nbsp;</span>
1723
+ <span class="cline-any cline-neutral">&nbsp;</span>
1724
+ <span class="cline-any cline-neutral">&nbsp;</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-neutral">&nbsp;</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1733
+ <span class="cline-any cline-neutral">&nbsp;</span>
1734
+ <span class="cline-any cline-neutral">&nbsp;</span>
1735
+ <span class="cline-any cline-no">&nbsp;</span>
1736
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
+ <span class="cline-any cline-no">&nbsp;</span>
1738
+ <span class="cline-any cline-no">&nbsp;</span>
1739
+ <span class="cline-any cline-no">&nbsp;</span>
1740
+ <span class="cline-any cline-neutral">&nbsp;</span>
1741
+ <span class="cline-any cline-no">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1747
+ <span class="cline-any cline-neutral">&nbsp;</span>
1748
+ <span class="cline-any cline-neutral">&nbsp;</span>
1749
+ <span class="cline-any cline-neutral">&nbsp;</span>
1750
+ <span class="cline-any cline-neutral">&nbsp;</span>
1751
+ <span class="cline-any cline-neutral">&nbsp;</span>
1752
+ <span class="cline-any cline-neutral">&nbsp;</span>
1753
+ <span class="cline-any cline-neutral">&nbsp;</span>
1754
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-neutral">&nbsp;</span>
1761
+ <span class="cline-any cline-no">&nbsp;</span>
1762
+ <span class="cline-any cline-no">&nbsp;</span>
1763
+ <span class="cline-any cline-no">&nbsp;</span>
1764
+ <span class="cline-any cline-neutral">&nbsp;</span>
1765
+ <span class="cline-any cline-no">&nbsp;</span>
1766
+ <span class="cline-any cline-neutral">&nbsp;</span>
1767
+ <span class="cline-any cline-no">&nbsp;</span>
1768
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1772
+ <span class="cline-any cline-no">&nbsp;</span>
1773
+ <span class="cline-any cline-neutral">&nbsp;</span>
1774
+ <span class="cline-any cline-neutral">&nbsp;</span>
1775
+ <span class="cline-any cline-neutral">&nbsp;</span>
1776
+ <span class="cline-any cline-no">&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-no">&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-neutral">&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-neutral">&nbsp;</span>
1792
+ <span class="cline-any cline-neutral">&nbsp;</span>
1793
+ <span class="cline-any cline-neutral">&nbsp;</span>
1794
+ <span class="cline-any cline-no">&nbsp;</span>
1795
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-neutral">&nbsp;</span>
1811
+ <span class="cline-any cline-neutral">&nbsp;</span>
1812
+ <span class="cline-any cline-neutral">&nbsp;</span>
1813
+ <span class="cline-any cline-neutral">&nbsp;</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-neutral">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-no">&nbsp;</span>
1819
+ <span class="cline-any cline-no">&nbsp;</span>
1820
+ <span class="cline-any cline-no">&nbsp;</span>
1821
+ <span class="cline-any cline-neutral">&nbsp;</span>
1822
+ <span class="cline-any cline-neutral">&nbsp;</span>
1823
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1828
+ <span class="cline-any cline-no">&nbsp;</span>
1829
+ <span class="cline-any cline-no">&nbsp;</span>
1830
+ <span class="cline-any cline-neutral">&nbsp;</span>
1831
+ <span class="cline-any cline-neutral">&nbsp;</span>
1832
+ <span class="cline-any cline-no">&nbsp;</span>
1833
+ <span class="cline-any cline-no">&nbsp;</span>
1834
+ <span class="cline-any cline-neutral">&nbsp;</span>
1835
+ <span class="cline-any cline-neutral">&nbsp;</span>
1836
+ <span class="cline-any cline-no">&nbsp;</span>
1837
+ <span class="cline-any cline-no">&nbsp;</span>
1838
+ <span class="cline-any cline-neutral">&nbsp;</span>
1839
+ <span class="cline-any cline-neutral">&nbsp;</span>
1840
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1845
+ <span class="cline-any cline-neutral">&nbsp;</span>
1846
+ <span class="cline-any cline-no">&nbsp;</span>
1847
+ <span class="cline-any cline-no">&nbsp;</span>
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-neutral">&nbsp;</span>
1851
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-neutral">&nbsp;</span>
1862
+ <span class="cline-any cline-no">&nbsp;</span>
1863
+ <span class="cline-any cline-neutral">&nbsp;</span>
1864
+ <span class="cline-any cline-no">&nbsp;</span>
1865
+ <span class="cline-any cline-neutral">&nbsp;</span>
1866
+ <span class="cline-any cline-neutral">&nbsp;</span>
1867
+ <span class="cline-any cline-neutral">&nbsp;</span>
1868
+ <span class="cline-any cline-neutral">&nbsp;</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-neutral">&nbsp;</span>
1871
+ <span class="cline-any cline-no">&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-neutral">&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-no">&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-no">&nbsp;</span>
1882
+ <span class="cline-any cline-neutral">&nbsp;</span>
1883
+ <span class="cline-any cline-neutral">&nbsp;</span>
1884
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1891
+ <span class="cline-any cline-neutral">&nbsp;</span>
1892
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1897
+ <span class="cline-any cline-no">&nbsp;</span>
1898
+ <span class="cline-any cline-neutral">&nbsp;</span>
1899
+ <span class="cline-any cline-neutral">&nbsp;</span>
1900
+ <span class="cline-any cline-no">&nbsp;</span>
1901
+ <span class="cline-any cline-neutral">&nbsp;</span>
1902
+ <span class="cline-any cline-neutral">&nbsp;</span>
1903
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1907
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1918
+ <span class="cline-any cline-neutral">&nbsp;</span>
1919
+ <span class="cline-any cline-neutral">&nbsp;</span>
1920
+ <span class="cline-any cline-neutral">&nbsp;</span>
1921
+ <span class="cline-any cline-neutral">&nbsp;</span>
1922
+ <span class="cline-any cline-neutral">&nbsp;</span>
1923
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1928
+ <span class="cline-any cline-neutral">&nbsp;</span>
1929
+ <span class="cline-any cline-no">&nbsp;</span>
1930
+ <span class="cline-any cline-no">&nbsp;</span>
1931
+ <span class="cline-any cline-no">&nbsp;</span>
1932
+ <span class="cline-any cline-neutral">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-no">&nbsp;</span>
1935
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1939
+ <span class="cline-any cline-neutral">&nbsp;</span>
1940
+ <span class="cline-any cline-neutral">&nbsp;</span>
1941
+ <span class="cline-any cline-neutral">&nbsp;</span>
1942
+ <span class="cline-any cline-neutral">&nbsp;</span>
1943
+ <span class="cline-any cline-no">&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-neutral">&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-no">&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-no">&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-no">&nbsp;</span>
1958
+ <span class="cline-any cline-neutral">&nbsp;</span>
1959
+ <span class="cline-any cline-neutral">&nbsp;</span>
1960
+ <span class="cline-any cline-no">&nbsp;</span>
1961
+ <span class="cline-any cline-no">&nbsp;</span>
1962
+ <span class="cline-any cline-neutral">&nbsp;</span>
1963
+ <span class="cline-any cline-no">&nbsp;</span>
1964
+ <span class="cline-any cline-no">&nbsp;</span>
1965
+ <span class="cline-any cline-neutral">&nbsp;</span>
1966
+ <span class="cline-any cline-neutral">&nbsp;</span>
1967
+ <span class="cline-any cline-neutral">&nbsp;</span>
1968
+ <span class="cline-any cline-no">&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-neutral">&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-neutral">&nbsp;</span>
1976
+ <span class="cline-any cline-neutral">&nbsp;</span>
1977
+ <span class="cline-any cline-neutral">&nbsp;</span>
1978
+ <span class="cline-any cline-neutral">&nbsp;</span>
1979
+ <span class="cline-any cline-neutral">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-neutral">&nbsp;</span>
1985
+ <span class="cline-any cline-no">&nbsp;</span>
1986
+ <span class="cline-any cline-no">&nbsp;</span>
1987
+ <span class="cline-any cline-neutral">&nbsp;</span>
1988
+ <span class="cline-any cline-neutral">&nbsp;</span>
1989
+ <span class="cline-any cline-neutral">&nbsp;</span>
1990
+ <span class="cline-any cline-neutral">&nbsp;</span>
1991
+ <span class="cline-any cline-neutral">&nbsp;</span>
1992
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1996
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2001
+ <span class="cline-any cline-neutral">&nbsp;</span>
2002
+ <span class="cline-any cline-neutral">&nbsp;</span>
2003
+ <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-no">&nbsp;</span>
2005
+ <span class="cline-any cline-neutral">&nbsp;</span>
2006
+ <span class="cline-any cline-neutral">&nbsp;</span>
2007
+ <span class="cline-any cline-neutral">&nbsp;</span>
2008
+ <span class="cline-any cline-neutral">&nbsp;</span>
2009
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
2013
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
2018
+ <span class="cline-any cline-neutral">&nbsp;</span>
2019
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2029
+ <span class="cline-any cline-neutral">&nbsp;</span>
2030
+ <span class="cline-any cline-no">&nbsp;</span>
2031
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2035
+ <span class="cline-any cline-neutral">&nbsp;</span>
2036
+ <span class="cline-any cline-no">&nbsp;</span>
2037
+ <span class="cline-any cline-neutral">&nbsp;</span>
2038
+ <span class="cline-any cline-neutral">&nbsp;</span>
2039
+ <span class="cline-any cline-neutral">&nbsp;</span>
2040
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2046
+ <span class="cline-any cline-neutral">&nbsp;</span>
2047
+ <span class="cline-any cline-neutral">&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-neutral">&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-no">&nbsp;</span>
2062
+ <span class="cline-any cline-no">&nbsp;</span>
2063
+ <span class="cline-any cline-no">&nbsp;</span>
2064
+ <span class="cline-any cline-neutral">&nbsp;</span>
2065
+ <span class="cline-any cline-neutral">&nbsp;</span>
2066
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2070
+ <span class="cline-any cline-no">&nbsp;</span>
2071
+ <span class="cline-any cline-neutral">&nbsp;</span>
2072
+ <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-neutral">&nbsp;</span>
2074
+ <span class="cline-any cline-neutral">&nbsp;</span>
2075
+ <span class="cline-any cline-neutral">&nbsp;</span>
2076
+ <span class="cline-any cline-neutral">&nbsp;</span>
2077
+ <span class="cline-any cline-no">&nbsp;</span>
2078
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
2085
+ <span class="cline-any cline-no">&nbsp;</span>
2086
+ <span class="cline-any cline-no">&nbsp;</span>
2087
+ <span class="cline-any cline-neutral">&nbsp;</span>
2088
+ <span class="cline-any cline-no">&nbsp;</span>
2089
+ <span class="cline-any cline-no">&nbsp;</span>
2090
+ <span class="cline-any cline-no">&nbsp;</span>
2091
+ <span class="cline-any cline-no">&nbsp;</span>
2092
+ <span class="cline-any cline-neutral">&nbsp;</span>
2093
+ <span class="cline-any cline-neutral">&nbsp;</span>
2094
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2098
+ <span class="cline-any cline-no">&nbsp;</span>
2099
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2104
+ <span class="cline-any cline-neutral">&nbsp;</span>
2105
+ <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
2112
+ <span class="cline-any cline-neutral">&nbsp;</span>
2113
+ <span class="cline-any cline-no">&nbsp;</span>
2114
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2121
+ <span class="cline-any cline-neutral">&nbsp;</span>
2122
+ <span class="cline-any cline-no">&nbsp;</span>
2123
+ <span class="cline-any cline-neutral">&nbsp;</span>
2124
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2128
+ <span class="cline-any cline-neutral">&nbsp;</span>
2129
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
2138
+ <span class="cline-any cline-neutral">&nbsp;</span>
2139
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2144
+ <span class="cline-any cline-neutral">&nbsp;</span>
2145
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2149
+ <span class="cline-any cline-no">&nbsp;</span>
2150
+ <span class="cline-any cline-neutral">&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-neutral">&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-no">&nbsp;</span>
2163
+ <span class="cline-any cline-neutral">&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-neutral">&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-no">&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-no">&nbsp;</span>
2175
+ <span class="cline-any cline-neutral">&nbsp;</span>
2176
+ <span class="cline-any cline-neutral">&nbsp;</span>
2177
+ <span class="cline-any cline-no">&nbsp;</span>
2178
+ <span class="cline-any cline-neutral">&nbsp;</span>
2179
+ <span class="cline-any cline-no">&nbsp;</span>
2180
+ <span class="cline-any cline-no">&nbsp;</span>
2181
+ <span class="cline-any cline-neutral">&nbsp;</span>
2182
+ <span class="cline-any cline-neutral">&nbsp;</span>
2183
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2187
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
2194
+ <span class="cline-any cline-neutral">&nbsp;</span>
2195
+ <span class="cline-any cline-neutral">&nbsp;</span>
2196
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2200
+ <span class="cline-any cline-neutral">&nbsp;</span>
2201
+ <span class="cline-any cline-no">&nbsp;</span>
2202
+ <span class="cline-any cline-no">&nbsp;</span>
2203
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
2207
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2215
+ <span class="cline-any cline-neutral">&nbsp;</span>
2216
+ <span class="cline-any cline-neutral">&nbsp;</span>
2217
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
2222
+ <span class="cline-any cline-neutral">&nbsp;</span>
2223
+ <span class="cline-any cline-no">&nbsp;</span>
2224
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
2231
+ <span class="cline-any cline-no">&nbsp;</span>
2232
+ <span class="cline-any cline-neutral">&nbsp;</span>
2233
+ <span class="cline-any cline-neutral">&nbsp;</span>
2234
+ <span class="cline-any cline-no">&nbsp;</span>
2235
+ <span class="cline-any cline-neutral">&nbsp;</span>
2236
+ <span class="cline-any cline-neutral">&nbsp;</span>
2237
+ <span class="cline-any cline-neutral">&nbsp;</span>
2238
+ <span class="cline-any cline-no">&nbsp;</span>
2239
+ <span class="cline-any cline-no">&nbsp;</span>
2240
+ <span class="cline-any cline-neutral">&nbsp;</span>
2241
+ <span class="cline-any cline-neutral">&nbsp;</span>
2242
+ <span class="cline-any cline-neutral">&nbsp;</span>
2243
+ <span class="cline-any cline-neutral">&nbsp;</span>
2244
+ <span class="cline-any cline-no">&nbsp;</span>
2245
+ <span class="cline-any cline-neutral">&nbsp;</span>
2246
+ <span class="cline-any cline-neutral">&nbsp;</span>
2247
+ <span class="cline-any cline-neutral">&nbsp;</span>
2248
+ <span class="cline-any cline-neutral">&nbsp;</span>
2249
+ <span class="cline-any cline-neutral">&nbsp;</span>
2250
+ <span class="cline-any cline-neutral">&nbsp;</span>
2251
+ <span class="cline-any cline-neutral">&nbsp;</span>
2252
+ <span class="cline-any cline-neutral">&nbsp;</span>
2253
+ <span class="cline-any cline-neutral">&nbsp;</span>
2254
+ <span class="cline-any cline-neutral">&nbsp;</span>
2255
+ <span class="cline-any cline-neutral">&nbsp;</span>
2256
+ <span class="cline-any cline-neutral">&nbsp;</span>
2257
+ <span class="cline-any cline-neutral">&nbsp;</span>
2258
+ <span class="cline-any cline-neutral">&nbsp;</span>
2259
+ <span class="cline-any cline-neutral">&nbsp;</span>
2260
+ <span class="cline-any cline-neutral">&nbsp;</span>
2261
+ <span class="cline-any cline-neutral">&nbsp;</span>
2262
+ <span class="cline-any cline-neutral">&nbsp;</span>
2263
+ <span class="cline-any cline-neutral">&nbsp;</span>
2264
+ <span class="cline-any cline-no">&nbsp;</span>
2265
+ <span class="cline-any cline-no">&nbsp;</span>
2266
+ <span class="cline-any cline-no">&nbsp;</span>
2267
+ <span class="cline-any cline-no">&nbsp;</span>
2268
+ <span class="cline-any cline-no">&nbsp;</span>
2269
+ <span class="cline-any cline-neutral">&nbsp;</span>
2270
+ <span class="cline-any cline-neutral">&nbsp;</span>
2271
+ <span class="cline-any cline-neutral">&nbsp;</span>
2272
+ <span class="cline-any cline-neutral">&nbsp;</span>
2273
+ <span class="cline-any cline-neutral">&nbsp;</span>
2274
+ <span class="cline-any cline-neutral">&nbsp;</span>
2275
+ <span class="cline-any cline-neutral">&nbsp;</span>
2276
+ <span class="cline-any cline-neutral">&nbsp;</span>
2277
+ <span class="cline-any cline-neutral">&nbsp;</span>
2278
+ <span class="cline-any cline-no">&nbsp;</span>
2279
+ <span class="cline-any cline-no">&nbsp;</span>
2280
+ <span class="cline-any cline-no">&nbsp;</span>
2281
+ <span class="cline-any cline-neutral">&nbsp;</span>
2282
+ <span class="cline-any cline-neutral">&nbsp;</span>
2283
+ <span class="cline-any cline-no">&nbsp;</span>
2284
+ <span class="cline-any cline-no">&nbsp;</span>
2285
+ <span class="cline-any cline-neutral">&nbsp;</span>
2286
+ <span class="cline-any cline-no">&nbsp;</span>
2287
+ <span class="cline-any cline-no">&nbsp;</span>
2288
+ <span class="cline-any cline-no">&nbsp;</span>
2289
+ <span class="cline-any cline-neutral">&nbsp;</span>
2290
+ <span class="cline-any cline-neutral">&nbsp;</span>
2291
+ <span class="cline-any cline-neutral">&nbsp;</span>
2292
+ <span class="cline-any cline-neutral">&nbsp;</span>
2293
+ <span class="cline-any cline-no">&nbsp;</span>
2294
+ <span class="cline-any cline-neutral">&nbsp;</span>
2295
+ <span class="cline-any cline-neutral">&nbsp;</span>
2296
+ <span class="cline-any cline-neutral">&nbsp;</span>
2297
+ <span class="cline-any cline-no">&nbsp;</span>
2298
+ <span class="cline-any cline-neutral">&nbsp;</span>
2299
+ <span class="cline-any cline-neutral">&nbsp;</span>
2300
+ <span class="cline-any cline-neutral">&nbsp;</span>
2301
+ <span class="cline-any cline-no">&nbsp;</span>
2302
+ <span class="cline-any cline-no">&nbsp;</span>
2303
+ <span class="cline-any cline-neutral">&nbsp;</span>
2304
+ <span class="cline-any cline-neutral">&nbsp;</span>
2305
+ <span class="cline-any cline-neutral">&nbsp;</span>
2306
+ <span class="cline-any cline-neutral">&nbsp;</span>
2307
+ <span class="cline-any cline-neutral">&nbsp;</span>
2308
+ <span class="cline-any cline-no">&nbsp;</span>
2309
+ <span class="cline-any cline-neutral">&nbsp;</span>
2310
+ <span class="cline-any cline-neutral">&nbsp;</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-no">&nbsp;</span>
2313
+ <span class="cline-any cline-no">&nbsp;</span>
2314
+ <span class="cline-any cline-neutral">&nbsp;</span>
2315
+ <span class="cline-any cline-neutral">&nbsp;</span>
2316
+ <span class="cline-any cline-neutral">&nbsp;</span>
2317
+ <span class="cline-any cline-neutral">&nbsp;</span>
2318
+ <span class="cline-any cline-no">&nbsp;</span>
2319
+ <span class="cline-any cline-neutral">&nbsp;</span>
2320
+ <span class="cline-any cline-neutral">&nbsp;</span>
2321
+ <span class="cline-any cline-no">&nbsp;</span>
2322
+ <span class="cline-any cline-neutral">&nbsp;</span>
2323
+ <span class="cline-any cline-no">&nbsp;</span>
2324
+ <span class="cline-any cline-no">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-neutral">&nbsp;</span>
2327
+ <span class="cline-any cline-neutral">&nbsp;</span>
2328
+ <span class="cline-any cline-neutral">&nbsp;</span>
2329
+ <span class="cline-any cline-neutral">&nbsp;</span>
2330
+ <span class="cline-any cline-neutral">&nbsp;</span>
2331
+ <span class="cline-any cline-neutral">&nbsp;</span>
2332
+ <span class="cline-any cline-neutral">&nbsp;</span>
2333
+ <span class="cline-any cline-neutral">&nbsp;</span>
2334
+ <span class="cline-any cline-neutral">&nbsp;</span>
2335
+ <span class="cline-any cline-no">&nbsp;</span>
2336
+ <span class="cline-any cline-neutral">&nbsp;</span>
2337
+ <span class="cline-any cline-no">&nbsp;</span>
2338
+ <span class="cline-any cline-neutral">&nbsp;</span>
2339
+ <span class="cline-any cline-neutral">&nbsp;</span>
2340
+ <span class="cline-any cline-neutral">&nbsp;</span>
2341
+ <span class="cline-any cline-neutral">&nbsp;</span>
2342
+ <span class="cline-any cline-neutral">&nbsp;</span>
2343
+ <span class="cline-any cline-neutral">&nbsp;</span>
2344
+ <span class="cline-any cline-neutral">&nbsp;</span>
2345
+ <span class="cline-any cline-neutral">&nbsp;</span>
2346
+ <span class="cline-any cline-neutral">&nbsp;</span>
2347
+ <span class="cline-any cline-neutral">&nbsp;</span>
2348
+ <span class="cline-any cline-neutral">&nbsp;</span>
2349
+ <span class="cline-any cline-neutral">&nbsp;</span>
2350
+ <span class="cline-any cline-neutral">&nbsp;</span>
2351
+ <span class="cline-any cline-neutral">&nbsp;</span>
2352
+ <span class="cline-any cline-neutral">&nbsp;</span>
2353
+ <span class="cline-any cline-neutral">&nbsp;</span>
2354
+ <span class="cline-any cline-neutral">&nbsp;</span>
2355
+ <span class="cline-any cline-neutral">&nbsp;</span>
2356
+ <span class="cline-any cline-neutral">&nbsp;</span>
2357
+ <span class="cline-any cline-no">&nbsp;</span>
2358
+ <span class="cline-any cline-neutral">&nbsp;</span>
2359
+ <span class="cline-any cline-neutral">&nbsp;</span>
2360
+ <span class="cline-any cline-neutral">&nbsp;</span>
2361
+ <span class="cline-any cline-no">&nbsp;</span>
2362
+ <span class="cline-any cline-no">&nbsp;</span>
2363
+ <span class="cline-any cline-neutral">&nbsp;</span>
2364
+ <span class="cline-any cline-neutral">&nbsp;</span>
2365
+ <span class="cline-any cline-no">&nbsp;</span>
2366
+ <span class="cline-any cline-neutral">&nbsp;</span>
2367
+ <span class="cline-any cline-no">&nbsp;</span>
2368
+ <span class="cline-any cline-no">&nbsp;</span>
2369
+ <span class="cline-any cline-neutral">&nbsp;</span>
2370
+ <span class="cline-any cline-no">&nbsp;</span>
2371
+ <span class="cline-any cline-neutral">&nbsp;</span>
2372
+ <span class="cline-any cline-neutral">&nbsp;</span>
2373
+ <span class="cline-any cline-neutral">&nbsp;</span>
2374
+ <span class="cline-any cline-neutral">&nbsp;</span>
2375
+ <span class="cline-any cline-neutral">&nbsp;</span>
2376
+ <span class="cline-any cline-neutral">&nbsp;</span>
2377
+ <span class="cline-any cline-neutral">&nbsp;</span>
2378
+ <span class="cline-any cline-neutral">&nbsp;</span>
2379
+ <span class="cline-any cline-no">&nbsp;</span>
2380
+ <span class="cline-any cline-no">&nbsp;</span>
2381
+ <span class="cline-any cline-neutral">&nbsp;</span>
2382
+ <span class="cline-any cline-neutral">&nbsp;</span>
2383
+ <span class="cline-any cline-neutral">&nbsp;</span>
2384
+ <span class="cline-any cline-no">&nbsp;</span>
2385
+ <span class="cline-any cline-no">&nbsp;</span>
2386
+ <span class="cline-any cline-neutral">&nbsp;</span>
2387
+ <span class="cline-any cline-neutral">&nbsp;</span>
2388
+ <span class="cline-any cline-neutral">&nbsp;</span>
2389
+ <span class="cline-any cline-no">&nbsp;</span>
2390
+ <span class="cline-any cline-no">&nbsp;</span>
2391
+ <span class="cline-any cline-neutral">&nbsp;</span>
2392
+ <span class="cline-any cline-neutral">&nbsp;</span>
2393
+ <span class="cline-any cline-neutral">&nbsp;</span>
2394
+ <span class="cline-any cline-no">&nbsp;</span>
2395
+ <span class="cline-any cline-no">&nbsp;</span>
2396
+ <span class="cline-any cline-neutral">&nbsp;</span>
2397
+ <span class="cline-any cline-neutral">&nbsp;</span>
2398
+ <span class="cline-any cline-neutral">&nbsp;</span>
2399
+ <span class="cline-any cline-no">&nbsp;</span>
2400
+ <span class="cline-any cline-neutral">&nbsp;</span>
2401
+ <span class="cline-any cline-no">&nbsp;</span>
2402
+ <span class="cline-any cline-neutral">&nbsp;</span>
2403
+ <span class="cline-any cline-neutral">&nbsp;</span>
2404
+ <span class="cline-any cline-no">&nbsp;</span>
2405
+ <span class="cline-any cline-neutral">&nbsp;</span>
2406
+ <span class="cline-any cline-neutral">&nbsp;</span>
2407
+ <span class="cline-any cline-no">&nbsp;</span>
2408
+ <span class="cline-any cline-neutral">&nbsp;</span>
2409
+ <span class="cline-any cline-neutral">&nbsp;</span>
2410
+ <span class="cline-any cline-no">&nbsp;</span>
2411
+ <span class="cline-any cline-neutral">&nbsp;</span>
2412
+ <span class="cline-any cline-neutral">&nbsp;</span>
2413
+ <span class="cline-any cline-neutral">&nbsp;</span>
2414
+ <span class="cline-any cline-neutral">&nbsp;</span>
2415
+ <span class="cline-any cline-no">&nbsp;</span>
2416
+ <span class="cline-any cline-neutral">&nbsp;</span>
2417
+ <span class="cline-any cline-no">&nbsp;</span>
2418
+ <span class="cline-any cline-neutral">&nbsp;</span>
2419
+ <span class="cline-any cline-neutral">&nbsp;</span>
2420
+ <span class="cline-any cline-neutral">&nbsp;</span>
2421
+ <span class="cline-any cline-neutral">&nbsp;</span>
2422
+ <span class="cline-any cline-neutral">&nbsp;</span>
2423
+ <span class="cline-any cline-neutral">&nbsp;</span>
2424
+ <span class="cline-any cline-neutral">&nbsp;</span>
2425
+ <span class="cline-any cline-neutral">&nbsp;</span>
2426
+ <span class="cline-any cline-neutral">&nbsp;</span>
2427
+ <span class="cline-any cline-no">&nbsp;</span>
2428
+ <span class="cline-any cline-neutral">&nbsp;</span>
2429
+ <span class="cline-any cline-no">&nbsp;</span>
2430
+ <span class="cline-any cline-no">&nbsp;</span>
2431
+ <span class="cline-any cline-no">&nbsp;</span>
2432
+ <span class="cline-any cline-no">&nbsp;</span>
2433
+ <span class="cline-any cline-no">&nbsp;</span>
2434
+ <span class="cline-any cline-no">&nbsp;</span>
2435
+ <span class="cline-any cline-no">&nbsp;</span>
2436
+ <span class="cline-any cline-no">&nbsp;</span>
2437
+ <span class="cline-any cline-no">&nbsp;</span>
2438
+ <span class="cline-any cline-no">&nbsp;</span>
2439
+ <span class="cline-any cline-neutral">&nbsp;</span>
2440
+ <span class="cline-any cline-neutral">&nbsp;</span>
2441
+ <span class="cline-any cline-no">&nbsp;</span>
2442
+ <span class="cline-any cline-neutral">&nbsp;</span>
2443
+ <span class="cline-any cline-no">&nbsp;</span>
2444
+ <span class="cline-any cline-neutral">&nbsp;</span>
2445
+ <span class="cline-any cline-neutral">&nbsp;</span>
2446
+ <span class="cline-any cline-neutral">&nbsp;</span>
2447
+ <span class="cline-any cline-neutral">&nbsp;</span>
2448
+ <span class="cline-any cline-neutral">&nbsp;</span>
2449
+ <span class="cline-any cline-neutral">&nbsp;</span>
2450
+ <span class="cline-any cline-neutral">&nbsp;</span>
2451
+ <span class="cline-any cline-neutral">&nbsp;</span>
2452
+ <span class="cline-any cline-neutral">&nbsp;</span>
2453
+ <span class="cline-any cline-no">&nbsp;</span>
2454
+ <span class="cline-any cline-neutral">&nbsp;</span>
2455
+ <span class="cline-any cline-neutral">&nbsp;</span>
2456
+ <span class="cline-any cline-neutral">&nbsp;</span>
2457
+ <span class="cline-any cline-neutral">&nbsp;</span>
2458
+ <span class="cline-any cline-neutral">&nbsp;</span>
2459
+ <span class="cline-any cline-neutral">&nbsp;</span>
2460
+ <span class="cline-any cline-neutral">&nbsp;</span>
2461
+ <span class="cline-any cline-neutral">&nbsp;</span>
2462
+ <span class="cline-any cline-neutral">&nbsp;</span>
2463
+ <span class="cline-any cline-neutral">&nbsp;</span>
2464
+ <span class="cline-any cline-no">&nbsp;</span>
2465
+ <span class="cline-any cline-neutral">&nbsp;</span>
2466
+ <span class="cline-any cline-neutral">&nbsp;</span>
2467
+ <span class="cline-any cline-neutral">&nbsp;</span>
2468
+ <span class="cline-any cline-neutral">&nbsp;</span>
2469
+ <span class="cline-any cline-neutral">&nbsp;</span>
2470
+ <span class="cline-any cline-neutral">&nbsp;</span>
2471
+ <span class="cline-any cline-neutral">&nbsp;</span>
2472
+ <span class="cline-any cline-neutral">&nbsp;</span>
2473
+ <span class="cline-any cline-neutral">&nbsp;</span>
2474
+ <span class="cline-any cline-neutral">&nbsp;</span>
2475
+ <span class="cline-any cline-no">&nbsp;</span>
2476
+ <span class="cline-any cline-no">&nbsp;</span>
2477
+ <span class="cline-any cline-no">&nbsp;</span>
2478
+ <span class="cline-any cline-no">&nbsp;</span>
2479
+ <span class="cline-any cline-neutral">&nbsp;</span>
2480
+ <span class="cline-any cline-neutral">&nbsp;</span>
2481
+ <span class="cline-any cline-neutral">&nbsp;</span>
2482
+ <span class="cline-any cline-neutral">&nbsp;</span>
2483
+ <span class="cline-any cline-no">&nbsp;</span>
2484
+ <span class="cline-any cline-neutral">&nbsp;</span>
2485
+ <span class="cline-any cline-neutral">&nbsp;</span>
2486
+ <span class="cline-any cline-neutral">&nbsp;</span>
2487
+ <span class="cline-any cline-neutral">&nbsp;</span>
2488
+ <span class="cline-any cline-no">&nbsp;</span>
2489
+ <span class="cline-any cline-neutral">&nbsp;</span>
2490
+ <span class="cline-any cline-neutral">&nbsp;</span>
2491
+ <span class="cline-any cline-neutral">&nbsp;</span>
2492
+ <span class="cline-any cline-neutral">&nbsp;</span>
2493
+ <span class="cline-any cline-no">&nbsp;</span>
2494
+ <span class="cline-any cline-neutral">&nbsp;</span>
2495
+ <span class="cline-any cline-neutral">&nbsp;</span>
2496
+ <span class="cline-any cline-neutral">&nbsp;</span>
2497
+ <span class="cline-any cline-neutral">&nbsp;</span>
2498
+ <span class="cline-any cline-neutral">&nbsp;</span>
2499
+ <span class="cline-any cline-no">&nbsp;</span>
2500
+ <span class="cline-any cline-neutral">&nbsp;</span>
2501
+ <span class="cline-any cline-neutral">&nbsp;</span>
2502
+ <span class="cline-any cline-neutral">&nbsp;</span>
2503
+ <span class="cline-any cline-neutral">&nbsp;</span>
2504
+ <span class="cline-any cline-neutral">&nbsp;</span>
2505
+ <span class="cline-any cline-neutral">&nbsp;</span>
2506
+ <span class="cline-any cline-neutral">&nbsp;</span>
2507
+ <span class="cline-any cline-neutral">&nbsp;</span>
2508
+ <span class="cline-any cline-neutral">&nbsp;</span>
2509
+ <span class="cline-any cline-neutral">&nbsp;</span>
2510
+ <span class="cline-any cline-neutral">&nbsp;</span>
2511
+ <span class="cline-any cline-neutral">&nbsp;</span>
2512
+ <span class="cline-any cline-neutral">&nbsp;</span>
2513
+ <span class="cline-any cline-neutral">&nbsp;</span>
2514
+ <span class="cline-any cline-neutral">&nbsp;</span>
2515
+ <span class="cline-any cline-no">&nbsp;</span>
2516
+ <span class="cline-any cline-no">&nbsp;</span>
2517
+ <span class="cline-any cline-neutral">&nbsp;</span>
2518
+ <span class="cline-any cline-neutral">&nbsp;</span>
2519
+ <span class="cline-any cline-no">&nbsp;</span>
2520
+ <span class="cline-any cline-neutral">&nbsp;</span>
2521
+ <span class="cline-any cline-neutral">&nbsp;</span>
2522
+ <span class="cline-any cline-no">&nbsp;</span>
2523
+ <span class="cline-any cline-no">&nbsp;</span>
2524
+ <span class="cline-any cline-neutral">&nbsp;</span>
2525
+ <span class="cline-any cline-neutral">&nbsp;</span>
2526
+ <span class="cline-any cline-no">&nbsp;</span>
2527
+ <span class="cline-any cline-no">&nbsp;</span>
2528
+ <span class="cline-any cline-neutral">&nbsp;</span>
2529
+ <span class="cline-any cline-neutral">&nbsp;</span>
2530
+ <span class="cline-any cline-no">&nbsp;</span>
2531
+ <span class="cline-any cline-no">&nbsp;</span>
2532
+ <span class="cline-any cline-no">&nbsp;</span>
2533
+ <span class="cline-any cline-neutral">&nbsp;</span>
2534
+ <span class="cline-any cline-neutral">&nbsp;</span>
2535
+ <span class="cline-any cline-no">&nbsp;</span>
2536
+ <span class="cline-any cline-no">&nbsp;</span>
2537
+ <span class="cline-any cline-neutral">&nbsp;</span>
2538
+ <span class="cline-any cline-neutral">&nbsp;</span>
2539
+ <span class="cline-any cline-neutral">&nbsp;</span>
2540
+ <span class="cline-any cline-neutral">&nbsp;</span>
2541
+ <span class="cline-any cline-neutral">&nbsp;</span>
2542
+ <span class="cline-any cline-neutral">&nbsp;</span>
2543
+ <span class="cline-any cline-neutral">&nbsp;</span>
2544
+ <span class="cline-any cline-neutral">&nbsp;</span>
2545
+ <span class="cline-any cline-neutral">&nbsp;</span>
2546
+ <span class="cline-any cline-neutral">&nbsp;</span>
2547
+ <span class="cline-any cline-neutral">&nbsp;</span>
2548
+ <span class="cline-any cline-neutral">&nbsp;</span>
2549
+ <span class="cline-any cline-no">&nbsp;</span>
2550
+ <span class="cline-any cline-no">&nbsp;</span>
2551
+ <span class="cline-any cline-neutral">&nbsp;</span>
2552
+ <span class="cline-any cline-neutral">&nbsp;</span>
2553
+ <span class="cline-any cline-no">&nbsp;</span>
2554
+ <span class="cline-any cline-no">&nbsp;</span>
2555
+ <span class="cline-any cline-no">&nbsp;</span>
2556
+ <span class="cline-any cline-no">&nbsp;</span>
2557
+ <span class="cline-any cline-neutral">&nbsp;</span>
2558
+ <span class="cline-any cline-neutral">&nbsp;</span>
2559
+ <span class="cline-any cline-no">&nbsp;</span>
2560
+ <span class="cline-any cline-neutral">&nbsp;</span>
2561
+ <span class="cline-any cline-no">&nbsp;</span>
2562
+ <span class="cline-any cline-neutral">&nbsp;</span>
2563
+ <span class="cline-any cline-neutral">&nbsp;</span>
2564
+ <span class="cline-any cline-no">&nbsp;</span>
2565
+ <span class="cline-any cline-no">&nbsp;</span>
2566
+ <span class="cline-any cline-neutral">&nbsp;</span>
2567
+ <span class="cline-any cline-neutral">&nbsp;</span>
2568
+ <span class="cline-any cline-neutral">&nbsp;</span>
2569
+ <span class="cline-any cline-neutral">&nbsp;</span>
2570
+ <span class="cline-any cline-neutral">&nbsp;</span>
2571
+ <span class="cline-any cline-neutral">&nbsp;</span>
2572
+ <span class="cline-any cline-neutral">&nbsp;</span>
2573
+ <span class="cline-any cline-neutral">&nbsp;</span>
2574
+ <span class="cline-any cline-neutral">&nbsp;</span>
2575
+ <span class="cline-any cline-neutral">&nbsp;</span>
2576
+ <span class="cline-any cline-neutral">&nbsp;</span>
2577
+ <span class="cline-any cline-neutral">&nbsp;</span>
2578
+ <span class="cline-any cline-neutral">&nbsp;</span>
2579
+ <span class="cline-any cline-no">&nbsp;</span>
2580
+ <span class="cline-any cline-no">&nbsp;</span>
2581
+ <span class="cline-any cline-neutral">&nbsp;</span>
2582
+ <span class="cline-any cline-neutral">&nbsp;</span>
2583
+ <span class="cline-any cline-no">&nbsp;</span>
2584
+ <span class="cline-any cline-no">&nbsp;</span>
2585
+ <span class="cline-any cline-no">&nbsp;</span>
2586
+ <span class="cline-any cline-no">&nbsp;</span>
2587
+ <span class="cline-any cline-neutral">&nbsp;</span>
2588
+ <span class="cline-any cline-no">&nbsp;</span>
2589
+ <span class="cline-any cline-no">&nbsp;</span>
2590
+ <span class="cline-any cline-no">&nbsp;</span>
2591
+ <span class="cline-any cline-neutral">&nbsp;</span>
2592
+ <span class="cline-any cline-no">&nbsp;</span>
2593
+ <span class="cline-any cline-no">&nbsp;</span>
2594
+ <span class="cline-any cline-no">&nbsp;</span>
2595
+ <span class="cline-any cline-no">&nbsp;</span>
2596
+ <span class="cline-any cline-neutral">&nbsp;</span>
2597
+ <span class="cline-any cline-no">&nbsp;</span>
2598
+ <span class="cline-any cline-neutral">&nbsp;</span>
2599
+ <span class="cline-any cline-neutral">&nbsp;</span>
2600
+ <span class="cline-any cline-neutral">&nbsp;</span>
2601
+ <span class="cline-any cline-neutral">&nbsp;</span>
2602
+ <span class="cline-any cline-neutral">&nbsp;</span>
2603
+ <span class="cline-any cline-neutral">&nbsp;</span>
2604
+ <span class="cline-any cline-neutral">&nbsp;</span>
2605
+ <span class="cline-any cline-neutral">&nbsp;</span>
2606
+ <span class="cline-any cline-neutral">&nbsp;</span>
2607
+ <span class="cline-any cline-no">&nbsp;</span>
2608
+ <span class="cline-any cline-no">&nbsp;</span>
2609
+ <span class="cline-any cline-no">&nbsp;</span>
2610
+ <span class="cline-any cline-neutral">&nbsp;</span>
2611
+ <span class="cline-any cline-no">&nbsp;</span>
2612
+ <span class="cline-any cline-neutral">&nbsp;</span>
2613
+ <span class="cline-any cline-neutral">&nbsp;</span>
2614
+ <span class="cline-any cline-neutral">&nbsp;</span>
2615
+ <span class="cline-any cline-neutral">&nbsp;</span>
2616
+ <span class="cline-any cline-neutral">&nbsp;</span>
2617
+ <span class="cline-any cline-neutral">&nbsp;</span>
2618
+ <span class="cline-any cline-neutral">&nbsp;</span>
2619
+ <span class="cline-any cline-neutral">&nbsp;</span>
2620
+ <span class="cline-any cline-neutral">&nbsp;</span>
2621
+ <span class="cline-any cline-neutral">&nbsp;</span>
2622
+ <span class="cline-any cline-neutral">&nbsp;</span>
2623
+ <span class="cline-any cline-no">&nbsp;</span>
2624
+ <span class="cline-any cline-neutral">&nbsp;</span>
2625
+ <span class="cline-any cline-no">&nbsp;</span>
2626
+ <span class="cline-any cline-neutral">&nbsp;</span>
2627
+ <span class="cline-any cline-neutral">&nbsp;</span>
2628
+ <span class="cline-any cline-no">&nbsp;</span>
2629
+ <span class="cline-any cline-neutral">&nbsp;</span>
2630
+ <span class="cline-any cline-neutral">&nbsp;</span>
2631
+ <span class="cline-any cline-no">&nbsp;</span>
2632
+ <span class="cline-any cline-neutral">&nbsp;</span>
2633
+ <span class="cline-any cline-neutral">&nbsp;</span>
2634
+ <span class="cline-any cline-no">&nbsp;</span>
2635
+ <span class="cline-any cline-neutral">&nbsp;</span>
2636
+ <span class="cline-any cline-no">&nbsp;</span>
2637
+ <span class="cline-any cline-neutral">&nbsp;</span>
2638
+ <span class="cline-any cline-neutral">&nbsp;</span>
2639
+ <span class="cline-any cline-neutral">&nbsp;</span>
2640
+ <span class="cline-any cline-no">&nbsp;</span>
2641
+ <span class="cline-any cline-neutral">&nbsp;</span>
2642
+ <span class="cline-any cline-neutral">&nbsp;</span>
2643
+ <span class="cline-any cline-neutral">&nbsp;</span>
2644
+ <span class="cline-any cline-neutral">&nbsp;</span>
2645
+ <span class="cline-any cline-neutral">&nbsp;</span>
2646
+ <span class="cline-any cline-neutral">&nbsp;</span>
2647
+ <span class="cline-any cline-neutral">&nbsp;</span>
2648
+ <span class="cline-any cline-neutral">&nbsp;</span>
2649
+ <span class="cline-any cline-neutral">&nbsp;</span>
2650
+ <span class="cline-any cline-neutral">&nbsp;</span>
2651
+ <span class="cline-any cline-neutral">&nbsp;</span>
2652
+ <span class="cline-any cline-no">&nbsp;</span>
2653
+ <span class="cline-any cline-no">&nbsp;</span>
2654
+ <span class="cline-any cline-no">&nbsp;</span>
2655
+ <span class="cline-any cline-no">&nbsp;</span>
2656
+ <span class="cline-any cline-no">&nbsp;</span>
2657
+ <span class="cline-any cline-neutral">&nbsp;</span>
2658
+ <span class="cline-any cline-neutral">&nbsp;</span>
2659
+ <span class="cline-any cline-no">&nbsp;</span>
2660
+ <span class="cline-any cline-no">&nbsp;</span>
2661
+ <span class="cline-any cline-neutral">&nbsp;</span>
2662
+ <span class="cline-any cline-neutral">&nbsp;</span>
2663
+ <span class="cline-any cline-neutral">&nbsp;</span>
2664
+ <span class="cline-any cline-no">&nbsp;</span>
2665
+ <span class="cline-any cline-neutral">&nbsp;</span>
2666
+ <span class="cline-any cline-no">&nbsp;</span>
2667
+ <span class="cline-any cline-neutral">&nbsp;</span>
2668
+ <span class="cline-any cline-no">&nbsp;</span>
2669
+ <span class="cline-any cline-neutral">&nbsp;</span>
2670
+ <span class="cline-any cline-neutral">&nbsp;</span>
2671
+ <span class="cline-any cline-neutral">&nbsp;</span>
2672
+ <span class="cline-any cline-neutral">&nbsp;</span>
2673
+ <span class="cline-any cline-neutral">&nbsp;</span>
2674
+ <span class="cline-any cline-neutral">&nbsp;</span>
2675
+ <span class="cline-any cline-neutral">&nbsp;</span>
2676
+ <span class="cline-any cline-neutral">&nbsp;</span>
2677
+ <span class="cline-any cline-neutral">&nbsp;</span>
2678
+ <span class="cline-any cline-neutral">&nbsp;</span>
2679
+ <span class="cline-any cline-no">&nbsp;</span>
2680
+ <span class="cline-any cline-neutral">&nbsp;</span>
2681
+ <span class="cline-any cline-neutral">&nbsp;</span>
2682
+ <span class="cline-any cline-neutral">&nbsp;</span>
2683
+ <span class="cline-any cline-no">&nbsp;</span>
2684
+ <span class="cline-any cline-neutral">&nbsp;</span>
2685
+ <span class="cline-any cline-neutral">&nbsp;</span>
2686
+ <span class="cline-any cline-no">&nbsp;</span>
2687
+ <span class="cline-any cline-no">&nbsp;</span>
2688
+ <span class="cline-any cline-neutral">&nbsp;</span>
2689
+ <span class="cline-any cline-neutral">&nbsp;</span>
2690
+ <span class="cline-any cline-no">&nbsp;</span>
2691
+ <span class="cline-any cline-no">&nbsp;</span>
2692
+ <span class="cline-any cline-neutral">&nbsp;</span>
2693
+ <span class="cline-any cline-neutral">&nbsp;</span>
2694
+ <span class="cline-any cline-neutral">&nbsp;</span>
2695
+ <span class="cline-any cline-no">&nbsp;</span>
2696
+ <span class="cline-any cline-neutral">&nbsp;</span>
2697
+ <span class="cline-any cline-neutral">&nbsp;</span>
2698
+ <span class="cline-any cline-neutral">&nbsp;</span>
2699
+ <span class="cline-any cline-no">&nbsp;</span>
2700
+ <span class="cline-any cline-no">&nbsp;</span>
2701
+ <span class="cline-any cline-neutral">&nbsp;</span>
2702
+ <span class="cline-any cline-neutral">&nbsp;</span>
2703
+ <span class="cline-any cline-no">&nbsp;</span>
2704
+ <span class="cline-any cline-no">&nbsp;</span>
2705
+ <span class="cline-any cline-neutral">&nbsp;</span>
2706
+ <span class="cline-any cline-no">&nbsp;</span>
2707
+ <span class="cline-any cline-neutral">&nbsp;</span>
2708
+ <span class="cline-any cline-neutral">&nbsp;</span>
2709
+ <span class="cline-any cline-neutral">&nbsp;</span>
2710
+ <span class="cline-any cline-neutral">&nbsp;</span>
2711
+ <span class="cline-any cline-neutral">&nbsp;</span>
2712
+ <span class="cline-any cline-no">&nbsp;</span>
2713
+ <span class="cline-any cline-no">&nbsp;</span>
2714
+ <span class="cline-any cline-no">&nbsp;</span>
2715
+ <span class="cline-any cline-neutral">&nbsp;</span>
2716
+ <span class="cline-any cline-neutral">&nbsp;</span>
2717
+ <span class="cline-any cline-no">&nbsp;</span>
2718
+ <span class="cline-any cline-neutral">&nbsp;</span>
2719
+ <span class="cline-any cline-neutral">&nbsp;</span>
2720
+ <span class="cline-any cline-neutral">&nbsp;</span>
2721
+ <span class="cline-any cline-no">&nbsp;</span>
2722
+ <span class="cline-any cline-neutral">&nbsp;</span>
2723
+ <span class="cline-any cline-neutral">&nbsp;</span>
2724
+ <span class="cline-any cline-no">&nbsp;</span>
2725
+ <span class="cline-any cline-neutral">&nbsp;</span>
2726
+ <span class="cline-any cline-neutral">&nbsp;</span>
2727
+ <span class="cline-any cline-no">&nbsp;</span>
2728
+ <span class="cline-any cline-no">&nbsp;</span>
2729
+ <span class="cline-any cline-no">&nbsp;</span>
2730
+ <span class="cline-any cline-neutral">&nbsp;</span>
2731
+ <span class="cline-any cline-neutral">&nbsp;</span>
2732
+ <span class="cline-any cline-neutral">&nbsp;</span>
2733
+ <span class="cline-any cline-no">&nbsp;</span>
2734
+ <span class="cline-any cline-neutral">&nbsp;</span>
2735
+ <span class="cline-any cline-neutral">&nbsp;</span>
2736
+ <span class="cline-any cline-neutral">&nbsp;</span>
2737
+ <span class="cline-any cline-neutral">&nbsp;</span>
2738
+ <span class="cline-any cline-neutral">&nbsp;</span>
2739
+ <span class="cline-any cline-no">&nbsp;</span>
2740
+ <span class="cline-any cline-no">&nbsp;</span>
2741
+ <span class="cline-any cline-no">&nbsp;</span>
2742
+ <span class="cline-any cline-neutral">&nbsp;</span>
2743
+ <span class="cline-any cline-neutral">&nbsp;</span>
2744
+ <span class="cline-any cline-no">&nbsp;</span>
2745
+ <span class="cline-any cline-neutral">&nbsp;</span>
2746
+ <span class="cline-any cline-neutral">&nbsp;</span>
2747
+ <span class="cline-any cline-neutral">&nbsp;</span>
2748
+ <span class="cline-any cline-neutral">&nbsp;</span>
2749
+ <span class="cline-any cline-neutral">&nbsp;</span>
2750
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import cliProgress from 'cli-progress';
2751
+ import { randomUUID } from 'crypto';
2752
+ import FormData from 'form-data';
2753
+ import fs from 'fs';
2754
+ import mime from 'mime-types';
2755
+ import path from 'path';
2756
+ &nbsp;
2757
+ import databaseService from '../services/DatabaseService.js';
2758
+ import logger from '../services/LoggingService.js';
2759
+ import { createSignalHandler } from '../services/SignalHandler.js';
2760
+ import watchService from '../services/WatchService.js';
2761
+ import uploadServiceFactory from '../services/upload/UploadServiceFactory.js';
2762
+ &nbsp;
2763
+ import appConfig from '../config/config.js';
2764
+ import ErrorHandler from '../errors/ErrorHandler.js';
2765
+ import { cleanupManager } from '../utils/CleanupManager.js';
2766
+ import FileOperations from '../utils/FileOperations.js';
2767
+ import fileSanitizer from '../utils/FileSanitizer.js';
2768
+ import watchEventHandler from '../utils/WatchEventHandler.js';
2769
+ import UploadCommand from './UploadCommand.js';
2770
+ &nbsp;
2771
+ /**
2772
+ * Watch Command Handler
2773
+ * Monitors directories for changes and triggers uploads
2774
+ */
2775
+ export class WatchCommand {
2776
+ <span class="fstat-no" title="function not covered" > co</span>nstructor() {
2777
+ <span class="cstat-no" title="statement not covered" > this.errorHandler = new ErrorHandler(logger);</span>
2778
+ <span class="cstat-no" title="statement not covered" > this.uploadCommand = new UploadCommand();</span>
2779
+ <span class="cstat-no" title="statement not covered" > this.uploadService = null;</span>
2780
+ <span class="cstat-no" title="statement not covered" > this.databaseService = databaseService;</span>
2781
+ <span class="cstat-no" title="statement not covered" > this.isShuttingDown = false;</span>
2782
+ &nbsp;
2783
+ // Progress bars tracking
2784
+ <span class="cstat-no" title="statement not covered" > this.progressBars = null;</span>
2785
+ <span class="cstat-no" title="statement not covered" > this.progressMetrics = {</span>
2786
+ individual: { start: null, processed: 0, total: 0 },
2787
+ batch: { start: null, processed: 0, total: 0 },
2788
+ 'full-structure': { start: null, processed: 0, total: 0 },
2789
+ };
2790
+ &nbsp;
2791
+ // Upload statistics tracking
2792
+ <span class="cstat-no" title="statement not covered" > this.uploadStats = {</span>
2793
+ totalUploads: 0,
2794
+ totalFiles: 0,
2795
+ successCount: 0,
2796
+ failureCount: 0,
2797
+ retryCount: 0,
2798
+ lastUploadTime: null,
2799
+ uploadDetails: [],
2800
+ };
2801
+ &nbsp;
2802
+ // Signal handling
2803
+ <span class="cstat-no" title="statement not covered" > this.signalHandler = createSignalHandler(logger, cleanupManager);</span>
2804
+ <span class="cstat-no" title="statement not covered" > this.sessionId = null;</span>
2805
+ }
2806
+ &nbsp;
2807
+ /**
2808
+ * Execute the watch command
2809
+ * @param {Object} options - Command options
2810
+ * @returns {Promise&lt;void&gt;}
2811
+ */
2812
+ <span class="fstat-no" title="function not covered" > as</span>ync execute(options) {
2813
+ <span class="cstat-no" title="statement not covered" > try {</span>
2814
+ // Validate configuration
2815
+ <span class="cstat-no" title="statement not covered" > this.#validateOptions(options); </span>// TDOO: Looks like this function is empty
2816
+ &nbsp;
2817
+ // Parse directories to watch
2818
+ const directories = <span class="cstat-no" title="statement not covered" >this.#parseDirectories(options.directories);</span>
2819
+ &nbsp;
2820
+ <span class="cstat-no" title="statement not covered" > if (directories.length === 0) {</span>
2821
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
2822
+ 'No directories specified. Use --directories or WATCH_DIRECTORIES env var',
2823
+ );
2824
+ }
2825
+ &nbsp;
2826
+ // Validate watch configuration
2827
+ <span class="cstat-no" title="statement not covered" > try {</span>
2828
+ <span class="cstat-no" title="statement not covered" > appConfig.validateWatchConfig(directories);</span>
2829
+ } catch (error) {
2830
+ <span class="cstat-no" title="statement not covered" > logger.error(`Configuration error: ${error.message}`);</span>
2831
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2832
+ }
2833
+ &nbsp;
2834
+ // Parse watch options
2835
+ const watchOptions = <span class="cstat-no" title="statement not covered" >this.#parseWatchOptions(options);</span>
2836
+ &nbsp;
2837
+ // Clear log if requested
2838
+ <span class="cstat-no" title="statement not covered" > if (options.clearLog) {</span>
2839
+ <span class="cstat-no" title="statement not covered" > logger.clearLogFile();</span>
2840
+ <span class="cstat-no" title="statement not covered" > logger.info('Log file cleared');</span>
2841
+ }
2842
+ &nbsp;
2843
+ // Initialize upload service
2844
+ // In cross-tenant mode, use the sourceApi for initial connection check
2845
+ // In single API mode, use the specified API target or default
2846
+ <span class="cstat-no" title="statement not covered" > try {</span>
2847
+ <span class="cstat-no" title="statement not covered" > if (appConfig.isCrossTenantMode()) {</span>
2848
+ // Cross-tenant mode: use sourceApi for the upload service
2849
+ <span class="cstat-no" title="statement not covered" > this.uploadService =</span>
2850
+ await uploadServiceFactory.getApiServiceForTarget(
2851
+ appConfig.api.sourceTarget,
2852
+ );
2853
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
2854
+ `Upload service initialized for cross-tenant mode (source: ${appConfig.api.sourceTarget})`,
2855
+ );
2856
+ } else <span class="cstat-no" title="statement not covered" >if (</span>
2857
+ appConfig.api.activeTarget &amp;&amp;
2858
+ appConfig.api.activeTarget !== 'default'
2859
+ ) {
2860
+ // Single API mode with specific target
2861
+ <span class="cstat-no" title="statement not covered" > this.uploadService =</span>
2862
+ await uploadServiceFactory.getApiServiceForTarget(
2863
+ appConfig.api.activeTarget,
2864
+ );
2865
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
2866
+ `Upload service initialized for API target: ${appConfig.api.activeTarget}`,
2867
+ );
2868
+ } else {
2869
+ // Default mode
2870
+ <span class="cstat-no" title="statement not covered" > this.uploadService = await uploadServiceFactory.getUploadService(</span>
2871
+ options.forceSupabase,
2872
+ );
2873
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
2874
+ `Upload service initialized: ${this.uploadService.getServiceName()}`,
2875
+ );
2876
+ }
2877
+ } catch (error) {
2878
+ <span class="cstat-no" title="statement not covered" > logger.error(`Failed to initialize upload service: ${error.message}`);</span>
2879
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2880
+ }
2881
+ &nbsp;
2882
+ // Reset upload statistics
2883
+ <span class="cstat-no" title="statement not covered" > this.uploadStats = {</span>
2884
+ totalUploads: 0,
2885
+ totalFiles: 0,
2886
+ successCount: 0,
2887
+ failureCount: 0,
2888
+ retryCount: 0,
2889
+ lastUploadTime: null,
2890
+ uploadDetails: [],
2891
+ };
2892
+ &nbsp;
2893
+ // Initialize session tracking
2894
+ const sessionId = <span class="cstat-no" title="statement not covered" >randomUUID();</span>
2895
+ <span class="cstat-no" title="statement not covered" > logger.initializeSession(sessionId);</span>
2896
+ &nbsp;
2897
+ // Initialize progress bars
2898
+ <span class="cstat-no" title="statement not covered" > this.#initializeProgressBars();</span>
2899
+ &nbsp;
2900
+ // Log startup
2901
+ <span class="cstat-no" title="statement not covered" > logger.info('═══════════════════════════════════════════════════════');</span>
2902
+ <span class="cstat-no" title="statement not covered" > logger.info('🟢 WATCH MODE STARTED');</span>
2903
+ <span class="cstat-no" title="statement not covered" > logger.info('═══════════════════════════════════════════════════════');</span>
2904
+ <span class="cstat-no" title="statement not covered" > logger.info(`📁 Watching ${directories.length} director(y/ies):`);</span>
2905
+ <span class="cstat-no" title="statement not covered" > directories.forEach(<span class="fstat-no" title="function not covered" >(d</span>irConfig) =&gt; {</span>
2906
+ const dirPath = <span class="cstat-no" title="statement not covered" >dirConfig.path || dirConfig;</span>
2907
+ const folderStructure = <span class="cstat-no" title="statement not covered" >dirConfig.folderStructure || 'default';</span>
2908
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
2909
+ ` → ${path.resolve(dirPath)} [structure: ${folderStructure}]`,
2910
+ );
2911
+ });
2912
+ <span class="cstat-no" title="statement not covered" > logger.info(`🎯 Strategy: ${watchOptions.strategy}`);</span>
2913
+ <span class="cstat-no" title="statement not covered" > logger.info(`⏱️ Debounce: ${watchOptions.debounceMs}ms`);</span>
2914
+ <span class="cstat-no" title="statement not covered" > logger.info(`📦 Batch size: ${watchOptions.batchSize}`);</span>
2915
+ <span class="cstat-no" title="statement not covered" > logger.info('═══════════════════════════════════════════════════════\n');</span>
2916
+ &nbsp;
2917
+ // Initialize watchers with directory configurations
2918
+ <span class="cstat-no" title="statement not covered" > for (const dirConfig of directories) {</span>
2919
+ const dirPath = <span class="cstat-no" title="statement not covered" >dirConfig.path || dirConfig;</span>
2920
+ <span class="cstat-no" title="statement not covered" > await watchService.addWatcher(</span>
2921
+ dirPath,
2922
+ {
2923
+ usePolling: watchOptions.usePolling,
2924
+ interval: watchOptions.interval,
2925
+ stabilityThreshold: watchOptions.stabilityThreshold,
2926
+ ignored: this.#parseIgnorePatterns(options.ignore),
2927
+ },
2928
+ dirConfig,
2929
+ );
2930
+ }
2931
+ &nbsp;
2932
+ // Enable auto-processing if configured
2933
+ <span class="cstat-no" title="statement not covered" > if (options.autoProcessing !== false) {</span>
2934
+ <span class="cstat-no" title="statement not covered" > watchService.enableAutoProcessing({</span>
2935
+ batchSize: watchOptions.batchSize,
2936
+ });
2937
+ <span class="cstat-no" title="statement not covered" > logger.info('🔄 Auto-processing pipeline enabled');</span>
2938
+ }
2939
+ &nbsp;
2940
+ // Set event handler with directory configurations
2941
+ <span class="cstat-no" title="statement not covered" > watchService.setEventHandler(<span class="fstat-no" title="function not covered" >as</span>ync (eventType, filePath) =&gt; {</span>
2942
+ <span class="cstat-no" title="statement not covered" > await this.#handleFileEvent(</span>
2943
+ eventType,
2944
+ filePath,
2945
+ options,
2946
+ watchOptions,
2947
+ directories,
2948
+ );
2949
+ });
2950
+ &nbsp;
2951
+ // Start watching
2952
+ <span class="cstat-no" title="statement not covered" > await watchService.start();</span>
2953
+ &nbsp;
2954
+ // Wait for all watchers to complete initial scan before processing
2955
+ <span class="cstat-no" title="statement not covered" > await watchService.waitForWatchersReady();</span>
2956
+ &nbsp;
2957
+ // Setup signal handlers for graceful shutdown
2958
+ <span class="cstat-no" title="statement not covered" > this.#setupSignalHandlers();</span>
2959
+ &nbsp;
2960
+ // Keep process alive
2961
+ <span class="cstat-no" title="statement not covered" > logger.info('💡 Press Ctrl+C to stop watching\n');</span>
2962
+ <span class="cstat-no" title="statement not covered" > await this.#keepProcessAlive();</span>
2963
+ } catch (error) {
2964
+ <span class="cstat-no" title="statement not covered" > this.errorHandler.handleFatalError(error, { command: 'watch' });</span>
2965
+ }
2966
+ }
2967
+ &nbsp;
2968
+ /**
2969
+ * Handle file events
2970
+ * @private
2971
+ * @param {string} eventType - Type of event
2972
+ * @param {string} filePath - Path to file
2973
+ * @param {Object} options - Command options
2974
+ * @param {Object} watchOptions - Parsed watch options
2975
+ * @param {Array&lt;Object&gt;} directories - Array of directory configurations
2976
+ * @returns {Promise&lt;void&gt;}
2977
+ */
2978
+ async #handleFileEvent(
2979
+ eventType,
2980
+ filePath,
2981
+ options,
2982
+ watchOptions,
2983
+ directories = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
2984
+ ) {
2985
+ <span class="cstat-no" title="statement not covered" > try {</span>
2986
+ // Skip if dry-run
2987
+ <span class="cstat-no" title="statement not covered" > if (options.dryRun) {</span>
2988
+ <span class="cstat-no" title="statement not covered" > logger.info(`[DRY RUN] Would upload: ${filePath}`);</span>
2989
+ <span class="cstat-no" title="statement not covered" > return;</span>
2990
+ }
2991
+ &nbsp;
2992
+ // Skip remove events
2993
+ <span class="cstat-no" title="statement not covered" > if (eventType === 'remove' || eventType === 'unlink') {</span>
2994
+ <span class="cstat-no" title="statement not covered" > logger.debug(`Skipping file removal event: ${filePath}`);</span>
2995
+ <span class="cstat-no" title="statement not covered" > return;</span>
2996
+ }
2997
+ &nbsp;
2998
+ // Skip if auto-processing is enabled (it handles file processing)
2999
+ <span class="cstat-no" title="statement not covered" > if (options.autoProcessing !== false) {</span>
3000
+ <span class="cstat-no" title="statement not covered" > logger.debug(</span>
3001
+ `[AutoProcessing] File event skipped (auto-processing is handling it): ${filePath}`,
3002
+ );
3003
+ <span class="cstat-no" title="statement not covered" > return;</span>
3004
+ }
3005
+ &nbsp;
3006
+ // Find which directory this file belongs to
3007
+ const watchDir = <span class="cstat-no" title="statement not covered" >this.#findWatchDirectory(filePath, directories);</span>
3008
+ const folderStructure = <span class="cstat-no" title="statement not covered" >watchDir?.folderStructure || 'default';</span>
3009
+ &nbsp;
3010
+ // Execute upload based on strategy
3011
+ <span class="cstat-no" title="statement not covered" > switch (watchOptions.strategy) {</span>
3012
+ case 'individual':
3013
+ <span class="cstat-no" title="statement not covered" > try {</span>
3014
+ <span class="cstat-no" title="statement not covered" > await this.#uploadIndividual(filePath, options);</span>
3015
+ } catch (strategyError) {
3016
+ <span class="cstat-no" title="statement not covered" > logger.error(</span>
3017
+ `Error in individual upload: ${strategyError.message}`,
3018
+ );
3019
+ <span class="cstat-no" title="statement not covered" > throw strategyError;</span>
3020
+ }
3021
+ <span class="cstat-no" title="statement not covered" > break;</span>
3022
+ case 'batch':
3023
+ <span class="cstat-no" title="statement not covered" > try {</span>
3024
+ <span class="cstat-no" title="statement not covered" > await this.#uploadBatch(</span>
3025
+ filePath,
3026
+ options,
3027
+ watchOptions,
3028
+ directories,
3029
+ );
3030
+ } catch (strategyError) {
3031
+ <span class="cstat-no" title="statement not covered" > logger.error(`Error in batch upload: ${strategyError.message}`);</span>
3032
+ <span class="cstat-no" title="statement not covered" > throw strategyError;</span>
3033
+ }
3034
+ <span class="cstat-no" title="statement not covered" > break;</span>
3035
+ case 'full-structure':
3036
+ <span class="cstat-no" title="statement not covered" > try {</span>
3037
+ <span class="cstat-no" title="statement not covered" > await this.#uploadFullStructure(</span>
3038
+ filePath,
3039
+ options,
3040
+ watchOptions,
3041
+ directories,
3042
+ );
3043
+ } catch (strategyError) {
3044
+ <span class="cstat-no" title="statement not covered" > logger.error(</span>
3045
+ `Error in full-structure upload: ${strategyError.message}`,
3046
+ );
3047
+ <span class="cstat-no" title="statement not covered" > throw strategyError;</span>
3048
+ }
3049
+ <span class="cstat-no" title="statement not covered" > break;</span>
3050
+ default:
3051
+ <span class="cstat-no" title="statement not covered" > logger.warn(`Unknown strategy: ${watchOptions.strategy}`);</span>
3052
+ }
3053
+ &nbsp;
3054
+ // Increment upload counter
3055
+ const stats = <span class="cstat-no" title="statement not covered" >watchService.getStats();</span>
3056
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
3057
+ `📊 Stats: +${stats.filesAdded} files, +${stats.filesModified} modified`,
3058
+ );
3059
+ } catch (error) {
3060
+ <span class="cstat-no" title="statement not covered" > logger.error(`Error handling file event: ${error.message}`);</span>
3061
+ <span class="cstat-no" title="statement not covered" > logger.error(`Stack: ${error.stack}`);</span>
3062
+ // Log the full error for debugging
3063
+ <span class="cstat-no" title="statement not covered" > if (error.code) {</span>
3064
+ <span class="cstat-no" title="statement not covered" > logger.debug(`Error code: ${error.code}`);</span>
3065
+ }
3066
+ }
3067
+ }
3068
+ &nbsp;
3069
+ /**
3070
+ * Find which watch directory a file belongs to
3071
+ * @private
3072
+ * @param {string} filePath - Path to file
3073
+ * @param {Array&lt;Object&gt;} directories - Array of directory configurations
3074
+ * @returns {Object|null} Directory configuration or null
3075
+ */
3076
+ #findWatchDirectory(filePath, directories) {
3077
+ const normalizedFilePath = <span class="cstat-no" title="statement not covered" >path.resolve(filePath);</span>
3078
+ &nbsp;
3079
+ <span class="cstat-no" title="statement not covered" > for (const dirConfig of directories) {</span>
3080
+ const dirPath = <span class="cstat-no" title="statement not covered" >dirConfig.path || dirConfig;</span>
3081
+ const normalizedDirPath = <span class="cstat-no" title="statement not covered" >path.resolve(dirPath);</span>
3082
+ &nbsp;
3083
+ <span class="cstat-no" title="statement not covered" > if (normalizedFilePath.startsWith(normalizedDirPath)) {</span>
3084
+ <span class="cstat-no" title="statement not covered" > return dirConfig;</span>
3085
+ }
3086
+ }
3087
+ &nbsp;
3088
+ <span class="cstat-no" title="statement not covered" > return null;</span>
3089
+ }
3090
+ &nbsp;
3091
+ /**
3092
+ * Retry upload with exponential backoff
3093
+ * @private
3094
+ * @param {Function} uploadFn - Function that performs the upload
3095
+ * @param {number} maxRetries - Maximum number of retries
3096
+ * @param {number} initialBackoffMs - Initial backoff in milliseconds
3097
+ * @returns {Promise&lt;any&gt;} Upload result
3098
+ * @throws {Error} If all retries fail
3099
+ */
3100
+ async #retryUpload(uploadFn, maxRetries = <span class="branch-0 cbranch-no" title="branch not covered" >3,</span> initialBackoffMs = <span class="branch-0 cbranch-no" title="branch not covered" >1000)</span> {
3101
+ let lastError;
3102
+ &nbsp;
3103
+ <span class="cstat-no" title="statement not covered" > for (let attempt = <span class="cstat-no" title="statement not covered" >1;</span> attempt &lt;= maxRetries; attempt++) {</span>
3104
+ <span class="cstat-no" title="statement not covered" > try {</span>
3105
+ <span class="cstat-no" title="statement not covered" > return await uploadFn();</span>
3106
+ } catch (error) {
3107
+ <span class="cstat-no" title="statement not covered" > lastError = error;</span>
3108
+ &nbsp;
3109
+ <span class="cstat-no" title="statement not covered" > if (attempt === maxRetries) {</span>
3110
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
3111
+ }
3112
+ &nbsp;
3113
+ const backoffMs = <span class="cstat-no" title="statement not covered" >initialBackoffMs * Math.pow(2, attempt - 1);</span>
3114
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3115
+ `Upload failed (attempt ${attempt}/${maxRetries}), retrying in ${backoffMs}ms: ${error.message}`,
3116
+ );
3117
+ &nbsp;
3118
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.retryCount++;</span>
3119
+ &nbsp;
3120
+ // Wait before retrying
3121
+ <span class="cstat-no" title="statement not covered" > await new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; <span class="cstat-no" title="statement not covered" >setTimeout(resolve, backoffMs))</span>;</span>
3122
+ }
3123
+ }
3124
+ &nbsp;
3125
+ <span class="cstat-no" title="statement not covered" > throw lastError;</span>
3126
+ }
3127
+ &nbsp;
3128
+ /**
3129
+ * Prepare a file for upload with metadata
3130
+ * @private
3131
+ * @param {string} filePath - Absolute path to file
3132
+ * @param {Object} options - Command options
3133
+ * @returns {Object} File object for upload
3134
+ */
3135
+ #prepareFileForUpload(filePath, options) {
3136
+ const stats = <span class="cstat-no" title="statement not covered" >FileOperations.getFileStats(filePath);</span>
3137
+ &nbsp;
3138
+ <span class="cstat-no" title="statement not covered" > return {</span>
3139
+ path: filePath,
3140
+ name: path.basename(filePath),
3141
+ relativePath: path.basename(filePath),
3142
+ contentType: mime.lookup(filePath) || 'application/octet-stream',
3143
+ size: stats?.size || 0,
3144
+ metadata: {
3145
+ source: 'watch-mode',
3146
+ timestamp: new Date().toISOString(),
3147
+ watchSource: path.dirname(filePath),
3148
+ },
3149
+ };
3150
+ }
3151
+ &nbsp;
3152
+ /**
3153
+ * Upload individual file
3154
+ * @private
3155
+ * @param {string} filePath - File path to upload
3156
+ * @param {Object} options - Command options
3157
+ * @returns {Promise&lt;void&gt;}
3158
+ */
3159
+ async #uploadIndividual(filePath, options) {
3160
+ const startTime = <span class="cstat-no" title="statement not covered" >Date.now();</span>
3161
+ <span class="cstat-no" title="statement not covered" > try {</span>
3162
+ <span class="cstat-no" title="statement not covered" > logger.info(`📤 [INDIVIDUAL] Uploading: ${filePath}`);</span>
3163
+ &nbsp;
3164
+ // Get file object from event handler
3165
+ const files = <span class="cstat-no" title="statement not covered" >await watchEventHandler.getFilesForUpload('individual', {</span>
3166
+ sourceDir: path.dirname(filePath),
3167
+ });
3168
+ &nbsp;
3169
+ <span class="cstat-no" title="statement not covered" > if (files.length === 0) {</span>
3170
+ <span class="cstat-no" title="statement not covered" > logger.warn(`No valid files to upload for: ${filePath}`);</span>
3171
+ <span class="cstat-no" title="statement not covered" > return;</span>
3172
+ }
3173
+ &nbsp;
3174
+ const file = <span class="cstat-no" title="statement not covered" >files[0];</span>
3175
+ <span class="cstat-no" title="statement not covered" > logger.info(` File: ${file.name} (${this.#formatFileSize(file.size)})`);</span>
3176
+ &nbsp;
3177
+ // Validate file exists and is accessible
3178
+ <span class="cstat-no" title="statement not covered" > if (!FileOperations.fileExists(file.path)) {</span>
3179
+ <span class="cstat-no" title="statement not covered" > throw new Error(`File not accessible: ${file.path}`);</span>
3180
+ }
3181
+ &nbsp;
3182
+ // ✅ CRITICAL: Validate file has been evaluated by watcher
3183
+ const validatedFiles = <span class="cstat-no" title="statement not covered" >this.#validateFilesAreWatched([file]);</span>
3184
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length === 0) {</span>
3185
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3186
+ `⚠️ File was not properly evaluated by watcher: ${file.name}`,
3187
+ );
3188
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount++;</span>
3189
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3190
+ timestamp: new Date().toISOString(),
3191
+ fileName: file.name,
3192
+ strategy: 'individual',
3193
+ status: 'rejected',
3194
+ reason: 'Not evaluated by watcher',
3195
+ duration: Date.now() - startTime,
3196
+ });
3197
+ <span class="cstat-no" title="statement not covered" > return;</span>
3198
+ }
3199
+ &nbsp;
3200
+ // Prepare file for upload with metadata
3201
+ const fileForUpload = <span class="cstat-no" title="statement not covered" >this.#prepareFileForUpload(file.path, options);</span>
3202
+ &nbsp;
3203
+ // Create upload with retries
3204
+ const result = <span class="cstat-no" title="statement not covered" >await this.#retryUpload(</span>
3205
+ <span class="fstat-no" title="function not covered" > as</span>ync () =&gt; {
3206
+ const uploadResult = <span class="cstat-no" title="statement not covered" >await this.uploadService.upload(</span>
3207
+ [fileForUpload],
3208
+ {
3209
+ strategy: 'individual',
3210
+ sourceType: 'watch-mode',
3211
+ },
3212
+ );
3213
+ <span class="cstat-no" title="statement not covered" > return uploadResult;</span>
3214
+ },
3215
+ 3,
3216
+ 1000,
3217
+ );
3218
+ &nbsp;
3219
+ // Update statistics
3220
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalUploads++;</span>
3221
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalFiles++;</span>
3222
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.successCount++;</span>
3223
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.lastUploadTime = new Date();</span>
3224
+ &nbsp;
3225
+ // Record upload details
3226
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3227
+ timestamp: new Date().toISOString(),
3228
+ fileName: file.name,
3229
+ size: file.size,
3230
+ strategy: 'individual',
3231
+ status: 'success',
3232
+ duration: Date.now() - startTime,
3233
+ });
3234
+ &nbsp;
3235
+ <span class="cstat-no" title="statement not covered" > logger.info(`✅ Upload successful: ${file.name}`);</span>
3236
+ <span class="cstat-no" title="statement not covered" > watchService.stats.uploadsTriggered++;</span>
3237
+ } catch (error) {
3238
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount++;</span>
3239
+ <span class="cstat-no" title="statement not covered" > logger.error(`❌ Error uploading individual file: ${error.message}`);</span>
3240
+ &nbsp;
3241
+ // Record failed upload
3242
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3243
+ timestamp: new Date().toISOString(),
3244
+ fileName: path.basename(filePath),
3245
+ strategy: 'individual',
3246
+ status: 'failed',
3247
+ error: error.message,
3248
+ duration: Date.now() - startTime,
3249
+ });
3250
+ }
3251
+ }
3252
+ &nbsp;
3253
+ /**
3254
+ * Upload batch of files
3255
+ * @private
3256
+ * @param {string} filePath - Triggering file path
3257
+ * @param {Object} options - Command options
3258
+ * @param {Object} watchOptions - Watch options
3259
+ * @returns {Promise&lt;void&gt;}
3260
+ */
3261
+ /**
3262
+ * Upload batch of files
3263
+ * @private
3264
+ * @param {string} filePath - Triggering file path
3265
+ * @param {Object} options - Command options
3266
+ * @param {Object} watchOptions - Watch options
3267
+ * @param {Array&lt;Object&gt;} directories - Array of directory configurations
3268
+ * @returns {Promise&lt;void&gt;}
3269
+ */
3270
+ async #uploadBatch(filePath, options, watchOptions, directories = <span class="branch-0 cbranch-no" title="branch not covered" >[])</span> {
3271
+ const startTime = <span class="cstat-no" title="statement not covered" >Date.now();</span>
3272
+ <span class="cstat-no" title="statement not covered" > try {</span>
3273
+ <span class="cstat-no" title="statement not covered" > logger.info(`📤 [BATCH] Upload triggered by: ${filePath}`);</span>
3274
+ &nbsp;
3275
+ // Find the watch directory for this file
3276
+ const watchDirConfig = <span class="cstat-no" title="statement not covered" >this.#findWatchDirectory(filePath, directories);</span>
3277
+ const folderStructure = <span class="cstat-no" title="statement not covered" >watchDirConfig?.folderStructure || 'default';</span>
3278
+ &nbsp;
3279
+ // Get batch of files from event handler
3280
+ const files = <span class="cstat-no" title="statement not covered" >await watchEventHandler.getFilesForUpload('batch', {</span>
3281
+ batchSize: watchOptions.batchSize,
3282
+ sourceDir: path.dirname(filePath),
3283
+ });
3284
+ &nbsp;
3285
+ <span class="cstat-no" title="statement not covered" > if (files.length === 0) {</span>
3286
+ <span class="cstat-no" title="statement not covered" > logger.warn('No valid files found for batch upload');</span>
3287
+ <span class="cstat-no" title="statement not covered" > return;</span>
3288
+ }
3289
+ &nbsp;
3290
+ // Log batch details
3291
+ <span class="cstat-no" title="statement not covered" > logger.info(` Batch size: ${files.length} files`);</span>
3292
+ <span class="cstat-no" title="statement not covered" > logger.info(` Folder structure: ${folderStructure}`);</span>
3293
+ let totalSize = <span class="cstat-no" title="statement not covered" >0;</span>
3294
+ <span class="cstat-no" title="statement not covered" > files.forEach(<span class="fstat-no" title="function not covered" >(f</span>ile) =&gt; {</span>
3295
+ <span class="cstat-no" title="statement not covered" > totalSize += file.size;</span>
3296
+ <span class="cstat-no" title="statement not covered" > logger.debug(` - ${file.name} (${this.#formatFileSize(file.size)})`);</span>
3297
+ });
3298
+ &nbsp;
3299
+ <span class="cstat-no" title="statement not covered" > logger.info(` Total size: ${this.#formatFileSize(totalSize)}`);</span>
3300
+ &nbsp;
3301
+ // Validate all files exist
3302
+ const invalidFiles = <span class="cstat-no" title="statement not covered" >files.filter(</span>
3303
+ <span class="fstat-no" title="function not covered" > (f</span>) =&gt; <span class="cstat-no" title="statement not covered" >!FileOperations.fileExists(f.path),</span>
3304
+ );
3305
+ <span class="cstat-no" title="statement not covered" > if (invalidFiles.length &gt; 0) {</span>
3306
+ <span class="cstat-no" title="statement not covered" > throw new Error(`${invalidFiles.length} file(s) not accessible`);</span>
3307
+ }
3308
+ &nbsp;
3309
+ // ✅ CRITICAL: Validate files have been evaluated by watcher
3310
+ const validatedFiles = <span class="cstat-no" title="statement not covered" >this.#validateFilesAreWatched(files);</span>
3311
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length === 0) {</span>
3312
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3313
+ `⚠️ None of the ${files.length} files were properly evaluated by watcher`,
3314
+ );
3315
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount += files.length;</span>
3316
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3317
+ timestamp: new Date().toISOString(),
3318
+ fileCount: files.length,
3319
+ strategy: 'batch',
3320
+ status: 'rejected',
3321
+ reason: 'No files evaluated by watcher',
3322
+ duration: Date.now() - startTime,
3323
+ });
3324
+ <span class="cstat-no" title="statement not covered" > return;</span>
3325
+ }
3326
+ &nbsp;
3327
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length &lt; files.length) {</span>
3328
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3329
+ `⚠️ Only ${validatedFiles.length}/${files.length} files were properly evaluated by watcher. Uploading only validated files.`,
3330
+ );
3331
+ }
3332
+ &nbsp;
3333
+ // Prepare files for upload
3334
+ const filesForUpload = <span class="cstat-no" title="statement not covered" >validatedFiles.map(<span class="fstat-no" title="function not covered" >(f</span>) =&gt;</span>
3335
+ <span class="cstat-no" title="statement not covered" > this.#prepareFileForUpload(f.path, options),</span>
3336
+ );
3337
+ &nbsp;
3338
+ // Create upload with retries
3339
+ const result = <span class="cstat-no" title="statement not covered" >await this.#retryUpload(</span>
3340
+ <span class="fstat-no" title="function not covered" > as</span>ync () =&gt; {
3341
+ const uploadResult = <span class="cstat-no" title="statement not covered" >await this.uploadService.upload(filesForUpload, {</span>
3342
+ strategy: 'batch',
3343
+ batchSize: watchOptions.batchSize,
3344
+ sourceType: 'watch-mode',
3345
+ });
3346
+ <span class="cstat-no" title="statement not covered" > return uploadResult;</span>
3347
+ },
3348
+ 3,
3349
+ 1000,
3350
+ );
3351
+ &nbsp;
3352
+ // Update statistics
3353
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalUploads++;</span>
3354
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalFiles += files.length;</span>
3355
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.successCount += files.length;</span>
3356
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.lastUploadTime = new Date();</span>
3357
+ &nbsp;
3358
+ // Record upload details
3359
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3360
+ timestamp: new Date().toISOString(),
3361
+ fileCount: files.length,
3362
+ strategy: 'batch',
3363
+ folderStructure,
3364
+ status: 'success',
3365
+ duration: Date.now() - startTime,
3366
+ });
3367
+ &nbsp;
3368
+ <span class="cstat-no" title="statement not covered" > logger.info(`✅ Batch upload successful: ${files.length} files`);</span>
3369
+ <span class="cstat-no" title="statement not covered" > watchService.stats.uploadsTriggered++;</span>
3370
+ &nbsp;
3371
+ // Clear processed events
3372
+ <span class="cstat-no" title="statement not covered" > watchEventHandler.clearProcessed();</span>
3373
+ } catch (error) {
3374
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount += files?.length || 1;</span>
3375
+ <span class="cstat-no" title="statement not covered" > logger.error(`❌ Error uploading batch: ${error.message}`);</span>
3376
+ &nbsp;
3377
+ // Record failed upload
3378
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3379
+ timestamp: new Date().toISOString(),
3380
+ strategy: 'batch',
3381
+ status: 'failed',
3382
+ error: error.message,
3383
+ duration: Date.now() - startTime,
3384
+ });
3385
+ }
3386
+ }
3387
+ &nbsp;
3388
+ /**
3389
+ * Upload full directory structure
3390
+ * @private
3391
+ * @param {string} filePath - Triggering file path
3392
+ * @param {Object} options - Command options
3393
+ * @param {Object} watchOptions - Watch options
3394
+ * @param {Array&lt;Object&gt;} directories - Array of directory configurations
3395
+ * @returns {Promise&lt;void&gt;}
3396
+ */
3397
+ async #uploadFullStructure(
3398
+ filePath,
3399
+ options,
3400
+ watchOptions,
3401
+ directories = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
3402
+ ) {
3403
+ const startTime = <span class="cstat-no" title="statement not covered" >Date.now();</span>
3404
+ <span class="cstat-no" title="statement not covered" > try {</span>
3405
+ <span class="cstat-no" title="statement not covered" > logger.info(`📤 [FULL-STRUCTURE] Upload triggered by: ${filePath}`);</span>
3406
+ &nbsp;
3407
+ // Find the watch directory for this file
3408
+ const watchDirConfig = <span class="cstat-no" title="statement not covered" >this.#findWatchDirectory(filePath, directories);</span>
3409
+ const folderStructure = <span class="cstat-no" title="statement not covered" >watchDirConfig?.folderStructure || 'default';</span>
3410
+ &nbsp;
3411
+ // Get full structure from event handler
3412
+ const files = <span class="cstat-no" title="statement not covered" >await watchEventHandler.getFilesForUpload(</span>
3413
+ 'full-structure',
3414
+ {
3415
+ sourceDir: path.dirname(filePath),
3416
+ },
3417
+ );
3418
+ &nbsp;
3419
+ <span class="cstat-no" title="statement not covered" > if (files.length === 0) {</span>
3420
+ <span class="cstat-no" title="statement not covered" > logger.warn('No valid files found for full structure upload');</span>
3421
+ <span class="cstat-no" title="statement not covered" > return;</span>
3422
+ }
3423
+ &nbsp;
3424
+ // Log structure details
3425
+ <span class="cstat-no" title="statement not covered" > logger.info(` Structure size: ${files.length} files`);</span>
3426
+ <span class="cstat-no" title="statement not covered" > logger.info(` Folder structure: ${folderStructure}`);</span>
3427
+ let totalSize = <span class="cstat-no" title="statement not covered" >0;</span>
3428
+ const directoriesInStructure = <span class="cstat-no" title="statement not covered" >new Set();</span>
3429
+ &nbsp;
3430
+ <span class="cstat-no" title="statement not covered" > files.forEach(<span class="fstat-no" title="function not covered" >(f</span>ile) =&gt; {</span>
3431
+ <span class="cstat-no" title="statement not covered" > totalSize += file.size;</span>
3432
+ const dir = <span class="cstat-no" title="statement not covered" >path.dirname(file.path);</span>
3433
+ <span class="cstat-no" title="statement not covered" > directoriesInStructure.add(dir);</span>
3434
+ });
3435
+ &nbsp;
3436
+ <span class="cstat-no" title="statement not covered" > logger.info(` Directories: ${directoriesInStructure.size}`);</span>
3437
+ <span class="cstat-no" title="statement not covered" > logger.info(` Total size: ${this.#formatFileSize(totalSize)}`);</span>
3438
+ &nbsp;
3439
+ // Validate all files exist
3440
+ const invalidFiles = <span class="cstat-no" title="statement not covered" >files.filter(</span>
3441
+ <span class="fstat-no" title="function not covered" > (f</span>) =&gt; <span class="cstat-no" title="statement not covered" >!FileOperations.fileExists(f.path),</span>
3442
+ );
3443
+ <span class="cstat-no" title="statement not covered" > if (invalidFiles.length &gt; 0) {</span>
3444
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
3445
+ `${invalidFiles.length} file(s) not accessible in structure`,
3446
+ );
3447
+ }
3448
+ &nbsp;
3449
+ // ✅ CRITICAL: Validate files have been evaluated by watcher
3450
+ const validatedFiles = <span class="cstat-no" title="statement not covered" >this.#validateFilesAreWatched(files);</span>
3451
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length === 0) {</span>
3452
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3453
+ `⚠️ None of the ${files.length} files were properly evaluated by watcher`,
3454
+ );
3455
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount += files.length;</span>
3456
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3457
+ timestamp: new Date().toISOString(),
3458
+ fileCount: files.length,
3459
+ strategy: 'full-structure',
3460
+ status: 'rejected',
3461
+ reason: 'No files evaluated by watcher',
3462
+ duration: Date.now() - startTime,
3463
+ });
3464
+ <span class="cstat-no" title="statement not covered" > return;</span>
3465
+ }
3466
+ &nbsp;
3467
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length &lt; files.length) {</span>
3468
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3469
+ `⚠️ Only ${validatedFiles.length}/${files.length} files were properly evaluated by watcher. Uploading only validated files.`,
3470
+ );
3471
+ }
3472
+ &nbsp;
3473
+ // Prepare files for upload
3474
+ const filesForUpload = <span class="cstat-no" title="statement not covered" >validatedFiles.map(<span class="fstat-no" title="function not covered" >(f</span>) =&gt;</span>
3475
+ <span class="cstat-no" title="statement not covered" > this.#prepareFileForUpload(f.path, options),</span>
3476
+ );
3477
+ &nbsp;
3478
+ // Create upload with retries
3479
+ const result = <span class="cstat-no" title="statement not covered" >await this.#retryUpload(</span>
3480
+ <span class="fstat-no" title="function not covered" > as</span>ync () =&gt; {
3481
+ const uploadResult = <span class="cstat-no" title="statement not covered" >await this.uploadService.upload(filesForUpload, {</span>
3482
+ strategy: 'full-structure',
3483
+ sourceType: 'watch-mode',
3484
+ metadata: {
3485
+ totalFiles: files.length,
3486
+ totalDirectories: directoriesInStructure.size,
3487
+ totalSize: totalSize,
3488
+ folderStructure: folderStructure,
3489
+ },
3490
+ });
3491
+ <span class="cstat-no" title="statement not covered" > return uploadResult;</span>
3492
+ },
3493
+ 3,
3494
+ 1000,
3495
+ );
3496
+ &nbsp;
3497
+ // Update statistics
3498
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalUploads++;</span>
3499
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.totalFiles += files.length;</span>
3500
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.successCount += files.length;</span>
3501
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.lastUploadTime = new Date();</span>
3502
+ &nbsp;
3503
+ // Record upload details
3504
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3505
+ timestamp: new Date().toISOString(),
3506
+ fileCount: files.length,
3507
+ dirCount: directories.size,
3508
+ strategy: 'full-structure',
3509
+ status: 'success',
3510
+ duration: Date.now() - startTime,
3511
+ });
3512
+ &nbsp;
3513
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
3514
+ `✅ Full structure upload successful: ${files.length} files in ${directories.size} directories`,
3515
+ );
3516
+ <span class="cstat-no" title="statement not covered" > watchService.stats.uploadsTriggered++;</span>
3517
+ &nbsp;
3518
+ // Clear processed events
3519
+ <span class="cstat-no" title="statement not covered" > watchEventHandler.clearProcessed();</span>
3520
+ } catch (error) {
3521
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.failureCount += files?.length || 1;</span>
3522
+ <span class="cstat-no" title="statement not covered" > logger.error(`❌ Error uploading full structure: ${error.message}`);</span>
3523
+ &nbsp;
3524
+ // Record failed upload
3525
+ <span class="cstat-no" title="statement not covered" > this.uploadStats.uploadDetails.push({</span>
3526
+ timestamp: new Date().toISOString(),
3527
+ strategy: 'full-structure',
3528
+ status: 'failed',
3529
+ error: error.message,
3530
+ duration: Date.now() - startTime,
3531
+ });
3532
+ }
3533
+ }
3534
+ &nbsp;
3535
+ /**
3536
+ * Validate that files have been properly evaluated by the watcher
3537
+ * CRITICAL: Ensures NO files are uploaded without watcher evaluation
3538
+ * @private
3539
+ * @param {Array&lt;Object&gt;} files - Files to validate
3540
+ * @returns {Array&lt;Object&gt;} Only files that have been evaluated by watcher
3541
+ */
3542
+ #validateFilesAreWatched(files) {
3543
+ <span class="cstat-no" title="statement not covered" > if (!files || files.length === 0) {</span>
3544
+ <span class="cstat-no" title="statement not covered" > return [];</span>
3545
+ }
3546
+ &nbsp;
3547
+ // Get watched directories from WatchService
3548
+ const watchedDirs = <span class="cstat-no" title="statement not covered" >watchService.getWatchedDirs();</span>
3549
+ &nbsp;
3550
+ <span class="cstat-no" title="statement not covered" > if (!watchedDirs || watchedDirs.length === 0) {</span>
3551
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3552
+ '⚠️ No directories are being watched. Cannot validate files.',
3553
+ );
3554
+ // ALLOW all files if no watch dirs configured (fail-safe)
3555
+ <span class="cstat-no" title="statement not covered" > return files;</span>
3556
+ }
3557
+ &nbsp;
3558
+ // Normalize all watched directories for comparison
3559
+ const normalizedWatchedDirs = <span class="cstat-no" title="statement not covered" >watchedDirs.map(<span class="fstat-no" title="function not covered" >(d</span>ir) =&gt; <span class="cstat-no" title="statement not covered" >path.resolve(dir))</span>;</span>
3560
+ &nbsp;
3561
+ // Filter files that are within watched directories
3562
+ const validatedFiles = <span class="cstat-no" title="statement not covered" >files.filter(<span class="fstat-no" title="function not covered" >(f</span>ile) =&gt; {</span>
3563
+ const normalizedFilePath = <span class="cstat-no" title="statement not covered" >path.resolve(file.path);</span>
3564
+ &nbsp;
3565
+ const isWatched = <span class="cstat-no" title="statement not covered" >normalizedWatchedDirs.some(<span class="fstat-no" title="function not covered" >(w</span>atchDir) =&gt; {</span>
3566
+ <span class="cstat-no" title="statement not covered" > return (</span>
3567
+ normalizedFilePath.startsWith(watchDir + path.sep) ||
3568
+ normalizedFilePath.startsWith(watchDir)
3569
+ );
3570
+ });
3571
+ &nbsp;
3572
+ <span class="cstat-no" title="statement not covered" > if (!isWatched) {</span>
3573
+ <span class="cstat-no" title="statement not covered" > logger.debug(`📍 File not in watched directories: ${file.path}`);</span>
3574
+ }
3575
+ &nbsp;
3576
+ <span class="cstat-no" title="statement not covered" > return isWatched;</span>
3577
+ });
3578
+ &nbsp;
3579
+ // Log validation results
3580
+ <span class="cstat-no" title="statement not covered" > if (validatedFiles.length &lt; files.length) {</span>
3581
+ <span class="cstat-no" title="statement not covered" > logger.warn(</span>
3582
+ `⚠️ Only ${validatedFiles.length}/${files.length} files passed watcher validation`,
3583
+ );
3584
+ }
3585
+ &nbsp;
3586
+ <span class="cstat-no" title="statement not covered" > return validatedFiles;</span>
3587
+ }
3588
+ &nbsp;
3589
+ /**
3590
+ * Validate command options
3591
+ * @private
3592
+ * @param {Object} options - Options to validate
3593
+ * @throws {Error} If validation fails
3594
+ */
3595
+ #validateOptions(options) {
3596
+ // Options are validated during parsing
3597
+ }
3598
+ &nbsp;
3599
+ /**
3600
+ * Format file size for display
3601
+ * @private
3602
+ * @param {number} bytes - Number of bytes
3603
+ * @returns {string} Formatted file size
3604
+ */
3605
+ #formatFileSize(bytes) {
3606
+ <span class="cstat-no" title="statement not covered" > if (bytes === 0) <span class="cstat-no" title="statement not covered" >return '0 B';</span></span>
3607
+ const k = <span class="cstat-no" title="statement not covered" >1024;</span>
3608
+ const sizes = <span class="cstat-no" title="statement not covered" >['B', 'KB', 'MB', 'GB'];</span>
3609
+ const i = <span class="cstat-no" title="statement not covered" >Math.floor(Math.log(bytes) / Math.log(k));</span>
3610
+ <span class="cstat-no" title="statement not covered" > return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];</span>
3611
+ }
3612
+ &nbsp;
3613
+ /**
3614
+ * Parse directories from string or array
3615
+ * @private
3616
+ * @param {string|Array} directoriesStr - Directories string or array
3617
+ * @returns {Array&lt;Object&gt;} Parsed directory configurations
3618
+ */
3619
+ #parseDirectories(directoriesStr) {
3620
+ <span class="cstat-no" title="statement not covered" > try {</span>
3621
+ const config = <span class="cstat-no" title="statement not covered" >appConfig.getWatchConfig();</span>
3622
+ let directoriesArray = <span class="cstat-no" title="statement not covered" >[];</span>
3623
+ &nbsp;
3624
+ // Priority 1: CLI option
3625
+ <span class="cstat-no" title="statement not covered" > if (directoriesStr) {</span>
3626
+ <span class="cstat-no" title="statement not covered" > directoriesArray = directoriesStr</span>
3627
+ .split(',')
3628
+ .map(<span class="fstat-no" title="function not covered" >(d</span>ir) =&gt; <span class="cstat-no" title="statement not covered" >dir.trim())</span>
3629
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>ir) =&gt; <span class="cstat-no" title="statement not covered" >dir.length &gt; 0)</span>
3630
+ .map(<span class="fstat-no" title="function not covered" >(d</span>ir) =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
3631
+ path: dir,
3632
+ folderStructure: 'default',
3633
+ }));
3634
+ &nbsp;
3635
+ <span class="cstat-no" title="statement not covered" > return directoriesArray;</span>
3636
+ }
3637
+ &nbsp;
3638
+ // Priority 2: Environment config with JSON format
3639
+ <span class="cstat-no" title="statement not covered" > if (</span>
3640
+ config.directoryConfigs &amp;&amp;
3641
+ Object.keys(config.directoryConfigs).length &gt; 0
3642
+ ) {
3643
+ <span class="cstat-no" title="statement not covered" > directoriesArray = Object.entries(config.directoryConfigs).map(</span>
3644
+ <span class="fstat-no" title="function not covered" > ([</span>dirPath, folderStructure]) =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
3645
+ path: dirPath,
3646
+ folderStructure: folderStructure || 'default',
3647
+ }),
3648
+ );
3649
+ &nbsp;
3650
+ <span class="cstat-no" title="statement not covered" > return directoriesArray;</span>
3651
+ }
3652
+ &nbsp;
3653
+ // Priority 3: Environment config with legacy format
3654
+ <span class="cstat-no" title="statement not covered" > if (config.directories &amp;&amp; config.directories.length &gt; 0) {</span>
3655
+ <span class="cstat-no" title="statement not covered" > directoriesArray = config.directories.map(<span class="fstat-no" title="function not covered" >(d</span>ir) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3656
+ path: dir,
3657
+ folderStructure: 'default',
3658
+ }));
3659
+ &nbsp;
3660
+ <span class="cstat-no" title="statement not covered" > return directoriesArray;</span>
3661
+ }
3662
+ &nbsp;
3663
+ <span class="cstat-no" title="statement not covered" > return [];</span>
3664
+ } catch (error) {
3665
+ <span class="cstat-no" title="statement not covered" > logger.debug(`Error parsing directories: ${error.message}`);</span>
3666
+ <span class="cstat-no" title="statement not covered" > return [];</span>
3667
+ }
3668
+ }
3669
+ &nbsp;
3670
+ /**
3671
+ * Parse watch-specific options
3672
+ * @private
3673
+ * @param {Object} options - Command options
3674
+ * @returns {Object} Parsed watch options
3675
+ */
3676
+ #parseWatchOptions(options) {
3677
+ const config = <span class="cstat-no" title="statement not covered" >appConfig.getWatchConfig();</span>
3678
+ &nbsp;
3679
+ <span class="cstat-no" title="statement not covered" > return {</span>
3680
+ strategy: options.strategy || config.strategy || 'batch',
3681
+ debounceMs: parseInt(options.debounce) || config.debounceMs || 1000,
3682
+ batchSize: parseInt(options.batchSize) || config.batchSize || 10,
3683
+ usePolling:
3684
+ options.poll !== undefined ? true : config.usePolling || false,
3685
+ interval: parseInt(options.poll) || config.pollInterval || 100,
3686
+ stabilityThreshold: config.stabilityThreshold || 300,
3687
+ autoDetect: options.autoDetect || config.autoDetect || false,
3688
+ autoOrganize: options.autoOrganize || config.autoOrganize || false,
3689
+ };
3690
+ }
3691
+ &nbsp;
3692
+ /**
3693
+ * Parse ignore patterns from CLI
3694
+ * @private
3695
+ * @param {string|undefined} ignoreStr - Comma-separated patterns
3696
+ * @returns {Array&lt;string&gt;} Ignore patterns
3697
+ */
3698
+ #parseIgnorePatterns(ignoreStr) {
3699
+ const defaultPatterns = <span class="cstat-no" title="statement not covered" >[</span>
3700
+ '/(^|[\\/\\\\])\\.|node_modules|\\.git/', // Hidden files, node_modules, .git
3701
+ ];
3702
+ &nbsp;
3703
+ <span class="cstat-no" title="statement not covered" > if (!ignoreStr &amp;&amp; !process.env.WATCH_IGNORE_PATTERNS) {</span>
3704
+ <span class="cstat-no" title="statement not covered" > return defaultPatterns;</span>
3705
+ }
3706
+ &nbsp;
3707
+ const patterns = <span class="cstat-no" title="statement not covered" >(ignoreStr || process.env.WATCH_IGNORE_PATTERNS || '')</span>
3708
+ .split(',')
3709
+ .map(<span class="fstat-no" title="function not covered" >(p</span>) =&gt; <span class="cstat-no" title="statement not covered" >p.trim())</span>
3710
+ .filter(<span class="fstat-no" title="function not covered" >(p</span>) =&gt; <span class="cstat-no" title="statement not covered" >p.length &gt; 0)</span>;
3711
+ &nbsp;
3712
+ <span class="cstat-no" title="statement not covered" > return [...defaultPatterns, ...patterns];</span>
3713
+ }
3714
+ &nbsp;
3715
+ /**
3716
+ * Setup signal handlers for graceful shutdown
3717
+ * @private
3718
+ */
3719
+ #setupSignalHandlers() {
3720
+ // Register database cleanup
3721
+ <span class="cstat-no" title="statement not covered" > cleanupManager.registerResource('Database', databaseService, <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
3722
+ <span class="cstat-no" title="statement not covered" > return await databaseService.cleanup();</span>
3723
+ });
3724
+ &nbsp;
3725
+ // Register watch service cleanup
3726
+ <span class="cstat-no" title="statement not covered" > cleanupManager.registerResource('WatchService', watchService, <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
3727
+ <span class="cstat-no" title="statement not covered" > return await watchService.stop('signal-received');</span>
3728
+ });
3729
+ &nbsp;
3730
+ // Register logging flush
3731
+ <span class="cstat-no" title="statement not covered" > cleanupManager.registerResource('Logging', logger, <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
3732
+ <span class="cstat-no" title="statement not covered" > logger.flush();</span>
3733
+ });
3734
+ &nbsp;
3735
+ // Register progress bars cleanup
3736
+ <span class="cstat-no" title="statement not covered" > cleanupManager.registerResource('ProgressBars', this.progressBars, <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
3737
+ <span class="cstat-no" title="statement not covered" > this.#stopProgressBars();</span>
3738
+ });
3739
+ &nbsp;
3740
+ // Create signal handlers
3741
+ const signalHandlers = <span class="cstat-no" title="statement not covered" >{</span>
3742
+ SIGINT: <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
3743
+ <span class="cstat-no" title="statement not covered" > await this.#onShutdown('SIGINT');</span>
3744
+ },
3745
+ SIGTERM: <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
3746
+ <span class="cstat-no" title="statement not covered" > await this.#onShutdown('SIGTERM');</span>
3747
+ },
3748
+ SIGHUP: <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
3749
+ <span class="cstat-no" title="statement not covered" > await this.#onShutdown('SIGHUP');</span>
3750
+ },
3751
+ SIGQUIT: <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
3752
+ <span class="cstat-no" title="statement not covered" > await this.#onShutdown('SIGQUIT');</span>
3753
+ },
3754
+ };
3755
+ &nbsp;
3756
+ // Register with signal handler
3757
+ <span class="cstat-no" title="statement not covered" > this.signalHandler.registerSignalHandlers(signalHandlers);</span>
3758
+ &nbsp;
3759
+ <span class="cstat-no" title="statement not covered" > logger.debug('WatchCommand: Signal handlers configured');</span>
3760
+ }
3761
+ &nbsp;
3762
+ /**
3763
+ * Handle graceful shutdown triggered by signal
3764
+ * @private
3765
+ * @param {string} signal - Signal name that triggered shutdown
3766
+ * @returns {Promise&lt;void&gt;}
3767
+ */
3768
+ async #onShutdown(signal) {
3769
+ <span class="cstat-no" title="statement not covered" > try {</span>
3770
+ // Print final statistics
3771
+ const stats = <span class="cstat-no" title="statement not covered" >watchService.getStats();</span>
3772
+ <span class="cstat-no" title="statement not covered" > logger.info('\n═══════════════════════════════════════════════════════');</span>
3773
+ <span class="cstat-no" title="statement not covered" > logger.info('📊 WATCH SESSION SUMMARY');</span>
3774
+ <span class="cstat-no" title="statement not covered" > logger.info('═══════════════════════════════════════════════════════');</span>
3775
+ <span class="cstat-no" title="statement not covered" > logger.info(`📄 Files added: ${stats.filesAdded}`);</span>
3776
+ <span class="cstat-no" title="statement not covered" > logger.info(`✏️ Files modified: ${stats.filesModified}`);</span>
3777
+ <span class="cstat-no" title="statement not covered" > logger.info(`🗑️ Files removed: ${stats.filesRemoved}`);</span>
3778
+ <span class="cstat-no" title="statement not covered" > logger.info(`📤 Uploads triggered: ${stats.uploadsTriggered}`);</span>
3779
+ <span class="cstat-no" title="statement not covered" > logger.info(`⚠️ Errors encountered: ${stats.errorsEncountered}`);</span>
3780
+ <span class="cstat-no" title="statement not covered" > logger.info('═══════════════════════════════════════════════════════\n');</span>
3781
+ &nbsp;
3782
+ // Generate and display final session report
3783
+ <span class="cstat-no" title="statement not covered" > await this.#generateAndDisplaySessionReport(this.sessionId);</span>
3784
+ } catch (error) {
3785
+ <span class="cstat-no" title="statement not covered" > logger.error(`Error during shutdown handling: ${error.message}`);</span>
3786
+ }
3787
+ }
3788
+ &nbsp;
3789
+ /**
3790
+ * Keep process alive indefinitely
3791
+ * @private
3792
+ * @returns {Promise&lt;void&gt;}
3793
+ */
3794
+ #keepProcessAlive() {
3795
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
3796
+ // Never resolves - process will run until signal is received
3797
+ });
3798
+ }
3799
+ &nbsp;
3800
+ /**
3801
+ * Initialize progress bars for upload tracking
3802
+ * @private
3803
+ * @returns {void}
3804
+ */
3805
+ #initializeProgressBars() {
3806
+ <span class="cstat-no" title="statement not covered" > this.progressBars = new cliProgress.MultiBar({</span>
3807
+ clearOnComplete: false,
3808
+ hideCursor: true,
3809
+ fps: 5,
3810
+ stopOnComplete: false,
3811
+ format:
3812
+ '{name} | {bar} | {percentage}% | {value}/{total} | ⏱️ ETA: {eta_formatted} | 🚀 {speed}',
3813
+ barCompleteChar: '█',
3814
+ barIncompleteChar: '░',
3815
+ hideCursor: true,
3816
+ formatBar: <span class="fstat-no" title="function not covered" >(p</span>rocessed, total, width) =&gt; {
3817
+ const ratio = <span class="cstat-no" title="statement not covered" >processed / total;</span>
3818
+ const filled = <span class="cstat-no" title="statement not covered" >Math.round(ratio * width);</span>
3819
+ const empty = <span class="cstat-no" title="statement not covered" >width - filled;</span>
3820
+ <span class="cstat-no" title="statement not covered" > return '█'.repeat(filled) + '░'.repeat(empty);</span>
3821
+ },
3822
+ });
3823
+ &nbsp;
3824
+ // Create bars for each strategy
3825
+ <span class="cstat-no" title="statement not covered" > this.progressBars.individual = this.progressBars.create(0, 0, {</span>
3826
+ name: '📁 Individual',
3827
+ speed: '0 files/min',
3828
+ });
3829
+ &nbsp;
3830
+ <span class="cstat-no" title="statement not covered" > this.progressBars.batch = this.progressBars.create(0, 0, {</span>
3831
+ name: '📦 Batch ',
3832
+ speed: '0 files/min',
3833
+ });
3834
+ &nbsp;
3835
+ <span class="cstat-no" title="statement not covered" > this.progressBars['full-structure'] = this.progressBars.create(0, 0, {</span>
3836
+ name: '🗂️ Full-Str ',
3837
+ speed: '0 files/min',
3838
+ });
3839
+ &nbsp;
3840
+ // Initialize metrics
3841
+ <span class="cstat-no" title="statement not covered" > this.progressMetrics = {</span>
3842
+ individual: { start: null, processed: 0, total: 0 },
3843
+ batch: { start: null, processed: 0, total: 0 },
3844
+ 'full-structure': { start: null, processed: 0, total: 0 },
3845
+ };
3846
+ }
3847
+ &nbsp;
3848
+ /**
3849
+ * Update progress bar for a specific strategy
3850
+ * @private
3851
+ * @param {string} strategy - Upload strategy name
3852
+ * @param {number} processed - Number of processed files
3853
+ * @param {number} total - Total number of files
3854
+ * @returns {void}
3855
+ */
3856
+ #updateProgressBar(strategy, processed, total) {
3857
+ <span class="cstat-no" title="statement not covered" > if (!this.progressBars || !this.progressBars[strategy]) {</span>
3858
+ <span class="cstat-no" title="statement not covered" > return;</span>
3859
+ }
3860
+ &nbsp;
3861
+ const metrics = <span class="cstat-no" title="statement not covered" >this.progressMetrics[strategy];</span>
3862
+ &nbsp;
3863
+ // Initialize start time if not already done
3864
+ <span class="cstat-no" title="statement not covered" > if (metrics.start === null) {</span>
3865
+ <span class="cstat-no" title="statement not covered" > metrics.start = Date.now();</span>
3866
+ }
3867
+ &nbsp;
3868
+ <span class="cstat-no" title="statement not covered" > metrics.processed = processed;</span>
3869
+ <span class="cstat-no" title="statement not covered" > metrics.total = total;</span>
3870
+ &nbsp;
3871
+ // Calculate speed (files per minute)
3872
+ const elapsedMs = <span class="cstat-no" title="statement not covered" >Date.now() - metrics.start;</span>
3873
+ const elapsedMin = <span class="cstat-no" title="statement not covered" >elapsedMs / 60000;</span>
3874
+ const speed = <span class="cstat-no" title="statement not covered" >elapsedMin &gt; 0 ? (processed / elapsedMin).toFixed(1) : '0';</span>
3875
+ &nbsp;
3876
+ // Update bar
3877
+ <span class="cstat-no" title="statement not covered" > this.progressBars[strategy].setTotal(total);</span>
3878
+ <span class="cstat-no" title="statement not covered" > this.progressBars[strategy].update(processed, {</span>
3879
+ speed: `${speed} files/min`,
3880
+ });
3881
+ }
3882
+ &nbsp;
3883
+ /**
3884
+ * Complete a progress bar for a strategy
3885
+ * @private
3886
+ * @param {string} strategy - Upload strategy name
3887
+ * @param {Object} results - Upload results (successCount, failureCount, duration)
3888
+ * @returns {void}
3889
+ */
3890
+ #completeProgressBar(strategy, results) {
3891
+ <span class="cstat-no" title="statement not covered" > if (!this.progressBars || !this.progressBars[strategy]) {</span>
3892
+ <span class="cstat-no" title="statement not covered" > return;</span>
3893
+ }
3894
+ &nbsp;
3895
+ const metrics = <span class="cstat-no" title="statement not covered" >this.progressMetrics[strategy];</span>
3896
+ const bar = <span class="cstat-no" title="statement not covered" >this.progressBars[strategy];</span>
3897
+ const total = <span class="cstat-no" title="statement not covered" >results.fileCount || metrics.total;</span>
3898
+ const duration = <span class="cstat-no" title="statement not covered" >results.duration || 0;</span>
3899
+ &nbsp;
3900
+ // Calculate final speed
3901
+ const durationSec = <span class="cstat-no" title="statement not covered" >duration / 1000;</span>
3902
+ const speed =
3903
+ <span class="cstat-no" title="statement not covered" > durationSec &gt; 0 ? (total / (durationSec / 60)).toFixed(1) : '0';</span>
3904
+ &nbsp;
3905
+ // Set to complete
3906
+ <span class="cstat-no" title="statement not covered" > bar.setTotal(total);</span>
3907
+ <span class="cstat-no" title="statement not covered" > bar.update(total, {</span>
3908
+ speed: `${speed} files/min`,
3909
+ });
3910
+ }
3911
+ &nbsp;
3912
+ /**
3913
+ * Calculate ETA (Estimated Time to Arrival)
3914
+ * @private
3915
+ * @param {number} startTime - Start timestamp
3916
+ * @param {number} processed - Number of processed items
3917
+ * @param {number} total - Total number of items
3918
+ * @returns {string} Formatted ETA string
3919
+ */
3920
+ #calculateETA(startTime, processed, total) {
3921
+ <span class="cstat-no" title="statement not covered" > if (processed === 0 || total === 0) {</span>
3922
+ <span class="cstat-no" title="statement not covered" > return '--:--:--';</span>
3923
+ }
3924
+ &nbsp;
3925
+ const elapsedMs = <span class="cstat-no" title="statement not covered" >Date.now() - startTime;</span>
3926
+ const avgTimePerItem = <span class="cstat-no" title="statement not covered" >elapsedMs / processed;</span>
3927
+ const remainingItems = <span class="cstat-no" title="statement not covered" >total - processed;</span>
3928
+ const remainingMs = <span class="cstat-no" title="statement not covered" >remainingItems * avgTimePerItem;</span>
3929
+ &nbsp;
3930
+ const hours = <span class="cstat-no" title="statement not covered" >Math.floor(remainingMs / 3600000);</span>
3931
+ const minutes = <span class="cstat-no" title="statement not covered" >Math.floor((remainingMs % 3600000) / 60000);</span>
3932
+ const seconds = <span class="cstat-no" title="statement not covered" >Math.floor((remainingMs % 60000) / 1000);</span>
3933
+ &nbsp;
3934
+ <span class="cstat-no" title="statement not covered" > if (hours &gt; 0) {</span>
3935
+ <span class="cstat-no" title="statement not covered" > return `${hours}h ${minutes}m`;</span>
3936
+ } else <span class="cstat-no" title="statement not covered" >if (minutes &gt; 0) {</span>
3937
+ <span class="cstat-no" title="statement not covered" > return `${minutes}m ${seconds}s`;</span>
3938
+ } else {
3939
+ <span class="cstat-no" title="statement not covered" > return `${seconds}s`;</span>
3940
+ }
3941
+ }
3942
+ &nbsp;
3943
+ /**
3944
+ * Stop and cleanup progress bars
3945
+ * @private
3946
+ * @returns {void}
3947
+ */
3948
+ #stopProgressBars() {
3949
+ <span class="cstat-no" title="statement not covered" > if (this.progressBars) {</span>
3950
+ <span class="cstat-no" title="statement not covered" > try {</span>
3951
+ <span class="cstat-no" title="statement not covered" > this.progressBars.stop();</span>
3952
+ } catch (error) {
3953
+ <span class="cstat-no" title="statement not covered" > logger.debug(`Error stopping progress bars: ${error.message}`);</span>
3954
+ }
3955
+ }
3956
+ }
3957
+ &nbsp;
3958
+ /**
3959
+ * Generate and display final session report
3960
+ * @private
3961
+ * @param {string} sessionId - Session ID to generate report for
3962
+ * @returns {Promise&lt;void&gt;}
3963
+ */
3964
+ async #generateAndDisplaySessionReport(sessionId) {
3965
+ <span class="cstat-no" title="statement not covered" > try {</span>
3966
+ // Get final statistics from DatabaseService
3967
+ const stats = <span class="cstat-no" title="statement not covered" >await databaseService.getSessionStatistics(sessionId);</span>
3968
+ &nbsp;
3969
+ // Generate formatted report
3970
+ const report = <span class="cstat-no" title="statement not covered" >logger.formatSessionReport();</span>
3971
+ &nbsp;
3972
+ // Display report in console
3973
+ <span class="cstat-no" title="statement not covered" > console.log(report);</span>
3974
+ &nbsp;
3975
+ // Save report to file
3976
+ <span class="cstat-no" title="statement not covered" > await this.#saveReportToFile(sessionId, report);</span>
3977
+ &nbsp;
3978
+ <span class="cstat-no" title="statement not covered" > logger.info(</span>
3979
+ `Session report generated successfully for session: ${sessionId}`,
3980
+ );
3981
+ } catch (error) {
3982
+ <span class="cstat-no" title="statement not covered" > logger.error(`Error generating session report: ${error.message}`);</span>
3983
+ }
3984
+ }
3985
+ &nbsp;
3986
+ /**
3987
+ * Save session report to file
3988
+ * @private
3989
+ * @param {string} sessionId - Session ID
3990
+ * @param {string} report - Report content to save
3991
+ * @returns {Promise&lt;void&gt;}
3992
+ */
3993
+ async #saveReportToFile(sessionId, report) {
3994
+ <span class="cstat-no" title="statement not covered" > try {</span>
3995
+ const logDir = <span class="cstat-no" title="statement not covered" >path.join(process.cwd(), 'logs', 'sessions');</span>
3996
+ const timestamp = <span class="cstat-no" title="statement not covered" >Date.now();</span>
3997
+ const fileName = <span class="cstat-no" title="statement not covered" >`session-${sessionId}-${timestamp}.log`;</span>
3998
+ const filePath = <span class="cstat-no" title="statement not covered" >path.join(logDir, fileName);</span>
3999
+ &nbsp;
4000
+ // Create directory if it doesn't exist
4001
+ <span class="cstat-no" title="statement not covered" > if (!fs.existsSync(logDir)) {</span>
4002
+ <span class="cstat-no" title="statement not covered" > fs.mkdirSync(logDir, { recursive: true });</span>
4003
+ }
4004
+ &nbsp;
4005
+ // Write report to file
4006
+ <span class="cstat-no" title="statement not covered" > fs.writeFileSync(filePath, report, 'utf-8');</span>
4007
+ &nbsp;
4008
+ <span class="cstat-no" title="statement not covered" > logger.info(`Session report saved to: ${filePath}`);</span>
4009
+ } catch (error) {
4010
+ <span class="cstat-no" title="statement not covered" > logger.error(`Error saving report to file: ${error.message}`);</span>
4011
+ }
4012
+ }
4013
+ &nbsp;
4014
+ /**
4015
+ * Generate intelligent recommendations based on session statistics
4016
+ * @private
4017
+ * @param {Object} stats - Session statistics object
4018
+ * @returns {string} Formatted recommendations
4019
+ */
4020
+ #generateRecommendations(stats) {
4021
+ const recommendations = <span class="cstat-no" title="statement not covered" >[];</span>
4022
+ &nbsp;
4023
+ // Analyze success rate
4024
+ const successRate =
4025
+ <span class="cstat-no" title="statement not covered" > (stats.totalSuccessCount /</span>
4026
+ (stats.totalSuccessCount + stats.totalFailureCount)) *
4027
+ 100;
4028
+ <span class="cstat-no" title="statement not covered" > if (successRate &gt;= 95) {</span>
4029
+ <span class="cstat-no" title="statement not covered" > recommendations.push(</span>
4030
+ '✅ Excellent performance! Success rate is outstanding.',
4031
+ );
4032
+ } else <span class="cstat-no" title="statement not covered" >if (successRate &gt;= 80) {</span>
4033
+ <span class="cstat-no" title="statement not covered" > recommendations.push(</span>
4034
+ '⚠️ Good performance, but there is room for improvement.',
4035
+ );
4036
+ } else {
4037
+ <span class="cstat-no" title="statement not covered" > recommendations.push('❌ Poor performance. Check logs for issues.');</span>
4038
+ }
4039
+ &nbsp;
4040
+ // Analyze retries
4041
+ <span class="cstat-no" title="statement not covered" > if (stats.retryStats.totalRetries === 0) {</span>
4042
+ <span class="cstat-no" title="statement not covered" > recommendations.push(</span>
4043
+ '✅ No retries needed - upload system is very stable.',
4044
+ );
4045
+ } else <span class="cstat-no" title="statement not covered" >if (stats.retryStats.totalRetries &lt;= 5) {</span>
4046
+ <span class="cstat-no" title="statement not covered" > recommendations.push('ℹ️ Low retry count - system is fairly stable.');</span>
4047
+ } else {
4048
+ <span class="cstat-no" title="statement not covered" > recommendations.push(</span>
4049
+ '⚠️ High retry count - consider optimizing upload settings.',
4050
+ );
4051
+ }
4052
+ &nbsp;
4053
+ // Analyze strategies
4054
+ const byStrategy = <span class="cstat-no" title="statement not covered" >stats.byStrategy;</span>
4055
+ const strategies = <span class="cstat-no" title="statement not covered" >Object.entries(byStrategy)</span>
4056
+ .filter(<span class="fstat-no" title="function not covered" >([</span>_, s]) =&gt; <span class="cstat-no" title="statement not covered" >s.uploadCount &gt; 0)</span>
4057
+ .sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {
4058
+ const aSpeed =
4059
+ <span class="cstat-no" title="statement not covered" > a[1].totalDuration &gt; 0</span>
4060
+ ? a[1].totalFiles / (a[1].totalDuration / 60000)
4061
+ : 0;
4062
+ const bSpeed =
4063
+ <span class="cstat-no" title="statement not covered" > b[1].totalDuration &gt; 0</span>
4064
+ ? b[1].totalFiles / (b[1].totalDuration / 60000)
4065
+ : 0;
4066
+ <span class="cstat-no" title="statement not covered" > return bSpeed - aSpeed;</span>
4067
+ });
4068
+ &nbsp;
4069
+ <span class="cstat-no" title="statement not covered" > if (strategies.length &gt; 0) {</span>
4070
+ const fastest = <span class="cstat-no" title="statement not covered" >strategies[0];</span>
4071
+ const speed = <span class="cstat-no" title="statement not covered" >(</span>
4072
+ fastest[1].totalFiles /
4073
+ (fastest[1].totalDuration / 60000)
4074
+ ).toFixed(1);
4075
+ <span class="cstat-no" title="statement not covered" > recommendations.push(</span>
4076
+ `💡 Most efficient strategy: ${fastest[0]} (${speed} files/min)`,
4077
+ );
4078
+ }
4079
+ &nbsp;
4080
+ // Format recommendations for display
4081
+ let result = <span class="cstat-no" title="statement not covered" >'';</span>
4082
+ <span class="cstat-no" title="statement not covered" > recommendations.forEach(<span class="fstat-no" title="function not covered" >(r</span>ec, idx) =&gt; {</span>
4083
+ <span class="cstat-no" title="statement not covered" > result += `│ ${rec}\n`;</span>
4084
+ });
4085
+ &nbsp;
4086
+ <span class="cstat-no" title="statement not covered" > return result;</span>
4087
+ }
4088
+ }
4089
+ &nbsp;
4090
+ // Export singleton instance
4091
+ export default new WatchCommand();
4092
+ &nbsp;</pre></td></tr></table></pre>
4093
+
4094
+ <div class='push'></div><!-- for sticky footer -->
4095
+ </div><!-- /wrapper -->
4096
+ <div class='footer quiet pad2 space-top1 center small'>
4097
+ Code coverage generated by
4098
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
4099
+ at 2026-01-20T02:38:34.273Z
4100
+ </div>
4101
+ <script src="prettify.js"></script>
4102
+ <script>
4103
+ window.onload = function () {
4104
+ prettyPrint();
4105
+ };
4106
+ </script>
4107
+ <script src="sorter.js"></script>
4108
+ <script src="block-navigation.js"></script>
4109
+ </body>
4110
+ </html>
4111
+