imposium-js-sdk 3.5.6 → 3.5.7

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 (70) hide show
  1. package/.prettierignore +13 -0
  2. package/CODESTEWARDS.md +12 -0
  3. package/README.md +14 -15
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/cobertura-coverage.xml +1574 -0
  7. package/coverage/coverage-final.json +13 -0
  8. package/coverage/coverage-summary.json +14 -0
  9. package/coverage/favicon.png +0 -0
  10. package/coverage/index.html +176 -0
  11. package/coverage/junit.xml +355 -0
  12. package/coverage/lcov-report/base.css +224 -0
  13. package/coverage/lcov-report/block-navigation.js +87 -0
  14. package/coverage/lcov-report/favicon.png +0 -0
  15. package/coverage/lcov-report/index.html +176 -0
  16. package/coverage/lcov-report/prettify.css +1 -0
  17. package/coverage/lcov-report/prettify.js +2 -0
  18. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  19. package/coverage/lcov-report/sorter.js +210 -0
  20. package/coverage/lcov-report/src/Entry.ts.html +205 -0
  21. package/coverage/lcov-report/src/client/Client.ts.html +1468 -0
  22. package/coverage/lcov-report/src/client/DirectDeliveryPipe.ts.html +658 -0
  23. package/coverage/lcov-report/src/client/http/API.ts.html +526 -0
  24. package/coverage/lcov-report/src/client/http/index.html +116 -0
  25. package/coverage/lcov-report/src/client/index.html +131 -0
  26. package/coverage/lcov-report/src/index.html +116 -0
  27. package/coverage/lcov-report/src/scaffolding/ExceptionPipe.ts.html +430 -0
  28. package/coverage/lcov-report/src/scaffolding/Exceptions.ts.html +616 -0
  29. package/coverage/lcov-report/src/scaffolding/GoogleAnalytics.ts.html +424 -0
  30. package/coverage/lcov-report/src/scaffolding/Helpers.ts.html +412 -0
  31. package/coverage/lcov-report/src/scaffolding/Version.ts.html +118 -0
  32. package/coverage/lcov-report/src/scaffolding/index.html +176 -0
  33. package/coverage/lcov-report/src/video/FallbackPlayer.ts.html +133 -0
  34. package/coverage/lcov-report/src/video/Player.ts.html +1663 -0
  35. package/coverage/lcov-report/src/video/VideoPlayer.ts.html +679 -0
  36. package/coverage/lcov-report/src/video/index.html +146 -0
  37. package/coverage/lcov.info +1426 -0
  38. package/coverage/prettify.css +1 -0
  39. package/coverage/prettify.js +2 -0
  40. package/coverage/sort-arrow-sprite.png +0 -0
  41. package/coverage/sorter.js +210 -0
  42. package/coverage/src/Entry.ts.html +205 -0
  43. package/coverage/src/client/Client.ts.html +1468 -0
  44. package/coverage/src/client/DirectDeliveryPipe.ts.html +658 -0
  45. package/coverage/src/client/http/API.ts.html +526 -0
  46. package/coverage/src/client/http/index.html +116 -0
  47. package/coverage/src/client/index.html +131 -0
  48. package/coverage/src/index.html +116 -0
  49. package/coverage/src/scaffolding/ExceptionPipe.ts.html +430 -0
  50. package/coverage/src/scaffolding/Exceptions.ts.html +616 -0
  51. package/coverage/src/scaffolding/GoogleAnalytics.ts.html +424 -0
  52. package/coverage/src/scaffolding/Helpers.ts.html +412 -0
  53. package/coverage/src/scaffolding/Version.ts.html +118 -0
  54. package/coverage/src/scaffolding/index.html +176 -0
  55. package/coverage/src/video/FallbackPlayer.ts.html +133 -0
  56. package/coverage/src/video/Player.ts.html +1663 -0
  57. package/coverage/src/video/VideoPlayer.ts.html +679 -0
  58. package/coverage/src/video/index.html +146 -0
  59. package/eslint-report.xml +1 -0
  60. package/examples/web/.eslintrc.json +10 -14
  61. package/lib/imposium.js +18815 -61068
  62. package/lib/imposium.js.map +1 -1
  63. package/lib/imposium.min.js +1 -1
  64. package/lib/imposium.min.js.LICENSE.txt +15 -2
  65. package/lib/imposium.min.js.map +1 -1
  66. package/package.json +40 -11
  67. package/tsconfig.eslint.json +8 -0
  68. package/vitest.config.ts +37 -0
  69. package/.eslintrc.js +0 -168
  70. package/CODEOWNERS +0 -1
@@ -0,0 +1,1663 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/video/Player.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/video</a> Player.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">78.19% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>147/188</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">75.75% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>50/66</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">61.53% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>24/39</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">79.03% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>147/186</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-yes">1x</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-yes">1x</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-yes">1x</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-yes">1x</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-yes">1x</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-yes">1x</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-yes">1x</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-yes">37x</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-yes">37x</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-yes">37x</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-yes">37x</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-yes">37x</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-yes">37x</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-yes">37x</span>
687
+ <span class="cline-any cline-yes">37x</span>
688
+ <span class="cline-any cline-yes">2x</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-yes">35x</span>
692
+ <span class="cline-any cline-yes">35x</span>
693
+ <span class="cline-any cline-yes">35x</span>
694
+ <span class="cline-any cline-yes">35x</span>
695
+ <span class="cline-any cline-neutral">&nbsp;</span>
696
+ <span class="cline-any cline-neutral">&nbsp;</span>
697
+ <span class="cline-any cline-yes">2x</span>
698
+ <span class="cline-any cline-yes">2x</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-yes">37x</span>
706
+ <span class="cline-any cline-yes">39x</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-yes">39x</span>
709
+ <span class="cline-any cline-yes">39x</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-yes">39x</span>
712
+ <span class="cline-any cline-yes">351x</span>
713
+ <span class="cline-any cline-yes">229x</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-yes">37x</span>
722
+ <span class="cline-any cline-yes">4x</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-yes">4x</span>
728
+ <span class="cline-any cline-yes">4x</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-yes">4x</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-yes">4x</span>
733
+ <span class="cline-any cline-yes">1x</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">4x</span>
737
+ <span class="cline-any cline-yes">2x</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-yes">2x</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-yes">37x</span>
747
+ <span class="cline-any cline-yes">5x</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-yes">5x</span>
750
+ <span class="cline-any cline-yes">5x</span>
751
+ <span class="cline-any cline-yes">4x</span>
752
+ <span class="cline-any cline-yes">3x</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-yes">3x</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-yes">3x</span>
759
+ <span class="cline-any cline-yes">2x</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-yes">1x</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-yes">1x</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-yes">2x</span>
769
+ <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-yes">37x</span>
776
+ <span class="cline-any cline-yes">20x</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-yes">20x</span>
779
+ <span class="cline-any cline-yes">20x</span>
780
+ <span class="cline-any cline-yes">1x</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-yes">1x</span>
784
+ <span class="cline-any cline-yes">1x</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-yes">1x</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-yes">19x</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-yes">19x</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-yes">37x</span>
800
+ <span class="cline-any cline-yes">3x</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-yes">37x</span>
809
+ <span class="cline-any cline-yes">1x</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-yes">37x</span>
816
+ <span class="cline-any cline-yes">2x</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-yes">37x</span>
823
+ <span class="cline-any cline-yes">1x</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-yes">37x</span>
830
+ <span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-yes">37x</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-yes">3x</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-yes">3x</span>
842
+ <span class="cline-any cline-yes">2x</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-yes">2x</span>
845
+ <span class="cline-any cline-yes">1x</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-yes">1x</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-yes">1x</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-yes">37x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-yes">37x</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-yes">2x</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-yes">2x</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-yes">2x</span>
874
+ <span class="cline-any cline-yes">1x</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-neutral">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-neutral">&nbsp;</span>
881
+ <span class="cline-any cline-yes">37x</span>
882
+ <span class="cline-any cline-yes">1x</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-yes">37x</span>
889
+ <span class="cline-any cline-yes">2x</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-yes">2x</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-yes">2x</span>
894
+ <span class="cline-any cline-yes">1x</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-yes">1x</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-yes">37x</span>
904
+ <span class="cline-any cline-yes">1x</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-yes">37x</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-yes">1x</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-yes">1x</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-yes">1x</span>
918
+ <span class="cline-any cline-yes">1x</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-yes">37x</span>
926
+ <span class="cline-any cline-yes">2x</span>
927
+ <span class="cline-any cline-yes">2x</span>
928
+ <span class="cline-any cline-yes">2x</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-yes">37x</span>
935
+ <span class="cline-any cline-yes">2x</span>
936
+ <span class="cline-any cline-yes">2x</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-yes">2x</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-yes">2x</span>
941
+ <span class="cline-any cline-yes">18x</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-yes">2x</span>
945
+ <span class="cline-any cline-yes">2x</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-yes">37x</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-yes">35x</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-yes">35x</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-yes">35x</span>
960
+ <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-neutral">&nbsp;</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-yes">37x</span>
971
+ <span class="cline-any cline-yes">2x</span>
972
+ <span class="cline-any cline-yes">2x</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-yes">2x</span>
975
+ <span class="cline-any cline-yes">2x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-yes">1x</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-yes">37x</span>
990
+ <span class="cline-any cline-yes">2x</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-yes">2x</span>
994
+ <span class="cline-any cline-yes">2x</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-yes">2x</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-yes">2x</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-yes">2x</span>
1002
+ <span class="cline-any cline-yes">2x</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-no">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-no">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-yes">37x</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-no">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-yes">37x</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-no">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-no">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-no">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-no">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-neutral">&nbsp;</span>
1083
+ <span class="cline-any cline-yes">37x</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-yes">3x</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-yes">3x</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-yes">3x</span>
1093
+ <span class="cline-any cline-no">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-no">&nbsp;</span>
1098
+ <span class="cline-any cline-no">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-yes">3x</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-yes">3x</span>
1105
+ <span class="cline-any cline-yes">1x</span>
1106
+ <span class="cline-any cline-neutral">&nbsp;</span>
1107
+ <span class="cline-any cline-neutral">&nbsp;</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-yes">37x</span>
1113
+ <span class="cline-any cline-yes">4x</span>
1114
+ <span class="cline-any cline-yes">1x</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
1119
+ import VideoPlayer from './VideoPlayer';
1120
+ import Client, { IExperience } from '../client/Client';
1121
+ import ExceptionPipe from '../scaffolding/ExceptionPipe';
1122
+ &nbsp;
1123
+ import { PlayerConfigurationError } from '../scaffolding/Exceptions';
1124
+ &nbsp;
1125
+ import {
1126
+ calculateMbps,
1127
+ calculateAverageMbps,
1128
+ inRangeNumeric,
1129
+ prepConfig,
1130
+ isFunc,
1131
+ keyExists
1132
+ } from '../scaffolding/Helpers';
1133
+ &nbsp;
1134
+ export interface IPlayerConfig {
1135
+ volume: number;
1136
+ preload: string;
1137
+ loop: boolean;
1138
+ muted: boolean;
1139
+ autoLoad: boolean;
1140
+ autoPlay: boolean;
1141
+ controls: boolean;
1142
+ qualityOverride: string;
1143
+ }
1144
+ &nbsp;
1145
+ const settings = require('../conf/settings.json').videoPlayer;
1146
+ &nbsp;
1147
+ const hls = (window as any).hls;
1148
+ &nbsp;
1149
+ export default class ImposiumPlayer extends VideoPlayer {
1150
+ public static events = {
1151
+ PLAY: 'play',
1152
+ PAUSE: 'pause',
1153
+ COMPLETE: 'ended',
1154
+ ERROR: 'error',
1155
+ SEEK: 'seeked',
1156
+ TIME: 'timeupdate',
1157
+ VOLUME: 'volumechange',
1158
+ MUTE: 'muted',
1159
+ CONTROLS: 'controlsset'
1160
+ };
1161
+ &nbsp;
1162
+ private static readonly STREAM_TYPE = settings.streamType;
1163
+ &nbsp;
1164
+ private static readonly BANDWIDTH_SAMPLES: number = settings.bandwidthSamples;
1165
+ &nbsp;
1166
+ private static readonly TEST_IMAGE: string = settings.testImage;
1167
+ &nbsp;
1168
+ private static readonly bandwidthRatings: any = {
1169
+ LOW: settings.bandwidth.low,
1170
+ MID: settings.bandwidth.mid
1171
+ };
1172
+ &nbsp;
1173
+ private static readonly compressionLevels: any = {
1174
+ STREAM: settings.compression.stream,
1175
+ LOW: settings.compression.low,
1176
+ MID: settings.compression.mid,
1177
+ HIGH: settings.compression.high
1178
+ };
1179
+ &nbsp;
1180
+ private static readonly hlsSupportLevels: any = {
1181
+ NATIVE: settings.hlsSupportLevels.native,
1182
+ HLSJS: settings.hlsSupportLevels.hlsjs
1183
+ };
1184
+ &nbsp;
1185
+ private eventDelegateRefs: any = {
1186
+ play: { callback: null, native: true },
1187
+ pause: { callback: null, native: true },
1188
+ ended: { callback: null, native: true },
1189
+ error: { callback: null, native: true },
1190
+ seeked: { callback: null, native: true },
1191
+ timeupdate: { callback: null, native: true },
1192
+ volumechanged: { callback: null, native: true },
1193
+ muted: { callback: null, native: false },
1194
+ controlsset: { callback: null, native: false }
1195
+ };
1196
+ &nbsp;
1197
+ private hlsSupport: string = '';
1198
+ &nbsp;
1199
+ private hlsPlayer: any = null;
1200
+ &nbsp;
1201
+ private imposiumPlayerConfig: IPlayerConfig = null;
1202
+ &nbsp;
1203
+ constructor(
1204
+ node: HTMLVideoElement,
1205
+ client: Client,
1206
+ config: IPlayerConfig = settings.defaultConfig
1207
+ ) {
1208
+ super(node);
1209
+ &nbsp;
1210
+ const validClient: boolean = !!(client &amp;&amp; client.clientConfig);
1211
+ &nbsp;
1212
+ try {
1213
+ if (!validClient) {
1214
+ throw new PlayerConfigurationError('badClient', null);
1215
+ }
1216
+ &nbsp;
1217
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (node instanceof HTMLVideoElement) {
1218
+ client.bindPlayer(this);
1219
+ this.init(config);
1220
+ this.setupHls();
1221
+ }
1222
+ } catch (e) {
1223
+ const storyId: string = validClient ? <span class="branch-0 cbranch-no" title="branch not covered" >client.clientConfig.storyId : '</span>';
1224
+ ExceptionPipe.trapError(e, storyId);
1225
+ }
1226
+ }
1227
+ &nbsp;
1228
+ /*
1229
+ Assigns config
1230
+ */
1231
+ public init = (config: IPlayerConfig): void =&gt; {
1232
+ const { defaultConfig } = settings;
1233
+ &nbsp;
1234
+ prepConfig(config, defaultConfig);
1235
+ this.imposiumPlayerConfig = { ...defaultConfig, ...config };
1236
+ &nbsp;
1237
+ for (const key in this.imposiumPlayerConfig) {
1238
+ if (this.imposiumPlayerConfig[key]) {
1239
+ this.node[key] = this.imposiumPlayerConfig[key];
1240
+ }
1241
+ }
1242
+ };
1243
+ &nbsp;
1244
+ /*
1245
+ Set a live stream or fallback to bandwidth checking / auto assigning a file
1246
+ */
1247
+ public experienceGenerated = (experience: IExperience): void =&gt; {
1248
+ const { qualityOverride } = this.imposiumPlayerConfig;
1249
+ &nbsp;
1250
+ const {
1251
+ id,
1252
+ output: { videos, images }
1253
+ } = experience;
1254
+ let poster = '';
1255
+ &nbsp;
1256
+ this.setExperienceId(id);
1257
+ &nbsp;
1258
+ if (images &amp;&amp; images.hasOwnProperty('poster')) {
1259
+ poster = images.poster;
1260
+ }
1261
+ &nbsp;
1262
+ if (qualityOverride) {
1263
+ this.doQualityOverride(videos, poster);
1264
+ } else {
1265
+ this.doQualityAssessment(videos, poster);
1266
+ }
1267
+ };
1268
+ &nbsp;
1269
+ /*
1270
+ Enable native or custom ImposiumPlayer events
1271
+ */
1272
+ public on = (eventName: string, callback: any): void =&gt; {
1273
+ const { storyId, eventDelegateRefs } = this;
1274
+ &nbsp;
1275
+ try {
1276
+ if (isFunc(callback)) {
1277
+ if (keyExists(ImposiumPlayer.events, eventName)) {
1278
+ const event = eventDelegateRefs[eventName];
1279
+ &nbsp;
1280
+ // Add ptr for future removal
1281
+ event.callback = callback;
1282
+ &nbsp;
1283
+ // If the event type is a valid media event, assign to ImposiumPlayer node
1284
+ if (event.native) {
1285
+ this.node.addEventListener(eventName, event.callback);
1286
+ }
1287
+ } else {
1288
+ throw new PlayerConfigurationError('invalidEventName', eventName);
1289
+ }
1290
+ } else {
1291
+ throw new PlayerConfigurationError('invalidCallbackType', eventName);
1292
+ }
1293
+ } catch (e) {
1294
+ ExceptionPipe.trapError(e, storyId);
1295
+ }
1296
+ };
1297
+ &nbsp;
1298
+ /*
1299
+ Disable native or custom ImposiumPlayer events
1300
+ */
1301
+ public off = (eventName: string): void =&gt; {
1302
+ const { storyId, eventDelegateRefs } = this;
1303
+ &nbsp;
1304
+ try {
1305
+ if (keyExists(ImposiumPlayer.events, eventName)) {
1306
+ const event = eventDelegateRefs[eventName];
1307
+ &nbsp;
1308
+ // Remove node based event listener
1309
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (event.native) {
1310
+ this.node.removeEventListener(eventName, event.callback);
1311
+ }
1312
+ &nbsp;
1313
+ event.callback = null;
1314
+ } else {
1315
+ throw new PlayerConfigurationError('invalidEventName', eventName);
1316
+ }
1317
+ } catch (e) {
1318
+ ExceptionPipe.trapError(e, storyId);
1319
+ }
1320
+ };
1321
+ &nbsp;
1322
+ /*
1323
+ Play video
1324
+ */
1325
+ public play = (): void =&gt; {
1326
+ this.node.play().<span class="fstat-no" title="function not covered" >catch(() =&gt; {</span>
1327
+ <span class="cstat-no" title="statement not covered" > console.error('Error playing video');</span>
1328
+ });
1329
+ };
1330
+ &nbsp;
1331
+ /*
1332
+ Pause video
1333
+ */
1334
+ public pause = (): void =&gt; {
1335
+ this.node.pause();
1336
+ };
1337
+ &nbsp;
1338
+ /*
1339
+ TO DO: Clarify what this is with Greg
1340
+ */
1341
+ public getPlaybackState = (): string =&gt; {
1342
+ return this.node.paused ? 'paused' : 'playing';
1343
+ };
1344
+ &nbsp;
1345
+ /*
1346
+ Get current playback time (s)
1347
+ */
1348
+ public getPosition = (): number =&gt; {
1349
+ return this.node.currentTime;
1350
+ };
1351
+ &nbsp;
1352
+ /*
1353
+ Get duration of video (s)
1354
+ */
1355
+ public getDuration = (): number =&gt; {
1356
+ return this.node.duration;
1357
+ };
1358
+ &nbsp;
1359
+ /*
1360
+ Seek to a point in the video (s)
1361
+ */
1362
+ public seek = (seekTo: number): void =&gt; {
1363
+ const {
1364
+ node: { duration }
1365
+ } = this;
1366
+ &nbsp;
1367
+ if (!isNaN(duration)) {
1368
+ seekTo = Math.floor(seekTo);
1369
+ &nbsp;
1370
+ if (inRangeNumeric(seekTo, 0, duration)) {
1371
+ this.node.currentTime = seekTo;
1372
+ } else {
1373
+ ExceptionPipe.logWarning('playerFailure', 'invalidSeekTime');
1374
+ }
1375
+ } else {
1376
+ ExceptionPipe.logWarning('playerFailure', 'seekNotReady');
1377
+ }
1378
+ };
1379
+ &nbsp;
1380
+ /*
1381
+ Get mute state
1382
+ */
1383
+ public getMute = (): boolean =&gt; {
1384
+ return this.node.muted;
1385
+ };
1386
+ &nbsp;
1387
+ /*
1388
+ Set mute state
1389
+ */
1390
+ public setMute = (mute: boolean): void =&gt; {
1391
+ const {
1392
+ eventDelegateRefs: {
1393
+ muted: { callback }
1394
+ }
1395
+ } = this;
1396
+ &nbsp;
1397
+ this.node.muted = mute;
1398
+ &nbsp;
1399
+ if (callback) {
1400
+ callback();
1401
+ }
1402
+ };
1403
+ &nbsp;
1404
+ /*
1405
+ Get volume state
1406
+ */
1407
+ public getVolume = (): number =&gt; {
1408
+ return this.node.volume;
1409
+ };
1410
+ &nbsp;
1411
+ /*
1412
+ Set volume set, valid range: 0.0 -&gt; 1.0
1413
+ */
1414
+ public setVolume = (volume: number): void =&gt; {
1415
+ const { volumeMin, volumeMax } = settings;
1416
+ &nbsp;
1417
+ volume = Math.round(volume * 10) / 10;
1418
+ &nbsp;
1419
+ if (inRangeNumeric(volume, volumeMin, volumeMax)) {
1420
+ this.node.volume = volume;
1421
+ } else {
1422
+ ExceptionPipe.logWarning('playerFailure', 'invalidVolume');
1423
+ }
1424
+ };
1425
+ &nbsp;
1426
+ /*
1427
+ Get controls state
1428
+ */
1429
+ public getControls = (): boolean =&gt; {
1430
+ return this.node.controls;
1431
+ };
1432
+ &nbsp;
1433
+ /*
1434
+ Set controls state
1435
+ */
1436
+ public setControls = (controls: boolean): void =&gt; {
1437
+ const {
1438
+ eventDelegateRefs: { controlsset }
1439
+ } = this;
1440
+ &nbsp;
1441
+ this.node.controls = controls;
1442
+ &nbsp;
1443
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (controlsset) {
1444
+ controlsset.callback();
1445
+ }
1446
+ };
1447
+ &nbsp;
1448
+ /*
1449
+ Replay video
1450
+ */
1451
+ public replay = (): void =&gt; {
1452
+ this.pauseIfPlaying();
1453
+ this.node.currentTime = 0;
1454
+ this.play();
1455
+ };
1456
+ &nbsp;
1457
+ /*
1458
+ Remove all Imposium ImposiumPlayer scaffolding and break ref to video node
1459
+ */
1460
+ public remove = (): void =&gt; {
1461
+ const { eventDelegateRefs } = this;
1462
+ const { defaultConfig } = settings;
1463
+ &nbsp;
1464
+ this.pauseIfPlaying();
1465
+ &nbsp;
1466
+ for (const key of Object.keys(eventDelegateRefs)) {
1467
+ this.off(eventDelegateRefs[key]);
1468
+ }
1469
+ &nbsp;
1470
+ this.imposiumPlayerConfig = { ...defaultConfig };
1471
+ this.node = null;
1472
+ };
1473
+ &nbsp;
1474
+ /*
1475
+ Determine if browser can natively support media source extensions, if not
1476
+ use hls-js if possible, if hls-js is not supported do nothing.
1477
+ */
1478
+ private setupHls = (): void =&gt; {
1479
+ const {
1480
+ hlsSupportLevels: { NATIVE, HLSJS }
1481
+ } = ImposiumPlayer;
1482
+ &nbsp;
1483
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.node.canPlayType(ImposiumPlayer.STREAM_TYPE)) {
1484
+ <span class="cstat-no" title="statement not covered" > this.hlsSupport = NATIVE;</span>
1485
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof hls !== 'undefined') {
1486
+ <span class="cstat-no" title="statement not covered" > if (hls.isSupported()) {</span>
1487
+ <span class="cstat-no" title="statement not covered" > this.hlsSupport = HLSJS;</span>
1488
+ }
1489
+ }
1490
+ };
1491
+ &nbsp;
1492
+ /*
1493
+ If the user has set a quality override string, serve the video
1494
+ at the setting provided
1495
+ */
1496
+ private doQualityOverride = (videos: any, poster: string): void =&gt; {
1497
+ const { storyId } = this;
1498
+ const { qualityOverride } = this.imposiumPlayerConfig;
1499
+ &nbsp;
1500
+ try {
1501
+ if (videos.hasOwnProperty(qualityOverride)) {
1502
+ this.setPlayerData(videos[qualityOverride].url, true, poster);
1503
+ } else {
1504
+ throw new PlayerConfigurationError('badQualityOverride', null);
1505
+ }
1506
+ } catch (e) {
1507
+ ExceptionPipe.trapError(e, storyId);
1508
+ }
1509
+ };
1510
+ &nbsp;
1511
+ /*
1512
+ Determine if adaptive streaming can be used, if not do a manual bandwidth check
1513
+ to try and get a best guess of what quality setting to serve.
1514
+ */
1515
+ private doQualityAssessment = (videos: any, poster: string): void =&gt; {
1516
+ const { hlsSupport } = this;
1517
+ const {
1518
+ compressionLevels: { STREAM }
1519
+ } = ImposiumPlayer;
1520
+ const hasStream = videos.hasOwnProperty(STREAM);
1521
+ &nbsp;
1522
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (hasStream &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >hlsSupport) {</span>
1523
+ <span class="cstat-no" title="statement not covered" > this.setPlayerData(videos[STREAM].url, true, poster);</span>
1524
+ } else {
1525
+ const formatKeys = Object.keys(videos);
1526
+ &nbsp;
1527
+ if (formatKeys.length === 1) {
1528
+ this.setPlayerData(videos[formatKeys[0]].url, false, poster);
1529
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1530
+ <span class="cstat-no" title="statement not covered" > this.checkBandwidth(videos)</span>
1531
+ .<span class="fstat-no" title="function not covered" >then((f</span>ormat: string) =&gt; {
1532
+ <span class="cstat-no" title="statement not covered" > this.setPlayerData(videos[format].url, false, poster);</span>
1533
+ })
1534
+ .<span class="fstat-no" title="function not covered" >catch((l</span>owestQuality: string) =&gt; {
1535
+ <span class="cstat-no" title="statement not covered" > this.setPlayerData(videos[lowestQuality].url, false, poster);</span>
1536
+ });
1537
+ }
1538
+ }
1539
+ };
1540
+ &nbsp;
1541
+ /*
1542
+ Take a sample in mbs of the users bandwidth
1543
+ */
1544
+ private sampleBandwidth = (): Promise&lt;number&gt; =&gt; <span class="fstat-no" title="function not covered" >{</span>
1545
+ const url: string = <span class="cstat-no" title="statement not covered" >`${ImposiumPlayer.TEST_IMAGE}?bust=${Math.random()}`;</span>
1546
+ const config: AxiosRequestConfig = <span class="cstat-no" title="statement not covered" >{ responseType: 'blob', timeout: 1500 };</span>
1547
+ &nbsp;
1548
+ <span class="cstat-no" title="statement not covered" > return new <span class="fstat-no" title="function not covered" >Promise((r</span>esolve, reject) =&gt; {</span>
1549
+ const startTime: number = <span class="cstat-no" title="statement not covered" >new Date().getTime();</span>
1550
+ &nbsp;
1551
+ <span class="cstat-no" title="statement not covered" > axios</span>
1552
+ .get(url, config)
1553
+ .<span class="fstat-no" title="function not covered" >then((r</span>es: AxiosResponse) =&gt; {
1554
+ const {
1555
+ data: { size }
1556
+ } = <span class="cstat-no" title="statement not covered" >res;</span>
1557
+ <span class="cstat-no" title="statement not covered" > resolve(calculateMbps(startTime, size));</span>
1558
+ })
1559
+ .<span class="fstat-no" title="function not covered" >catch((e</span>: AxiosError) =&gt; {
1560
+ <span class="cstat-no" title="statement not covered" > reject(e);</span>
1561
+ });
1562
+ });
1563
+ };
1564
+ &nbsp;
1565
+ /*
1566
+ Adapt quality manually if HLS cannot be supported
1567
+ */
1568
+ private checkBandwidth = (<span class="fstat-no" title="function not covered" >videos: any): Promise&lt;string&gt; =&gt; {</span>
1569
+ const { BANDWIDTH_SAMPLES } = <span class="cstat-no" title="statement not covered" >ImposiumPlayer;</span>
1570
+ const testPromises: Promise&lt;number&gt;[] = <span class="cstat-no" title="statement not covered" >[];</span>
1571
+ const mp4FormatList: string[] = <span class="cstat-no" title="statement not covered" >Object.keys(videos).<span class="fstat-no" title="function not covered" >filter((f</span>) =&gt; <span class="cstat-no" title="statement not covered" >f !== 'm3u8')</span>;</span>
1572
+ &nbsp;
1573
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> &lt; BANDWIDTH_SAMPLES; i++) {</span>
1574
+ <span class="cstat-no" title="statement not covered" > testPromises.push(this.sampleBandwidth());</span>
1575
+ }
1576
+ &nbsp;
1577
+ <span class="cstat-no" title="statement not covered" > return new <span class="fstat-no" title="function not covered" >Promise((r</span>esolve, reject) =&gt; {</span>
1578
+ <span class="cstat-no" title="statement not covered" > Promise.all(testPromises)</span>
1579
+ .<span class="fstat-no" title="function not covered" >then((s</span>peeds: number[]) =&gt; {
1580
+ // Get sampled mbps value
1581
+ const <span class="cstat-no" title="statement not covered" >speed = calculateAverageMbps(speeds);</span>
1582
+ const scaleMap = <span class="cstat-no" title="statement not covered" >{};</span>
1583
+ &nbsp;
1584
+ // Calculate n pixels (downscaled) for each format and map
1585
+ <span class="cstat-no" title="statement not covered" > mp4FormatList.<span class="fstat-no" title="function not covered" >forEach((k</span>ey) =&gt; {</span>
1586
+ const { width, height } = <span class="cstat-no" title="statement not covered" >videos[key];</span>
1587
+ const scaledPixels = (<span class="cstat-no" title="statement not covered" >width * height) / 100000;</span>
1588
+ &nbsp;
1589
+ <span class="cstat-no" title="statement not covered" > scaleMap[scaledPixels] = key;</span>
1590
+ });
1591
+ &nbsp;
1592
+ // Convert scaled pixel values to arr of float vals and get closest val to mbps
1593
+ const bestFit = <span class="cstat-no" title="statement not covered" >Object.keys(scaleMap)</span>
1594
+ .<span class="fstat-no" title="function not covered" >map((k</span>ey) =&gt; <span class="cstat-no" title="statement not covered" >parseFloat(key))</span>
1595
+ .<span class="fstat-no" title="function not covered" >reduce((c</span>, p) =&gt; (<span class="cstat-no" title="statement not covered" >Math.abs(c - speed) &lt; Math.abs(p - speed) ? c : p))</span>;
1596
+ &nbsp;
1597
+ <span class="cstat-no" title="statement not covered" > resolve(scaleMap[bestFit]);</span>
1598
+ })
1599
+ .<span class="fstat-no" title="function not covered" >catch(() =&gt; {</span>
1600
+ <span class="cstat-no" title="statement not covered" > reject(mp4FormatList.slice(-1).pop());</span>
1601
+ });
1602
+ });
1603
+ };
1604
+ &nbsp;
1605
+ /*
1606
+ Set player data once video file was selected
1607
+ */
1608
+ private setPlayerData = (
1609
+ videoSrc: string,
1610
+ invokeHls: boolean,
1611
+ posterSrc: string = null
1612
+ ): void =&gt; {
1613
+ const { hlsSupport } = this;
1614
+ const {
1615
+ hlsSupportLevels: { HLSJS }
1616
+ } = ImposiumPlayer;
1617
+ &nbsp;
1618
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (invokeHls &amp;&amp; hlsSupport === HLSJS) {
1619
+ <span class="cstat-no" title="statement not covered" > if (this.hlsPlayer) {</span>
1620
+ <span class="cstat-no" title="statement not covered" > this.hlsPlayer.destroy();</span>
1621
+ }
1622
+ &nbsp;
1623
+ <span class="cstat-no" title="statement not covered" > this.hlsPlayer = new hls();</span>
1624
+ <span class="cstat-no" title="statement not covered" > this.hlsPlayer.attachMedia(this.node);</span>
1625
+ <span class="cstat-no" title="statement not covered" > this.hlsPlayer.loadSource(videoSrc);</span>
1626
+ } else {
1627
+ this.node.src = videoSrc;
1628
+ }
1629
+ &nbsp;
1630
+ if (posterSrc) {
1631
+ this.node.poster = posterSrc;
1632
+ }
1633
+ };
1634
+ &nbsp;
1635
+ /*
1636
+ Pause the media stream if playing
1637
+ */
1638
+ private pauseIfPlaying = (): void =&gt; {
1639
+ if (!this.node.paused) {
1640
+ this.node.pause();
1641
+ }
1642
+ };
1643
+ }
1644
+ &nbsp;</pre></td></tr></table></pre>
1645
+
1646
+ <div class='push'></div><!-- for sticky footer -->
1647
+ </div><!-- /wrapper -->
1648
+ <div class='footer quiet pad2 space-top1 center small'>
1649
+ Code coverage generated by
1650
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1651
+ at 2026-06-24T14:34:09.170Z
1652
+ </div>
1653
+ <script src="../../prettify.js"></script>
1654
+ <script>
1655
+ window.onload = function () {
1656
+ prettyPrint();
1657
+ };
1658
+ </script>
1659
+ <script src="../../sorter.js"></script>
1660
+ <script src="../../block-navigation.js"></script>
1661
+ </body>
1662
+ </html>
1663
+