@claude-flow/memory 3.0.0-alpha.1 → 3.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) 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/index.d.ts +8 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +8 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/learning-bridge.d.ts +137 -0
  31. package/dist/learning-bridge.d.ts.map +1 -0
  32. package/dist/learning-bridge.js +335 -0
  33. package/dist/learning-bridge.js.map +1 -0
  34. package/dist/learning-bridge.test.d.ts +8 -0
  35. package/dist/learning-bridge.test.d.ts.map +1 -0
  36. package/dist/learning-bridge.test.js +578 -0
  37. package/dist/learning-bridge.test.js.map +1 -0
  38. package/dist/memory-graph.d.ts +100 -0
  39. package/dist/memory-graph.d.ts.map +1 -0
  40. package/dist/memory-graph.js +333 -0
  41. package/dist/memory-graph.js.map +1 -0
  42. package/dist/memory-graph.test.d.ts +8 -0
  43. package/dist/memory-graph.test.d.ts.map +1 -0
  44. package/dist/memory-graph.test.js +609 -0
  45. package/dist/memory-graph.test.js.map +1 -0
  46. package/dist/types.d.ts +3 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +19 -4
  49. package/.agentic-flow/intelligence.json +0 -16
  50. package/__tests__/coverage/base.css +0 -224
  51. package/__tests__/coverage/block-navigation.js +0 -87
  52. package/__tests__/coverage/coverage-final.json +0 -19
  53. package/__tests__/coverage/favicon.png +0 -0
  54. package/__tests__/coverage/index.html +0 -206
  55. package/__tests__/coverage/lcov-report/base.css +0 -224
  56. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  57. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  58. package/__tests__/coverage/lcov-report/index.html +0 -206
  59. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  60. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  61. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  62. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  63. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  64. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  65. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  66. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  67. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  68. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  69. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  70. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  71. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  72. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  73. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  74. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  75. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  76. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  77. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  78. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  79. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  80. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  81. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  82. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  83. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  84. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  85. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  86. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  87. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  88. package/__tests__/coverage/lcov.info +0 -10238
  89. package/__tests__/coverage/prettify.css +0 -1
  90. package/__tests__/coverage/prettify.js +0 -2
  91. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  92. package/__tests__/coverage/sorter.js +0 -210
  93. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  94. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  95. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  96. package/__tests__/coverage/src/application/commands/index.html +0 -131
  97. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  98. package/__tests__/coverage/src/application/queries/index.html +0 -116
  99. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  100. package/__tests__/coverage/src/application/services/index.html +0 -116
  101. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  102. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  103. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  104. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  105. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  106. package/__tests__/coverage/src/domain/services/index.html +0 -116
  107. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  108. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  109. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  110. package/__tests__/coverage/src/index.html +0 -266
  111. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  112. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  113. package/__tests__/coverage/src/migration.ts.html +0 -2092
  114. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  115. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  116. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  117. package/__tests__/coverage/src/types.ts.html +0 -2266
  118. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  119. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  120. package/benchmarks/memory-write.bench.ts +0 -469
  121. package/benchmarks/vector-search.bench.ts +0 -449
  122. package/docs/AGENTDB-INTEGRATION.md +0 -388
  123. package/docs/CROSS_PLATFORM.md +0 -505
  124. package/docs/WINDOWS_SUPPORT.md +0 -422
  125. package/examples/agentdb-example.ts +0 -345
  126. package/examples/cross-platform-usage.ts +0 -326
  127. package/framework/benchmark.ts +0 -112
  128. package/src/agentdb-adapter.ts +0 -884
  129. package/src/agentdb-backend.test.ts +0 -339
  130. package/src/agentdb-backend.ts +0 -1016
  131. package/src/application/commands/delete-memory.command.ts +0 -172
  132. package/src/application/commands/store-memory.command.ts +0 -103
  133. package/src/application/index.ts +0 -36
  134. package/src/application/queries/search-memory.query.ts +0 -237
  135. package/src/application/services/memory-application-service.ts +0 -236
  136. package/src/cache-manager.ts +0 -516
  137. package/src/database-provider.test.ts +0 -364
  138. package/src/database-provider.ts +0 -511
  139. package/src/domain/entities/memory-entry.ts +0 -289
  140. package/src/domain/index.ts +0 -35
  141. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  142. package/src/domain/services/memory-domain-service.ts +0 -403
  143. package/src/hnsw-index.ts +0 -1013
  144. package/src/hybrid-backend.test.ts +0 -399
  145. package/src/hybrid-backend.ts +0 -694
  146. package/src/index.ts +0 -515
  147. package/src/infrastructure/index.ts +0 -23
  148. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  149. package/src/migration.ts +0 -669
  150. package/src/query-builder.ts +0 -542
  151. package/src/sqlite-backend.ts +0 -732
  152. package/src/sqljs-backend.ts +0 -763
  153. package/src/types.ts +0 -727
  154. package/tsconfig.json +0 -9
  155. package/tsconfig.tsbuildinfo +0 -1
  156. package/verify-cross-platform.ts +0 -170
@@ -1,2092 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/migration.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> migration.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/669</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/669</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></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-no">&nbsp;</span>
739
- <span class="cline-any cline-no">&nbsp;</span>
740
- <span class="cline-any cline-no">&nbsp;</span>
741
- <span class="cline-any cline-no">&nbsp;</span>
742
- <span class="cline-any cline-no">&nbsp;</span>
743
- <span class="cline-any cline-no">&nbsp;</span>
744
- <span class="cline-any cline-no">&nbsp;</span>
745
- <span class="cline-any cline-no">&nbsp;</span>
746
- <span class="cline-any cline-no">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-no">&nbsp;</span>
749
- <span class="cline-any cline-no">&nbsp;</span>
750
- <span class="cline-any cline-no">&nbsp;</span>
751
- <span class="cline-any cline-no">&nbsp;</span>
752
- <span class="cline-any cline-no">&nbsp;</span>
753
- <span class="cline-any cline-no">&nbsp;</span>
754
- <span class="cline-any cline-no">&nbsp;</span>
755
- <span class="cline-any cline-no">&nbsp;</span>
756
- <span class="cline-any cline-no">&nbsp;</span>
757
- <span class="cline-any cline-no">&nbsp;</span>
758
- <span class="cline-any cline-no">&nbsp;</span>
759
- <span class="cline-any cline-no">&nbsp;</span>
760
- <span class="cline-any cline-no">&nbsp;</span>
761
- <span class="cline-any cline-no">&nbsp;</span>
762
- <span class="cline-any cline-no">&nbsp;</span>
763
- <span class="cline-any cline-no">&nbsp;</span>
764
- <span class="cline-any cline-no">&nbsp;</span>
765
- <span class="cline-any cline-no">&nbsp;</span>
766
- <span class="cline-any cline-no">&nbsp;</span>
767
- <span class="cline-any cline-no">&nbsp;</span>
768
- <span class="cline-any cline-no">&nbsp;</span>
769
- <span class="cline-any cline-no">&nbsp;</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-no">&nbsp;</span>
772
- <span class="cline-any cline-no">&nbsp;</span>
773
- <span class="cline-any cline-no">&nbsp;</span>
774
- <span class="cline-any cline-no">&nbsp;</span>
775
- <span class="cline-any cline-no">&nbsp;</span>
776
- <span class="cline-any cline-no">&nbsp;</span>
777
- <span class="cline-any cline-no">&nbsp;</span>
778
- <span class="cline-any cline-no">&nbsp;</span>
779
- <span class="cline-any cline-no">&nbsp;</span>
780
- <span class="cline-any cline-no">&nbsp;</span>
781
- <span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-no">&nbsp;</span>
783
- <span class="cline-any cline-no">&nbsp;</span>
784
- <span class="cline-any cline-no">&nbsp;</span>
785
- <span class="cline-any cline-no">&nbsp;</span>
786
- <span class="cline-any cline-no">&nbsp;</span>
787
- <span class="cline-any cline-no">&nbsp;</span>
788
- <span class="cline-any cline-no">&nbsp;</span>
789
- <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
- <span class="cline-any cline-no">&nbsp;</span>
792
- <span class="cline-any cline-no">&nbsp;</span>
793
- <span class="cline-any cline-no">&nbsp;</span>
794
- <span class="cline-any cline-no">&nbsp;</span>
795
- <span class="cline-any cline-no">&nbsp;</span>
796
- <span class="cline-any cline-no">&nbsp;</span>
797
- <span class="cline-any cline-no">&nbsp;</span>
798
- <span class="cline-any cline-no">&nbsp;</span>
799
- <span class="cline-any cline-no">&nbsp;</span>
800
- <span class="cline-any cline-no">&nbsp;</span>
801
- <span class="cline-any cline-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-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>
1405
- <span class="cstat-no" title="statement not covered" > * V3 Memory Migration Utility</span>
1406
- <span class="cstat-no" title="statement not covered" > *</span>
1407
- <span class="cstat-no" title="statement not covered" > * Migrates data from legacy memory systems (SQLite, Markdown, JSON, etc.)</span>
1408
- <span class="cstat-no" title="statement not covered" > * to the unified AgentDB-backed memory system with HNSW indexing.</span>
1409
- <span class="cstat-no" title="statement not covered" > *</span>
1410
- <span class="cstat-no" title="statement not covered" > * @module v3/memory/migration</span>
1411
- <span class="cstat-no" title="statement not covered" > */</span>
1412
- <span class="cstat-no" title="statement not covered" ></span>
1413
- <span class="cstat-no" title="statement not covered" >import { EventEmitter } from 'node:events';</span>
1414
- <span class="cstat-no" title="statement not covered" >import { promises as fs } from 'node:fs';</span>
1415
- <span class="cstat-no" title="statement not covered" >import * as path from 'node:path';</span>
1416
- <span class="cstat-no" title="statement not covered" >import {</span>
1417
- <span class="cstat-no" title="statement not covered" > MigrationConfig,</span>
1418
- <span class="cstat-no" title="statement not covered" > MigrationProgress,</span>
1419
- <span class="cstat-no" title="statement not covered" > MigrationResult,</span>
1420
- <span class="cstat-no" title="statement not covered" > MigrationError,</span>
1421
- <span class="cstat-no" title="statement not covered" > MigrationSource,</span>
1422
- <span class="cstat-no" title="statement not covered" > MemoryEntry,</span>
1423
- <span class="cstat-no" title="statement not covered" > MemoryType,</span>
1424
- <span class="cstat-no" title="statement not covered" > MemoryEntryInput,</span>
1425
- <span class="cstat-no" title="statement not covered" > EmbeddingGenerator,</span>
1426
- <span class="cstat-no" title="statement not covered" > createDefaultEntry,</span>
1427
- <span class="cstat-no" title="statement not covered" >} from './types.js';</span>
1428
- <span class="cstat-no" title="statement not covered" >import { AgentDBAdapter } from './agentdb-adapter.js';</span>
1429
- <span class="cstat-no" title="statement not covered" ></span>
1430
- <span class="cstat-no" title="statement not covered" >/**</span>
1431
- <span class="cstat-no" title="statement not covered" > * Default migration configuration</span>
1432
- <span class="cstat-no" title="statement not covered" > */</span>
1433
- <span class="cstat-no" title="statement not covered" >const DEFAULT_MIGRATION_CONFIG: Partial&lt;MigrationConfig&gt; = {</span>
1434
- <span class="cstat-no" title="statement not covered" > batchSize: 100,</span>
1435
- <span class="cstat-no" title="statement not covered" > generateEmbeddings: true,</span>
1436
- <span class="cstat-no" title="statement not covered" > validateData: true,</span>
1437
- <span class="cstat-no" title="statement not covered" > continueOnError: true,</span>
1438
- <span class="cstat-no" title="statement not covered" >};</span>
1439
- <span class="cstat-no" title="statement not covered" ></span>
1440
- <span class="cstat-no" title="statement not covered" >/**</span>
1441
- <span class="cstat-no" title="statement not covered" > * Legacy entry format (common structure)</span>
1442
- <span class="cstat-no" title="statement not covered" > */</span>
1443
- <span class="cstat-no" title="statement not covered" >interface LegacyEntry {</span>
1444
- <span class="cstat-no" title="statement not covered" > id?: string;</span>
1445
- <span class="cstat-no" title="statement not covered" > key: string;</span>
1446
- <span class="cstat-no" title="statement not covered" > value: unknown;</span>
1447
- <span class="cstat-no" title="statement not covered" > namespace?: string;</span>
1448
- <span class="cstat-no" title="statement not covered" > tags?: string[];</span>
1449
- <span class="cstat-no" title="statement not covered" > metadata?: Record&lt;string, unknown&gt;;</span>
1450
- <span class="cstat-no" title="statement not covered" > timestamp?: number;</span>
1451
- <span class="cstat-no" title="statement not covered" > createdAt?: string | number;</span>
1452
- <span class="cstat-no" title="statement not covered" > updatedAt?: string | number;</span>
1453
- <span class="cstat-no" title="statement not covered" > created_at?: string | number;</span>
1454
- <span class="cstat-no" title="statement not covered" > updated_at?: string | number;</span>
1455
- <span class="cstat-no" title="statement not covered" >}</span>
1456
- <span class="cstat-no" title="statement not covered" ></span>
1457
- <span class="cstat-no" title="statement not covered" >/**</span>
1458
- <span class="cstat-no" title="statement not covered" > * Memory Migration Manager</span>
1459
- <span class="cstat-no" title="statement not covered" > *</span>
1460
- <span class="cstat-no" title="statement not covered" > * Handles migration from:</span>
1461
- <span class="cstat-no" title="statement not covered" > * - SQLite backends (.db files)</span>
1462
- <span class="cstat-no" title="statement not covered" > * - Markdown backends (.md files)</span>
1463
- <span class="cstat-no" title="statement not covered" > * - JSON memory stores (.json files)</span>
1464
- <span class="cstat-no" title="statement not covered" > * - MemoryManager instances</span>
1465
- <span class="cstat-no" title="statement not covered" > * - SwarmMemory instances</span>
1466
- <span class="cstat-no" title="statement not covered" > * - DistributedMemory instances</span>
1467
- <span class="cstat-no" title="statement not covered" > */</span>
1468
- <span class="cstat-no" title="statement not covered" >export class MemoryMigrator extends EventEmitter {</span>
1469
- <span class="cstat-no" title="statement not covered" > private config: MigrationConfig;</span>
1470
- <span class="cstat-no" title="statement not covered" > private target: AgentDBAdapter;</span>
1471
- <span class="cstat-no" title="statement not covered" > private embeddingGenerator?: EmbeddingGenerator;</span>
1472
- <span class="cstat-no" title="statement not covered" > private progress: MigrationProgress;</span>
1473
- <span class="cstat-no" title="statement not covered" ></span>
1474
- <span class="cstat-no" title="statement not covered" > constructor(</span>
1475
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
1476
- <span class="cstat-no" title="statement not covered" > config: Partial&lt;MigrationConfig&gt;,</span>
1477
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
1478
- <span class="cstat-no" title="statement not covered" > ) {</span>
1479
- <span class="cstat-no" title="statement not covered" > super();</span>
1480
- <span class="cstat-no" title="statement not covered" > this.target = target;</span>
1481
- <span class="cstat-no" title="statement not covered" > this.config = { ...DEFAULT_MIGRATION_CONFIG, ...config } as MigrationConfig;</span>
1482
- <span class="cstat-no" title="statement not covered" > this.embeddingGenerator = embeddingGenerator;</span>
1483
- <span class="cstat-no" title="statement not covered" > this.progress = this.initializeProgress();</span>
1484
- <span class="cstat-no" title="statement not covered" > }</span>
1485
- <span class="cstat-no" title="statement not covered" ></span>
1486
- <span class="cstat-no" title="statement not covered" > /**</span>
1487
- <span class="cstat-no" title="statement not covered" > * Run the migration</span>
1488
- <span class="cstat-no" title="statement not covered" > */</span>
1489
- <span class="cstat-no" title="statement not covered" > async migrate(): Promise&lt;MigrationResult&gt; {</span>
1490
- <span class="cstat-no" title="statement not covered" > const startTime = Date.now();</span>
1491
- <span class="cstat-no" title="statement not covered" > this.progress = this.initializeProgress();</span>
1492
- <span class="cstat-no" title="statement not covered" ></span>
1493
- <span class="cstat-no" title="statement not covered" > this.emit('migration:started', { source: this.config.source });</span>
1494
- <span class="cstat-no" title="statement not covered" ></span>
1495
- <span class="cstat-no" title="statement not covered" > try {</span>
1496
- <span class="cstat-no" title="statement not covered" > // Load entries from source</span>
1497
- <span class="cstat-no" title="statement not covered" > const entries = await this.loadFromSource();</span>
1498
- <span class="cstat-no" title="statement not covered" > this.progress.total = entries.length;</span>
1499
- <span class="cstat-no" title="statement not covered" > this.progress.totalBatches = Math.ceil(entries.length / this.config.batchSize);</span>
1500
- <span class="cstat-no" title="statement not covered" ></span>
1501
- <span class="cstat-no" title="statement not covered" > this.emit('migration:progress', { ...this.progress });</span>
1502
- <span class="cstat-no" title="statement not covered" ></span>
1503
- <span class="cstat-no" title="statement not covered" > // Process in batches</span>
1504
- <span class="cstat-no" title="statement not covered" > for (let i = 0; i &lt; entries.length; i += this.config.batchSize) {</span>
1505
- <span class="cstat-no" title="statement not covered" > const batch = entries.slice(i, i + this.config.batchSize);</span>
1506
- <span class="cstat-no" title="statement not covered" > this.progress.currentBatch = Math.floor(i / this.config.batchSize) + 1;</span>
1507
- <span class="cstat-no" title="statement not covered" ></span>
1508
- <span class="cstat-no" title="statement not covered" > await this.processBatch(batch);</span>
1509
- <span class="cstat-no" title="statement not covered" ></span>
1510
- <span class="cstat-no" title="statement not covered" > this.progress.percentage = Math.round(</span>
1511
- <span class="cstat-no" title="statement not covered" > (this.progress.migrated / this.progress.total) * 100</span>
1512
- <span class="cstat-no" title="statement not covered" > );</span>
1513
- <span class="cstat-no" title="statement not covered" > this.progress.estimatedTimeRemaining = this.estimateTimeRemaining(</span>
1514
- <span class="cstat-no" title="statement not covered" > startTime,</span>
1515
- <span class="cstat-no" title="statement not covered" > this.progress.migrated,</span>
1516
- <span class="cstat-no" title="statement not covered" > this.progress.total</span>
1517
- <span class="cstat-no" title="statement not covered" > );</span>
1518
- <span class="cstat-no" title="statement not covered" ></span>
1519
- <span class="cstat-no" title="statement not covered" > this.emit('migration:progress', { ...this.progress });</span>
1520
- <span class="cstat-no" title="statement not covered" > }</span>
1521
- <span class="cstat-no" title="statement not covered" ></span>
1522
- <span class="cstat-no" title="statement not covered" > const duration = Date.now() - startTime;</span>
1523
- <span class="cstat-no" title="statement not covered" ></span>
1524
- <span class="cstat-no" title="statement not covered" > const result: MigrationResult = {</span>
1525
- <span class="cstat-no" title="statement not covered" > success: this.progress.failed === 0 || this.config.continueOnError,</span>
1526
- <span class="cstat-no" title="statement not covered" > progress: { ...this.progress },</span>
1527
- <span class="cstat-no" title="statement not covered" > duration,</span>
1528
- <span class="cstat-no" title="statement not covered" > summary: this.generateSummary(),</span>
1529
- <span class="cstat-no" title="statement not covered" > };</span>
1530
- <span class="cstat-no" title="statement not covered" ></span>
1531
- <span class="cstat-no" title="statement not covered" > this.emit('migration:completed', result);</span>
1532
- <span class="cstat-no" title="statement not covered" > return result;</span>
1533
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1534
- <span class="cstat-no" title="statement not covered" > const duration = Date.now() - startTime;</span>
1535
- <span class="cstat-no" title="statement not covered" ></span>
1536
- <span class="cstat-no" title="statement not covered" > const result: MigrationResult = {</span>
1537
- <span class="cstat-no" title="statement not covered" > success: false,</span>
1538
- <span class="cstat-no" title="statement not covered" > progress: { ...this.progress },</span>
1539
- <span class="cstat-no" title="statement not covered" > duration,</span>
1540
- <span class="cstat-no" title="statement not covered" > summary: `Migration failed: ${(error as Error).message}`,</span>
1541
- <span class="cstat-no" title="statement not covered" > };</span>
1542
- <span class="cstat-no" title="statement not covered" ></span>
1543
- <span class="cstat-no" title="statement not covered" > this.emit('migration:failed', { error, result });</span>
1544
- <span class="cstat-no" title="statement not covered" > return result;</span>
1545
- <span class="cstat-no" title="statement not covered" > }</span>
1546
- <span class="cstat-no" title="statement not covered" > }</span>
1547
- <span class="cstat-no" title="statement not covered" ></span>
1548
- <span class="cstat-no" title="statement not covered" > /**</span>
1549
- <span class="cstat-no" title="statement not covered" > * Get current migration progress</span>
1550
- <span class="cstat-no" title="statement not covered" > */</span>
1551
- <span class="cstat-no" title="statement not covered" > getProgress(): MigrationProgress {</span>
1552
- <span class="cstat-no" title="statement not covered" > return { ...this.progress };</span>
1553
- <span class="cstat-no" title="statement not covered" > }</span>
1554
- <span class="cstat-no" title="statement not covered" ></span>
1555
- <span class="cstat-no" title="statement not covered" > // ===== Source Loaders =====</span>
1556
- <span class="cstat-no" title="statement not covered" ></span>
1557
- <span class="cstat-no" title="statement not covered" > private async loadFromSource(): Promise&lt;LegacyEntry[]&gt; {</span>
1558
- <span class="cstat-no" title="statement not covered" > switch (this.config.source) {</span>
1559
- <span class="cstat-no" title="statement not covered" > case 'sqlite':</span>
1560
- <span class="cstat-no" title="statement not covered" > return this.loadFromSQLite();</span>
1561
- <span class="cstat-no" title="statement not covered" > case 'markdown':</span>
1562
- <span class="cstat-no" title="statement not covered" > return this.loadFromMarkdown();</span>
1563
- <span class="cstat-no" title="statement not covered" > case 'json':</span>
1564
- <span class="cstat-no" title="statement not covered" > return this.loadFromJSON();</span>
1565
- <span class="cstat-no" title="statement not covered" > case 'memory-manager':</span>
1566
- <span class="cstat-no" title="statement not covered" > return this.loadFromMemoryManager();</span>
1567
- <span class="cstat-no" title="statement not covered" > case 'swarm-memory':</span>
1568
- <span class="cstat-no" title="statement not covered" > return this.loadFromSwarmMemory();</span>
1569
- <span class="cstat-no" title="statement not covered" > case 'distributed-memory':</span>
1570
- <span class="cstat-no" title="statement not covered" > return this.loadFromDistributedMemory();</span>
1571
- <span class="cstat-no" title="statement not covered" > default:</span>
1572
- <span class="cstat-no" title="statement not covered" > throw new Error(`Unknown migration source: ${this.config.source}`);</span>
1573
- <span class="cstat-no" title="statement not covered" > }</span>
1574
- <span class="cstat-no" title="statement not covered" > }</span>
1575
- <span class="cstat-no" title="statement not covered" ></span>
1576
- <span class="cstat-no" title="statement not covered" > private async loadFromSQLite(): Promise&lt;LegacyEntry[]&gt; {</span>
1577
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1578
- <span class="cstat-no" title="statement not covered" > const dbPath = this.config.sourcePath;</span>
1579
- <span class="cstat-no" title="statement not covered" ></span>
1580
- <span class="cstat-no" title="statement not covered" > try {</span>
1581
- <span class="cstat-no" title="statement not covered" > // Dynamic import for better-sqlite3 or similar</span>
1582
- <span class="cstat-no" title="statement not covered" > // In production, would use actual SQLite library</span>
1583
- <span class="cstat-no" title="statement not covered" > const fileContent = await fs.readFile(dbPath);</span>
1584
- <span class="cstat-no" title="statement not covered" ></span>
1585
- <span class="cstat-no" title="statement not covered" > // Parse SQLite format (simplified - actual implementation would use SQLite library)</span>
1586
- <span class="cstat-no" title="statement not covered" > // For now, we'll try to read it as a JSON export format</span>
1587
- <span class="cstat-no" title="statement not covered" > if (dbPath.endsWith('.json')) {</span>
1588
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(fileContent.toString());</span>
1589
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1590
- <span class="cstat-no" title="statement not covered" > return data;</span>
1591
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1592
- <span class="cstat-no" title="statement not covered" > return data.entries;</span>
1593
- <span class="cstat-no" title="statement not covered" > }</span>
1594
- <span class="cstat-no" title="statement not covered" > }</span>
1595
- <span class="cstat-no" title="statement not covered" ></span>
1596
- <span class="cstat-no" title="statement not covered" > // SQLite parsing would go here using better-sqlite3 or sql.js</span>
1597
- <span class="cstat-no" title="statement not covered" > this.emit('migration:warning', {</span>
1598
- <span class="cstat-no" title="statement not covered" > message: 'Direct SQLite parsing requires additional setup. Using export format.',</span>
1599
- <span class="cstat-no" title="statement not covered" > });</span>
1600
- <span class="cstat-no" title="statement not covered" ></span>
1601
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1602
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1603
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load SQLite: ${(error as Error).message}`);</span>
1604
- <span class="cstat-no" title="statement not covered" > }</span>
1605
- <span class="cstat-no" title="statement not covered" > }</span>
1606
- <span class="cstat-no" title="statement not covered" ></span>
1607
- <span class="cstat-no" title="statement not covered" > private async loadFromMarkdown(): Promise&lt;LegacyEntry[]&gt; {</span>
1608
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1609
- <span class="cstat-no" title="statement not covered" > const basePath = this.config.sourcePath;</span>
1610
- <span class="cstat-no" title="statement not covered" ></span>
1611
- <span class="cstat-no" title="statement not covered" > try {</span>
1612
- <span class="cstat-no" title="statement not covered" > const files = await this.walkDirectory(basePath, '.md');</span>
1613
- <span class="cstat-no" title="statement not covered" ></span>
1614
- <span class="cstat-no" title="statement not covered" > for (const filePath of files) {</span>
1615
- <span class="cstat-no" title="statement not covered" > try {</span>
1616
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1617
- <span class="cstat-no" title="statement not covered" > const entry = this.parseMarkdownEntry(filePath, content, basePath);</span>
1618
- <span class="cstat-no" title="statement not covered" > if (entry) {</span>
1619
- <span class="cstat-no" title="statement not covered" > entries.push(entry);</span>
1620
- <span class="cstat-no" title="statement not covered" > }</span>
1621
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1622
- <span class="cstat-no" title="statement not covered" > this.addError(filePath, (error as Error).message, 'PARSE_ERROR', true);</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" > return entries;</span>
1627
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1628
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load Markdown: ${(error as Error).message}`);</span>
1629
- <span class="cstat-no" title="statement not covered" > }</span>
1630
- <span class="cstat-no" title="statement not covered" > }</span>
1631
- <span class="cstat-no" title="statement not covered" ></span>
1632
- <span class="cstat-no" title="statement not covered" > private async loadFromJSON(): Promise&lt;LegacyEntry[]&gt; {</span>
1633
- <span class="cstat-no" title="statement not covered" > const filePath = this.config.sourcePath;</span>
1634
- <span class="cstat-no" title="statement not covered" ></span>
1635
- <span class="cstat-no" title="statement not covered" > try {</span>
1636
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1637
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(content);</span>
1638
- <span class="cstat-no" title="statement not covered" ></span>
1639
- <span class="cstat-no" title="statement not covered" > // Handle different JSON formats</span>
1640
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1641
- <span class="cstat-no" title="statement not covered" > return data;</span>
1642
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1643
- <span class="cstat-no" title="statement not covered" > return data.entries;</span>
1644
- <span class="cstat-no" title="statement not covered" > } else if (typeof data === 'object') {</span>
1645
- <span class="cstat-no" title="statement not covered" > // Assume it's a namespace -&gt; entries map</span>
1646
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1647
- <span class="cstat-no" title="statement not covered" > for (const [namespace, namespaceEntries] of Object.entries(data)) {</span>
1648
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(namespaceEntries)) {</span>
1649
- <span class="cstat-no" title="statement not covered" > for (const entry of namespaceEntries) {</span>
1650
- <span class="cstat-no" title="statement not covered" > entries.push({ ...entry, namespace });</span>
1651
- <span class="cstat-no" title="statement not covered" > }</span>
1652
- <span class="cstat-no" title="statement not covered" > }</span>
1653
- <span class="cstat-no" title="statement not covered" > }</span>
1654
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1655
- <span class="cstat-no" title="statement not covered" > }</span>
1656
- <span class="cstat-no" title="statement not covered" ></span>
1657
- <span class="cstat-no" title="statement not covered" > return [];</span>
1658
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1659
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load JSON: ${(error as Error).message}`);</span>
1660
- <span class="cstat-no" title="statement not covered" > }</span>
1661
- <span class="cstat-no" title="statement not covered" > }</span>
1662
- <span class="cstat-no" title="statement not covered" ></span>
1663
- <span class="cstat-no" title="statement not covered" > private async loadFromMemoryManager(): Promise&lt;LegacyEntry[]&gt; {</span>
1664
- <span class="cstat-no" title="statement not covered" > // Would integrate with existing MemoryManager instance</span>
1665
- <span class="cstat-no" title="statement not covered" > // For now, try to load from common paths</span>
1666
- <span class="cstat-no" title="statement not covered" > const possiblePaths = [</span>
1667
- <span class="cstat-no" title="statement not covered" > './memory/memory-store.json',</span>
1668
- <span class="cstat-no" title="statement not covered" > './.swarm/memory.db',</span>
1669
- <span class="cstat-no" title="statement not covered" > './memory.json',</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" > for (const p of possiblePaths) {</span>
1673
- <span class="cstat-no" title="statement not covered" > try {</span>
1674
- <span class="cstat-no" title="statement not covered" > const fullPath = path.resolve(this.config.sourcePath, p);</span>
1675
- <span class="cstat-no" title="statement not covered" > await fs.access(fullPath);</span>
1676
- <span class="cstat-no" title="statement not covered" > return this.loadFromJSON();</span>
1677
- <span class="cstat-no" title="statement not covered" > } catch {</span>
1678
- <span class="cstat-no" title="statement not covered" > continue;</span>
1679
- <span class="cstat-no" title="statement not covered" > }</span>
1680
- <span class="cstat-no" title="statement not covered" > }</span>
1681
- <span class="cstat-no" title="statement not covered" ></span>
1682
- <span class="cstat-no" title="statement not covered" > return [];</span>
1683
- <span class="cstat-no" title="statement not covered" > }</span>
1684
- <span class="cstat-no" title="statement not covered" ></span>
1685
- <span class="cstat-no" title="statement not covered" > private async loadFromSwarmMemory(): Promise&lt;LegacyEntry[]&gt; {</span>
1686
- <span class="cstat-no" title="statement not covered" > // Would integrate with SwarmMemory partitions</span>
1687
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1688
- <span class="cstat-no" title="statement not covered" > const basePath = this.config.sourcePath;</span>
1689
- <span class="cstat-no" title="statement not covered" ></span>
1690
- <span class="cstat-no" title="statement not covered" > try {</span>
1691
- <span class="cstat-no" title="statement not covered" > // Check for swarm memory directory structure</span>
1692
- <span class="cstat-no" title="statement not covered" > const partitionsPath = path.join(basePath, '.swarm', 'memory');</span>
1693
- <span class="cstat-no" title="statement not covered" > const files = await this.walkDirectory(partitionsPath, '.json');</span>
1694
- <span class="cstat-no" title="statement not covered" ></span>
1695
- <span class="cstat-no" title="statement not covered" > for (const filePath of files) {</span>
1696
- <span class="cstat-no" title="statement not covered" > try {</span>
1697
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1698
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(content);</span>
1699
- <span class="cstat-no" title="statement not covered" ></span>
1700
- <span class="cstat-no" title="statement not covered" > // Extract namespace from file path</span>
1701
- <span class="cstat-no" title="statement not covered" > const relativePath = path.relative(partitionsPath, filePath);</span>
1702
- <span class="cstat-no" title="statement not covered" > const namespace = path.dirname(relativePath).replace(/\\/g, '/');</span>
1703
- <span class="cstat-no" title="statement not covered" ></span>
1704
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1705
- <span class="cstat-no" title="statement not covered" > entries.push(...data.map((e: LegacyEntry) =&gt; ({ ...e, namespace })));</span>
1706
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1707
- <span class="cstat-no" title="statement not covered" > entries.push(...data.entries.map((e: LegacyEntry) =&gt; ({ ...e, namespace })));</span>
1708
- <span class="cstat-no" title="statement not covered" > }</span>
1709
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1710
- <span class="cstat-no" title="statement not covered" > this.addError(filePath, (error as Error).message, 'PARSE_ERROR', true);</span>
1711
- <span class="cstat-no" title="statement not covered" > }</span>
1712
- <span class="cstat-no" title="statement not covered" > }</span>
1713
- <span class="cstat-no" title="statement not covered" ></span>
1714
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1715
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1716
- <span class="cstat-no" title="statement not covered" > return [];</span>
1717
- <span class="cstat-no" title="statement not covered" > }</span>
1718
- <span class="cstat-no" title="statement not covered" > }</span>
1719
- <span class="cstat-no" title="statement not covered" ></span>
1720
- <span class="cstat-no" title="statement not covered" > private async loadFromDistributedMemory(): Promise&lt;LegacyEntry[]&gt; {</span>
1721
- <span class="cstat-no" title="statement not covered" > // Would integrate with DistributedMemorySystem nodes</span>
1722
- <span class="cstat-no" title="statement not covered" > return this.loadFromSwarmMemory(); // Similar structure</span>
1723
- <span class="cstat-no" title="statement not covered" > }</span>
1724
- <span class="cstat-no" title="statement not covered" ></span>
1725
- <span class="cstat-no" title="statement not covered" > // ===== Batch Processing =====</span>
1726
- <span class="cstat-no" title="statement not covered" ></span>
1727
- <span class="cstat-no" title="statement not covered" > private async processBatch(batch: LegacyEntry[]): Promise&lt;void&gt; {</span>
1728
- <span class="cstat-no" title="statement not covered" > for (const legacyEntry of batch) {</span>
1729
- <span class="cstat-no" title="statement not covered" > try {</span>
1730
- <span class="cstat-no" title="statement not covered" > // Validate if enabled</span>
1731
- <span class="cstat-no" title="statement not covered" > if (this.config.validateData) {</span>
1732
- <span class="cstat-no" title="statement not covered" > const validation = this.validateEntry(legacyEntry);</span>
1733
- <span class="cstat-no" title="statement not covered" > if (!validation.valid) {</span>
1734
- <span class="cstat-no" title="statement not covered" > if (this.config.continueOnError) {</span>
1735
- <span class="cstat-no" title="statement not covered" > this.addError(</span>
1736
- <span class="cstat-no" title="statement not covered" > legacyEntry.key || 'unknown',</span>
1737
- <span class="cstat-no" title="statement not covered" > validation.reason || 'Validation failed',</span>
1738
- <span class="cstat-no" title="statement not covered" > 'VALIDATION_ERROR',</span>
1739
- <span class="cstat-no" title="statement not covered" > false</span>
1740
- <span class="cstat-no" title="statement not covered" > );</span>
1741
- <span class="cstat-no" title="statement not covered" > this.progress.skipped++;</span>
1742
- <span class="cstat-no" title="statement not covered" > continue;</span>
1743
- <span class="cstat-no" title="statement not covered" > } else {</span>
1744
- <span class="cstat-no" title="statement not covered" > throw new Error(validation.reason);</span>
1745
- <span class="cstat-no" title="statement not covered" > }</span>
1746
- <span class="cstat-no" title="statement not covered" > }</span>
1747
- <span class="cstat-no" title="statement not covered" > }</span>
1748
- <span class="cstat-no" title="statement not covered" ></span>
1749
- <span class="cstat-no" title="statement not covered" > // Transform to new format</span>
1750
- <span class="cstat-no" title="statement not covered" > const newEntry = await this.transformEntry(legacyEntry);</span>
1751
- <span class="cstat-no" title="statement not covered" ></span>
1752
- <span class="cstat-no" title="statement not covered" > // Store in target</span>
1753
- <span class="cstat-no" title="statement not covered" > await this.target.store(newEntry);</span>
1754
- <span class="cstat-no" title="statement not covered" > this.progress.migrated++;</span>
1755
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1756
- <span class="cstat-no" title="statement not covered" > if (this.config.continueOnError) {</span>
1757
- <span class="cstat-no" title="statement not covered" > this.addError(</span>
1758
- <span class="cstat-no" title="statement not covered" > legacyEntry.key || 'unknown',</span>
1759
- <span class="cstat-no" title="statement not covered" > (error as Error).message,</span>
1760
- <span class="cstat-no" title="statement not covered" > 'STORE_ERROR',</span>
1761
- <span class="cstat-no" title="statement not covered" > true</span>
1762
- <span class="cstat-no" title="statement not covered" > );</span>
1763
- <span class="cstat-no" title="statement not covered" > this.progress.failed++;</span>
1764
- <span class="cstat-no" title="statement not covered" > } else {</span>
1765
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1766
- <span class="cstat-no" title="statement not covered" > }</span>
1767
- <span class="cstat-no" title="statement not covered" > }</span>
1768
- <span class="cstat-no" title="statement not covered" > }</span>
1769
- <span class="cstat-no" title="statement not covered" > }</span>
1770
- <span class="cstat-no" title="statement not covered" ></span>
1771
- <span class="cstat-no" title="statement not covered" > private async transformEntry(legacy: LegacyEntry): Promise&lt;MemoryEntry&gt; {</span>
1772
- <span class="cstat-no" title="statement not covered" > // Map namespace if configured</span>
1773
- <span class="cstat-no" title="statement not covered" > let namespace = legacy.namespace || 'default';</span>
1774
- <span class="cstat-no" title="statement not covered" > if (this.config.namespaceMapping &amp;&amp; this.config.namespaceMapping[namespace]) {</span>
1775
- <span class="cstat-no" title="statement not covered" > namespace = this.config.namespaceMapping[namespace];</span>
1776
- <span class="cstat-no" title="statement not covered" > }</span>
1777
- <span class="cstat-no" title="statement not covered" ></span>
1778
- <span class="cstat-no" title="statement not covered" > // Determine content</span>
1779
- <span class="cstat-no" title="statement not covered" > const content =</span>
1780
- <span class="cstat-no" title="statement not covered" > typeof legacy.value === 'string'</span>
1781
- <span class="cstat-no" title="statement not covered" > ? legacy.value</span>
1782
- <span class="cstat-no" title="statement not covered" > : JSON.stringify(legacy.value);</span>
1783
- <span class="cstat-no" title="statement not covered" ></span>
1784
- <span class="cstat-no" title="statement not covered" > // Map type if configured</span>
1785
- <span class="cstat-no" title="statement not covered" > let type: MemoryType = 'semantic';</span>
1786
- <span class="cstat-no" title="statement not covered" > if (legacy.metadata?.type &amp;&amp; typeof legacy.metadata.type === 'string') {</span>
1787
- <span class="cstat-no" title="statement not covered" > if (this.config.typeMapping &amp;&amp; this.config.typeMapping[legacy.metadata.type]) {</span>
1788
- <span class="cstat-no" title="statement not covered" > type = this.config.typeMapping[legacy.metadata.type];</span>
1789
- <span class="cstat-no" title="statement not covered" > } else if (this.isValidMemoryType(legacy.metadata.type)) {</span>
1790
- <span class="cstat-no" title="statement not covered" > type = legacy.metadata.type as MemoryType;</span>
1791
- <span class="cstat-no" title="statement not covered" > }</span>
1792
- <span class="cstat-no" title="statement not covered" > }</span>
1793
- <span class="cstat-no" title="statement not covered" ></span>
1794
- <span class="cstat-no" title="statement not covered" > // Parse timestamps</span>
1795
- <span class="cstat-no" title="statement not covered" > const createdAt = this.parseTimestamp(</span>
1796
- <span class="cstat-no" title="statement not covered" > legacy.createdAt || legacy.created_at || legacy.timestamp</span>
1797
- <span class="cstat-no" title="statement not covered" > );</span>
1798
- <span class="cstat-no" title="statement not covered" > const updatedAt = this.parseTimestamp(</span>
1799
- <span class="cstat-no" title="statement not covered" > legacy.updatedAt || legacy.updated_at || legacy.timestamp</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" > const input: MemoryEntryInput = {</span>
1803
- <span class="cstat-no" title="statement not covered" > key: legacy.key,</span>
1804
- <span class="cstat-no" title="statement not covered" > content,</span>
1805
- <span class="cstat-no" title="statement not covered" > type,</span>
1806
- <span class="cstat-no" title="statement not covered" > namespace,</span>
1807
- <span class="cstat-no" title="statement not covered" > tags: legacy.tags || [],</span>
1808
- <span class="cstat-no" title="statement not covered" > metadata: {</span>
1809
- <span class="cstat-no" title="statement not covered" > ...legacy.metadata,</span>
1810
- <span class="cstat-no" title="statement not covered" > migrated: true,</span>
1811
- <span class="cstat-no" title="statement not covered" > migrationSource: this.config.source,</span>
1812
- <span class="cstat-no" title="statement not covered" > migrationTimestamp: Date.now(),</span>
1813
- <span class="cstat-no" title="statement not covered" > originalValue: legacy.value,</span>
1814
- <span class="cstat-no" title="statement not covered" > },</span>
1815
- <span class="cstat-no" title="statement not covered" > };</span>
1816
- <span class="cstat-no" title="statement not covered" ></span>
1817
- <span class="cstat-no" title="statement not covered" > const entry = createDefaultEntry(input);</span>
1818
- <span class="cstat-no" title="statement not covered" > entry.createdAt = createdAt;</span>
1819
- <span class="cstat-no" title="statement not covered" > entry.updatedAt = updatedAt;</span>
1820
- <span class="cstat-no" title="statement not covered" ></span>
1821
- <span class="cstat-no" title="statement not covered" > // Generate embedding if configured</span>
1822
- <span class="cstat-no" title="statement not covered" > if (this.config.generateEmbeddings &amp;&amp; this.embeddingGenerator) {</span>
1823
- <span class="cstat-no" title="statement not covered" > try {</span>
1824
- <span class="cstat-no" title="statement not covered" > entry.embedding = await this.embeddingGenerator(content);</span>
1825
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1826
- <span class="cstat-no" title="statement not covered" > // Log but don't fail</span>
1827
- <span class="cstat-no" title="statement not covered" > this.emit('migration:warning', {</span>
1828
- <span class="cstat-no" title="statement not covered" > message: `Failed to generate embedding for ${legacy.key}: ${(error as Error).message}`,</span>
1829
- <span class="cstat-no" title="statement not covered" > });</span>
1830
- <span class="cstat-no" title="statement not covered" > }</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" > return entry;</span>
1834
- <span class="cstat-no" title="statement not covered" > }</span>
1835
- <span class="cstat-no" title="statement not covered" ></span>
1836
- <span class="cstat-no" title="statement not covered" > // ===== Helper Methods =====</span>
1837
- <span class="cstat-no" title="statement not covered" ></span>
1838
- <span class="cstat-no" title="statement not covered" > private initializeProgress(): MigrationProgress {</span>
1839
- <span class="cstat-no" title="statement not covered" > return {</span>
1840
- <span class="cstat-no" title="statement not covered" > total: 0,</span>
1841
- <span class="cstat-no" title="statement not covered" > migrated: 0,</span>
1842
- <span class="cstat-no" title="statement not covered" > failed: 0,</span>
1843
- <span class="cstat-no" title="statement not covered" > skipped: 0,</span>
1844
- <span class="cstat-no" title="statement not covered" > currentBatch: 0,</span>
1845
- <span class="cstat-no" title="statement not covered" > totalBatches: 0,</span>
1846
- <span class="cstat-no" title="statement not covered" > percentage: 0,</span>
1847
- <span class="cstat-no" title="statement not covered" > estimatedTimeRemaining: 0,</span>
1848
- <span class="cstat-no" title="statement not covered" > errors: [],</span>
1849
- <span class="cstat-no" title="statement not covered" > };</span>
1850
- <span class="cstat-no" title="statement not covered" > }</span>
1851
- <span class="cstat-no" title="statement not covered" ></span>
1852
- <span class="cstat-no" title="statement not covered" > private validateEntry(entry: LegacyEntry): { valid: boolean; reason?: string } {</span>
1853
- <span class="cstat-no" title="statement not covered" > if (!entry.key || typeof entry.key !== 'string') {</span>
1854
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Missing or invalid key' };</span>
1855
- <span class="cstat-no" title="statement not covered" > }</span>
1856
- <span class="cstat-no" title="statement not covered" ></span>
1857
- <span class="cstat-no" title="statement not covered" > if (entry.value === undefined) {</span>
1858
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Missing value' };</span>
1859
- <span class="cstat-no" title="statement not covered" > }</span>
1860
- <span class="cstat-no" title="statement not covered" ></span>
1861
- <span class="cstat-no" title="statement not covered" > if (entry.key.length &gt; 500) {</span>
1862
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Key too long (max 500 chars)' };</span>
1863
- <span class="cstat-no" title="statement not covered" > }</span>
1864
- <span class="cstat-no" title="statement not covered" ></span>
1865
- <span class="cstat-no" title="statement not covered" > return { valid: true };</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" > private addError(</span>
1869
- <span class="cstat-no" title="statement not covered" > entryId: string,</span>
1870
- <span class="cstat-no" title="statement not covered" > message: string,</span>
1871
- <span class="cstat-no" title="statement not covered" > code: string,</span>
1872
- <span class="cstat-no" title="statement not covered" > recoverable: boolean</span>
1873
- <span class="cstat-no" title="statement not covered" > ): void {</span>
1874
- <span class="cstat-no" title="statement not covered" > const error: MigrationError = {</span>
1875
- <span class="cstat-no" title="statement not covered" > entryId,</span>
1876
- <span class="cstat-no" title="statement not covered" > message,</span>
1877
- <span class="cstat-no" title="statement not covered" > code,</span>
1878
- <span class="cstat-no" title="statement not covered" > recoverable,</span>
1879
- <span class="cstat-no" title="statement not covered" > };</span>
1880
- <span class="cstat-no" title="statement not covered" > this.progress.errors.push(error);</span>
1881
- <span class="cstat-no" title="statement not covered" > this.emit('migration:error', error);</span>
1882
- <span class="cstat-no" title="statement not covered" > }</span>
1883
- <span class="cstat-no" title="statement not covered" ></span>
1884
- <span class="cstat-no" title="statement not covered" > private parseTimestamp(value: string | number | undefined): number {</span>
1885
- <span class="cstat-no" title="statement not covered" > if (!value) return Date.now();</span>
1886
- <span class="cstat-no" title="statement not covered" ></span>
1887
- <span class="cstat-no" title="statement not covered" > if (typeof value === 'number') {</span>
1888
- <span class="cstat-no" title="statement not covered" > // Handle both milliseconds and seconds</span>
1889
- <span class="cstat-no" title="statement not covered" > return value &gt; 1e12 ? value : value * 1000;</span>
1890
- <span class="cstat-no" title="statement not covered" > }</span>
1891
- <span class="cstat-no" title="statement not covered" ></span>
1892
- <span class="cstat-no" title="statement not covered" > const parsed = Date.parse(value);</span>
1893
- <span class="cstat-no" title="statement not covered" > return isNaN(parsed) ? Date.now() : parsed;</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" > private isValidMemoryType(type: string): boolean {</span>
1897
- <span class="cstat-no" title="statement not covered" > return ['episodic', 'semantic', 'procedural', 'working', 'cache'].includes(type);</span>
1898
- <span class="cstat-no" title="statement not covered" > }</span>
1899
- <span class="cstat-no" title="statement not covered" ></span>
1900
- <span class="cstat-no" title="statement not covered" > private estimateTimeRemaining(</span>
1901
- <span class="cstat-no" title="statement not covered" > startTime: number,</span>
1902
- <span class="cstat-no" title="statement not covered" > completed: number,</span>
1903
- <span class="cstat-no" title="statement not covered" > total: number</span>
1904
- <span class="cstat-no" title="statement not covered" > ): number {</span>
1905
- <span class="cstat-no" title="statement not covered" > if (completed === 0) return 0;</span>
1906
- <span class="cstat-no" title="statement not covered" ></span>
1907
- <span class="cstat-no" title="statement not covered" > const elapsed = Date.now() - startTime;</span>
1908
- <span class="cstat-no" title="statement not covered" > const rate = completed / elapsed;</span>
1909
- <span class="cstat-no" title="statement not covered" > const remaining = total - completed;</span>
1910
- <span class="cstat-no" title="statement not covered" ></span>
1911
- <span class="cstat-no" title="statement not covered" > return Math.round(remaining / rate);</span>
1912
- <span class="cstat-no" title="statement not covered" > }</span>
1913
- <span class="cstat-no" title="statement not covered" ></span>
1914
- <span class="cstat-no" title="statement not covered" > private generateSummary(): string {</span>
1915
- <span class="cstat-no" title="statement not covered" > const { migrated, failed, skipped, total, errors } = this.progress;</span>
1916
- <span class="cstat-no" title="statement not covered" ></span>
1917
- <span class="cstat-no" title="statement not covered" > let summary = `Migrated ${migrated}/${total} entries`;</span>
1918
- <span class="cstat-no" title="statement not covered" ></span>
1919
- <span class="cstat-no" title="statement not covered" > if (failed &gt; 0) {</span>
1920
- <span class="cstat-no" title="statement not covered" > summary += `, ${failed} failed`;</span>
1921
- <span class="cstat-no" title="statement not covered" > }</span>
1922
- <span class="cstat-no" title="statement not covered" ></span>
1923
- <span class="cstat-no" title="statement not covered" > if (skipped &gt; 0) {</span>
1924
- <span class="cstat-no" title="statement not covered" > summary += `, ${skipped} skipped`;</span>
1925
- <span class="cstat-no" title="statement not covered" > }</span>
1926
- <span class="cstat-no" title="statement not covered" ></span>
1927
- <span class="cstat-no" title="statement not covered" > if (errors.length &gt; 0) {</span>
1928
- <span class="cstat-no" title="statement not covered" > const errorTypes = new Map&lt;string, number&gt;();</span>
1929
- <span class="cstat-no" title="statement not covered" > for (const error of errors) {</span>
1930
- <span class="cstat-no" title="statement not covered" > errorTypes.set(error.code, (errorTypes.get(error.code) || 0) + 1);</span>
1931
- <span class="cstat-no" title="statement not covered" > }</span>
1932
- <span class="cstat-no" title="statement not covered" ></span>
1933
- <span class="cstat-no" title="statement not covered" > const errorSummary = Array.from(errorTypes.entries())</span>
1934
- <span class="cstat-no" title="statement not covered" > .map(([code, count]) =&gt; `${code}: ${count}`)</span>
1935
- <span class="cstat-no" title="statement not covered" > .join(', ');</span>
1936
- <span class="cstat-no" title="statement not covered" ></span>
1937
- <span class="cstat-no" title="statement not covered" > summary += `. Errors: ${errorSummary}`;</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" > return summary;</span>
1941
- <span class="cstat-no" title="statement not covered" > }</span>
1942
- <span class="cstat-no" title="statement not covered" ></span>
1943
- <span class="cstat-no" title="statement not covered" > private async walkDirectory(dir: string, extension: string): Promise&lt;string[]&gt; {</span>
1944
- <span class="cstat-no" title="statement not covered" > const files: string[] = [];</span>
1945
- <span class="cstat-no" title="statement not covered" ></span>
1946
- <span class="cstat-no" title="statement not covered" > try {</span>
1947
- <span class="cstat-no" title="statement not covered" > const entries = await fs.readdir(dir, { withFileTypes: true });</span>
1948
- <span class="cstat-no" title="statement not covered" ></span>
1949
- <span class="cstat-no" title="statement not covered" > for (const entry of entries) {</span>
1950
- <span class="cstat-no" title="statement not covered" > const fullPath = path.join(dir, entry.name);</span>
1951
- <span class="cstat-no" title="statement not covered" ></span>
1952
- <span class="cstat-no" title="statement not covered" > if (entry.isDirectory()) {</span>
1953
- <span class="cstat-no" title="statement not covered" > const subFiles = await this.walkDirectory(fullPath, extension);</span>
1954
- <span class="cstat-no" title="statement not covered" > files.push(...subFiles);</span>
1955
- <span class="cstat-no" title="statement not covered" > } else if (entry.isFile() &amp;&amp; entry.name.endsWith(extension)) {</span>
1956
- <span class="cstat-no" title="statement not covered" > files.push(fullPath);</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" > } catch (error) {</span>
1960
- <span class="cstat-no" title="statement not covered" > // Directory doesn't exist or isn't readable</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" > return files;</span>
1964
- <span class="cstat-no" title="statement not covered" > }</span>
1965
- <span class="cstat-no" title="statement not covered" ></span>
1966
- <span class="cstat-no" title="statement not covered" > private parseMarkdownEntry(</span>
1967
- <span class="cstat-no" title="statement not covered" > filePath: string,</span>
1968
- <span class="cstat-no" title="statement not covered" > content: string,</span>
1969
- <span class="cstat-no" title="statement not covered" > basePath: string</span>
1970
- <span class="cstat-no" title="statement not covered" > ): LegacyEntry | null {</span>
1971
- <span class="cstat-no" title="statement not covered" > // Extract frontmatter if present</span>
1972
- <span class="cstat-no" title="statement not covered" > const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);</span>
1973
- <span class="cstat-no" title="statement not covered" ></span>
1974
- <span class="cstat-no" title="statement not covered" > let metadata: Record&lt;string, unknown&gt; = {};</span>
1975
- <span class="cstat-no" title="statement not covered" > let body = content;</span>
1976
- <span class="cstat-no" title="statement not covered" ></span>
1977
- <span class="cstat-no" title="statement not covered" > if (frontmatterMatch) {</span>
1978
- <span class="cstat-no" title="statement not covered" > try {</span>
1979
- <span class="cstat-no" title="statement not covered" > // Simple YAML-like parsing</span>
1980
- <span class="cstat-no" title="statement not covered" > const frontmatter = frontmatterMatch[1];</span>
1981
- <span class="cstat-no" title="statement not covered" > for (const line of frontmatter.split('\n')) {</span>
1982
- <span class="cstat-no" title="statement not covered" > const colonIndex = line.indexOf(':');</span>
1983
- <span class="cstat-no" title="statement not covered" > if (colonIndex &gt; 0) {</span>
1984
- <span class="cstat-no" title="statement not covered" > const key = line.substring(0, colonIndex).trim();</span>
1985
- <span class="cstat-no" title="statement not covered" > let value: unknown = line.substring(colonIndex + 1).trim();</span>
1986
- <span class="cstat-no" title="statement not covered" ></span>
1987
- <span class="cstat-no" title="statement not covered" > // Parse common types</span>
1988
- <span class="cstat-no" title="statement not covered" > if (value === 'true') value = true;</span>
1989
- <span class="cstat-no" title="statement not covered" > else if (value === 'false') value = false;</span>
1990
- <span class="cstat-no" title="statement not covered" > else if (typeof value === 'string' &amp;&amp; /^\d+$/.test(value)) value = parseInt(value, 10);</span>
1991
- <span class="cstat-no" title="statement not covered" > else if (typeof value === 'string' &amp;&amp; value.startsWith('[') &amp;&amp; value.endsWith(']')) {</span>
1992
- <span class="cstat-no" title="statement not covered" > try {</span>
1993
- <span class="cstat-no" title="statement not covered" > value = JSON.parse(value.replace(/'/g, '"'));</span>
1994
- <span class="cstat-no" title="statement not covered" > } catch {</span>
1995
- <span class="cstat-no" title="statement not covered" > // Keep as string</span>
1996
- <span class="cstat-no" title="statement not covered" > }</span>
1997
- <span class="cstat-no" title="statement not covered" > }</span>
1998
- <span class="cstat-no" title="statement not covered" ></span>
1999
- <span class="cstat-no" title="statement not covered" > metadata[key] = value;</span>
2000
- <span class="cstat-no" title="statement not covered" > }</span>
2001
- <span class="cstat-no" title="statement not covered" > }</span>
2002
- <span class="cstat-no" title="statement not covered" > body = frontmatterMatch[2];</span>
2003
- <span class="cstat-no" title="statement not covered" > } catch {</span>
2004
- <span class="cstat-no" title="statement not covered" > // Failed to parse frontmatter, use whole content</span>
2005
- <span class="cstat-no" title="statement not covered" > }</span>
2006
- <span class="cstat-no" title="statement not covered" > }</span>
2007
- <span class="cstat-no" title="statement not covered" ></span>
2008
- <span class="cstat-no" title="statement not covered" > // Derive key from file path</span>
2009
- <span class="cstat-no" title="statement not covered" > const relativePath = path.relative(basePath, filePath);</span>
2010
- <span class="cstat-no" title="statement not covered" > const key = relativePath</span>
2011
- <span class="cstat-no" title="statement not covered" > .replace(/\\/g, '/')</span>
2012
- <span class="cstat-no" title="statement not covered" > .replace(/\.md$/, '')</span>
2013
- <span class="cstat-no" title="statement not covered" > .replace(/\//g, ':');</span>
2014
- <span class="cstat-no" title="statement not covered" ></span>
2015
- <span class="cstat-no" title="statement not covered" > // Derive namespace from directory structure</span>
2016
- <span class="cstat-no" title="statement not covered" > const namespace = path.dirname(relativePath).replace(/\\/g, '/') || 'default';</span>
2017
- <span class="cstat-no" title="statement not covered" ></span>
2018
- <span class="cstat-no" title="statement not covered" > return {</span>
2019
- <span class="cstat-no" title="statement not covered" > key,</span>
2020
- <span class="cstat-no" title="statement not covered" > value: body.trim(),</span>
2021
- <span class="cstat-no" title="statement not covered" > namespace,</span>
2022
- <span class="cstat-no" title="statement not covered" > tags: Array.isArray(metadata.tags) ? metadata.tags : [],</span>
2023
- <span class="cstat-no" title="statement not covered" > metadata,</span>
2024
- <span class="cstat-no" title="statement not covered" > timestamp: Date.now(),</span>
2025
- <span class="cstat-no" title="statement not covered" > };</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" ></span>
2029
- <span class="cstat-no" title="statement not covered" >/**</span>
2030
- <span class="cstat-no" title="statement not covered" > * Convenience function to create a migrator</span>
2031
- <span class="cstat-no" title="statement not covered" > */</span>
2032
- <span class="cstat-no" title="statement not covered" >export function createMigrator(</span>
2033
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
2034
- <span class="cstat-no" title="statement not covered" > source: MigrationSource,</span>
2035
- <span class="cstat-no" title="statement not covered" > sourcePath: string,</span>
2036
- <span class="cstat-no" title="statement not covered" > options: Partial&lt;MigrationConfig&gt; = {},</span>
2037
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
2038
- <span class="cstat-no" title="statement not covered" >): MemoryMigrator {</span>
2039
- <span class="cstat-no" title="statement not covered" > return new MemoryMigrator(</span>
2040
- <span class="cstat-no" title="statement not covered" > target,</span>
2041
- <span class="cstat-no" title="statement not covered" > { source, sourcePath, ...options },</span>
2042
- <span class="cstat-no" title="statement not covered" > embeddingGenerator</span>
2043
- <span class="cstat-no" title="statement not covered" > );</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" >/**</span>
2047
- <span class="cstat-no" title="statement not covered" > * Migrate from multiple sources</span>
2048
- <span class="cstat-no" title="statement not covered" > */</span>
2049
- <span class="cstat-no" title="statement not covered" >export async function migrateMultipleSources(</span>
2050
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
2051
- <span class="cstat-no" title="statement not covered" > sources: Array&lt;{ source: MigrationSource; path: string }&gt;,</span>
2052
- <span class="cstat-no" title="statement not covered" > options: Partial&lt;MigrationConfig&gt; = {},</span>
2053
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
2054
- <span class="cstat-no" title="statement not covered" >): Promise&lt;MigrationResult[]&gt; {</span>
2055
- <span class="cstat-no" title="statement not covered" > const results: MigrationResult[] = [];</span>
2056
- <span class="cstat-no" title="statement not covered" ></span>
2057
- <span class="cstat-no" title="statement not covered" > for (const { source, path: sourcePath } of sources) {</span>
2058
- <span class="cstat-no" title="statement not covered" > const migrator = createMigrator(</span>
2059
- <span class="cstat-no" title="statement not covered" > target,</span>
2060
- <span class="cstat-no" title="statement not covered" > source,</span>
2061
- <span class="cstat-no" title="statement not covered" > sourcePath,</span>
2062
- <span class="cstat-no" title="statement not covered" > options,</span>
2063
- <span class="cstat-no" title="statement not covered" > embeddingGenerator</span>
2064
- <span class="cstat-no" title="statement not covered" > );</span>
2065
- <span class="cstat-no" title="statement not covered" > const result = await migrator.migrate();</span>
2066
- <span class="cstat-no" title="statement not covered" > results.push(result);</span>
2067
- <span class="cstat-no" title="statement not covered" > }</span>
2068
- <span class="cstat-no" title="statement not covered" ></span>
2069
- <span class="cstat-no" title="statement not covered" > return results;</span>
2070
- <span class="cstat-no" title="statement not covered" >}</span>
2071
- <span class="cstat-no" title="statement not covered" ></span>
2072
- <span class="cstat-no" title="statement not covered" >export default MemoryMigrator;</span>
2073
- &nbsp;</pre></td></tr></table></pre>
2074
-
2075
- <div class='push'></div><!-- for sticky footer -->
2076
- </div><!-- /wrapper -->
2077
- <div class='footer quiet pad2 space-top1 center small'>
2078
- Code coverage generated by
2079
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2080
- at 2026-01-05T21:16:54.160Z
2081
- </div>
2082
- <script src="../prettify.js"></script>
2083
- <script>
2084
- window.onload = function () {
2085
- prettyPrint();
2086
- };
2087
- </script>
2088
- <script src="../sorter.js"></script>
2089
- <script src="../block-navigation.js"></script>
2090
- </body>
2091
- </html>
2092
-