etro 0.12.1 → 0.14.0

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 (145) hide show
  1. package/.github/dependabot.yml +6 -0
  2. package/.github/scripts/update-changelog.js +72 -0
  3. package/.github/workflows/dependabot-changelog.yml +57 -0
  4. package/.github/workflows/nodejs.yml +6 -2
  5. package/.github/workflows/shipjs-trigger.yml +2 -1
  6. package/.husky/pre-commit +1 -1
  7. package/AGENTS.md +106 -0
  8. package/CHANGELOG.md +46 -0
  9. package/CONTRIBUTING.md +5 -5
  10. package/README.md +8 -7
  11. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/base.css +224 -0
  12. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/block-navigation.js +87 -0
  13. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/favicon.png +0 -0
  14. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/index.html +161 -0
  15. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/prettify.css +1 -0
  16. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/prettify.js +2 -0
  17. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/sort-arrow-sprite.png +0 -0
  18. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/sorter.js +196 -0
  19. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/custom-array.ts.html +214 -0
  20. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/base.ts.html +481 -0
  21. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/brightness.ts.html +214 -0
  22. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/channels.ts.html +235 -0
  23. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/chroma-key.ts.html +331 -0
  24. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/contrast.ts.html +211 -0
  25. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/elliptical-mask.ts.html +310 -0
  26. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/gaussian-blur.ts.html +796 -0
  27. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/grayscale.ts.html +187 -0
  28. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/index.html +311 -0
  29. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/index.ts.html +154 -0
  30. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/pixelate.ts.html +259 -0
  31. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/shader.ts.html +1774 -0
  32. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/stack.ts.html +358 -0
  33. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/transform.ts.html +685 -0
  34. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/effect/visual.ts.html +148 -0
  35. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/etro.ts.html +163 -0
  36. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/event.ts.html +691 -0
  37. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/index.html +176 -0
  38. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/index.ts.html +109 -0
  39. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/audio-source.ts.html +835 -0
  40. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/audio.ts.html +241 -0
  41. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/base.ts.html +826 -0
  42. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/image.ts.html +181 -0
  43. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/index.html +236 -0
  44. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/index.ts.html +124 -0
  45. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/text.ts.html +658 -0
  46. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/video.ts.html +211 -0
  47. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/visual-source.ts.html +721 -0
  48. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/layer/visual.ts.html +760 -0
  49. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/movie/effects.ts.html +163 -0
  50. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/movie/index.html +161 -0
  51. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/movie/index.ts.html +88 -0
  52. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/movie/layers.ts.html +163 -0
  53. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/movie/movie.ts.html +3037 -0
  54. package/coverage/Chrome Headless 148.0.0.0 (Mac OS 10.15.7)/html/src/util.ts.html +1765 -0
  55. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/base.css +224 -0
  56. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/block-navigation.js +87 -0
  57. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/favicon.png +0 -0
  58. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/index.html +161 -0
  59. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/prettify.css +1 -0
  60. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/prettify.js +2 -0
  61. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/sort-arrow-sprite.png +0 -0
  62. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/sorter.js +196 -0
  63. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/custom-array.ts.html +214 -0
  64. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/base.ts.html +481 -0
  65. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/brightness.ts.html +214 -0
  66. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/channels.ts.html +235 -0
  67. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/chroma-key.ts.html +331 -0
  68. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/contrast.ts.html +211 -0
  69. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/elliptical-mask.ts.html +310 -0
  70. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/gaussian-blur.ts.html +796 -0
  71. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/grayscale.ts.html +187 -0
  72. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/index.html +311 -0
  73. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/index.ts.html +154 -0
  74. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/pixelate.ts.html +259 -0
  75. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/shader.ts.html +1774 -0
  76. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/stack.ts.html +358 -0
  77. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/transform.ts.html +685 -0
  78. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/visual.ts.html +148 -0
  79. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/etro.ts.html +163 -0
  80. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/event.ts.html +691 -0
  81. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/index.html +176 -0
  82. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/index.ts.html +109 -0
  83. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/audio-source.ts.html +835 -0
  84. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/audio.ts.html +241 -0
  85. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/base.ts.html +826 -0
  86. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/image.ts.html +181 -0
  87. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/index.html +236 -0
  88. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/index.ts.html +124 -0
  89. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/text.ts.html +658 -0
  90. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/video.ts.html +211 -0
  91. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/visual-source.ts.html +721 -0
  92. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/layer/visual.ts.html +760 -0
  93. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/movie/effects.ts.html +163 -0
  94. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/movie/index.html +161 -0
  95. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/movie/index.ts.html +88 -0
  96. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/movie/layers.ts.html +163 -0
  97. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/movie/movie.ts.html +3037 -0
  98. package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/util.ts.html +1765 -0
  99. package/dist/custom-array.d.ts +10 -10
  100. package/dist/effect/base.d.ts +61 -60
  101. package/dist/effect/brightness.d.ts +16 -16
  102. package/dist/effect/channels.d.ts +23 -23
  103. package/dist/effect/chroma-key.d.ts +23 -23
  104. package/dist/effect/contrast.d.ts +15 -15
  105. package/dist/effect/elliptical-mask.d.ts +31 -31
  106. package/dist/effect/gaussian-blur.d.ts +60 -60
  107. package/dist/effect/grayscale.d.ts +7 -7
  108. package/dist/effect/index.d.ts +16 -16
  109. package/dist/effect/pixelate.d.ts +18 -18
  110. package/dist/effect/shader.d.ts +109 -109
  111. package/dist/effect/stack.d.ts +27 -27
  112. package/dist/effect/transform.d.ts +73 -73
  113. package/dist/effect/visual.d.ts +17 -17
  114. package/dist/etro-cjs.js +3601 -3556
  115. package/dist/etro-iife.js +3602 -3557
  116. package/dist/etro.d.ts +7 -7
  117. package/dist/event.d.ts +40 -40
  118. package/dist/index.d.ts +6 -6
  119. package/dist/layer/audio-source.d.ts +28 -28
  120. package/dist/layer/audio.d.ts +27 -27
  121. package/dist/layer/base.d.ts +129 -128
  122. package/dist/layer/image.d.ts +20 -20
  123. package/dist/layer/index.d.ts +11 -11
  124. package/dist/layer/text.d.ts +78 -78
  125. package/dist/layer/video.d.ts +23 -23
  126. package/dist/layer/visual-source.d.ts +47 -47
  127. package/dist/layer/visual.d.ts +62 -62
  128. package/dist/movie/effects.d.ts +6 -6
  129. package/dist/movie/index.d.ts +1 -1
  130. package/dist/movie/layers.d.ts +6 -6
  131. package/dist/movie/movie.d.ts +280 -277
  132. package/dist/object.d.ts +19 -19
  133. package/dist/util.d.ts +128 -121
  134. package/karma.conf.js +70 -3
  135. package/package.json +14 -17
  136. package/ship.config.js +9 -11
  137. package/src/effect/base.ts +16 -0
  138. package/src/effect/shader.ts +1 -1
  139. package/src/layer/base.ts +19 -1
  140. package/src/movie/movie.ts +123 -8
  141. package/src/util.ts +116 -3
  142. package/tsconfig.json +3 -2
  143. package/.husky/commit-msg +0 -4
  144. package/.husky/prepare-commit-msg +0 -11
  145. package/commitlint.config.ts +0 -39
@@ -0,0 +1,1765 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/util.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> util.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">31.3% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>77/246</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">13.29% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>21/158</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">44.82% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>13/29</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">32.17% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>74/230</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 oninput="onInput()" 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></td><td class="line-coverage quiet"><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-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-yes">105x</span>
641
+ <span class="cline-any cline-yes">297x</span>
642
+ <span class="cline-any cline-yes">297x</span>
643
+ <span class="cline-any cline-yes">69x</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-yes">228x</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-yes">36x</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-neutral">&nbsp;</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-neutral">&nbsp;</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-yes">1x</span>
663
+ <span class="cline-any cline-yes">15x</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-yes">15x</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-yes">30x</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-yes">15x</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-yes">15x</span>
678
+ <span class="cline-any cline-yes">105x</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-yes">105x</span>
681
+ <span class="cline-any cline-yes">72x</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-yes">1x</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-yes">2925x</span>
691
+ <span class="cline-any cline-yes">585x</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-yes">2925x</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">2925x</span>
698
+ <span class="cline-any cline-yes">1170x</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-yes">2925x</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-yes">2925x</span>
705
+ <span class="cline-any cline-yes">2925x</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-yes">2929x</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-neutral">&nbsp;</span>
713
+ <span class="cline-any cline-yes">4x</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-yes">1x</span>
716
+ <span class="cline-any cline-yes">589x</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-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-yes">1x</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-neutral">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-no">&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-yes">1x</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-yes">1x</span>
751
+ <span class="cline-any cline-no">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-no">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-yes">1x</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-no">&nbsp;</span>
794
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-yes">1x</span>
838
+ <span class="cline-any cline-yes">2929x</span>
839
+ <span class="cline-any cline-yes">4x</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-yes">2925x</span>
844
+ <span class="cline-any cline-yes">2925x</span>
845
+ <span class="cline-any cline-yes">2925x</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</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">2925x</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-yes">2925x</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-yes">2925x</span>
856
+ <span class="cline-any cline-no">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-yes">2925x</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-yes">2925x</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-yes">1x</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-no">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-no">&nbsp;</span>
886
+ <span class="cline-any cline-no">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-no">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</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-yes">1x</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-neutral">&nbsp;</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</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">1x</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-yes">9x</span>
957
+ <span class="cline-any cline-yes">6x</span>
958
+ <span class="cline-any cline-yes">6x</span>
959
+ <span class="cline-any cline-yes">6x</span>
960
+ <span class="cline-any cline-yes">6x</span>
961
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
967
+ <span class="cline-any cline-yes">585x</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">1x</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-yes">1x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-yes">1x</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-yes">1x</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-yes">3x</span>
987
+ <span class="cline-any cline-yes">3x</span>
988
+ <span class="cline-any cline-yes">3x</span>
989
+ <span class="cline-any cline-yes">3x</span>
990
+ <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-yes">1x</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-yes">1x</span>
1028
+ <span class="cline-any cline-no">&nbsp;</span>
1029
+ <span class="cline-any cline-no">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-yes">1x</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-yes">1x</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-yes">1x</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-yes">1x</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-no">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-yes">1x</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-no">&nbsp;</span>
1110
+ <span class="cline-any cline-no">&nbsp;</span>
1111
+ <span class="cline-any cline-no">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-no">&nbsp;</span>
1116
+ <span class="cline-any cline-no">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-yes">1x</span>
1121
+ <span class="cline-any cline-no">&nbsp;</span>
1122
+ <span class="cline-any cline-no">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-no">&nbsp;</span>
1134
+ <span class="cline-any cline-no">&nbsp;</span>
1135
+ <span class="cline-any cline-no">&nbsp;</span>
1136
+ <span class="cline-any cline-no">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-neutral">&nbsp;</span>
1143
+ <span class="cline-any cline-no">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-yes">1x</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-no">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-no">&nbsp;</span>
1152
+ <span class="cline-any cline-no">&nbsp;</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-no">&nbsp;</span>
1155
+ <span class="cline-any cline-no">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-no">&nbsp;</span>
1159
+ <span class="cline-any cline-no">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-no">&nbsp;</span>
1162
+ <span class="cline-any cline-no">&nbsp;</span>
1163
+ <span class="cline-any cline-no">&nbsp;</span>
1164
+ <span class="cline-any cline-no">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-no">&nbsp;</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-no">&nbsp;</span>
1178
+ <span class="cline-any cline-no">&nbsp;</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-neutral">&nbsp;</span>
1181
+ <span class="cline-any cline-no">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-no">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1187
+ * @module util
1188
+ */
1189
+ &nbsp;
1190
+ import EtroObject from './object'
1191
+ import { Movie } from './movie'
1192
+ &nbsp;
1193
+ /**
1194
+ * Gets the first matching property descriptor in the prototype chain, or
1195
+ * undefined.
1196
+ * @param obj
1197
+ * @param name
1198
+ */
1199
+ function getPropertyDescriptor (obj: unknown, name: string | number | symbol): PropertyDescriptor {
1200
+ do {
1201
+ const propDesc = Object.getOwnPropertyDescriptor(obj, name)
1202
+ if (propDesc) {
1203
+ return propDesc
1204
+ }
1205
+ &nbsp;
1206
+ obj = Object.getPrototypeOf(obj)
1207
+ } while (obj)
1208
+ return undefined
1209
+ }
1210
+ &nbsp;
1211
+ /**
1212
+ * Merges `options` with `defaultOptions`, and then copies the properties with
1213
+ * the keys in `defaultOptions` from the merged object to `destObj`.
1214
+ *
1215
+ * @deprecated Each option should be copied individually, and the default value
1216
+ * should be set in the constructor. See
1217
+ * {@link https://github.com/etro-js/etro/issues/131} for more info.
1218
+ *
1219
+ * @return
1220
+ */
1221
+ // TODO: Make methods like getDefaultOptions private
1222
+ export function applyOptions (options: object, destObj: EtroObject): void { // eslint-disable-line @typescript-eslint/ban-types
1223
+ const defaultOptions = destObj.getDefaultOptions()
1224
+ &nbsp;
1225
+ // Validate; make sure `keys` doesn't have any extraneous items
1226
+ for (const option in options) {
1227
+ // eslint-disable-next-line no-prototype-builtins
1228
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!defaultOptions.hasOwnProperty(option)) {
1229
+ <span class="cstat-no" title="statement not covered" > throw new Error("Invalid option: '" + option + "'")</span>
1230
+ }
1231
+ }
1232
+ &nbsp;
1233
+ // Merge options and defaultOptions
1234
+ options = { ...defaultOptions, ...options }
1235
+ &nbsp;
1236
+ // Copy options
1237
+ for (const option in options) {
1238
+ const propDesc = getPropertyDescriptor(destObj, option)
1239
+ // Update the property as long as the property has not been set (unless if it has a setter)
1240
+ if (!propDesc || propDesc.set) {
1241
+ destObj[option] = options[option]
1242
+ }
1243
+ }
1244
+ }
1245
+ &nbsp;
1246
+ // This must be cleared at the start of each frame
1247
+ const valCache = new WeakMap()
1248
+ function cacheValue (element: EtroObject, path: string, value: unknown) {
1249
+ // Initiate movie cache
1250
+ if (!valCache.has(element.movie)) {
1251
+ valCache.set(element.movie, new WeakMap())
1252
+ }
1253
+ &nbsp;
1254
+ const movieCache = valCache.get(element.movie)
1255
+ &nbsp;
1256
+ // Initiate element cache
1257
+ if (!movieCache.has(element)) {
1258
+ movieCache.set(element, {})
1259
+ }
1260
+ &nbsp;
1261
+ const elementCache = movieCache.get(element)
1262
+ &nbsp;
1263
+ // Cache the value
1264
+ elementCache[path] = value
1265
+ return value
1266
+ }
1267
+ function hasCachedValue (element, path) {
1268
+ return valCache.has(element.movie) &amp;&amp;
1269
+ valCache.get(element.movie).has(element) &amp;&amp;
1270
+ path in valCache.get(element.movie).get(element)
1271
+ }
1272
+ function getCachedValue (element, path) {
1273
+ return valCache.get(element.movie).get(element)[path]
1274
+ }
1275
+ export function clearCachedValues (movie: Movie): void {
1276
+ valCache.delete(movie)
1277
+ }
1278
+ &nbsp;
1279
+ type Interpolate = &lt;U = number | object&gt;(
1280
+ startValue: U,
1281
+ endValue: U,
1282
+ percentProgress: number,
1283
+ interpolationKeys: string[]
1284
+ ) =&gt; U
1285
+ &nbsp;
1286
+ /**
1287
+ * A keyframe set.
1288
+ *
1289
+ * Usage:
1290
+ * ```js
1291
+ new etro.KeyFrame([time1, value1, interpolation1], [time2, value2])`
1292
+ * ```
1293
+ * TypeScript users need to specify the type of the value as a type parameter.
1294
+ */
1295
+ export class KeyFrame&lt;T&gt; {
1296
+ value: (number|T|Interpolate)[][]
1297
+ /** Keys to interpolate, or all keys if undefined */
1298
+ interpolationKeys: string[]
1299
+ &nbsp;
1300
+ <span class="fstat-no" title="function not covered" > constructor (<span class="cstat-no" title="statement not covered" >.</span>..value: (number|T)[][])</span> {
1301
+ <span class="cstat-no" title="statement not covered" > this.value = value</span>
1302
+ <span class="cstat-no" title="statement not covered" > this.interpolationKeys = []</span>
1303
+ }
1304
+ &nbsp;
1305
+ <span class="fstat-no" title="function not covered" > withKeys </span>(keys: string[]): KeyFrame&lt;T&gt; {
1306
+ <span class="cstat-no" title="statement not covered" > this.interpolationKeys = keys</span>
1307
+ <span class="cstat-no" title="statement not covered" > return this</span>
1308
+ }
1309
+ &nbsp;
1310
+ <span class="fstat-no" title="function not covered" > toJSON </span>(): object {
1311
+ <span class="cstat-no" title="statement not covered" > return {</span>
1312
+ type: 'KeyFrame',
1313
+ value: this.value.map(<span class="fstat-no" title="function not covered" >point </span>=&gt; {
1314
+ const out: any[] = <span class="cstat-no" title="statement not covered" >[point[0], serializeProperty(point[1])]</span>
1315
+ <span class="cstat-no" title="statement not covered" > if (point.length === 3) {</span>
1316
+ const interp = <span class="cstat-no" title="statement not covered" >point[2] as Interpolate</span>
1317
+ <span class="cstat-no" title="statement not covered" > if (interp === linearInterp) {</span>
1318
+ <span class="cstat-no" title="statement not covered" > out.push('linear')</span>
1319
+ } else <span class="cstat-no" title="statement not covered" >if (interp === cosineInterp) {</span>
1320
+ <span class="cstat-no" title="statement not covered" > out.push('cosine')</span>
1321
+ }
1322
+ }
1323
+ <span class="cstat-no" title="statement not covered" > return out</span>
1324
+ }),
1325
+ interpolationKeys: this.interpolationKeys
1326
+ }
1327
+ }
1328
+ &nbsp;
1329
+ <span class="fstat-no" title="function not covered" > evaluate </span>(time: number): T {
1330
+ <span class="cstat-no" title="statement not covered" > if (this.value.length === 0) {</span>
1331
+ <span class="cstat-no" title="statement not covered" > throw new Error('Empty keyframe')</span>
1332
+ }
1333
+ &nbsp;
1334
+ <span class="cstat-no" title="statement not covered" > if (time === undefined) {</span>
1335
+ <span class="cstat-no" title="statement not covered" > throw new Error('|time| is undefined or null')</span>
1336
+ }
1337
+ &nbsp;
1338
+ const firstTime: number = <span class="cstat-no" title="statement not covered" >this.value[0][0] as number</span>
1339
+ <span class="cstat-no" title="statement not covered" > if (time &lt; firstTime) {</span>
1340
+ <span class="cstat-no" title="statement not covered" > throw new Error('No keyframe point before |time|')</span>
1341
+ }
1342
+ &nbsp;
1343
+ // I think reduce are slow to do per-frame (or more)?
1344
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; this.value.length; i++) {</span>
1345
+ const startTime = <span class="cstat-no" title="statement not covered" >this.value[i][0] as number</span>
1346
+ const startValue = <span class="cstat-no" title="statement not covered" >this.value[i][1] as T</span>
1347
+ const interpolate =
1348
+ <span class="cstat-no" title="statement not covered" > this.value[i].length === 3</span>
1349
+ ? (this.value[i][2] as Interpolate)
1350
+ : linearInterp
1351
+ <span class="cstat-no" title="statement not covered" > if (i + 1 &lt; this.value.length) {</span>
1352
+ const endTime = <span class="cstat-no" title="statement not covered" >this.value[i + 1][0] as number</span>
1353
+ const endValue = <span class="cstat-no" title="statement not covered" >this.value[i + 1][1] as T</span>
1354
+ <span class="cstat-no" title="statement not covered" > if (startTime &lt;= time &amp;&amp; time &lt; endTime) {</span>
1355
+ // No need for endValue if it is flat interpolation
1356
+ // TODO: support custom interpolation for 'other' types?
1357
+ <span class="cstat-no" title="statement not covered" > if (!(typeof startValue === 'number' || typeof endValue === 'object')) {</span>
1358
+ <span class="cstat-no" title="statement not covered" > return startValue</span>
1359
+ } else <span class="cstat-no" title="statement not covered" >if (typeof startValue !== typeof endValue) {</span>
1360
+ <span class="cstat-no" title="statement not covered" > throw new Error('Type mismatch in keyframe values')</span>
1361
+ } else {
1362
+ // Interpolate
1363
+ const percentProgress = <span class="cstat-no" title="statement not covered" >(time - startTime) / (endTime - startTime)</span>
1364
+ <span class="cstat-no" title="statement not covered" > return interpolate(</span>
1365
+ startValue as unknown as (number | object), // eslint-disable-line @typescript-eslint/ban-types
1366
+ endValue as unknown as (number | object), // eslint-disable-line @typescript-eslint/ban-types
1367
+ percentProgress, this.interpolationKeys
1368
+ ) as unknown as T
1369
+ }
1370
+ }
1371
+ } else {
1372
+ // Repeat last value forever
1373
+ <span class="cstat-no" title="statement not covered" > return startValue</span>
1374
+ }
1375
+ }
1376
+ }
1377
+ }
1378
+ &nbsp;
1379
+ /** A dynamic property. Supports simple values, keyframes and functions */
1380
+ export type Dynamic&lt;T&gt; = T | KeyFrame&lt;T&gt; | ((element: EtroObject, time: number) =&gt; T)
1381
+ &nbsp;
1382
+ /**
1383
+ * Computes a property.
1384
+ *
1385
+ * @param element - the etro object to which the property belongs to
1386
+ * @param path - the dot-separated path to a property on `element`
1387
+ * @param time - time to calculate keyframes for, if necessary
1388
+ *
1389
+ * Note that only values used in keyframes that are numbers or objects
1390
+ * (including arrays) are interpolated. All other values are taken sequentially
1391
+ * with no interpolation. JavaScript will convert parsed colors, if created
1392
+ * correctly, to their string representations when assigned to a
1393
+ * CanvasRenderingContext2D property.
1394
+ */
1395
+ // TODO: Is this function efficient?
1396
+ // TODO: Update doc @params to allow for keyframes
1397
+ export function val (element: EtroObject, path: string, time: number): any { // eslint-disable-line @typescript-eslint/no-explicit-any
1398
+ if (hasCachedValue(element, path)) {
1399
+ return getCachedValue(element, path)
1400
+ }
1401
+ &nbsp;
1402
+ // Get property of element at path
1403
+ const pathParts = path.split('.')
1404
+ let property = element[pathParts.shift()]
1405
+ while (pathParts.length &gt; 0) {
1406
+ <span class="cstat-no" title="statement not covered" > property = property[pathParts.shift()]</span>
1407
+ }
1408
+ &nbsp;
1409
+ // Property filter function
1410
+ const process = element.propertyFilters[path]
1411
+ &nbsp;
1412
+ let value
1413
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (property instanceof KeyFrame) {
1414
+ <span class="cstat-no" title="statement not covered" > value = property.evaluate(time)</span>
1415
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof property === 'function') {
1416
+ <span class="cstat-no" title="statement not covered" > value = property(element, time)</span>
1417
+ } else {
1418
+ // Simple value
1419
+ value = property
1420
+ }
1421
+ &nbsp;
1422
+ return cacheValue(element, path, process ? <span class="branch-0 cbranch-no" title="branch not covered" >process.call(element, value) </span>: value)
1423
+ }
1424
+ &nbsp;
1425
+ /* export function floorInterp(x1, x2, t, objectKeys) {
1426
+ // https://stackoverflow.com/a/25835337/3783155 (TODO: preserve getters/setters, etc?)
1427
+ return !objectKeys ? x1 : objectKeys.reduce((a, x) =&gt; {
1428
+ if (x1.hasOwnProperty(x)) a[x] = o[x]; // ignore x2
1429
+ return a;
1430
+ }, Object.create(Object.getPrototypeOf(x1)));
1431
+ } */
1432
+ &nbsp;
1433
+ export function <span class="fstat-no" title="function not covered" >linearInterp </span>(x1: number | object, x2: number | object, t: number, objectKeys?: string[]): number | object { // eslint-disable-line @typescript-eslint/ban-types
1434
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 !== typeof x2) {</span>
1435
+ <span class="cstat-no" title="statement not covered" > throw new Error('Type mismatch')</span>
1436
+ }
1437
+ &nbsp;
1438
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 !== 'number' &amp;&amp; typeof x1 !== 'object') {</span>
1439
+ // Flat interpolation (floor)
1440
+ <span class="cstat-no" title="statement not covered" > return x1</span>
1441
+ }
1442
+ &nbsp;
1443
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 === 'object') { // to work with objects (including arrays)</span>
1444
+ // TODO: make this code DRY
1445
+ <span class="cstat-no" title="statement not covered" > if (Object.getPrototypeOf(x1) !== Object.getPrototypeOf(x2)) {</span>
1446
+ <span class="cstat-no" title="statement not covered" > throw new Error('Prototype mismatch')</span>
1447
+ }
1448
+ &nbsp;
1449
+ // Preserve prototype of objects
1450
+ const int = <span class="cstat-no" title="statement not covered" >Object.create(Object.getPrototypeOf(x1))</span>
1451
+ // Take the intersection of properties
1452
+ const keys = <span class="cstat-no" title="statement not covered" >Object.keys(x1) || objectKeys </span>// TODO: reverse operands
1453
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; keys.length; i++) {</span>
1454
+ const key = <span class="cstat-no" title="statement not covered" >keys[i]</span>
1455
+ // eslint-disable-next-line no-prototype-builtins
1456
+ <span class="cstat-no" title="statement not covered" > if (!x1.hasOwnProperty(key) || !x2.hasOwnProperty(key)) {</span>
1457
+ <span class="cstat-no" title="statement not covered" > continue</span>
1458
+ }
1459
+ &nbsp;
1460
+ <span class="cstat-no" title="statement not covered" > int[key] = linearInterp(x1[key], x2[key], t)</span>
1461
+ }
1462
+ <span class="cstat-no" title="statement not covered" > return int</span>
1463
+ }
1464
+ <span class="cstat-no" title="statement not covered" > return (1 - t) * x1 + t * (x2 as number)</span>
1465
+ }
1466
+ &nbsp;
1467
+ export function <span class="fstat-no" title="function not covered" >cosineInterp </span>(x1: number | object, x2: number | object, t: number, objectKeys?: string[]): number | object { // eslint-disable-line @typescript-eslint/ban-types
1468
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 !== typeof x2) {</span>
1469
+ <span class="cstat-no" title="statement not covered" > throw new Error('Type mismatch')</span>
1470
+ }
1471
+ &nbsp;
1472
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 !== 'number' &amp;&amp; typeof x1 !== 'object') {</span>
1473
+ // Flat interpolation (floor)
1474
+ <span class="cstat-no" title="statement not covered" > return x1</span>
1475
+ }
1476
+ &nbsp;
1477
+ <span class="cstat-no" title="statement not covered" > if (typeof x1 === 'object' &amp;&amp; typeof x2 === 'object') { // to work with objects (including arrays)</span>
1478
+ <span class="cstat-no" title="statement not covered" > if (Object.getPrototypeOf(x1) !== Object.getPrototypeOf(x2)) {</span>
1479
+ <span class="cstat-no" title="statement not covered" > throw new Error('Prototype mismatch')</span>
1480
+ }
1481
+ &nbsp;
1482
+ // Preserve prototype of objects
1483
+ const int = <span class="cstat-no" title="statement not covered" >Object.create(Object.getPrototypeOf(x1))</span>
1484
+ // Take the intersection of properties
1485
+ const keys = <span class="cstat-no" title="statement not covered" >Object.keys(x1) || objectKeys</span>
1486
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; keys.length; i++) {</span>
1487
+ const key = <span class="cstat-no" title="statement not covered" >keys[i]</span>
1488
+ // eslint-disable-next-line no-prototype-builtins
1489
+ <span class="cstat-no" title="statement not covered" > if (!x1.hasOwnProperty(key) || !x2.hasOwnProperty(key)) {</span>
1490
+ <span class="cstat-no" title="statement not covered" > continue</span>
1491
+ }
1492
+ &nbsp;
1493
+ <span class="cstat-no" title="statement not covered" > int[key] = cosineInterp(x1[key], x2[key], t)</span>
1494
+ }
1495
+ <span class="cstat-no" title="statement not covered" > return int</span>
1496
+ }
1497
+ const cos = <span class="cstat-no" title="statement not covered" >Math.cos(Math.PI / 2 * t)</span>
1498
+ <span class="cstat-no" title="statement not covered" > return cos * (x1 as number) + (1 - cos) * (x2 as number)</span>
1499
+ }
1500
+ &nbsp;
1501
+ /**
1502
+ * An RGBA color, for proper interpolation and shader effects
1503
+ */
1504
+ export class Color {
1505
+ r: number
1506
+ g: number
1507
+ b: number
1508
+ a: number
1509
+ &nbsp;
1510
+ /**
1511
+ * @param r
1512
+ * @param g
1513
+ * @param b
1514
+ * @param a
1515
+ */
1516
+ constructor (r: number, g: number, b: number, a = 1.0) {
1517
+ this.r = r
1518
+ this.g = g
1519
+ this.b = b
1520
+ this.a = a
1521
+ }
1522
+ &nbsp;
1523
+ /**
1524
+ * Converts to a CSS color
1525
+ */
1526
+ toString (): string {
1527
+ return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`
1528
+ }
1529
+ &nbsp;
1530
+ <span class="fstat-no" title="function not covered" > toJSON </span>(): object {
1531
+ <span class="cstat-no" title="statement not covered" > return { type: 'Color', r: this.r, g: this.g, b: this.b, a: this.a }</span>
1532
+ }
1533
+ }
1534
+ &nbsp;
1535
+ const parseColorCanvas = document.createElement('canvas')
1536
+ parseColorCanvas.width = parseColorCanvas.height = 1
1537
+ const parseColorCtx = parseColorCanvas.getContext('2d')
1538
+ /**
1539
+ * Converts a CSS color string to a {@link Color} object representation.
1540
+ * @param str
1541
+ * @return the parsed color
1542
+ */
1543
+ export function parseColor (str: string): Color {
1544
+ // TODO - find a better way to deal with the fact that invalid values of "col"
1545
+ // are ignored.
1546
+ parseColorCtx.clearRect(0, 0, 1, 1)
1547
+ parseColorCtx.fillStyle = str
1548
+ parseColorCtx.fillRect(0, 0, 1, 1)
1549
+ const data = parseColorCtx.getImageData(0, 0, 1, 1).data
1550
+ return new Color(data[0], data[1], data[2], data[3] / 255)
1551
+ }
1552
+ &nbsp;
1553
+ /**
1554
+ * A font, for proper interpolation
1555
+ */
1556
+ export class Font {
1557
+ size: number
1558
+ sizeUnit: string
1559
+ family: string
1560
+ style: string
1561
+ variant: string
1562
+ weight: string
1563
+ stretch: string
1564
+ lineHeight: string
1565
+ &nbsp;
1566
+ /**
1567
+ * @param size
1568
+ * @param family
1569
+ * @param sizeUnit
1570
+ */
1571
+ <span class="fstat-no" title="function not covered" > constructor (s</span>ize: number, sizeUnit: string, family: string, <span class="cstat-no" title="statement not covered" >style = 'normal', <span class="cstat-no" title="statement not covered" >v</span>ariant = 'normal',</span>
1572
+ <span class="cstat-no" title="statement not covered" > weight = 'normal', <span class="cstat-no" title="statement not covered" >s</span>tretch = 'normal', <span class="cstat-no" title="statement not covered" >l</span>ineHeight = 'normal') {</span>
1573
+ <span class="cstat-no" title="statement not covered" > this.size = size</span>
1574
+ <span class="cstat-no" title="statement not covered" > this.sizeUnit = sizeUnit</span>
1575
+ <span class="cstat-no" title="statement not covered" > this.family = family</span>
1576
+ <span class="cstat-no" title="statement not covered" > this.style = style</span>
1577
+ <span class="cstat-no" title="statement not covered" > this.variant = variant</span>
1578
+ <span class="cstat-no" title="statement not covered" > this.weight = weight</span>
1579
+ <span class="cstat-no" title="statement not covered" > this.stretch = stretch</span>
1580
+ <span class="cstat-no" title="statement not covered" > this.lineHeight = lineHeight</span>
1581
+ }
1582
+ &nbsp;
1583
+ /**
1584
+ * Converts to CSS font syntax
1585
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font
1586
+ */
1587
+ <span class="fstat-no" title="function not covered" > toString </span>(): string {
1588
+ let s = <span class="cstat-no" title="statement not covered" >''</span>
1589
+ <span class="cstat-no" title="statement not covered" > if (this.style !== 'normal') {</span>
1590
+ <span class="cstat-no" title="statement not covered" > s += this.style + ' '</span>
1591
+ }
1592
+ <span class="cstat-no" title="statement not covered" > if (this.variant !== 'normal') {</span>
1593
+ <span class="cstat-no" title="statement not covered" > s += this.variant + ' '</span>
1594
+ }
1595
+ <span class="cstat-no" title="statement not covered" > if (this.weight !== 'normal') {</span>
1596
+ <span class="cstat-no" title="statement not covered" > s += this.weight + ' '</span>
1597
+ }
1598
+ <span class="cstat-no" title="statement not covered" > if (this.stretch !== 'normal') {</span>
1599
+ <span class="cstat-no" title="statement not covered" > s += this.stretch + ' '</span>
1600
+ }
1601
+ <span class="cstat-no" title="statement not covered" > s += `${this.size}${this.sizeUnit} `</span>
1602
+ <span class="cstat-no" title="statement not covered" > if (this.lineHeight !== 'normal') {</span>
1603
+ <span class="cstat-no" title="statement not covered" > s += this.lineHeight + ' '</span>
1604
+ }
1605
+ <span class="cstat-no" title="statement not covered" > s += this.family</span>
1606
+ &nbsp;
1607
+ <span class="cstat-no" title="statement not covered" > return s</span>
1608
+ }
1609
+ &nbsp;
1610
+ <span class="fstat-no" title="function not covered" > toJSON </span>(): object {
1611
+ <span class="cstat-no" title="statement not covered" > return {</span>
1612
+ type: 'Font',
1613
+ size: this.size,
1614
+ sizeUnit: this.sizeUnit,
1615
+ family: this.family,
1616
+ style: this.style,
1617
+ variant: this.variant,
1618
+ weight: this.weight,
1619
+ stretch: this.stretch,
1620
+ lineHeight: this.lineHeight
1621
+ }
1622
+ }
1623
+ }
1624
+ &nbsp;
1625
+ const parseFontEl = document.createElement('div')
1626
+ /**
1627
+ * Converts a CSS font string to a {@link Font} object
1628
+ * representation.
1629
+ * @param str
1630
+ * @return the parsed font
1631
+ */
1632
+ export function <span class="fstat-no" title="function not covered" >parseFont </span>(str: string): Font {
1633
+ // Assign css string to html element
1634
+ <span class="cstat-no" title="statement not covered" > parseFontEl.setAttribute('style', `font: ${str}`)</span>
1635
+ const {
1636
+ fontSize<span class="cstat-no" title="statement not covered" >, f</span>ontFamily<span class="cstat-no" title="statement not covered" >, f</span>ontStyle<span class="cstat-no" title="statement not covered" >, f</span>ontVariant<span class="cstat-no" title="statement not covered" >, f</span>ontWeight<span class="cstat-no" title="statement not covered" >, l</span>ineHeight<span class="cstat-no" title="statement not covered" ></span>
1637
+ } = <span class="cstat-no" title="statement not covered" >parseFontEl.style</span>
1638
+ <span class="cstat-no" title="statement not covered" > parseFontEl.removeAttribute('style')</span>
1639
+ &nbsp;
1640
+ const size = <span class="cstat-no" title="statement not covered" >parseFloat(fontSize)</span>
1641
+ const sizeUnit = <span class="cstat-no" title="statement not covered" >fontSize.substring(size.toString().length)</span>
1642
+ <span class="cstat-no" title="statement not covered" > return new Font(size, sizeUnit, fontFamily, fontStyle, fontVariant, fontWeight, lineHeight)</span>
1643
+ }
1644
+ &nbsp;
1645
+ /**
1646
+ * @param mapper
1647
+ * @param canvas
1648
+ * @param ctx
1649
+ * @param x
1650
+ * @param y
1651
+ * @param width
1652
+ * @param height
1653
+ * @param flush
1654
+ * @deprecated Use {@link effect.Shader} instead
1655
+ */
1656
+ export function <span class="fstat-no" title="function not covered" >mapPixels </span>(
1657
+ mapper: (pixels: Uint8ClampedArray, i: number) =&gt; void,
1658
+ canvas: HTMLCanvasElement,
1659
+ ctx: CanvasRenderingContext2D,
1660
+ x: number,
1661
+ y: number,
1662
+ width: number,
1663
+ height: number,
1664
+ <span class="cstat-no" title="statement not covered" > flush = true</span>
1665
+ ): void {
1666
+ <span class="cstat-no" title="statement not covered" > x = x || 0</span>
1667
+ <span class="cstat-no" title="statement not covered" > y = y || 0</span>
1668
+ <span class="cstat-no" title="statement not covered" > width = width || canvas.width</span>
1669
+ <span class="cstat-no" title="statement not covered" > height = height || canvas.height</span>
1670
+ const frame = <span class="cstat-no" title="statement not covered" >ctx.getImageData(x, y, width, height)</span>
1671
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0,</span> l = <span class="cstat-no" title="statement not covered" >frame.data.length;</span> i &lt; l; i += 4) {</span>
1672
+ <span class="cstat-no" title="statement not covered" > mapper(frame.data, i)</span>
1673
+ }
1674
+ &nbsp;
1675
+ <span class="cstat-no" title="statement not covered" > if (flush) {</span>
1676
+ <span class="cstat-no" title="statement not covered" > ctx.putImageData(frame, x, y)</span>
1677
+ }
1678
+ }
1679
+ &nbsp;
1680
+ export function <span class="fstat-no" title="function not covered" >serializeProperty </span>(val: any): any {
1681
+ <span class="cstat-no" title="statement not covered" > if (val &amp;&amp; typeof val === 'object') {</span>
1682
+ <span class="cstat-no" title="statement not covered" > if (typeof val.toJSON === 'function') {</span>
1683
+ <span class="cstat-no" title="statement not covered" > return val.toJSON()</span>
1684
+ }
1685
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(val)) {</span>
1686
+ <span class="cstat-no" title="statement not covered" > return val.map(serializeProperty)</span>
1687
+ }
1688
+ <span class="cstat-no" title="statement not covered" > if (val instanceof HTMLImageElement || val instanceof HTMLVideoElement || val instanceof HTMLAudioElement) {</span>
1689
+ // It's a DOM element serving as a media source
1690
+ <span class="cstat-no" title="statement not covered" > return val.getAttribute('src') || val.src</span>
1691
+ }
1692
+ // plain object
1693
+ <span class="cstat-no" title="statement not covered" > if (val.constructor === Object) {</span>
1694
+ const out: any = <span class="cstat-no" title="statement not covered" >{}</span>
1695
+ <span class="cstat-no" title="statement not covered" > for (const k in val) {</span>
1696
+ <span class="cstat-no" title="statement not covered" > if (Object.prototype.hasOwnProperty.call(val, k)) {</span>
1697
+ <span class="cstat-no" title="statement not covered" > out[k] = serializeProperty(val[k])</span>
1698
+ }
1699
+ }
1700
+ <span class="cstat-no" title="statement not covered" > return out</span>
1701
+ }
1702
+ }
1703
+ <span class="cstat-no" title="statement not covered" > return val</span>
1704
+ }
1705
+ &nbsp;
1706
+ export function <span class="fstat-no" title="function not covered" >deserializeProperty </span>(val: any): any {
1707
+ <span class="cstat-no" title="statement not covered" > if (val &amp;&amp; typeof val === 'object') {</span>
1708
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(val)) {</span>
1709
+ <span class="cstat-no" title="statement not covered" > return val.map(deserializeProperty)</span>
1710
+ }
1711
+ <span class="cstat-no" title="statement not covered" > if (val.type === 'Color') {</span>
1712
+ <span class="cstat-no" title="statement not covered" > return new Color(val.r, val.g, val.b, val.a)</span>
1713
+ }
1714
+ <span class="cstat-no" title="statement not covered" > if (val.type === 'Font') {</span>
1715
+ <span class="cstat-no" title="statement not covered" > return new Font(val.size, val.sizeUnit, val.family, val.style, val.variant, val.weight, val.stretch, val.lineHeight)</span>
1716
+ }
1717
+ <span class="cstat-no" title="statement not covered" > if (val.type === 'KeyFrame') {</span>
1718
+ const kf = <span class="cstat-no" title="statement not covered" >new KeyFrame()</span>
1719
+ <span class="cstat-no" title="statement not covered" > kf.value = val.value.map(<span class="fstat-no" title="function not covered" >(p</span>oint: any[]) =&gt; {</span>
1720
+ const out: any[] = <span class="cstat-no" title="statement not covered" >[point[0], deserializeProperty(point[1])]</span>
1721
+ <span class="cstat-no" title="statement not covered" > if (point.length === 3) {</span>
1722
+ <span class="cstat-no" title="statement not covered" > if (point[2] === 'linear') {</span>
1723
+ <span class="cstat-no" title="statement not covered" > out.push(linearInterp)</span>
1724
+ } else <span class="cstat-no" title="statement not covered" >if (point[2] === 'cosine') {</span>
1725
+ <span class="cstat-no" title="statement not covered" > out.push(cosineInterp)</span>
1726
+ }
1727
+ }
1728
+ <span class="cstat-no" title="statement not covered" > return out</span>
1729
+ })
1730
+ <span class="cstat-no" title="statement not covered" > kf.interpolationKeys = val.interpolationKeys</span>
1731
+ <span class="cstat-no" title="statement not covered" > return kf</span>
1732
+ }
1733
+ // plain object
1734
+ <span class="cstat-no" title="statement not covered" > if (val.constructor === Object) {</span>
1735
+ const out: any = <span class="cstat-no" title="statement not covered" >{}</span>
1736
+ <span class="cstat-no" title="statement not covered" > for (const k in val) {</span>
1737
+ <span class="cstat-no" title="statement not covered" > if (Object.prototype.hasOwnProperty.call(val, k)) {</span>
1738
+ <span class="cstat-no" title="statement not covered" > out[k] = deserializeProperty(val[k])</span>
1739
+ }
1740
+ }
1741
+ <span class="cstat-no" title="statement not covered" > return out</span>
1742
+ }
1743
+ }
1744
+ <span class="cstat-no" title="statement not covered" > return val</span>
1745
+ }
1746
+ &nbsp;</pre></td></tr></table></pre>
1747
+
1748
+ <div class='push'></div><!-- for sticky footer -->
1749
+ </div><!-- /wrapper -->
1750
+ <div class='footer quiet pad2 space-top1 center small'>
1751
+ Code coverage generated by
1752
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1753
+ at 2026-06-06T05:34:26.449Z
1754
+ </div>
1755
+ <script src="../prettify.js"></script>
1756
+ <script>
1757
+ window.onload = function () {
1758
+ prettyPrint();
1759
+ };
1760
+ </script>
1761
+ <script src="../sorter.js"></script>
1762
+ <script src="../block-navigation.js"></script>
1763
+ </body>
1764
+ </html>
1765
+