@claude-flow/memory 3.0.0-alpha.2 → 3.0.0-alpha.8

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 (164) hide show
  1. package/README.md +356 -18
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +215 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agent-memory-scope.test.d.ts +8 -0
  7. package/dist/agent-memory-scope.test.d.ts.map +1 -0
  8. package/dist/agent-memory-scope.test.js +463 -0
  9. package/dist/agent-memory-scope.test.js.map +1 -0
  10. package/dist/agentdb-adapter.d.ts +22 -3
  11. package/dist/agentdb-adapter.d.ts.map +1 -1
  12. package/dist/agentdb-adapter.js +135 -8
  13. package/dist/agentdb-adapter.js.map +1 -1
  14. package/dist/auto-memory-bridge.d.ts +226 -0
  15. package/dist/auto-memory-bridge.d.ts.map +1 -0
  16. package/dist/auto-memory-bridge.js +709 -0
  17. package/dist/auto-memory-bridge.js.map +1 -0
  18. package/dist/auto-memory-bridge.test.d.ts +8 -0
  19. package/dist/auto-memory-bridge.test.d.ts.map +1 -0
  20. package/dist/auto-memory-bridge.test.js +754 -0
  21. package/dist/auto-memory-bridge.test.js.map +1 -0
  22. package/dist/benchmark.test.d.ts +2 -0
  23. package/dist/benchmark.test.d.ts.map +1 -0
  24. package/dist/benchmark.test.js +277 -0
  25. package/dist/benchmark.test.js.map +1 -0
  26. package/dist/hybrid-backend.d.ts.map +1 -1
  27. package/dist/hybrid-backend.js +29 -4
  28. package/dist/hybrid-backend.js.map +1 -1
  29. package/dist/index.d.ts +8 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +8 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/learning-bridge.d.ts +137 -0
  34. package/dist/learning-bridge.d.ts.map +1 -0
  35. package/dist/learning-bridge.js +335 -0
  36. package/dist/learning-bridge.js.map +1 -0
  37. package/dist/learning-bridge.test.d.ts +8 -0
  38. package/dist/learning-bridge.test.d.ts.map +1 -0
  39. package/dist/learning-bridge.test.js +578 -0
  40. package/dist/learning-bridge.test.js.map +1 -0
  41. package/dist/memory-graph.d.ts +100 -0
  42. package/dist/memory-graph.d.ts.map +1 -0
  43. package/dist/memory-graph.js +333 -0
  44. package/dist/memory-graph.js.map +1 -0
  45. package/dist/memory-graph.test.d.ts +8 -0
  46. package/dist/memory-graph.test.d.ts.map +1 -0
  47. package/dist/memory-graph.test.js +609 -0
  48. package/dist/memory-graph.test.js.map +1 -0
  49. package/dist/sqlite-backend.js +3 -3
  50. package/dist/sqljs-backend.d.ts.map +1 -1
  51. package/dist/sqljs-backend.js +5 -2
  52. package/dist/sqljs-backend.js.map +1 -1
  53. package/dist/types.d.ts +3 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +15 -4
  56. package/.agentic-flow/intelligence.json +0 -16
  57. package/__tests__/coverage/base.css +0 -224
  58. package/__tests__/coverage/block-navigation.js +0 -87
  59. package/__tests__/coverage/coverage-final.json +0 -19
  60. package/__tests__/coverage/favicon.png +0 -0
  61. package/__tests__/coverage/index.html +0 -206
  62. package/__tests__/coverage/lcov-report/base.css +0 -224
  63. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  64. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  65. package/__tests__/coverage/lcov-report/index.html +0 -206
  66. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  67. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  68. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  69. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  70. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  71. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  72. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  73. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  74. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  75. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  76. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  77. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  78. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  79. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  80. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  81. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  82. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  83. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  84. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  85. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  86. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  87. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  88. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  89. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  90. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  91. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  92. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  93. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  94. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  95. package/__tests__/coverage/lcov.info +0 -10238
  96. package/__tests__/coverage/prettify.css +0 -1
  97. package/__tests__/coverage/prettify.js +0 -2
  98. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  99. package/__tests__/coverage/sorter.js +0 -210
  100. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  101. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  102. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  103. package/__tests__/coverage/src/application/commands/index.html +0 -131
  104. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  105. package/__tests__/coverage/src/application/queries/index.html +0 -116
  106. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  107. package/__tests__/coverage/src/application/services/index.html +0 -116
  108. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  109. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  110. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  111. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  112. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  113. package/__tests__/coverage/src/domain/services/index.html +0 -116
  114. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  115. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  116. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  117. package/__tests__/coverage/src/index.html +0 -266
  118. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  119. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  120. package/__tests__/coverage/src/migration.ts.html +0 -2092
  121. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  122. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  123. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  124. package/__tests__/coverage/src/types.ts.html +0 -2266
  125. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  126. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  127. package/benchmarks/memory-write.bench.ts +0 -469
  128. package/benchmarks/vector-search.bench.ts +0 -449
  129. package/docs/AGENTDB-INTEGRATION.md +0 -388
  130. package/docs/CROSS_PLATFORM.md +0 -505
  131. package/docs/WINDOWS_SUPPORT.md +0 -422
  132. package/examples/agentdb-example.ts +0 -345
  133. package/examples/cross-platform-usage.ts +0 -326
  134. package/framework/benchmark.ts +0 -112
  135. package/src/agentdb-adapter.ts +0 -884
  136. package/src/agentdb-backend.test.ts +0 -339
  137. package/src/agentdb-backend.ts +0 -1016
  138. package/src/application/commands/delete-memory.command.ts +0 -172
  139. package/src/application/commands/store-memory.command.ts +0 -103
  140. package/src/application/index.ts +0 -36
  141. package/src/application/queries/search-memory.query.ts +0 -237
  142. package/src/application/services/memory-application-service.ts +0 -236
  143. package/src/cache-manager.ts +0 -516
  144. package/src/database-provider.test.ts +0 -364
  145. package/src/database-provider.ts +0 -511
  146. package/src/domain/entities/memory-entry.ts +0 -289
  147. package/src/domain/index.ts +0 -35
  148. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  149. package/src/domain/services/memory-domain-service.ts +0 -403
  150. package/src/hnsw-index.ts +0 -1013
  151. package/src/hybrid-backend.test.ts +0 -399
  152. package/src/hybrid-backend.ts +0 -694
  153. package/src/index.ts +0 -515
  154. package/src/infrastructure/index.ts +0 -23
  155. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  156. package/src/migration.ts +0 -669
  157. package/src/query-builder.ts +0 -542
  158. package/src/sqlite-backend.ts +0 -732
  159. package/src/sqljs-backend.ts +0 -763
  160. package/src/types.ts +0 -727
  161. package/tmp.json +0 -0
  162. package/tsconfig.json +0 -9
  163. package/tsconfig.tsbuildinfo +0 -1
  164. package/verify-cross-platform.ts +0 -170
@@ -1,2281 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/sqlite-backend.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> sqlite-backend.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/732</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/732</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a></td><td class="line-coverage quiet"><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-no">&nbsp;</span>
802
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
806
- <span class="cline-any cline-no">&nbsp;</span>
807
- <span class="cline-any cline-no">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-no">&nbsp;</span>
810
- <span class="cline-any cline-no">&nbsp;</span>
811
- <span class="cline-any cline-no">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-no">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-no">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-no">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-no">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-no">&nbsp;</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-no">&nbsp;</span>
846
- <span class="cline-any cline-no">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-no">&nbsp;</span>
849
- <span class="cline-any cline-no">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-no">&nbsp;</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-no">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-no">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
877
- <span class="cline-any cline-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-no">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-no">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-no">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-no">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-no">&nbsp;</span>
948
- <span class="cline-any cline-no">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
954
- <span class="cline-any cline-no">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-no">&nbsp;</span>
957
- <span class="cline-any cline-no">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-no">&nbsp;</span>
963
- <span class="cline-any cline-no">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-no">&nbsp;</span>
966
- <span class="cline-any cline-no">&nbsp;</span>
967
- <span class="cline-any cline-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-no">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-no">&nbsp;</span>
975
- <span class="cline-any cline-no">&nbsp;</span>
976
- <span class="cline-any cline-no">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-no">&nbsp;</span>
986
- <span class="cline-any cline-no">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-no">&nbsp;</span>
989
- <span class="cline-any cline-no">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-no">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-no">&nbsp;</span>
998
- <span class="cline-any cline-no">&nbsp;</span>
999
- <span class="cline-any cline-no">&nbsp;</span>
1000
- <span class="cline-any cline-no">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-no">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-no">&nbsp;</span>
1010
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1022
- <span class="cline-any cline-no">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-no">&nbsp;</span>
1025
- <span class="cline-any cline-no">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</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-no">&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-no">&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-no">&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-no">&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-no">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-no">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-no">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-no">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&nbsp;</span>
1062
- <span class="cline-any cline-no">&nbsp;</span>
1063
- <span class="cline-any cline-no">&nbsp;</span>
1064
- <span class="cline-any cline-no">&nbsp;</span>
1065
- <span class="cline-any cline-no">&nbsp;</span>
1066
- <span class="cline-any cline-no">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-no">&nbsp;</span>
1070
- <span class="cline-any cline-no">&nbsp;</span>
1071
- <span class="cline-any cline-no">&nbsp;</span>
1072
- <span class="cline-any cline-no">&nbsp;</span>
1073
- <span class="cline-any cline-no">&nbsp;</span>
1074
- <span class="cline-any cline-no">&nbsp;</span>
1075
- <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
1084
- <span class="cline-any cline-no">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-no">&nbsp;</span>
1087
- <span class="cline-any cline-no">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-no">&nbsp;</span>
1093
- <span class="cline-any cline-no">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-no">&nbsp;</span>
1102
- <span class="cline-any cline-no">&nbsp;</span>
1103
- <span class="cline-any cline-no">&nbsp;</span>
1104
- <span class="cline-any cline-no">&nbsp;</span>
1105
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1114
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1118
- <span class="cline-any cline-no">&nbsp;</span>
1119
- <span class="cline-any cline-no">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</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-no">&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-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-no">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-no">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-no">&nbsp;</span>
1144
- <span class="cline-any cline-no">&nbsp;</span>
1145
- <span class="cline-any cline-no">&nbsp;</span>
1146
- <span class="cline-any cline-no">&nbsp;</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-no">&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-no">&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-no">&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-no">&nbsp;</span>
1167
- <span class="cline-any cline-no">&nbsp;</span>
1168
- <span class="cline-any cline-no">&nbsp;</span>
1169
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1173
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1180
- <span class="cline-any cline-no">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-no">&nbsp;</span>
1183
- <span class="cline-any cline-no">&nbsp;</span>
1184
- <span class="cline-any cline-no">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-no">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-no">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-no">&nbsp;</span>
1192
- <span class="cline-any cline-no">&nbsp;</span>
1193
- <span class="cline-any cline-no">&nbsp;</span>
1194
- <span class="cline-any cline-no">&nbsp;</span>
1195
- <span class="cline-any cline-no">&nbsp;</span>
1196
- <span class="cline-any cline-no">&nbsp;</span>
1197
- <span class="cline-any cline-no">&nbsp;</span>
1198
- <span class="cline-any cline-no">&nbsp;</span>
1199
- <span class="cline-any cline-no">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-no">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-no">&nbsp;</span>
1206
- <span class="cline-any cline-no">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-no">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-no">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-no">&nbsp;</span>
1213
- <span class="cline-any cline-no">&nbsp;</span>
1214
- <span class="cline-any cline-no">&nbsp;</span>
1215
- <span class="cline-any cline-no">&nbsp;</span>
1216
- <span class="cline-any cline-no">&nbsp;</span>
1217
- <span class="cline-any cline-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-no">&nbsp;</span>
1220
- <span class="cline-any cline-no">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-no">&nbsp;</span>
1226
- <span class="cline-any cline-no">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-no">&nbsp;</span>
1232
- <span class="cline-any cline-no">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-no">&nbsp;</span>
1237
- <span class="cline-any cline-no">&nbsp;</span>
1238
- <span class="cline-any cline-no">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-no">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-no">&nbsp;</span>
1244
- <span class="cline-any cline-no">&nbsp;</span>
1245
- <span class="cline-any cline-no">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-no">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-no">&nbsp;</span>
1250
- <span class="cline-any cline-no">&nbsp;</span>
1251
- <span class="cline-any cline-no">&nbsp;</span>
1252
- <span class="cline-any cline-no">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-no">&nbsp;</span>
1256
- <span class="cline-any cline-no">&nbsp;</span>
1257
- <span class="cline-any cline-no">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-no">&nbsp;</span>
1261
- <span class="cline-any cline-no">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-no">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-no">&nbsp;</span>
1266
- <span class="cline-any cline-no">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-no">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-no">&nbsp;</span>
1273
- <span class="cline-any cline-no">&nbsp;</span>
1274
- <span class="cline-any cline-no">&nbsp;</span>
1275
- <span class="cline-any cline-no">&nbsp;</span>
1276
- <span class="cline-any cline-no">&nbsp;</span>
1277
- <span class="cline-any cline-no">&nbsp;</span>
1278
- <span class="cline-any cline-no">&nbsp;</span>
1279
- <span class="cline-any cline-no">&nbsp;</span>
1280
- <span class="cline-any cline-no">&nbsp;</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-no">&nbsp;</span>
1285
- <span class="cline-any cline-no">&nbsp;</span>
1286
- <span class="cline-any cline-no">&nbsp;</span>
1287
- <span class="cline-any cline-no">&nbsp;</span>
1288
- <span class="cline-any cline-no">&nbsp;</span>
1289
- <span class="cline-any cline-no">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-no">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-no">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-no">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-no">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-no">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-no">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-no">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-no">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-no">&nbsp;</span>
1334
- <span class="cline-any cline-no">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-no">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-no">&nbsp;</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-no">&nbsp;</span>
1363
- <span class="cline-any cline-no">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-no">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-no">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-no">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-no">&nbsp;</span>
1377
- <span class="cline-any cline-no">&nbsp;</span>
1378
- <span class="cline-any cline-no">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-no">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-no">&nbsp;</span>
1409
- <span class="cline-any cline-no">&nbsp;</span>
1410
- <span class="cline-any cline-no">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-no">&nbsp;</span>
1415
- <span class="cline-any cline-no">&nbsp;</span>
1416
- <span class="cline-any cline-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-no">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-no">&nbsp;</span>
1443
- <span class="cline-any cline-no">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-no">&nbsp;</span>
1447
- <span class="cline-any cline-no">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-no">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-no">&nbsp;</span>
1460
- <span class="cline-any cline-no">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-no">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-no">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-no">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-no">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-no">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-no">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-no">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-no">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-no">&nbsp;</span>
1500
- <span class="cline-any cline-no">&nbsp;</span>
1501
- <span class="cline-any cline-no">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-no">&nbsp;</span>
1504
- <span class="cline-any cline-no">&nbsp;</span>
1505
- <span class="cline-any cline-no">&nbsp;</span>
1506
- <span class="cline-any cline-no">&nbsp;</span>
1507
- <span class="cline-any cline-no">&nbsp;</span>
1508
- <span class="cline-any cline-no">&nbsp;</span>
1509
- <span class="cline-any cline-no">&nbsp;</span>
1510
- <span class="cline-any cline-no">&nbsp;</span>
1511
- <span class="cline-any cline-no">&nbsp;</span>
1512
- <span class="cline-any cline-no">&nbsp;</span>
1513
- <span class="cline-any cline-no">&nbsp;</span>
1514
- <span class="cline-any cline-no">&nbsp;</span>
1515
- <span class="cline-any cline-no">&nbsp;</span>
1516
- <span class="cline-any cline-no">&nbsp;</span>
1517
- <span class="cline-any cline-no">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-no">&nbsp;</span>
1522
- <span class="cline-any cline-no">&nbsp;</span>
1523
- <span class="cline-any cline-no">&nbsp;</span>
1524
- <span class="cline-any cline-no">&nbsp;</span>
1525
- <span class="cline-any cline-no">&nbsp;</span>
1526
- <span class="cline-any cline-no">&nbsp;</span>
1527
- <span class="cline-any cline-no">&nbsp;</span>
1528
- <span class="cline-any cline-no">&nbsp;</span>
1529
- <span class="cline-any cline-no">&nbsp;</span>
1530
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
1531
- <span class="cstat-no" title="statement not covered" > * SQLite Memory Backend</span>
1532
- <span class="cstat-no" title="statement not covered" > *</span>
1533
- <span class="cstat-no" title="statement not covered" > * Provides structured storage for memory entries using SQLite.</span>
1534
- <span class="cstat-no" title="statement not covered" > * Optimized for ACID transactions, exact matches, and complex queries.</span>
1535
- <span class="cstat-no" title="statement not covered" > * Part of ADR-009: Hybrid Memory Backend (SQLite + AgentDB)</span>
1536
- <span class="cstat-no" title="statement not covered" > *</span>
1537
- <span class="cstat-no" title="statement not covered" > * @module v3/memory/sqlite-backend</span>
1538
- <span class="cstat-no" title="statement not covered" > */</span>
1539
- <span class="cstat-no" title="statement not covered" ></span>
1540
- <span class="cstat-no" title="statement not covered" >import { EventEmitter } from 'node:events';</span>
1541
- <span class="cstat-no" title="statement not covered" >import Database from 'better-sqlite3';</span>
1542
- <span class="cstat-no" title="statement not covered" >import {</span>
1543
- <span class="cstat-no" title="statement not covered" > IMemoryBackend,</span>
1544
- <span class="cstat-no" title="statement not covered" > MemoryEntry,</span>
1545
- <span class="cstat-no" title="statement not covered" > MemoryEntryInput,</span>
1546
- <span class="cstat-no" title="statement not covered" > MemoryEntryUpdate,</span>
1547
- <span class="cstat-no" title="statement not covered" > MemoryQuery,</span>
1548
- <span class="cstat-no" title="statement not covered" > SearchOptions,</span>
1549
- <span class="cstat-no" title="statement not covered" > SearchResult,</span>
1550
- <span class="cstat-no" title="statement not covered" > BackendStats,</span>
1551
- <span class="cstat-no" title="statement not covered" > HealthCheckResult,</span>
1552
- <span class="cstat-no" title="statement not covered" > ComponentHealth,</span>
1553
- <span class="cstat-no" title="statement not covered" > MemoryType,</span>
1554
- <span class="cstat-no" title="statement not covered" > EmbeddingGenerator,</span>
1555
- <span class="cstat-no" title="statement not covered" > generateMemoryId,</span>
1556
- <span class="cstat-no" title="statement not covered" > createDefaultEntry,</span>
1557
- <span class="cstat-no" title="statement not covered" >} from './types.js';</span>
1558
- <span class="cstat-no" title="statement not covered" ></span>
1559
- <span class="cstat-no" title="statement not covered" >/**</span>
1560
- <span class="cstat-no" title="statement not covered" > * Configuration for SQLite Backend</span>
1561
- <span class="cstat-no" title="statement not covered" > */</span>
1562
- <span class="cstat-no" title="statement not covered" >export interface SQLiteBackendConfig {</span>
1563
- <span class="cstat-no" title="statement not covered" > /** Path to SQLite database file (:memory: for in-memory) */</span>
1564
- <span class="cstat-no" title="statement not covered" > databasePath: string;</span>
1565
- <span class="cstat-no" title="statement not covered" ></span>
1566
- <span class="cstat-no" title="statement not covered" > /** Enable WAL mode for better concurrency */</span>
1567
- <span class="cstat-no" title="statement not covered" > walMode: boolean;</span>
1568
- <span class="cstat-no" title="statement not covered" ></span>
1569
- <span class="cstat-no" title="statement not covered" > /** Enable query optimization */</span>
1570
- <span class="cstat-no" title="statement not covered" > optimize: boolean;</span>
1571
- <span class="cstat-no" title="statement not covered" ></span>
1572
- <span class="cstat-no" title="statement not covered" > /** Default namespace */</span>
1573
- <span class="cstat-no" title="statement not covered" > defaultNamespace: string;</span>
1574
- <span class="cstat-no" title="statement not covered" ></span>
1575
- <span class="cstat-no" title="statement not covered" > /** Embedding generator (for compatibility with hybrid mode) */</span>
1576
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator;</span>
1577
- <span class="cstat-no" title="statement not covered" ></span>
1578
- <span class="cstat-no" title="statement not covered" > /** Maximum entries before auto-cleanup */</span>
1579
- <span class="cstat-no" title="statement not covered" > maxEntries: number;</span>
1580
- <span class="cstat-no" title="statement not covered" ></span>
1581
- <span class="cstat-no" title="statement not covered" > /** Enable verbose logging */</span>
1582
- <span class="cstat-no" title="statement not covered" > verbose: boolean;</span>
1583
- <span class="cstat-no" title="statement not covered" >}</span>
1584
- <span class="cstat-no" title="statement not covered" ></span>
1585
- <span class="cstat-no" title="statement not covered" >/**</span>
1586
- <span class="cstat-no" title="statement not covered" > * Default configuration values</span>
1587
- <span class="cstat-no" title="statement not covered" > */</span>
1588
- <span class="cstat-no" title="statement not covered" >const DEFAULT_CONFIG: SQLiteBackendConfig = {</span>
1589
- <span class="cstat-no" title="statement not covered" > databasePath: ':memory:',</span>
1590
- <span class="cstat-no" title="statement not covered" > walMode: true,</span>
1591
- <span class="cstat-no" title="statement not covered" > optimize: true,</span>
1592
- <span class="cstat-no" title="statement not covered" > defaultNamespace: 'default',</span>
1593
- <span class="cstat-no" title="statement not covered" > maxEntries: 1000000,</span>
1594
- <span class="cstat-no" title="statement not covered" > verbose: false,</span>
1595
- <span class="cstat-no" title="statement not covered" >};</span>
1596
- <span class="cstat-no" title="statement not covered" ></span>
1597
- <span class="cstat-no" title="statement not covered" >/**</span>
1598
- <span class="cstat-no" title="statement not covered" > * SQLite Backend for Structured Memory Storage</span>
1599
- <span class="cstat-no" title="statement not covered" > *</span>
1600
- <span class="cstat-no" title="statement not covered" > * Provides:</span>
1601
- <span class="cstat-no" title="statement not covered" > * - ACID transactions for data consistency</span>
1602
- <span class="cstat-no" title="statement not covered" > * - Efficient indexing for exact matches and prefix queries</span>
1603
- <span class="cstat-no" title="statement not covered" > * - Full-text search capabilities</span>
1604
- <span class="cstat-no" title="statement not covered" > * - Complex SQL queries with joins and aggregations</span>
1605
- <span class="cstat-no" title="statement not covered" > * - Persistent storage with WAL mode</span>
1606
- <span class="cstat-no" title="statement not covered" > */</span>
1607
- <span class="cstat-no" title="statement not covered" >export class SQLiteBackend extends EventEmitter implements IMemoryBackend {</span>
1608
- <span class="cstat-no" title="statement not covered" > private config: SQLiteBackendConfig;</span>
1609
- <span class="cstat-no" title="statement not covered" > private db: Database.Database | null = null;</span>
1610
- <span class="cstat-no" title="statement not covered" > private initialized: boolean = false;</span>
1611
- <span class="cstat-no" title="statement not covered" ></span>
1612
- <span class="cstat-no" title="statement not covered" > // Performance tracking</span>
1613
- <span class="cstat-no" title="statement not covered" > private stats = {</span>
1614
- <span class="cstat-no" title="statement not covered" > queryCount: 0,</span>
1615
- <span class="cstat-no" title="statement not covered" > totalQueryTime: 0,</span>
1616
- <span class="cstat-no" title="statement not covered" > writeCount: 0,</span>
1617
- <span class="cstat-no" title="statement not covered" > totalWriteTime: 0,</span>
1618
- <span class="cstat-no" title="statement not covered" > };</span>
1619
- <span class="cstat-no" title="statement not covered" ></span>
1620
- <span class="cstat-no" title="statement not covered" > constructor(config: Partial&lt;SQLiteBackendConfig&gt; = {}) {</span>
1621
- <span class="cstat-no" title="statement not covered" > super();</span>
1622
- <span class="cstat-no" title="statement not covered" > this.config = { ...DEFAULT_CONFIG, ...config };</span>
1623
- <span class="cstat-no" title="statement not covered" > }</span>
1624
- <span class="cstat-no" title="statement not covered" ></span>
1625
- <span class="cstat-no" title="statement not covered" > /**</span>
1626
- <span class="cstat-no" title="statement not covered" > * Initialize the SQLite backend</span>
1627
- <span class="cstat-no" title="statement not covered" > */</span>
1628
- <span class="cstat-no" title="statement not covered" > async initialize(): Promise&lt;void&gt; {</span>
1629
- <span class="cstat-no" title="statement not covered" > if (this.initialized) return;</span>
1630
- <span class="cstat-no" title="statement not covered" ></span>
1631
- <span class="cstat-no" title="statement not covered" > // Open database connection</span>
1632
- <span class="cstat-no" title="statement not covered" > this.db = new Database(this.config.databasePath, {</span>
1633
- <span class="cstat-no" title="statement not covered" > verbose: this.config.verbose ? console.log : undefined,</span>
1634
- <span class="cstat-no" title="statement not covered" > });</span>
1635
- <span class="cstat-no" title="statement not covered" ></span>
1636
- <span class="cstat-no" title="statement not covered" > // Enable WAL mode for better concurrency</span>
1637
- <span class="cstat-no" title="statement not covered" > if (this.config.walMode) {</span>
1638
- <span class="cstat-no" title="statement not covered" > this.db.pragma('journal_mode = WAL');</span>
1639
- <span class="cstat-no" title="statement not covered" > }</span>
1640
- <span class="cstat-no" title="statement not covered" ></span>
1641
- <span class="cstat-no" title="statement not covered" > // Performance optimizations</span>
1642
- <span class="cstat-no" title="statement not covered" > if (this.config.optimize) {</span>
1643
- <span class="cstat-no" title="statement not covered" > this.db.pragma('synchronous = NORMAL');</span>
1644
- <span class="cstat-no" title="statement not covered" > this.db.pragma('cache_size = 10000');</span>
1645
- <span class="cstat-no" title="statement not covered" > this.db.pragma('temp_store = MEMORY');</span>
1646
- <span class="cstat-no" title="statement not covered" > }</span>
1647
- <span class="cstat-no" title="statement not covered" ></span>
1648
- <span class="cstat-no" title="statement not covered" > // Create schema</span>
1649
- <span class="cstat-no" title="statement not covered" > this.createSchema();</span>
1650
- <span class="cstat-no" title="statement not covered" ></span>
1651
- <span class="cstat-no" title="statement not covered" > this.initialized = true;</span>
1652
- <span class="cstat-no" title="statement not covered" > this.emit('initialized');</span>
1653
- <span class="cstat-no" title="statement not covered" > }</span>
1654
- <span class="cstat-no" title="statement not covered" ></span>
1655
- <span class="cstat-no" title="statement not covered" > /**</span>
1656
- <span class="cstat-no" title="statement not covered" > * Shutdown the backend</span>
1657
- <span class="cstat-no" title="statement not covered" > */</span>
1658
- <span class="cstat-no" title="statement not covered" > async shutdown(): Promise&lt;void&gt; {</span>
1659
- <span class="cstat-no" title="statement not covered" > if (!this.initialized || !this.db) return;</span>
1660
- <span class="cstat-no" title="statement not covered" ></span>
1661
- <span class="cstat-no" title="statement not covered" > // Optimize database before closing</span>
1662
- <span class="cstat-no" title="statement not covered" > if (this.config.optimize) {</span>
1663
- <span class="cstat-no" title="statement not covered" > this.db.pragma('optimize');</span>
1664
- <span class="cstat-no" title="statement not covered" > }</span>
1665
- <span class="cstat-no" title="statement not covered" ></span>
1666
- <span class="cstat-no" title="statement not covered" > this.db.close();</span>
1667
- <span class="cstat-no" title="statement not covered" > this.db = null;</span>
1668
- <span class="cstat-no" title="statement not covered" > this.initialized = false;</span>
1669
- <span class="cstat-no" title="statement not covered" > this.emit('shutdown');</span>
1670
- <span class="cstat-no" title="statement not covered" > }</span>
1671
- <span class="cstat-no" title="statement not covered" ></span>
1672
- <span class="cstat-no" title="statement not covered" > /**</span>
1673
- <span class="cstat-no" title="statement not covered" > * Store a memory entry</span>
1674
- <span class="cstat-no" title="statement not covered" > */</span>
1675
- <span class="cstat-no" title="statement not covered" > async store(entry: MemoryEntry): Promise&lt;void&gt; {</span>
1676
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1677
- <span class="cstat-no" title="statement not covered" > const startTime = performance.now();</span>
1678
- <span class="cstat-no" title="statement not covered" ></span>
1679
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare(`</span>
1680
- <span class="cstat-no" title="statement not covered" > INSERT OR REPLACE INTO memory_entries (</span>
1681
- <span class="cstat-no" title="statement not covered" > id, key, content, type, namespace, tags, metadata,</span>
1682
- <span class="cstat-no" title="statement not covered" > owner_id, access_level, created_at, updated_at, expires_at,</span>
1683
- <span class="cstat-no" title="statement not covered" > version, references, access_count, last_accessed_at</span>
1684
- <span class="cstat-no" title="statement not covered" > ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</span>
1685
- <span class="cstat-no" title="statement not covered" > `);</span>
1686
- <span class="cstat-no" title="statement not covered" ></span>
1687
- <span class="cstat-no" title="statement not covered" > stmt.run(</span>
1688
- <span class="cstat-no" title="statement not covered" > entry.id,</span>
1689
- <span class="cstat-no" title="statement not covered" > entry.key,</span>
1690
- <span class="cstat-no" title="statement not covered" > entry.content,</span>
1691
- <span class="cstat-no" title="statement not covered" > entry.type,</span>
1692
- <span class="cstat-no" title="statement not covered" > entry.namespace,</span>
1693
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.tags),</span>
1694
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.metadata),</span>
1695
- <span class="cstat-no" title="statement not covered" > entry.ownerId || null,</span>
1696
- <span class="cstat-no" title="statement not covered" > entry.accessLevel,</span>
1697
- <span class="cstat-no" title="statement not covered" > entry.createdAt,</span>
1698
- <span class="cstat-no" title="statement not covered" > entry.updatedAt,</span>
1699
- <span class="cstat-no" title="statement not covered" > entry.expiresAt || null,</span>
1700
- <span class="cstat-no" title="statement not covered" > entry.version,</span>
1701
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.references),</span>
1702
- <span class="cstat-no" title="statement not covered" > entry.accessCount,</span>
1703
- <span class="cstat-no" title="statement not covered" > entry.lastAccessedAt</span>
1704
- <span class="cstat-no" title="statement not covered" > );</span>
1705
- <span class="cstat-no" title="statement not covered" ></span>
1706
- <span class="cstat-no" title="statement not covered" > // Store embedding separately (as BLOB)</span>
1707
- <span class="cstat-no" title="statement not covered" > if (entry.embedding) {</span>
1708
- <span class="cstat-no" title="statement not covered" > const embeddingStmt = this.db!.prepare(`</span>
1709
- <span class="cstat-no" title="statement not covered" > INSERT OR REPLACE INTO memory_embeddings (entry_id, embedding)</span>
1710
- <span class="cstat-no" title="statement not covered" > VALUES (?, ?)</span>
1711
- <span class="cstat-no" title="statement not covered" > `);</span>
1712
- <span class="cstat-no" title="statement not covered" > embeddingStmt.run(entry.id, Buffer.from(entry.embedding.buffer));</span>
1713
- <span class="cstat-no" title="statement not covered" > }</span>
1714
- <span class="cstat-no" title="statement not covered" ></span>
1715
- <span class="cstat-no" title="statement not covered" > const duration = performance.now() - startTime;</span>
1716
- <span class="cstat-no" title="statement not covered" > this.stats.writeCount++;</span>
1717
- <span class="cstat-no" title="statement not covered" > this.stats.totalWriteTime += duration;</span>
1718
- <span class="cstat-no" title="statement not covered" ></span>
1719
- <span class="cstat-no" title="statement not covered" > this.emit('entry:stored', { id: entry.id, duration });</span>
1720
- <span class="cstat-no" title="statement not covered" > }</span>
1721
- <span class="cstat-no" title="statement not covered" ></span>
1722
- <span class="cstat-no" title="statement not covered" > /**</span>
1723
- <span class="cstat-no" title="statement not covered" > * Get a memory entry by ID</span>
1724
- <span class="cstat-no" title="statement not covered" > */</span>
1725
- <span class="cstat-no" title="statement not covered" > async get(id: string): Promise&lt;MemoryEntry | null&gt; {</span>
1726
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1727
- <span class="cstat-no" title="statement not covered" ></span>
1728
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare('SELECT * FROM memory_entries WHERE id = ?');</span>
1729
- <span class="cstat-no" title="statement not covered" > const row = stmt.get(id) as any;</span>
1730
- <span class="cstat-no" title="statement not covered" ></span>
1731
- <span class="cstat-no" title="statement not covered" > if (!row) return null;</span>
1732
- <span class="cstat-no" title="statement not covered" ></span>
1733
- <span class="cstat-no" title="statement not covered" > return this.rowToEntry(row);</span>
1734
- <span class="cstat-no" title="statement not covered" > }</span>
1735
- <span class="cstat-no" title="statement not covered" ></span>
1736
- <span class="cstat-no" title="statement not covered" > /**</span>
1737
- <span class="cstat-no" title="statement not covered" > * Get a memory entry by key within a namespace</span>
1738
- <span class="cstat-no" title="statement not covered" > */</span>
1739
- <span class="cstat-no" title="statement not covered" > async getByKey(namespace: string, key: string): Promise&lt;MemoryEntry | null&gt; {</span>
1740
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1741
- <span class="cstat-no" title="statement not covered" ></span>
1742
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare(`</span>
1743
- <span class="cstat-no" title="statement not covered" > SELECT * FROM memory_entries</span>
1744
- <span class="cstat-no" title="statement not covered" > WHERE namespace = ? AND key = ?</span>
1745
- <span class="cstat-no" title="statement not covered" > `);</span>
1746
- <span class="cstat-no" title="statement not covered" > const row = stmt.get(namespace, key) as any;</span>
1747
- <span class="cstat-no" title="statement not covered" ></span>
1748
- <span class="cstat-no" title="statement not covered" > if (!row) return null;</span>
1749
- <span class="cstat-no" title="statement not covered" ></span>
1750
- <span class="cstat-no" title="statement not covered" > return this.rowToEntry(row);</span>
1751
- <span class="cstat-no" title="statement not covered" > }</span>
1752
- <span class="cstat-no" title="statement not covered" ></span>
1753
- <span class="cstat-no" title="statement not covered" > /**</span>
1754
- <span class="cstat-no" title="statement not covered" > * Update a memory entry</span>
1755
- <span class="cstat-no" title="statement not covered" > */</span>
1756
- <span class="cstat-no" title="statement not covered" > async update(id: string, update: MemoryEntryUpdate): Promise&lt;MemoryEntry | null&gt; {</span>
1757
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1758
- <span class="cstat-no" title="statement not covered" ></span>
1759
- <span class="cstat-no" title="statement not covered" > const entry = await this.get(id);</span>
1760
- <span class="cstat-no" title="statement not covered" > if (!entry) return null;</span>
1761
- <span class="cstat-no" title="statement not covered" ></span>
1762
- <span class="cstat-no" title="statement not covered" > // Apply updates</span>
1763
- <span class="cstat-no" title="statement not covered" > if (update.content !== undefined) entry.content = update.content;</span>
1764
- <span class="cstat-no" title="statement not covered" > if (update.tags !== undefined) entry.tags = update.tags;</span>
1765
- <span class="cstat-no" title="statement not covered" > if (update.metadata !== undefined) {</span>
1766
- <span class="cstat-no" title="statement not covered" > entry.metadata = { ...entry.metadata, ...update.metadata };</span>
1767
- <span class="cstat-no" title="statement not covered" > }</span>
1768
- <span class="cstat-no" title="statement not covered" > if (update.accessLevel !== undefined) entry.accessLevel = update.accessLevel;</span>
1769
- <span class="cstat-no" title="statement not covered" > if (update.expiresAt !== undefined) entry.expiresAt = update.expiresAt;</span>
1770
- <span class="cstat-no" title="statement not covered" > if (update.references !== undefined) entry.references = update.references;</span>
1771
- <span class="cstat-no" title="statement not covered" ></span>
1772
- <span class="cstat-no" title="statement not covered" > entry.updatedAt = Date.now();</span>
1773
- <span class="cstat-no" title="statement not covered" > entry.version++;</span>
1774
- <span class="cstat-no" title="statement not covered" ></span>
1775
- <span class="cstat-no" title="statement not covered" > // Store updated entry</span>
1776
- <span class="cstat-no" title="statement not covered" > await this.store(entry);</span>
1777
- <span class="cstat-no" title="statement not covered" ></span>
1778
- <span class="cstat-no" title="statement not covered" > this.emit('entry:updated', { id });</span>
1779
- <span class="cstat-no" title="statement not covered" > return entry;</span>
1780
- <span class="cstat-no" title="statement not covered" > }</span>
1781
- <span class="cstat-no" title="statement not covered" ></span>
1782
- <span class="cstat-no" title="statement not covered" > /**</span>
1783
- <span class="cstat-no" title="statement not covered" > * Delete a memory entry</span>
1784
- <span class="cstat-no" title="statement not covered" > */</span>
1785
- <span class="cstat-no" title="statement not covered" > async delete(id: string): Promise&lt;boolean&gt; {</span>
1786
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1787
- <span class="cstat-no" title="statement not covered" ></span>
1788
- <span class="cstat-no" title="statement not covered" > const deleteEntry = this.db!.prepare('DELETE FROM memory_entries WHERE id = ?');</span>
1789
- <span class="cstat-no" title="statement not covered" > const deleteEmbedding = this.db!.prepare('DELETE FROM memory_embeddings WHERE entry_id = ?');</span>
1790
- <span class="cstat-no" title="statement not covered" ></span>
1791
- <span class="cstat-no" title="statement not covered" > const result = deleteEntry.run(id);</span>
1792
- <span class="cstat-no" title="statement not covered" > deleteEmbedding.run(id);</span>
1793
- <span class="cstat-no" title="statement not covered" ></span>
1794
- <span class="cstat-no" title="statement not covered" > if (result.changes &gt; 0) {</span>
1795
- <span class="cstat-no" title="statement not covered" > this.emit('entry:deleted', { id });</span>
1796
- <span class="cstat-no" title="statement not covered" > return true;</span>
1797
- <span class="cstat-no" title="statement not covered" > }</span>
1798
- <span class="cstat-no" title="statement not covered" ></span>
1799
- <span class="cstat-no" title="statement not covered" > return false;</span>
1800
- <span class="cstat-no" title="statement not covered" > }</span>
1801
- <span class="cstat-no" title="statement not covered" ></span>
1802
- <span class="cstat-no" title="statement not covered" > /**</span>
1803
- <span class="cstat-no" title="statement not covered" > * Query memory entries with filters</span>
1804
- <span class="cstat-no" title="statement not covered" > */</span>
1805
- <span class="cstat-no" title="statement not covered" > async query(query: MemoryQuery): Promise&lt;MemoryEntry[]&gt; {</span>
1806
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1807
- <span class="cstat-no" title="statement not covered" > const startTime = performance.now();</span>
1808
- <span class="cstat-no" title="statement not covered" ></span>
1809
- <span class="cstat-no" title="statement not covered" > let sql = 'SELECT * FROM memory_entries WHERE 1=1';</span>
1810
- <span class="cstat-no" title="statement not covered" > const params: any[] = [];</span>
1811
- <span class="cstat-no" title="statement not covered" ></span>
1812
- <span class="cstat-no" title="statement not covered" > // Build WHERE clauses</span>
1813
- <span class="cstat-no" title="statement not covered" > if (query.namespace) {</span>
1814
- <span class="cstat-no" title="statement not covered" > sql += ' AND namespace = ?';</span>
1815
- <span class="cstat-no" title="statement not covered" > params.push(query.namespace);</span>
1816
- <span class="cstat-no" title="statement not covered" > }</span>
1817
- <span class="cstat-no" title="statement not covered" ></span>
1818
- <span class="cstat-no" title="statement not covered" > if (query.key) {</span>
1819
- <span class="cstat-no" title="statement not covered" > sql += ' AND key = ?';</span>
1820
- <span class="cstat-no" title="statement not covered" > params.push(query.key);</span>
1821
- <span class="cstat-no" title="statement not covered" > }</span>
1822
- <span class="cstat-no" title="statement not covered" ></span>
1823
- <span class="cstat-no" title="statement not covered" > if (query.keyPrefix) {</span>
1824
- <span class="cstat-no" title="statement not covered" > sql += ' AND key LIKE ?';</span>
1825
- <span class="cstat-no" title="statement not covered" > params.push(`${query.keyPrefix}%`);</span>
1826
- <span class="cstat-no" title="statement not covered" > }</span>
1827
- <span class="cstat-no" title="statement not covered" ></span>
1828
- <span class="cstat-no" title="statement not covered" > if (query.memoryType) {</span>
1829
- <span class="cstat-no" title="statement not covered" > sql += ' AND type = ?';</span>
1830
- <span class="cstat-no" title="statement not covered" > params.push(query.memoryType);</span>
1831
- <span class="cstat-no" title="statement not covered" > }</span>
1832
- <span class="cstat-no" title="statement not covered" ></span>
1833
- <span class="cstat-no" title="statement not covered" > if (query.accessLevel) {</span>
1834
- <span class="cstat-no" title="statement not covered" > sql += ' AND access_level = ?';</span>
1835
- <span class="cstat-no" title="statement not covered" > params.push(query.accessLevel);</span>
1836
- <span class="cstat-no" title="statement not covered" > }</span>
1837
- <span class="cstat-no" title="statement not covered" ></span>
1838
- <span class="cstat-no" title="statement not covered" > if (query.ownerId) {</span>
1839
- <span class="cstat-no" title="statement not covered" > sql += ' AND owner_id = ?';</span>
1840
- <span class="cstat-no" title="statement not covered" > params.push(query.ownerId);</span>
1841
- <span class="cstat-no" title="statement not covered" > }</span>
1842
- <span class="cstat-no" title="statement not covered" ></span>
1843
- <span class="cstat-no" title="statement not covered" > if (query.createdAfter) {</span>
1844
- <span class="cstat-no" title="statement not covered" > sql += ' AND created_at &gt;= ?';</span>
1845
- <span class="cstat-no" title="statement not covered" > params.push(query.createdAfter);</span>
1846
- <span class="cstat-no" title="statement not covered" > }</span>
1847
- <span class="cstat-no" title="statement not covered" ></span>
1848
- <span class="cstat-no" title="statement not covered" > if (query.createdBefore) {</span>
1849
- <span class="cstat-no" title="statement not covered" > sql += ' AND created_at &lt;= ?';</span>
1850
- <span class="cstat-no" title="statement not covered" > params.push(query.createdBefore);</span>
1851
- <span class="cstat-no" title="statement not covered" > }</span>
1852
- <span class="cstat-no" title="statement not covered" ></span>
1853
- <span class="cstat-no" title="statement not covered" > if (query.updatedAfter) {</span>
1854
- <span class="cstat-no" title="statement not covered" > sql += ' AND updated_at &gt;= ?';</span>
1855
- <span class="cstat-no" title="statement not covered" > params.push(query.updatedAfter);</span>
1856
- <span class="cstat-no" title="statement not covered" > }</span>
1857
- <span class="cstat-no" title="statement not covered" ></span>
1858
- <span class="cstat-no" title="statement not covered" > if (query.updatedBefore) {</span>
1859
- <span class="cstat-no" title="statement not covered" > sql += ' AND updated_at &lt;= ?';</span>
1860
- <span class="cstat-no" title="statement not covered" > params.push(query.updatedBefore);</span>
1861
- <span class="cstat-no" title="statement not covered" > }</span>
1862
- <span class="cstat-no" title="statement not covered" ></span>
1863
- <span class="cstat-no" title="statement not covered" > if (!query.includeExpired) {</span>
1864
- <span class="cstat-no" title="statement not covered" > sql += ' AND (expires_at IS NULL OR expires_at &gt; ?)';</span>
1865
- <span class="cstat-no" title="statement not covered" > params.push(Date.now());</span>
1866
- <span class="cstat-no" title="statement not covered" > }</span>
1867
- <span class="cstat-no" title="statement not covered" ></span>
1868
- <span class="cstat-no" title="statement not covered" > // Tag filtering (safe parameterized query)</span>
1869
- <span class="cstat-no" title="statement not covered" > if (query.tags &amp;&amp; query.tags.length &gt; 0) {</span>
1870
- <span class="cstat-no" title="statement not covered" > // Validate tags before using in query</span>
1871
- <span class="cstat-no" title="statement not covered" > for (const tag of query.tags) {</span>
1872
- <span class="cstat-no" title="statement not covered" > if (typeof tag !== 'string' || !/^[a-zA-Z0-9_\-.:]+$/.test(tag)) {</span>
1873
- <span class="cstat-no" title="statement not covered" > throw new Error(`Invalid tag format: ${tag}`);</span>
1874
- <span class="cstat-no" title="statement not covered" > }</span>
1875
- <span class="cstat-no" title="statement not covered" > }</span>
1876
- <span class="cstat-no" title="statement not covered" > // Use parameterized query with JSON functions</span>
1877
- <span class="cstat-no" title="statement not covered" > const tagPlaceholders = query.tags.map(() =&gt; '?').join(', ');</span>
1878
- <span class="cstat-no" title="statement not covered" > sql += ` AND EXISTS (</span>
1879
- <span class="cstat-no" title="statement not covered" > SELECT 1 FROM json_each(tags) AS t</span>
1880
- <span class="cstat-no" title="statement not covered" > WHERE t.value IN (${tagPlaceholders})</span>
1881
- <span class="cstat-no" title="statement not covered" > )`;</span>
1882
- <span class="cstat-no" title="statement not covered" > params.push(...query.tags);</span>
1883
- <span class="cstat-no" title="statement not covered" > }</span>
1884
- <span class="cstat-no" title="statement not covered" ></span>
1885
- <span class="cstat-no" title="statement not covered" > // Pagination</span>
1886
- <span class="cstat-no" title="statement not covered" > sql += ' ORDER BY created_at DESC';</span>
1887
- <span class="cstat-no" title="statement not covered" > if (query.limit) {</span>
1888
- <span class="cstat-no" title="statement not covered" > sql += ' LIMIT ?';</span>
1889
- <span class="cstat-no" title="statement not covered" > params.push(query.limit);</span>
1890
- <span class="cstat-no" title="statement not covered" > }</span>
1891
- <span class="cstat-no" title="statement not covered" > if (query.offset) {</span>
1892
- <span class="cstat-no" title="statement not covered" > sql += ' OFFSET ?';</span>
1893
- <span class="cstat-no" title="statement not covered" > params.push(query.offset);</span>
1894
- <span class="cstat-no" title="statement not covered" > }</span>
1895
- <span class="cstat-no" title="statement not covered" ></span>
1896
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare(sql);</span>
1897
- <span class="cstat-no" title="statement not covered" > const rows = stmt.all(...params) as any[];</span>
1898
- <span class="cstat-no" title="statement not covered" ></span>
1899
- <span class="cstat-no" title="statement not covered" > const results = rows.map((row) =&gt; this.rowToEntry(row));</span>
1900
- <span class="cstat-no" title="statement not covered" ></span>
1901
- <span class="cstat-no" title="statement not covered" > const duration = performance.now() - startTime;</span>
1902
- <span class="cstat-no" title="statement not covered" > this.stats.queryCount++;</span>
1903
- <span class="cstat-no" title="statement not covered" > this.stats.totalQueryTime += duration;</span>
1904
- <span class="cstat-no" title="statement not covered" ></span>
1905
- <span class="cstat-no" title="statement not covered" > return results;</span>
1906
- <span class="cstat-no" title="statement not covered" > }</span>
1907
- <span class="cstat-no" title="statement not covered" ></span>
1908
- <span class="cstat-no" title="statement not covered" > /**</span>
1909
- <span class="cstat-no" title="statement not covered" > * Semantic vector search (not optimized for SQLite, returns empty)</span>
1910
- <span class="cstat-no" title="statement not covered" > * Use HybridBackend for semantic search with AgentDB</span>
1911
- <span class="cstat-no" title="statement not covered" > */</span>
1912
- <span class="cstat-no" title="statement not covered" > async search(</span>
1913
- <span class="cstat-no" title="statement not covered" > embedding: Float32Array,</span>
1914
- <span class="cstat-no" title="statement not covered" > options: SearchOptions</span>
1915
- <span class="cstat-no" title="statement not covered" > ): Promise&lt;SearchResult[]&gt; {</span>
1916
- <span class="cstat-no" title="statement not covered" > // SQLite is not optimized for vector search</span>
1917
- <span class="cstat-no" title="statement not covered" > // This method returns empty to encourage use of HybridBackend</span>
1918
- <span class="cstat-no" title="statement not covered" > console.warn(</span>
1919
- <span class="cstat-no" title="statement not covered" > 'SQLiteBackend.search(): Vector search not optimized. Use HybridBackend for semantic search.'</span>
1920
- <span class="cstat-no" title="statement not covered" > );</span>
1921
- <span class="cstat-no" title="statement not covered" > return [];</span>
1922
- <span class="cstat-no" title="statement not covered" > }</span>
1923
- <span class="cstat-no" title="statement not covered" ></span>
1924
- <span class="cstat-no" title="statement not covered" > /**</span>
1925
- <span class="cstat-no" title="statement not covered" > * Bulk insert entries</span>
1926
- <span class="cstat-no" title="statement not covered" > */</span>
1927
- <span class="cstat-no" title="statement not covered" > async bulkInsert(entries: MemoryEntry[]): Promise&lt;void&gt; {</span>
1928
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1929
- <span class="cstat-no" title="statement not covered" ></span>
1930
- <span class="cstat-no" title="statement not covered" > const transaction = this.db!.transaction((entries: MemoryEntry[]) =&gt; {</span>
1931
- <span class="cstat-no" title="statement not covered" > for (const entry of entries) {</span>
1932
- <span class="cstat-no" title="statement not covered" > this.storeSync(entry);</span>
1933
- <span class="cstat-no" title="statement not covered" > }</span>
1934
- <span class="cstat-no" title="statement not covered" > });</span>
1935
- <span class="cstat-no" title="statement not covered" ></span>
1936
- <span class="cstat-no" title="statement not covered" > transaction(entries);</span>
1937
- <span class="cstat-no" title="statement not covered" > this.emit('bulk:inserted', { count: entries.length });</span>
1938
- <span class="cstat-no" title="statement not covered" > }</span>
1939
- <span class="cstat-no" title="statement not covered" ></span>
1940
- <span class="cstat-no" title="statement not covered" > /**</span>
1941
- <span class="cstat-no" title="statement not covered" > * Bulk delete entries</span>
1942
- <span class="cstat-no" title="statement not covered" > */</span>
1943
- <span class="cstat-no" title="statement not covered" > async bulkDelete(ids: string[]): Promise&lt;number&gt; {</span>
1944
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1945
- <span class="cstat-no" title="statement not covered" ></span>
1946
- <span class="cstat-no" title="statement not covered" > const deleteEntry = this.db!.prepare('DELETE FROM memory_entries WHERE id = ?');</span>
1947
- <span class="cstat-no" title="statement not covered" > const deleteEmbedding = this.db!.prepare('DELETE FROM memory_embeddings WHERE entry_id = ?');</span>
1948
- <span class="cstat-no" title="statement not covered" ></span>
1949
- <span class="cstat-no" title="statement not covered" > const transaction = this.db!.transaction((ids: string[]) =&gt; {</span>
1950
- <span class="cstat-no" title="statement not covered" > let deleted = 0;</span>
1951
- <span class="cstat-no" title="statement not covered" > for (const id of ids) {</span>
1952
- <span class="cstat-no" title="statement not covered" > const result = deleteEntry.run(id);</span>
1953
- <span class="cstat-no" title="statement not covered" > deleteEmbedding.run(id);</span>
1954
- <span class="cstat-no" title="statement not covered" > if (result.changes &gt; 0) deleted++;</span>
1955
- <span class="cstat-no" title="statement not covered" > }</span>
1956
- <span class="cstat-no" title="statement not covered" > return deleted;</span>
1957
- <span class="cstat-no" title="statement not covered" > });</span>
1958
- <span class="cstat-no" title="statement not covered" ></span>
1959
- <span class="cstat-no" title="statement not covered" > return transaction(ids);</span>
1960
- <span class="cstat-no" title="statement not covered" > }</span>
1961
- <span class="cstat-no" title="statement not covered" ></span>
1962
- <span class="cstat-no" title="statement not covered" > /**</span>
1963
- <span class="cstat-no" title="statement not covered" > * Get entry count</span>
1964
- <span class="cstat-no" title="statement not covered" > */</span>
1965
- <span class="cstat-no" title="statement not covered" > async count(namespace?: string): Promise&lt;number&gt; {</span>
1966
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1967
- <span class="cstat-no" title="statement not covered" ></span>
1968
- <span class="cstat-no" title="statement not covered" > let sql = 'SELECT COUNT(*) as count FROM memory_entries';</span>
1969
- <span class="cstat-no" title="statement not covered" > const params: any[] = [];</span>
1970
- <span class="cstat-no" title="statement not covered" ></span>
1971
- <span class="cstat-no" title="statement not covered" > if (namespace) {</span>
1972
- <span class="cstat-no" title="statement not covered" > sql += ' WHERE namespace = ?';</span>
1973
- <span class="cstat-no" title="statement not covered" > params.push(namespace);</span>
1974
- <span class="cstat-no" title="statement not covered" > }</span>
1975
- <span class="cstat-no" title="statement not covered" ></span>
1976
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare(sql);</span>
1977
- <span class="cstat-no" title="statement not covered" > const result = stmt.get(...params) as any;</span>
1978
- <span class="cstat-no" title="statement not covered" > return result.count;</span>
1979
- <span class="cstat-no" title="statement not covered" > }</span>
1980
- <span class="cstat-no" title="statement not covered" ></span>
1981
- <span class="cstat-no" title="statement not covered" > /**</span>
1982
- <span class="cstat-no" title="statement not covered" > * List all namespaces</span>
1983
- <span class="cstat-no" title="statement not covered" > */</span>
1984
- <span class="cstat-no" title="statement not covered" > async listNamespaces(): Promise&lt;string[]&gt; {</span>
1985
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1986
- <span class="cstat-no" title="statement not covered" ></span>
1987
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare('SELECT DISTINCT namespace FROM memory_entries');</span>
1988
- <span class="cstat-no" title="statement not covered" > const rows = stmt.all() as any[];</span>
1989
- <span class="cstat-no" title="statement not covered" > return rows.map((row) =&gt; row.namespace);</span>
1990
- <span class="cstat-no" title="statement not covered" > }</span>
1991
- <span class="cstat-no" title="statement not covered" ></span>
1992
- <span class="cstat-no" title="statement not covered" > /**</span>
1993
- <span class="cstat-no" title="statement not covered" > * Clear all entries in a namespace</span>
1994
- <span class="cstat-no" title="statement not covered" > */</span>
1995
- <span class="cstat-no" title="statement not covered" > async clearNamespace(namespace: string): Promise&lt;number&gt; {</span>
1996
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
1997
- <span class="cstat-no" title="statement not covered" ></span>
1998
- <span class="cstat-no" title="statement not covered" > const deleteEntries = this.db!.prepare('DELETE FROM memory_entries WHERE namespace = ?');</span>
1999
- <span class="cstat-no" title="statement not covered" > const result = deleteEntries.run(namespace);</span>
2000
- <span class="cstat-no" title="statement not covered" ></span>
2001
- <span class="cstat-no" title="statement not covered" > // Clean up orphaned embeddings</span>
2002
- <span class="cstat-no" title="statement not covered" > this.db!.prepare(`</span>
2003
- <span class="cstat-no" title="statement not covered" > DELETE FROM memory_embeddings</span>
2004
- <span class="cstat-no" title="statement not covered" > WHERE entry_id NOT IN (SELECT id FROM memory_entries)</span>
2005
- <span class="cstat-no" title="statement not covered" > `).run();</span>
2006
- <span class="cstat-no" title="statement not covered" ></span>
2007
- <span class="cstat-no" title="statement not covered" > return result.changes;</span>
2008
- <span class="cstat-no" title="statement not covered" > }</span>
2009
- <span class="cstat-no" title="statement not covered" ></span>
2010
- <span class="cstat-no" title="statement not covered" > /**</span>
2011
- <span class="cstat-no" title="statement not covered" > * Get backend statistics</span>
2012
- <span class="cstat-no" title="statement not covered" > */</span>
2013
- <span class="cstat-no" title="statement not covered" > async getStats(): Promise&lt;BackendStats&gt; {</span>
2014
- <span class="cstat-no" title="statement not covered" > this.ensureInitialized();</span>
2015
- <span class="cstat-no" title="statement not covered" ></span>
2016
- <span class="cstat-no" title="statement not covered" > // Count by namespace</span>
2017
- <span class="cstat-no" title="statement not covered" > const namespaceStmt = this.db!.prepare(`</span>
2018
- <span class="cstat-no" title="statement not covered" > SELECT namespace, COUNT(*) as count</span>
2019
- <span class="cstat-no" title="statement not covered" > FROM memory_entries</span>
2020
- <span class="cstat-no" title="statement not covered" > GROUP BY namespace</span>
2021
- <span class="cstat-no" title="statement not covered" > `);</span>
2022
- <span class="cstat-no" title="statement not covered" > const namespaceRows = namespaceStmt.all() as any[];</span>
2023
- <span class="cstat-no" title="statement not covered" > const entriesByNamespace: Record&lt;string, number&gt; = {};</span>
2024
- <span class="cstat-no" title="statement not covered" > for (const row of namespaceRows) {</span>
2025
- <span class="cstat-no" title="statement not covered" > entriesByNamespace[row.namespace] = row.count;</span>
2026
- <span class="cstat-no" title="statement not covered" > }</span>
2027
- <span class="cstat-no" title="statement not covered" ></span>
2028
- <span class="cstat-no" title="statement not covered" > // Count by type</span>
2029
- <span class="cstat-no" title="statement not covered" > const typeStmt = this.db!.prepare(`</span>
2030
- <span class="cstat-no" title="statement not covered" > SELECT type, COUNT(*) as count</span>
2031
- <span class="cstat-no" title="statement not covered" > FROM memory_entries</span>
2032
- <span class="cstat-no" title="statement not covered" > GROUP BY type</span>
2033
- <span class="cstat-no" title="statement not covered" > `);</span>
2034
- <span class="cstat-no" title="statement not covered" > const typeRows = typeStmt.all() as any[];</span>
2035
- <span class="cstat-no" title="statement not covered" > const entriesByType: Record&lt;MemoryType, number&gt; = {</span>
2036
- <span class="cstat-no" title="statement not covered" > episodic: 0,</span>
2037
- <span class="cstat-no" title="statement not covered" > semantic: 0,</span>
2038
- <span class="cstat-no" title="statement not covered" > procedural: 0,</span>
2039
- <span class="cstat-no" title="statement not covered" > working: 0,</span>
2040
- <span class="cstat-no" title="statement not covered" > cache: 0,</span>
2041
- <span class="cstat-no" title="statement not covered" > };</span>
2042
- <span class="cstat-no" title="statement not covered" > for (const row of typeRows) {</span>
2043
- <span class="cstat-no" title="statement not covered" > entriesByType[row.type as MemoryType] = row.count;</span>
2044
- <span class="cstat-no" title="statement not covered" > }</span>
2045
- <span class="cstat-no" title="statement not covered" ></span>
2046
- <span class="cstat-no" title="statement not covered" > // Get database size</span>
2047
- <span class="cstat-no" title="statement not covered" > const pageCount = this.db!.pragma('page_count', { simple: true }) as number;</span>
2048
- <span class="cstat-no" title="statement not covered" > const pageSize = this.db!.pragma('page_size', { simple: true }) as number;</span>
2049
- <span class="cstat-no" title="statement not covered" > const memoryUsage = pageCount * pageSize;</span>
2050
- <span class="cstat-no" title="statement not covered" ></span>
2051
- <span class="cstat-no" title="statement not covered" > const totalEntries = await this.count();</span>
2052
- <span class="cstat-no" title="statement not covered" ></span>
2053
- <span class="cstat-no" title="statement not covered" > return {</span>
2054
- <span class="cstat-no" title="statement not covered" > totalEntries,</span>
2055
- <span class="cstat-no" title="statement not covered" > entriesByNamespace,</span>
2056
- <span class="cstat-no" title="statement not covered" > entriesByType,</span>
2057
- <span class="cstat-no" title="statement not covered" > memoryUsage,</span>
2058
- <span class="cstat-no" title="statement not covered" > avgQueryTime:</span>
2059
- <span class="cstat-no" title="statement not covered" > this.stats.queryCount &gt; 0</span>
2060
- <span class="cstat-no" title="statement not covered" > ? this.stats.totalQueryTime / this.stats.queryCount</span>
2061
- <span class="cstat-no" title="statement not covered" > : 0,</span>
2062
- <span class="cstat-no" title="statement not covered" > avgSearchTime: 0, // Not applicable for SQLite</span>
2063
- <span class="cstat-no" title="statement not covered" > };</span>
2064
- <span class="cstat-no" title="statement not covered" > }</span>
2065
- <span class="cstat-no" title="statement not covered" ></span>
2066
- <span class="cstat-no" title="statement not covered" > /**</span>
2067
- <span class="cstat-no" title="statement not covered" > * Perform health check</span>
2068
- <span class="cstat-no" title="statement not covered" > */</span>
2069
- <span class="cstat-no" title="statement not covered" > async healthCheck(): Promise&lt;HealthCheckResult&gt; {</span>
2070
- <span class="cstat-no" title="statement not covered" > const issues: string[] = [];</span>
2071
- <span class="cstat-no" title="statement not covered" > const recommendations: string[] = [];</span>
2072
- <span class="cstat-no" title="statement not covered" ></span>
2073
- <span class="cstat-no" title="statement not covered" > if (!this.initialized || !this.db) {</span>
2074
- <span class="cstat-no" title="statement not covered" > return {</span>
2075
- <span class="cstat-no" title="statement not covered" > status: 'unhealthy',</span>
2076
- <span class="cstat-no" title="statement not covered" > components: {</span>
2077
- <span class="cstat-no" title="statement not covered" > storage: { status: 'unhealthy', latency: 0, message: 'Not initialized' },</span>
2078
- <span class="cstat-no" title="statement not covered" > index: { status: 'healthy', latency: 0 },</span>
2079
- <span class="cstat-no" title="statement not covered" > cache: { status: 'healthy', latency: 0 },</span>
2080
- <span class="cstat-no" title="statement not covered" > },</span>
2081
- <span class="cstat-no" title="statement not covered" > timestamp: Date.now(),</span>
2082
- <span class="cstat-no" title="statement not covered" > issues: ['Backend not initialized'],</span>
2083
- <span class="cstat-no" title="statement not covered" > recommendations: ['Call initialize() before using'],</span>
2084
- <span class="cstat-no" title="statement not covered" > };</span>
2085
- <span class="cstat-no" title="statement not covered" > }</span>
2086
- <span class="cstat-no" title="statement not covered" ></span>
2087
- <span class="cstat-no" title="statement not covered" > // Check database integrity</span>
2088
- <span class="cstat-no" title="statement not covered" > let storageHealth: ComponentHealth;</span>
2089
- <span class="cstat-no" title="statement not covered" > try {</span>
2090
- <span class="cstat-no" title="statement not covered" > const integrityCheck = this.db.pragma('integrity_check', { simple: true });</span>
2091
- <span class="cstat-no" title="statement not covered" > if (integrityCheck === 'ok') {</span>
2092
- <span class="cstat-no" title="statement not covered" > storageHealth = { status: 'healthy', latency: 0 };</span>
2093
- <span class="cstat-no" title="statement not covered" > } else {</span>
2094
- <span class="cstat-no" title="statement not covered" > issues.push('Database integrity check failed');</span>
2095
- <span class="cstat-no" title="statement not covered" > recommendations.push('Run VACUUM to repair database');</span>
2096
- <span class="cstat-no" title="statement not covered" > storageHealth = { status: 'unhealthy', latency: 0, message: 'Integrity check failed' };</span>
2097
- <span class="cstat-no" title="statement not covered" > }</span>
2098
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
2099
- <span class="cstat-no" title="statement not covered" > issues.push('Failed to check database integrity');</span>
2100
- <span class="cstat-no" title="statement not covered" > storageHealth = { status: 'unhealthy', latency: 0, message: String(error) };</span>
2101
- <span class="cstat-no" title="statement not covered" > }</span>
2102
- <span class="cstat-no" title="statement not covered" ></span>
2103
- <span class="cstat-no" title="statement not covered" > // Check utilization</span>
2104
- <span class="cstat-no" title="statement not covered" > const totalEntries = await this.count();</span>
2105
- <span class="cstat-no" title="statement not covered" > const utilizationPercent = (totalEntries / this.config.maxEntries) * 100;</span>
2106
- <span class="cstat-no" title="statement not covered" ></span>
2107
- <span class="cstat-no" title="statement not covered" > if (utilizationPercent &gt; 95) {</span>
2108
- <span class="cstat-no" title="statement not covered" > issues.push('Storage utilization critical (&gt;95%)');</span>
2109
- <span class="cstat-no" title="statement not covered" > recommendations.push('Cleanup old data or increase maxEntries');</span>
2110
- <span class="cstat-no" title="statement not covered" > storageHealth = { status: 'unhealthy', latency: 0, message: 'Near capacity' };</span>
2111
- <span class="cstat-no" title="statement not covered" > } else if (utilizationPercent &gt; 80) {</span>
2112
- <span class="cstat-no" title="statement not covered" > issues.push('Storage utilization high (&gt;80%)');</span>
2113
- <span class="cstat-no" title="statement not covered" > recommendations.push('Consider cleanup');</span>
2114
- <span class="cstat-no" title="statement not covered" > if (storageHealth.status === 'healthy') {</span>
2115
- <span class="cstat-no" title="statement not covered" > storageHealth = { status: 'degraded', latency: 0, message: 'High utilization' };</span>
2116
- <span class="cstat-no" title="statement not covered" > }</span>
2117
- <span class="cstat-no" title="statement not covered" > }</span>
2118
- <span class="cstat-no" title="statement not covered" ></span>
2119
- <span class="cstat-no" title="statement not covered" > const status =</span>
2120
- <span class="cstat-no" title="statement not covered" > storageHealth.status === 'unhealthy'</span>
2121
- <span class="cstat-no" title="statement not covered" > ? 'unhealthy'</span>
2122
- <span class="cstat-no" title="statement not covered" > : storageHealth.status === 'degraded'</span>
2123
- <span class="cstat-no" title="statement not covered" > ? 'degraded'</span>
2124
- <span class="cstat-no" title="statement not covered" > : 'healthy';</span>
2125
- <span class="cstat-no" title="statement not covered" ></span>
2126
- <span class="cstat-no" title="statement not covered" > return {</span>
2127
- <span class="cstat-no" title="statement not covered" > status,</span>
2128
- <span class="cstat-no" title="statement not covered" > components: {</span>
2129
- <span class="cstat-no" title="statement not covered" > storage: storageHealth,</span>
2130
- <span class="cstat-no" title="statement not covered" > index: { status: 'healthy', latency: 0 },</span>
2131
- <span class="cstat-no" title="statement not covered" > cache: { status: 'healthy', latency: 0 },</span>
2132
- <span class="cstat-no" title="statement not covered" > },</span>
2133
- <span class="cstat-no" title="statement not covered" > timestamp: Date.now(),</span>
2134
- <span class="cstat-no" title="statement not covered" > issues,</span>
2135
- <span class="cstat-no" title="statement not covered" > recommendations,</span>
2136
- <span class="cstat-no" title="statement not covered" > };</span>
2137
- <span class="cstat-no" title="statement not covered" > }</span>
2138
- <span class="cstat-no" title="statement not covered" ></span>
2139
- <span class="cstat-no" title="statement not covered" > // ===== Private Methods =====</span>
2140
- <span class="cstat-no" title="statement not covered" ></span>
2141
- <span class="cstat-no" title="statement not covered" > private ensureInitialized(): void {</span>
2142
- <span class="cstat-no" title="statement not covered" > if (!this.initialized || !this.db) {</span>
2143
- <span class="cstat-no" title="statement not covered" > throw new Error('SQLiteBackend not initialized. Call initialize() first.');</span>
2144
- <span class="cstat-no" title="statement not covered" > }</span>
2145
- <span class="cstat-no" title="statement not covered" > }</span>
2146
- <span class="cstat-no" title="statement not covered" ></span>
2147
- <span class="cstat-no" title="statement not covered" > private createSchema(): void {</span>
2148
- <span class="cstat-no" title="statement not covered" > if (!this.db) return;</span>
2149
- <span class="cstat-no" title="statement not covered" ></span>
2150
- <span class="cstat-no" title="statement not covered" > // Main entries table</span>
2151
- <span class="cstat-no" title="statement not covered" > this.db.exec(`</span>
2152
- <span class="cstat-no" title="statement not covered" > CREATE TABLE IF NOT EXISTS memory_entries (</span>
2153
- <span class="cstat-no" title="statement not covered" > id TEXT PRIMARY KEY,</span>
2154
- <span class="cstat-no" title="statement not covered" > key TEXT NOT NULL,</span>
2155
- <span class="cstat-no" title="statement not covered" > content TEXT NOT NULL,</span>
2156
- <span class="cstat-no" title="statement not covered" > type TEXT NOT NULL,</span>
2157
- <span class="cstat-no" title="statement not covered" > namespace TEXT NOT NULL,</span>
2158
- <span class="cstat-no" title="statement not covered" > tags TEXT NOT NULL,</span>
2159
- <span class="cstat-no" title="statement not covered" > metadata TEXT NOT NULL,</span>
2160
- <span class="cstat-no" title="statement not covered" > owner_id TEXT,</span>
2161
- <span class="cstat-no" title="statement not covered" > access_level TEXT NOT NULL,</span>
2162
- <span class="cstat-no" title="statement not covered" > created_at INTEGER NOT NULL,</span>
2163
- <span class="cstat-no" title="statement not covered" > updated_at INTEGER NOT NULL,</span>
2164
- <span class="cstat-no" title="statement not covered" > expires_at INTEGER,</span>
2165
- <span class="cstat-no" title="statement not covered" > version INTEGER NOT NULL,</span>
2166
- <span class="cstat-no" title="statement not covered" > references TEXT NOT NULL,</span>
2167
- <span class="cstat-no" title="statement not covered" > access_count INTEGER NOT NULL,</span>
2168
- <span class="cstat-no" title="statement not covered" > last_accessed_at INTEGER NOT NULL</span>
2169
- <span class="cstat-no" title="statement not covered" > );</span>
2170
- <span class="cstat-no" title="statement not covered" ></span>
2171
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_namespace ON memory_entries(namespace);</span>
2172
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_key ON memory_entries(key);</span>
2173
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_namespace_key ON memory_entries(namespace, key);</span>
2174
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_type ON memory_entries(type);</span>
2175
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_owner_id ON memory_entries(owner_id);</span>
2176
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_created_at ON memory_entries(created_at);</span>
2177
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_updated_at ON memory_entries(updated_at);</span>
2178
- <span class="cstat-no" title="statement not covered" > CREATE INDEX IF NOT EXISTS idx_expires_at ON memory_entries(expires_at);</span>
2179
- <span class="cstat-no" title="statement not covered" ></span>
2180
- <span class="cstat-no" title="statement not covered" > CREATE TABLE IF NOT EXISTS memory_embeddings (</span>
2181
- <span class="cstat-no" title="statement not covered" > entry_id TEXT PRIMARY KEY,</span>
2182
- <span class="cstat-no" title="statement not covered" > embedding BLOB,</span>
2183
- <span class="cstat-no" title="statement not covered" > FOREIGN KEY (entry_id) REFERENCES memory_entries(id) ON DELETE CASCADE</span>
2184
- <span class="cstat-no" title="statement not covered" > );</span>
2185
- <span class="cstat-no" title="statement not covered" > `);</span>
2186
- <span class="cstat-no" title="statement not covered" > }</span>
2187
- <span class="cstat-no" title="statement not covered" ></span>
2188
- <span class="cstat-no" title="statement not covered" > private rowToEntry(row: any): MemoryEntry {</span>
2189
- <span class="cstat-no" title="statement not covered" > // Get embedding if exists</span>
2190
- <span class="cstat-no" title="statement not covered" > let embedding: Float32Array | undefined;</span>
2191
- <span class="cstat-no" title="statement not covered" > const embeddingStmt = this.db!.prepare(</span>
2192
- <span class="cstat-no" title="statement not covered" > 'SELECT embedding FROM memory_embeddings WHERE entry_id = ?'</span>
2193
- <span class="cstat-no" title="statement not covered" > );</span>
2194
- <span class="cstat-no" title="statement not covered" > const embeddingRow = embeddingStmt.get(row.id) as any;</span>
2195
- <span class="cstat-no" title="statement not covered" > if (embeddingRow &amp;&amp; embeddingRow.embedding) {</span>
2196
- <span class="cstat-no" title="statement not covered" > embedding = new Float32Array(embeddingRow.embedding.buffer);</span>
2197
- <span class="cstat-no" title="statement not covered" > }</span>
2198
- <span class="cstat-no" title="statement not covered" ></span>
2199
- <span class="cstat-no" title="statement not covered" > return {</span>
2200
- <span class="cstat-no" title="statement not covered" > id: row.id,</span>
2201
- <span class="cstat-no" title="statement not covered" > key: row.key,</span>
2202
- <span class="cstat-no" title="statement not covered" > content: row.content,</span>
2203
- <span class="cstat-no" title="statement not covered" > embedding,</span>
2204
- <span class="cstat-no" title="statement not covered" > type: row.type as MemoryType,</span>
2205
- <span class="cstat-no" title="statement not covered" > namespace: row.namespace,</span>
2206
- <span class="cstat-no" title="statement not covered" > tags: JSON.parse(row.tags),</span>
2207
- <span class="cstat-no" title="statement not covered" > metadata: JSON.parse(row.metadata),</span>
2208
- <span class="cstat-no" title="statement not covered" > ownerId: row.owner_id,</span>
2209
- <span class="cstat-no" title="statement not covered" > accessLevel: row.access_level,</span>
2210
- <span class="cstat-no" title="statement not covered" > createdAt: row.created_at,</span>
2211
- <span class="cstat-no" title="statement not covered" > updatedAt: row.updated_at,</span>
2212
- <span class="cstat-no" title="statement not covered" > expiresAt: row.expires_at,</span>
2213
- <span class="cstat-no" title="statement not covered" > version: row.version,</span>
2214
- <span class="cstat-no" title="statement not covered" > references: JSON.parse(row.references),</span>
2215
- <span class="cstat-no" title="statement not covered" > accessCount: row.access_count,</span>
2216
- <span class="cstat-no" title="statement not covered" > lastAccessedAt: row.last_accessed_at,</span>
2217
- <span class="cstat-no" title="statement not covered" > };</span>
2218
- <span class="cstat-no" title="statement not covered" > }</span>
2219
- <span class="cstat-no" title="statement not covered" ></span>
2220
- <span class="cstat-no" title="statement not covered" > /**</span>
2221
- <span class="cstat-no" title="statement not covered" > * Synchronous store for use in transactions</span>
2222
- <span class="cstat-no" title="statement not covered" > */</span>
2223
- <span class="cstat-no" title="statement not covered" > private storeSync(entry: MemoryEntry): void {</span>
2224
- <span class="cstat-no" title="statement not covered" > const stmt = this.db!.prepare(`</span>
2225
- <span class="cstat-no" title="statement not covered" > INSERT OR REPLACE INTO memory_entries (</span>
2226
- <span class="cstat-no" title="statement not covered" > id, key, content, type, namespace, tags, metadata,</span>
2227
- <span class="cstat-no" title="statement not covered" > owner_id, access_level, created_at, updated_at, expires_at,</span>
2228
- <span class="cstat-no" title="statement not covered" > version, references, access_count, last_accessed_at</span>
2229
- <span class="cstat-no" title="statement not covered" > ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</span>
2230
- <span class="cstat-no" title="statement not covered" > `);</span>
2231
- <span class="cstat-no" title="statement not covered" ></span>
2232
- <span class="cstat-no" title="statement not covered" > stmt.run(</span>
2233
- <span class="cstat-no" title="statement not covered" > entry.id,</span>
2234
- <span class="cstat-no" title="statement not covered" > entry.key,</span>
2235
- <span class="cstat-no" title="statement not covered" > entry.content,</span>
2236
- <span class="cstat-no" title="statement not covered" > entry.type,</span>
2237
- <span class="cstat-no" title="statement not covered" > entry.namespace,</span>
2238
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.tags),</span>
2239
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.metadata),</span>
2240
- <span class="cstat-no" title="statement not covered" > entry.ownerId || null,</span>
2241
- <span class="cstat-no" title="statement not covered" > entry.accessLevel,</span>
2242
- <span class="cstat-no" title="statement not covered" > entry.createdAt,</span>
2243
- <span class="cstat-no" title="statement not covered" > entry.updatedAt,</span>
2244
- <span class="cstat-no" title="statement not covered" > entry.expiresAt || null,</span>
2245
- <span class="cstat-no" title="statement not covered" > entry.version,</span>
2246
- <span class="cstat-no" title="statement not covered" > JSON.stringify(entry.references),</span>
2247
- <span class="cstat-no" title="statement not covered" > entry.accessCount,</span>
2248
- <span class="cstat-no" title="statement not covered" > entry.lastAccessedAt</span>
2249
- <span class="cstat-no" title="statement not covered" > );</span>
2250
- <span class="cstat-no" title="statement not covered" ></span>
2251
- <span class="cstat-no" title="statement not covered" > if (entry.embedding) {</span>
2252
- <span class="cstat-no" title="statement not covered" > const embeddingStmt = this.db!.prepare(`</span>
2253
- <span class="cstat-no" title="statement not covered" > INSERT OR REPLACE INTO memory_embeddings (entry_id, embedding)</span>
2254
- <span class="cstat-no" title="statement not covered" > VALUES (?, ?)</span>
2255
- <span class="cstat-no" title="statement not covered" > `);</span>
2256
- <span class="cstat-no" title="statement not covered" > embeddingStmt.run(entry.id, Buffer.from(entry.embedding.buffer));</span>
2257
- <span class="cstat-no" title="statement not covered" > }</span>
2258
- <span class="cstat-no" title="statement not covered" > }</span>
2259
- <span class="cstat-no" title="statement not covered" >}</span>
2260
- <span class="cstat-no" title="statement not covered" ></span>
2261
- <span class="cstat-no" title="statement not covered" >export default SQLiteBackend;</span>
2262
- &nbsp;</pre></td></tr></table></pre>
2263
-
2264
- <div class='push'></div><!-- for sticky footer -->
2265
- </div><!-- /wrapper -->
2266
- <div class='footer quiet pad2 space-top1 center small'>
2267
- Code coverage generated by
2268
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2269
- at 2026-01-05T21:16:54.220Z
2270
- </div>
2271
- <script src="../prettify.js"></script>
2272
- <script>
2273
- window.onload = function () {
2274
- prettyPrint();
2275
- };
2276
- </script>
2277
- <script src="../sorter.js"></script>
2278
- <script src="../block-navigation.js"></script>
2279
- </body>
2280
- </html>
2281
-