repoburg 1.3.127 → 1.3.129

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 (470) hide show
  1. package/backend/.env +2 -2
  2. package/backend/coverage/clover.xml +12003 -0
  3. package/backend/coverage/coverage-final.json +313 -0
  4. package/backend/coverage/lcov-report/base.css +224 -0
  5. package/backend/coverage/lcov-report/block-navigation.js +87 -0
  6. package/backend/coverage/lcov-report/favicon.png +0 -0
  7. package/backend/coverage/lcov-report/index.html +1301 -0
  8. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
  9. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
  10. package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
  11. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
  12. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
  13. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
  14. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
  15. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
  16. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
  17. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
  18. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
  19. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
  20. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
  21. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
  22. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
  23. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
  24. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
  25. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
  26. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
  27. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
  28. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
  29. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
  30. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
  31. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
  32. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
  33. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
  34. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
  35. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
  36. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
  37. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
  38. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
  39. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
  40. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
  41. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
  42. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
  43. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
  44. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
  45. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
  46. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
  47. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
  48. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
  49. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
  50. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
  51. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
  52. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
  53. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
  54. package/backend/coverage/lcov-report/prettify.css +1 -0
  55. package/backend/coverage/lcov-report/prettify.js +2 -0
  56. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  57. package/backend/coverage/lcov-report/sorter.js +210 -0
  58. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
  59. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
  60. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
  61. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
  62. package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
  63. package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
  64. package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
  65. package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
  66. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
  67. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
  68. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
  69. package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
  70. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
  71. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
  72. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
  73. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
  74. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
  75. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
  76. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
  77. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
  78. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
  79. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
  80. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
  81. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
  82. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
  83. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
  84. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
  85. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
  86. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
  87. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
  88. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
  89. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
  90. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
  91. package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
  92. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
  93. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
  94. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
  95. package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
  96. package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
  97. package/backend/coverage/lcov-report/src/common/index.html +116 -0
  98. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
  99. package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
  100. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
  101. package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
  102. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
  103. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
  104. package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
  105. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
  106. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
  107. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
  108. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
  109. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
  110. package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
  111. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
  112. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
  113. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
  114. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
  115. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
  116. package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
  117. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
  118. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
  119. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
  120. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
  121. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
  122. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
  123. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
  124. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
  125. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
  126. package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
  127. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
  128. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
  129. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
  130. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
  131. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
  132. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
  133. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
  134. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
  135. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
  136. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
  137. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
  138. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
  139. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
  140. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
  141. package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
  142. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
  143. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
  144. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
  145. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
  146. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
  147. package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
  148. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
  149. package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
  150. package/backend/coverage/lcov-report/src/events/index.html +146 -0
  151. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
  152. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
  153. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
  154. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
  155. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
  156. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
  157. package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
  158. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
  159. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
  160. package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
  161. package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
  162. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
  163. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
  164. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
  165. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
  166. package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
  167. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
  168. package/backend/coverage/lcov-report/src/index.html +206 -0
  169. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
  170. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
  171. package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
  172. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
  173. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
  174. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
  175. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
  176. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
  177. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
  178. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
  179. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
  180. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
  181. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
  182. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
  183. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
  184. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
  185. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
  186. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
  187. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
  188. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
  189. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
  190. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
  191. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
  192. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
  193. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
  194. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
  195. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
  196. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
  197. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
  198. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
  199. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
  200. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
  201. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
  202. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
  203. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
  204. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
  205. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
  206. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
  207. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
  208. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
  209. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
  210. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
  211. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
  212. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
  213. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
  214. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
  215. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
  216. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
  217. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
  218. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
  219. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
  220. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
  221. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
  222. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
  223. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
  224. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
  225. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
  226. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
  227. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
  228. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
  229. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
  230. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
  231. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
  232. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
  233. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
  234. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
  235. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
  236. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
  237. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
  238. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
  239. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
  240. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
  241. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
  242. package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
  243. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
  244. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
  245. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
  246. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
  247. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
  248. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
  249. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
  250. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
  251. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
  252. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
  253. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
  254. package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
  255. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
  256. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
  257. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
  258. package/backend/coverage/lcov-report/src/main.ts.html +463 -0
  259. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
  260. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
  261. package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
  262. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
  263. package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
  264. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
  265. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
  266. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
  267. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
  268. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
  269. package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
  270. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
  271. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
  272. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
  273. package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
  274. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
  275. package/backend/coverage/lcov-report/src/projects/index.html +146 -0
  276. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
  277. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
  278. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
  279. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
  280. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
  281. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
  282. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
  283. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
  284. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
  285. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
  286. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
  287. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
  288. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
  289. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
  290. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
  291. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
  292. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
  293. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
  294. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
  295. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
  296. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
  297. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
  298. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
  299. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
  300. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
  301. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
  302. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
  303. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
  304. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
  305. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
  306. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
  307. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
  308. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
  309. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
  310. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
  311. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
  312. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
  313. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
  314. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
  315. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
  316. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
  317. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
  318. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
  319. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
  320. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
  321. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
  322. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
  323. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
  324. package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
  325. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
  326. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
  327. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
  328. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
  329. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
  330. package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
  331. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
  332. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
  333. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
  334. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
  335. package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
  336. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
  337. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
  338. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
  339. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
  340. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
  341. package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
  342. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
  343. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
  344. package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
  345. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
  346. package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
  347. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
  348. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
  349. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
  350. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
  351. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
  352. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
  353. package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
  354. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
  355. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
  356. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
  357. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
  358. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
  359. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
  360. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
  361. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
  362. package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
  363. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
  364. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
  365. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
  366. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
  367. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
  368. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
  369. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
  370. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
  371. package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
  372. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
  373. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
  374. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
  375. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
  376. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
  377. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
  378. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
  379. package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
  380. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
  381. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
  382. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
  383. package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
  384. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
  385. package/backend/coverage/lcov-report/src/types/index.html +116 -0
  386. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
  387. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
  388. package/backend/coverage/lcov-report/src/utils/index.html +191 -0
  389. package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
  390. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
  391. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
  392. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
  393. package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
  394. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
  395. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
  396. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
  397. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
  398. package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
  399. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
  400. package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
  401. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
  402. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
  403. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
  404. package/backend/coverage/lcov.info +20220 -0
  405. package/backend/dist/src/context-templates/context-templates.service.js +0 -3
  406. package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
  407. package/backend/dist/src/core-entities/system-prompt.entity.d.ts +1 -0
  408. package/backend/dist/src/core-entities/system-prompt.entity.js +8 -0
  409. package/backend/dist/src/core-entities/system-prompt.entity.js.map +1 -1
  410. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js +2 -0
  411. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js.map +1 -1
  412. package/backend/dist/src/llm-orchestration/tool-schema.service.js +8 -4
  413. package/backend/dist/src/llm-orchestration/tool-schema.service.js.map +1 -1
  414. package/backend/dist/src/mcp/mcp.service.d.ts +1 -0
  415. package/backend/dist/src/mcp/mcp.service.js +16 -0
  416. package/backend/dist/src/mcp/mcp.service.js.map +1 -1
  417. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  418. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
  419. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  420. package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +9 -0
  421. package/backend/dist/src/seeding/data/sub-agents/browser-use.js +13 -0
  422. package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -0
  423. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +4 -0
  424. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +40 -0
  425. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -0
  426. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
  427. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
  428. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
  429. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
  430. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
  431. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
  432. package/backend/dist/src/seeding/sub-agent-seeding.service.js +14 -1
  433. package/backend/dist/src/seeding/sub-agent-seeding.service.js.map +1 -1
  434. package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
  435. package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
  436. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.d.ts +1 -0
  437. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js +8 -0
  438. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js.map +1 -1
  439. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.d.ts +1 -0
  440. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js +7 -0
  441. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js.map +1 -1
  442. package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
  443. package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
  444. package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
  445. package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +2 -0
  446. package/backend/dist/src/sub-agents/sub-agent-runner.service.js +68 -2
  447. package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
  448. package/backend/dist/src/sub-agents/sub-agent.entity.d.ts +1 -0
  449. package/backend/dist/src/sub-agents/sub-agent.entity.js +8 -0
  450. package/backend/dist/src/sub-agents/sub-agent.entity.js.map +1 -1
  451. package/backend/dist/src/sub-agents/sub-agents.service.d.ts +2 -0
  452. package/backend/dist/src/sub-agents/sub-agents.service.js +42 -5
  453. package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
  454. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.d.ts +4 -0
  455. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js +38 -0
  456. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js.map +1 -0
  457. package/backend/dist/src/system-prompts/dto/system-prompt.dto.d.ts +2 -0
  458. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js +16 -0
  459. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js.map +1 -1
  460. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.d.ts +3 -0
  461. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js +27 -0
  462. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js.map +1 -0
  463. package/backend/dist/src/system-prompts/system-prompts.controller.d.ts +17 -0
  464. package/backend/dist/src/system-prompts/system-prompts.controller.js +83 -0
  465. package/backend/dist/src/system-prompts/system-prompts.controller.js.map +1 -1
  466. package/backend/dist/src/system-prompts/system-prompts.service.d.ts +13 -1
  467. package/backend/dist/src/system-prompts/system-prompts.service.js +125 -5
  468. package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
  469. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  470. package/package.json +1 -1
@@ -0,0 +1,2281 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/application-state/application-state.service.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/application-state</a> application-state.service.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">51.57% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>131/254</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">97.18% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>69/71</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">36.58% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>30/82</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">51% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>127/249</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">35x</span>
799
+ <span class="cline-any cline-yes">35x</span>
800
+ <span class="cline-any cline-yes">35x</span>
801
+ <span class="cline-any cline-yes">35x</span>
802
+ <span class="cline-any cline-yes">35x</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-yes">35x</span>
805
+ <span class="cline-any cline-yes">35x</span>
806
+ <span class="cline-any cline-yes">35x</span>
807
+ <span class="cline-any cline-yes">35x</span>
808
+ <span class="cline-any cline-yes">35x</span>
809
+ <span class="cline-any cline-yes">35x</span>
810
+ <span class="cline-any cline-yes">35x</span>
811
+ <span class="cline-any cline-yes">35x</span>
812
+ <span class="cline-any cline-yes">35x</span>
813
+ <span class="cline-any cline-yes">35x</span>
814
+ <span class="cline-any cline-yes">35x</span>
815
+ <span class="cline-any cline-yes">35x</span>
816
+ <span class="cline-any cline-yes">35x</span>
817
+ <span class="cline-any cline-yes">35x</span>
818
+ <span class="cline-any cline-yes">35x</span>
819
+ <span class="cline-any cline-yes">35x</span>
820
+ <span class="cline-any cline-yes">35x</span>
821
+ <span class="cline-any cline-yes">35x</span>
822
+ <span class="cline-any cline-yes">35x</span>
823
+ <span class="cline-any cline-yes">35x</span>
824
+ <span class="cline-any cline-yes">35x</span>
825
+ <span class="cline-any cline-yes">35x</span>
826
+ <span class="cline-any cline-yes">35x</span>
827
+ <span class="cline-any cline-yes">35x</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-yes">35x</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-yes">35x</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-yes">42x</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-yes">42x</span>
848
+ <span class="cline-any cline-yes">42x</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-yes">42x</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-yes">42x</span>
855
+ <span class="cline-any cline-yes">42x</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-yes">42x</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-yes">33x</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-yes">33x</span>
868
+ <span class="cline-any cline-yes">33x</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-yes">113x</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-yes">113x</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-neutral">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-yes">2x</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-yes">2x</span>
886
+ <span class="cline-any cline-yes">2x</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-yes">150x</span>
896
+ <span class="cline-any cline-yes">5x</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-yes">145x</span>
899
+ <span class="cline-any cline-yes">6x</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-yes">139x</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-yes">55x</span>
910
+ <span class="cline-any cline-yes">28x</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-yes">27x</span>
913
+ <span class="cline-any cline-yes">2x</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-yes">25x</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-yes">48x</span>
924
+ <span class="cline-any cline-yes">3x</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-yes">45x</span>
927
+ <span class="cline-any cline-yes">3x</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-yes">42x</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
936
+ <span class="cline-any cline-yes">69x</span>
937
+ <span class="cline-any cline-yes">1x</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-yes">68x</span>
940
+ <span class="cline-any cline-yes">1x</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-yes">67x</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-yes">12x</span>
951
+ <span class="cline-any cline-yes">12x</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-yes">1x</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-neutral">&nbsp;</span>
959
+ <span class="cline-any cline-yes">11x</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-yes">11x</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-yes">11x</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-yes">11x</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-neutral">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-neutral">&nbsp;</span>
1020
+ <span class="cline-any cline-neutral">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-neutral">&nbsp;</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-neutral">&nbsp;</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-yes">11x</span>
1071
+ <span class="cline-any cline-yes">11x</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-yes">11x</span>
1074
+ <span class="cline-any cline-neutral">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-yes">2x</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-yes">2x</span>
1082
+ <span class="cline-any cline-yes">2x</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-yes">4x</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-yes">2x</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-yes">2x</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-yes">2x</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-neutral">&nbsp;</span>
1102
+ <span class="cline-any cline-yes">9x</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-yes">5x</span>
1107
+ <span class="cline-any cline-neutral">&nbsp;</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-yes">1x</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-yes">3x</span>
1115
+ <span class="cline-any cline-yes">3x</span>
1116
+ <span class="cline-any cline-yes">3x</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-yes">3x</span>
1121
+ <span class="cline-any cline-yes">3x</span>
1122
+ <span class="cline-any cline-yes">3x</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-no">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-neutral">&nbsp;</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-no">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-neutral">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-no">&nbsp;</span>
1152
+ <span class="cline-any cline-neutral">&nbsp;</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-no">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-neutral">&nbsp;</span>
1163
+ <span class="cline-any cline-no">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-neutral">&nbsp;</span>
1166
+ <span class="cline-any cline-no">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-neutral">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-yes">1x</span>
1171
+ <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-yes">11x</span>
1175
+ <span class="cline-any cline-yes">11x</span>
1176
+ <span class="cline-any cline-yes">7x</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1178
+ <span class="cline-any cline-yes">4x</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-neutral">&nbsp;</span>
1181
+ <span class="cline-any cline-neutral">&nbsp;</span>
1182
+ <span class="cline-any cline-yes">20x</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-yes">33x</span>
1187
+ <span class="cline-any cline-yes">33x</span>
1188
+ <span class="cline-any cline-yes">33x</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-neutral">&nbsp;</span>
1191
+ <span class="cline-any cline-neutral">&nbsp;</span>
1192
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-neutral">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-no">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-neutral">&nbsp;</span>
1202
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-neutral">&nbsp;</span>
1207
+ <span class="cline-any cline-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-no">&nbsp;</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-yes">8x</span>
1213
+ <span class="cline-any cline-yes">8x</span>
1214
+ <span class="cline-any cline-yes">8x</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-yes">17x</span>
1229
+ <span class="cline-any cline-yes">17x</span>
1230
+ <span class="cline-any cline-yes">17x</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-yes">3x</span>
1245
+ <span class="cline-any cline-yes">3x</span>
1246
+ <span class="cline-any cline-yes">3x</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-neutral">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-no">&nbsp;</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-no">&nbsp;</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
+ <span class="cline-any cline-neutral">&nbsp;</span>
1284
+ <span class="cline-any cline-neutral">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-no">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1313
+ <span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-yes">6x</span>
1316
+ <span class="cline-any cline-yes">6x</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-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-no">&nbsp;</span>
1321
+ <span class="cline-any cline-neutral">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-yes">2x</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-no">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-neutral">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-no">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-yes">14x</span>
1362
+ <span class="cline-any cline-yes">14x</span>
1363
+ <span class="cline-any cline-yes">14x</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-neutral">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-neutral">&nbsp;</span>
1403
+ <span class="cline-any cline-yes">7x</span>
1404
+ <span class="cline-any cline-yes">7x</span>
1405
+ <span class="cline-any cline-yes">7x</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-no">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-no">&nbsp;</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-neutral">&nbsp;</span>
1416
+ <span class="cline-any cline-neutral">&nbsp;</span>
1417
+ <span class="cline-any cline-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-neutral">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-yes">8x</span>
1423
+ <span class="cline-any cline-yes">3x</span>
1424
+ <span class="cline-any cline-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-yes">3x</span>
1427
+ <span class="cline-any cline-yes">1x</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-yes">7x</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-no">&nbsp;</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-yes">3x</span>
1441
+ <span class="cline-any cline-yes">3x</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-yes">3x</span>
1445
+ <span class="cline-any cline-neutral">&nbsp;</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-no">&nbsp;</span>
1451
+ <span class="cline-any cline-no">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-no">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-no">&nbsp;</span>
1465
+ <span class="cline-any cline-neutral">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-no">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-no">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-neutral">&nbsp;</span>
1474
+ <span class="cline-any cline-no">&nbsp;</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-no">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-no">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&nbsp;</span>
1486
+ <span class="cline-any cline-no">&nbsp;</span>
1487
+ <span class="cline-any cline-no">&nbsp;</span>
1488
+ <span class="cline-any cline-no">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-neutral">&nbsp;</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-no">&nbsp;</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-no">&nbsp;</span>
1502
+ <span class="cline-any cline-no">&nbsp;</span>
1503
+ <span class="cline-any cline-no">&nbsp;</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-no">&nbsp;</span>
1508
+ <span class="cline-any cline-no">&nbsp;</span>
1509
+ <span class="cline-any cline-no">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-no">&nbsp;</span>
1514
+ <span class="cline-any cline-neutral">&nbsp;</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-no">&nbsp;</span>
1518
+ <span class="cline-any cline-no">&nbsp;</span>
1519
+ <span class="cline-any cline-no">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&nbsp;</span>
1521
+ <span class="cline-any cline-neutral">&nbsp;</span>
1522
+ <span class="cline-any cline-neutral">&nbsp;</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-no">&nbsp;</span>
1526
+ <span class="cline-any cline-no">&nbsp;</span>
1527
+ <span class="cline-any cline-no">&nbsp;</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable } from '@nestjs/common';
1531
+ import { InjectRepository } from '@nestjs/typeorm';
1532
+ import { Repository } from 'typeorm';
1533
+ import { ApplicationState, SystemPrompt } from '../core-entities';
1534
+ import { GlobalConfigService } from '../global-config/global-config.service';
1535
+ &nbsp;
1536
+ const ACTIVE_SESSION_KEY = 'activeSessionId';
1537
+ const WEBSOCKET_ENABLED_KEY = 'websocketEnabled';
1538
+ const AUTO_CONTEXT_FETCH_ENABLED_KEY = 'autoContextFetchEnabled';
1539
+ const AUTO_SEND_TO_AI_STUDIO_ENABLED_KEY = 'autoSendToAIStudioEnabled';
1540
+ const MANUAL_LLM_ENABLED_KEY = 'manualLlmEnabled';
1541
+ const EXECUTION_STRATEGY_KEY = 'executionStrategy';
1542
+ const THEME_KEY = 'theme';
1543
+ const CONTEXT_TOKEN_LIMIT_KEY = 'contextTokenLimit';
1544
+ const YOLO_MODE_ENABLED_KEY = 'yoloModeEnabled';
1545
+ const YOLO_MODE_MESSAGE_KEY = 'yoloModeMessage';
1546
+ const OPENROUTER_API_KEY = 'openrouterApiKey';
1547
+ const ZAI_API_KEY = 'zaiApiKey';
1548
+ const ALIBABA_API_KEY = 'alibabaApiKey';
1549
+ const OLLAMA_API_KEY = 'ollamaApiKey';
1550
+ const RECENT_MODELS_KEY = 'recentModels';
1551
+ const OPENAI_API_KEY = 'openaiApiKey';
1552
+ const OPENAI_BASE_URL = 'openaiBaseUrl';
1553
+ const STREAMING_ENABLED_KEY = 'streamingEnabled';
1554
+ const TOOLS_ENABLED_KEY = 'toolsEnabled';
1555
+ const SYNTAX_VALIDATION_ENABLED_KEY = 'syntaxValidationEnabled';
1556
+ const FOLLOWUP_TOKEN_LIMIT_KEY = 'followupTokenLimit';
1557
+ const HISTORY_COMPRESSION_ENABLED_KEY = 'historyCompressionEnabled';
1558
+ const LLM_RETRY_ENABLED_KEY = 'llmRetryEnabled';
1559
+ const LLM_RETRY_MAX_ATTEMPTS_KEY = 'llmRetryMaxAttempts';
1560
+ &nbsp;
1561
+ const DEFAULT_INSTANCE = 'default';
1562
+ &nbsp;
1563
+ export type SettingSource = 'project' | 'global' | 'default';
1564
+ &nbsp;
1565
+ export interface SettingWithSource&lt;T&gt; {
1566
+ value: T;
1567
+ source: SettingSource;
1568
+ }
1569
+ &nbsp;
1570
+ @Injectable()
1571
+ export class ApplicationStateService {
1572
+ private readonly instance: string;
1573
+ &nbsp;
1574
+ // In-memory cache for effective settings (refreshed on state change)
1575
+ private effectiveSettingsCache: Record&lt;
1576
+ string,
1577
+ SettingWithSource&lt;unknown&gt;
1578
+ &gt; | null = null;
1579
+ private effectiveSettingsCacheTime: number | null = null;
1580
+ private readonly EFFECTIVE_SETTINGS_TTL = 5 * 1000; // 5 seconds - short TTL since settings can change
1581
+ &nbsp;
1582
+ constructor(
1583
+ @InjectRepository(ApplicationState)
1584
+ private applicationStateRepository: Repository&lt;ApplicationState&gt;,
1585
+ @InjectRepository(SystemPrompt)
1586
+ private systemPromptsRepository: Repository&lt;SystemPrompt&gt;,
1587
+ private globalConfigService: GlobalConfigService,
1588
+ ) {
1589
+ this.instance = process.env.REPOBURG_INSTANCE_NAME || DEFAULT_INSTANCE;
1590
+ }
1591
+ &nbsp;
1592
+ private async setState(key: string, value: string): Promise&lt;void&gt; {
1593
+ await this.applicationStateRepository.save({
1594
+ instance: this.instance,
1595
+ key: key,
1596
+ value: value,
1597
+ });
1598
+ // Invalidate effective settings cache on any state change
1599
+ this.effectiveSettingsCache = null;
1600
+ this.effectiveSettingsCacheTime = null;
1601
+ }
1602
+ &nbsp;
1603
+ private async getState(key: string): Promise&lt;string | null&gt; {
1604
+ const state = await this.applicationStateRepository.findOneBy({
1605
+ instance: this.instance,
1606
+ key: key,
1607
+ });
1608
+ return state?.value || null;
1609
+ }
1610
+ &nbsp;
1611
+ private async deleteState(key: string): Promise&lt;void&gt; {
1612
+ await this.applicationStateRepository.delete({
1613
+ instance: this.instance,
1614
+ key: key,
1615
+ });
1616
+ // Invalidate effective settings cache on any state change
1617
+ this.effectiveSettingsCache = null;
1618
+ this.effectiveSettingsCacheTime = null;
1619
+ }
1620
+ &nbsp;
1621
+ // Helper: Get effective value with resolution chain (project -&gt; global -&gt; default)
1622
+ private getEffectiveBoolean(
1623
+ projectValue: string | null,
1624
+ globalValue: boolean | undefined,
1625
+ defaultValue: boolean,
1626
+ ): SettingWithSource&lt;boolean&gt; {
1627
+ if (projectValue !== null) {
1628
+ return { value: projectValue === 'true', source: 'project' };
1629
+ }
1630
+ if (globalValue !== undefined) {
1631
+ return { value: globalValue, source: 'global' };
1632
+ }
1633
+ return { value: defaultValue, source: 'default' };
1634
+ }
1635
+ &nbsp;
1636
+ private getEffectiveString(
1637
+ projectValue: string | null,
1638
+ globalValue: string | undefined,
1639
+ defaultValue: string,
1640
+ ): SettingWithSource&lt;string&gt; {
1641
+ if (projectValue !== null) {
1642
+ return { value: projectValue, source: 'project' };
1643
+ }
1644
+ if (globalValue !== undefined) {
1645
+ return { value: globalValue, source: 'global' };
1646
+ }
1647
+ return { value: defaultValue, source: 'default' };
1648
+ }
1649
+ &nbsp;
1650
+ private getEffectiveNumber(
1651
+ projectValue: string | null,
1652
+ globalValue: number | undefined,
1653
+ defaultValue: number,
1654
+ ): SettingWithSource&lt;number&gt; {
1655
+ if (projectValue !== null) {
1656
+ return { value: parseInt(projectValue, 10), source: 'project' };
1657
+ }
1658
+ if (globalValue !== undefined) {
1659
+ return { value: globalValue, source: 'global' };
1660
+ }
1661
+ return { value: defaultValue, source: 'default' };
1662
+ }
1663
+ &nbsp;
1664
+ private getEffectiveNullableString(
1665
+ projectValue: string | null,
1666
+ globalValue: string | undefined,
1667
+ ): SettingWithSource&lt;string | null&gt; {
1668
+ if (projectValue !== null) {
1669
+ return { value: projectValue, source: 'project' };
1670
+ }
1671
+ if (globalValue !== undefined) {
1672
+ return { value: globalValue, source: 'global' };
1673
+ }
1674
+ return { value: null, source: 'default' };
1675
+ }
1676
+ &nbsp;
1677
+ // Get all effective settings with sources
1678
+ async getEffectiveSettings(): Promise&lt;
1679
+ Record&lt;string, SettingWithSource&lt;unknown&gt;&gt;
1680
+ &gt; {
1681
+ // Check cache first
1682
+ const now = Date.now();
1683
+ if (
1684
+ this.effectiveSettingsCache &amp;&amp;
1685
+ this.effectiveSettingsCacheTime &amp;&amp;
1686
+ now - this.effectiveSettingsCacheTime &lt; this.EFFECTIVE_SETTINGS_TTL
1687
+ ) {
1688
+ return this.effectiveSettingsCache;
1689
+ }
1690
+ &nbsp;
1691
+ const globalConfig = this.globalConfigService.getConfig();
1692
+ &nbsp;
1693
+ // Fetch all project overrides in one query
1694
+ const projectStates = await this.applicationStateRepository.find({
1695
+ where: { instance: this.instance },
1696
+ });
1697
+ const projectMap = new Map(projectStates.map((s) =&gt; [s.key, s.value]));
1698
+ &nbsp;
1699
+ const settings = {
1700
+ executionStrategy: this.getEffectiveString(
1701
+ projectMap.get(EXECUTION_STRATEGY_KEY) || null,
1702
+ globalConfig.executionStrategy,
1703
+ 'apply_revert',
1704
+ ),
1705
+ websocketEnabled: this.getEffectiveBoolean(
1706
+ projectMap.get(WEBSOCKET_ENABLED_KEY) || null,
1707
+ globalConfig.websocketEnabled,
1708
+ true,
1709
+ ),
1710
+ autoContextFetchEnabled: this.getEffectiveBoolean(
1711
+ projectMap.get(AUTO_CONTEXT_FETCH_ENABLED_KEY) || null,
1712
+ globalConfig.autoContextFetchEnabled,
1713
+ true,
1714
+ ),
1715
+ autoSendToAIStudioEnabled: this.getEffectiveBoolean(
1716
+ projectMap.get(AUTO_SEND_TO_AI_STUDIO_ENABLED_KEY) || null,
1717
+ globalConfig.autoSendToAIStudioEnabled,
1718
+ false,
1719
+ ),
1720
+ manualLlmEnabled: this.getEffectiveBoolean(
1721
+ projectMap.get(MANUAL_LLM_ENABLED_KEY) || null,
1722
+ globalConfig.manualLlmEnabled,
1723
+ false,
1724
+ ),
1725
+ yoloModeEnabled: this.getEffectiveBoolean(
1726
+ projectMap.get(YOLO_MODE_ENABLED_KEY) || null,
1727
+ globalConfig.yoloModeEnabled,
1728
+ false,
1729
+ ),
1730
+ yoloModeMessage: this.getEffectiveString(
1731
+ projectMap.get(YOLO_MODE_MESSAGE_KEY) || null,
1732
+ globalConfig.yoloModeMessage,
1733
+ 'continue or final',
1734
+ ),
1735
+ streamingEnabled: this.getEffectiveBoolean(
1736
+ projectMap.get(STREAMING_ENABLED_KEY) || null,
1737
+ globalConfig.streamingEnabled,
1738
+ false,
1739
+ ),
1740
+ toolsEnabled: this.getEffectiveBoolean(
1741
+ projectMap.get(TOOLS_ENABLED_KEY) || null,
1742
+ globalConfig.toolsEnabled,
1743
+ true,
1744
+ ),
1745
+ syntaxValidationEnabled: this.getEffectiveBoolean(
1746
+ projectMap.get(SYNTAX_VALIDATION_ENABLED_KEY) || null,
1747
+ globalConfig.syntaxValidationEnabled,
1748
+ true,
1749
+ ),
1750
+ historyCompressionEnabled: this.getEffectiveBoolean(
1751
+ projectMap.get(HISTORY_COMPRESSION_ENABLED_KEY) || null,
1752
+ globalConfig.historyCompressionEnabled,
1753
+ true,
1754
+ ),
1755
+ llmRetryEnabled: this.getEffectiveBoolean(
1756
+ projectMap.get(LLM_RETRY_ENABLED_KEY) || null,
1757
+ globalConfig.llmRetryEnabled,
1758
+ true,
1759
+ ),
1760
+ llmRetryMaxAttempts: this.getEffectiveNumber(
1761
+ projectMap.get(LLM_RETRY_MAX_ATTEMPTS_KEY) || null,
1762
+ globalConfig.llmRetryMaxAttempts,
1763
+ 3,
1764
+ ),
1765
+ contextTokenLimit: this.getEffectiveNumber(
1766
+ projectMap.get(CONTEXT_TOKEN_LIMIT_KEY) || null,
1767
+ globalConfig.contextTokenLimit,
1768
+ 500000,
1769
+ ),
1770
+ followupTokenLimit: this.getEffectiveNumber(
1771
+ projectMap.get(FOLLOWUP_TOKEN_LIMIT_KEY) || null,
1772
+ globalConfig.followupTokenLimit,
1773
+ 32000,
1774
+ ),
1775
+ openrouterApiKey: this.getEffectiveNullableString(
1776
+ projectMap.get(OPENROUTER_API_KEY) || null,
1777
+ globalConfig.openrouterApiKey,
1778
+ ),
1779
+ zaiApiKey: this.getEffectiveNullableString(
1780
+ projectMap.get(ZAI_API_KEY) || null,
1781
+ globalConfig.zaiApiKey,
1782
+ ),
1783
+ alibabaApiKey: this.getEffectiveNullableString(
1784
+ projectMap.get(ALIBABA_API_KEY) || null,
1785
+ globalConfig.alibabaApiKey,
1786
+ ),
1787
+ ollamaApiKey: this.getEffectiveNullableString(
1788
+ projectMap.get(OLLAMA_API_KEY) || null,
1789
+ globalConfig.ollamaApiKey,
1790
+ ),
1791
+ openaiApiKey: this.getEffectiveNullableString(
1792
+ projectMap.get(OPENAI_API_KEY) || null,
1793
+ globalConfig.openaiApiKey,
1794
+ ),
1795
+ openaiBaseUrl: this.getEffectiveNullableString(
1796
+ projectMap.get(OPENAI_BASE_URL) || null,
1797
+ globalConfig.openaiBaseUrl,
1798
+ ),
1799
+ };
1800
+ &nbsp;
1801
+ // Update cache
1802
+ this.effectiveSettingsCache = settings;
1803
+ this.effectiveSettingsCacheTime = now;
1804
+ &nbsp;
1805
+ return settings;
1806
+ }
1807
+ &nbsp;
1808
+ // Get project-level overrides only
1809
+ async getProjectOverrides(): Promise&lt;Record&lt;string, string&gt;&gt; {
1810
+ const states = await this.applicationStateRepository.find({
1811
+ where: { instance: this.instance },
1812
+ });
1813
+ const overrides: Record&lt;string, string&gt; = {};
1814
+ for (const state of states) {
1815
+ // Exclude project-only settings that shouldn't show as overrides
1816
+ if (
1817
+ state.key !== ACTIVE_SESSION_KEY &amp;&amp;
1818
+ state.key !== RECENT_MODELS_KEY &amp;&amp;
1819
+ state.key !== THEME_KEY &amp;&amp;
1820
+ state.key !== MANUAL_LLM_ENABLED_KEY
1821
+ ) {
1822
+ overrides[state.key] = state.value;
1823
+ }
1824
+ }
1825
+ return overrides;
1826
+ }
1827
+ &nbsp;
1828
+ // Clear a project override
1829
+ async clearOverride(key: string): Promise&lt;void&gt; {
1830
+ await this.deleteState(key);
1831
+ }
1832
+ &nbsp;
1833
+ async setActiveSessionId(sessionId: string): Promise&lt;void&gt; {
1834
+ await this.setState(ACTIVE_SESSION_KEY, sessionId);
1835
+ }
1836
+ &nbsp;
1837
+ async getActiveSessionId(): Promise&lt;string | null&gt; {
1838
+ return this.getState(ACTIVE_SESSION_KEY);
1839
+ }
1840
+ &nbsp;
1841
+ async setWebsocketEnabled(enabled: boolean): Promise&lt;void&gt; {
1842
+ await this.setState(WEBSOCKET_ENABLED_KEY, String(enabled));
1843
+ }
1844
+ &nbsp;
1845
+ async getWebsocketEnabled(): Promise&lt;boolean&gt; {
1846
+ const projectValue = await this.getState(WEBSOCKET_ENABLED_KEY);
1847
+ const globalValue = this.globalConfigService.get('websocketEnabled');
1848
+ return this.getEffectiveBoolean(projectValue, globalValue, true).value;
1849
+ }
1850
+ &nbsp;
1851
+ async getWebsocketEnabledWithSource(): Promise&lt;SettingWithSource&lt;boolean&gt;&gt; {
1852
+ const projectValue = await this.getState(WEBSOCKET_ENABLED_KEY);
1853
+ const globalValue = this.globalConfigService.get('websocketEnabled');
1854
+ return this.getEffectiveBoolean(projectValue, globalValue, true);
1855
+ }
1856
+ &nbsp;
1857
+ <span class="fstat-no" title="function not covered" > async </span>setAutoContextFetchEnabled(enabled: boolean): Promise&lt;void&gt; {
1858
+ <span class="cstat-no" title="statement not covered" > await this.setState(AUTO_CONTEXT_FETCH_ENABLED_KEY, String(enabled));</span>
1859
+ }
1860
+ &nbsp;
1861
+ <span class="fstat-no" title="function not covered" > async </span>getAutoContextFetchEnabled(): Promise&lt;boolean&gt; {
1862
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(AUTO_CONTEXT_FETCH_ENABLED_KEY);</span>
1863
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('autoContextFetchEnabled');</span>
1864
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true).value;</span>
1865
+ }
1866
+ &nbsp;
1867
+ <span class="fstat-no" title="function not covered" > async </span>getAutoContextFetchEnabledWithSource(): Promise&lt;
1868
+ SettingWithSource&lt;boolean&gt;
1869
+ &gt; {
1870
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(AUTO_CONTEXT_FETCH_ENABLED_KEY);</span>
1871
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('autoContextFetchEnabled');</span>
1872
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true);</span>
1873
+ }
1874
+ &nbsp;
1875
+ <span class="fstat-no" title="function not covered" > async </span>setAutoSendToAIStudioEnabled(enabled: boolean): Promise&lt;void&gt; {
1876
+ <span class="cstat-no" title="statement not covered" > await this.setState(AUTO_SEND_TO_AI_STUDIO_ENABLED_KEY, String(enabled));</span>
1877
+ }
1878
+ &nbsp;
1879
+ <span class="fstat-no" title="function not covered" > async </span>getAutoSendToAIStudioEnabled(): Promise&lt;boolean&gt; {
1880
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(</span>
1881
+ AUTO_SEND_TO_AI_STUDIO_ENABLED_KEY,
1882
+ );
1883
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get(</span>
1884
+ 'autoSendToAIStudioEnabled',
1885
+ );
1886
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, false).value;</span>
1887
+ }
1888
+ &nbsp;
1889
+ <span class="fstat-no" title="function not covered" > async </span>getAutoSendToAIStudioEnabledWithSource(): Promise&lt;
1890
+ SettingWithSource&lt;boolean&gt;
1891
+ &gt; {
1892
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(</span>
1893
+ AUTO_SEND_TO_AI_STUDIO_ENABLED_KEY,
1894
+ );
1895
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get(</span>
1896
+ 'autoSendToAIStudioEnabled',
1897
+ );
1898
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, false);</span>
1899
+ }
1900
+ &nbsp;
1901
+ async setManualLlmEnabled(enabled: boolean): Promise&lt;void&gt; {
1902
+ await this.setState(MANUAL_LLM_ENABLED_KEY, String(enabled));
1903
+ }
1904
+ &nbsp;
1905
+ async getManualLlmEnabled(): Promise&lt;boolean&gt; {
1906
+ const value = await this.getState(MANUAL_LLM_ENABLED_KEY);
1907
+ if (value === null) {
1908
+ return false;
1909
+ }
1910
+ return value === 'true';
1911
+ }
1912
+ &nbsp;
1913
+ async setExecutionStrategy(strategy: string): Promise&lt;void&gt; {
1914
+ await this.setState(EXECUTION_STRATEGY_KEY, strategy);
1915
+ }
1916
+ &nbsp;
1917
+ async getExecutionStrategy(): Promise&lt;string&gt; {
1918
+ const projectValue = await this.getState(EXECUTION_STRATEGY_KEY);
1919
+ const globalValue = this.globalConfigService.get('executionStrategy');
1920
+ return this.getEffectiveString(projectValue, globalValue, 'apply_revert')
1921
+ .value;
1922
+ }
1923
+ &nbsp;
1924
+ <span class="fstat-no" title="function not covered" > async </span>getExecutionStrategyWithSource(): Promise&lt;SettingWithSource&lt;string&gt;&gt; {
1925
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(EXECUTION_STRATEGY_KEY);</span>
1926
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('executionStrategy');</span>
1927
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveString(projectValue, globalValue, 'apply_revert');</span>
1928
+ }
1929
+ &nbsp;
1930
+ <span class="fstat-no" title="function not covered" > async </span>setTheme(theme: string): Promise&lt;void&gt; {
1931
+ <span class="cstat-no" title="statement not covered" > await this.setState(THEME_KEY, theme);</span>
1932
+ }
1933
+ &nbsp;
1934
+ <span class="fstat-no" title="function not covered" > async </span>getTheme(): Promise&lt;string&gt; {
1935
+ const theme = <span class="cstat-no" title="statement not covered" >await this.getState(THEME_KEY);</span>
1936
+ <span class="cstat-no" title="statement not covered" > return theme || 'system';</span>
1937
+ }
1938
+ &nbsp;
1939
+ <span class="fstat-no" title="function not covered" > async </span>setContextTokenLimit(limit: number): Promise&lt;void&gt; {
1940
+ <span class="cstat-no" title="statement not covered" > await this.setState(CONTEXT_TOKEN_LIMIT_KEY, String(limit));</span>
1941
+ }
1942
+ &nbsp;
1943
+ async getContextTokenLimit(): Promise&lt;number&gt; {
1944
+ const projectValue = await this.getState(CONTEXT_TOKEN_LIMIT_KEY);
1945
+ const globalValue = this.globalConfigService.get('contextTokenLimit');
1946
+ return this.getEffectiveNumber(projectValue, globalValue, 500000).value;
1947
+ }
1948
+ &nbsp;
1949
+ <span class="fstat-no" title="function not covered" > async </span>getContextTokenLimitWithSource(): Promise&lt;SettingWithSource&lt;number&gt;&gt; {
1950
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(CONTEXT_TOKEN_LIMIT_KEY);</span>
1951
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('contextTokenLimit');</span>
1952
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNumber(projectValue, globalValue, 500000);</span>
1953
+ }
1954
+ &nbsp;
1955
+ <span class="fstat-no" title="function not covered" > async </span>setYoloModeEnabled(enabled: boolean): Promise&lt;void&gt; {
1956
+ <span class="cstat-no" title="statement not covered" > await this.setState(YOLO_MODE_ENABLED_KEY, String(enabled));</span>
1957
+ }
1958
+ &nbsp;
1959
+ async getYoloModeEnabled(): Promise&lt;boolean&gt; {
1960
+ const projectValue = await this.getState(YOLO_MODE_ENABLED_KEY);
1961
+ const globalValue = this.globalConfigService.get('yoloModeEnabled');
1962
+ return this.getEffectiveBoolean(projectValue, globalValue, false).value;
1963
+ }
1964
+ &nbsp;
1965
+ <span class="fstat-no" title="function not covered" > async </span>getYoloModeEnabledWithSource(): Promise&lt;SettingWithSource&lt;boolean&gt;&gt; {
1966
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(YOLO_MODE_ENABLED_KEY);</span>
1967
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('yoloModeEnabled');</span>
1968
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, false);</span>
1969
+ }
1970
+ &nbsp;
1971
+ <span class="fstat-no" title="function not covered" > async </span>setOpenrouterApiKey(apiKey: string): Promise&lt;void&gt; {
1972
+ <span class="cstat-no" title="statement not covered" > await this.setState(OPENROUTER_API_KEY, apiKey);</span>
1973
+ }
1974
+ &nbsp;
1975
+ async getOpenrouterApiKey(): Promise&lt;string | null&gt; {
1976
+ const projectValue = await this.getState(OPENROUTER_API_KEY);
1977
+ const globalValue = this.globalConfigService.get('openrouterApiKey');
1978
+ return this.getEffectiveNullableString(projectValue, globalValue).value;
1979
+ }
1980
+ &nbsp;
1981
+ <span class="fstat-no" title="function not covered" > async </span>getOpenrouterApiKeyWithSource(): Promise&lt;
1982
+ SettingWithSource&lt;string | null&gt;
1983
+ &gt; {
1984
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OPENROUTER_API_KEY);</span>
1985
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('openrouterApiKey');</span>
1986
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
1987
+ }
1988
+ &nbsp;
1989
+ <span class="fstat-no" title="function not covered" > async </span>setZaiApiKey(apiKey: string): Promise&lt;void&gt; {
1990
+ <span class="cstat-no" title="statement not covered" > await this.setState(ZAI_API_KEY, apiKey);</span>
1991
+ }
1992
+ &nbsp;
1993
+ <span class="fstat-no" title="function not covered" > async </span>getZaiApiKey(): Promise&lt;string | null&gt; {
1994
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(ZAI_API_KEY);</span>
1995
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('zaiApiKey');</span>
1996
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue).value;</span>
1997
+ }
1998
+ &nbsp;
1999
+ <span class="fstat-no" title="function not covered" > async </span>getZaiApiKeyWithSource(): Promise&lt;SettingWithSource&lt;string | null&gt;&gt; {
2000
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(ZAI_API_KEY);</span>
2001
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('zaiApiKey');</span>
2002
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
2003
+ }
2004
+ &nbsp;
2005
+ <span class="fstat-no" title="function not covered" > async </span>setAlibabaApiKey(apiKey: string): Promise&lt;void&gt; {
2006
+ <span class="cstat-no" title="statement not covered" > await this.setState(ALIBABA_API_KEY, apiKey);</span>
2007
+ }
2008
+ &nbsp;
2009
+ <span class="fstat-no" title="function not covered" > async </span>getAlibabaApiKey(): Promise&lt;string | null&gt; {
2010
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(ALIBABA_API_KEY);</span>
2011
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('alibabaApiKey');</span>
2012
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue).value;</span>
2013
+ }
2014
+ &nbsp;
2015
+ <span class="fstat-no" title="function not covered" > async </span>getAlibabaApiKeyWithSource(): Promise&lt;
2016
+ SettingWithSource&lt;string | null&gt;
2017
+ &gt; {
2018
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(ALIBABA_API_KEY);</span>
2019
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('alibabaApiKey');</span>
2020
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
2021
+ }
2022
+ &nbsp;
2023
+ <span class="fstat-no" title="function not covered" > async </span>setOllamaApiKey(apiKey: string): Promise&lt;void&gt; {
2024
+ <span class="cstat-no" title="statement not covered" > await this.setState(OLLAMA_API_KEY, apiKey);</span>
2025
+ }
2026
+ &nbsp;
2027
+ <span class="fstat-no" title="function not covered" > async </span>getOllamaApiKey(): Promise&lt;string | null&gt; {
2028
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OLLAMA_API_KEY);</span>
2029
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('ollamaApiKey');</span>
2030
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue).value;</span>
2031
+ }
2032
+ &nbsp;
2033
+ <span class="fstat-no" title="function not covered" > async </span>getOllamaApiKeyWithSource(): Promise&lt;SettingWithSource&lt;string | null&gt;&gt; {
2034
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OLLAMA_API_KEY);</span>
2035
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('ollamaApiKey');</span>
2036
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
2037
+ }
2038
+ &nbsp;
2039
+ <span class="fstat-no" title="function not covered" > async </span>trackUsedModel(modelId: string): Promise&lt;void&gt; {
2040
+ const recent = <span class="cstat-no" title="statement not covered" >await this.getRecentModels();</span>
2041
+ const filtered = <span class="cstat-no" title="statement not covered" >recent.filter(<span class="fstat-no" title="function not covered" >(m</span>) =&gt; <span class="cstat-no" title="statement not covered" >m !== modelId)</span>;</span>
2042
+ const updated = <span class="cstat-no" title="statement not covered" >[modelId, ...filtered].slice(0, 5);</span>
2043
+ <span class="cstat-no" title="statement not covered" > await this.setState(RECENT_MODELS_KEY, JSON.stringify(updated));</span>
2044
+ }
2045
+ &nbsp;
2046
+ async getRecentModels(): Promise&lt;string[]&gt; {
2047
+ const value = await this.getState(RECENT_MODELS_KEY);
2048
+ if (!value) return ['alibaba/qwen3.5-plus', 'zai/glm-5'];
2049
+ <span class="cstat-no" title="statement not covered" > try {</span>
2050
+ <span class="cstat-no" title="statement not covered" > return JSON.parse(value);</span>
2051
+ } catch {
2052
+ <span class="cstat-no" title="statement not covered" > return ['alibaba/qwen3.5-plus', 'zai/glm-5'];</span>
2053
+ }
2054
+ }
2055
+ &nbsp;
2056
+ async setStreamingEnabled(enabled: boolean): Promise&lt;void&gt; {
2057
+ await this.setState(STREAMING_ENABLED_KEY, String(enabled));
2058
+ }
2059
+ &nbsp;
2060
+ <span class="fstat-no" title="function not covered" > async </span>getStreamingEnabled(): Promise&lt;boolean&gt; {
2061
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(STREAMING_ENABLED_KEY);</span>
2062
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('streamingEnabled');</span>
2063
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, false).value;</span>
2064
+ }
2065
+ &nbsp;
2066
+ <span class="fstat-no" title="function not covered" > async </span>getStreamingEnabledWithSource(): Promise&lt;SettingWithSource&lt;boolean&gt;&gt; {
2067
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(STREAMING_ENABLED_KEY);</span>
2068
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('streamingEnabled');</span>
2069
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, false);</span>
2070
+ }
2071
+ &nbsp;
2072
+ <span class="fstat-no" title="function not covered" > async </span>setToolsEnabled(enabled: boolean): Promise&lt;void&gt; {
2073
+ <span class="cstat-no" title="statement not covered" > await this.setState(TOOLS_ENABLED_KEY, String(enabled));</span>
2074
+ }
2075
+ &nbsp;
2076
+ <span class="fstat-no" title="function not covered" > async </span>getToolsEnabled(): Promise&lt;boolean&gt; {
2077
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(TOOLS_ENABLED_KEY);</span>
2078
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('toolsEnabled');</span>
2079
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true).value;</span>
2080
+ }
2081
+ &nbsp;
2082
+ <span class="fstat-no" title="function not covered" > async </span>getToolsEnabledWithSource(): Promise&lt;SettingWithSource&lt;boolean&gt;&gt; {
2083
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(TOOLS_ENABLED_KEY);</span>
2084
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('toolsEnabled');</span>
2085
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true);</span>
2086
+ }
2087
+ &nbsp;
2088
+ <span class="fstat-no" title="function not covered" > async </span>setSyntaxValidationEnabled(enabled: boolean): Promise&lt;void&gt; {
2089
+ <span class="cstat-no" title="statement not covered" > await this.setState(SYNTAX_VALIDATION_ENABLED_KEY, String(enabled));</span>
2090
+ }
2091
+ &nbsp;
2092
+ async getSyntaxValidationEnabled(): Promise&lt;boolean&gt; {
2093
+ const projectValue = await this.getState(SYNTAX_VALIDATION_ENABLED_KEY);
2094
+ const globalValue = this.globalConfigService.get('syntaxValidationEnabled');
2095
+ return this.getEffectiveBoolean(projectValue, globalValue, true).value;
2096
+ }
2097
+ &nbsp;
2098
+ <span class="fstat-no" title="function not covered" > async </span>getSyntaxValidationEnabledWithSource(): Promise&lt;
2099
+ SettingWithSource&lt;boolean&gt;
2100
+ &gt; {
2101
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(SYNTAX_VALIDATION_ENABLED_KEY);</span>
2102
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('syntaxValidationEnabled');</span>
2103
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true);</span>
2104
+ }
2105
+ &nbsp;
2106
+ <span class="fstat-no" title="function not covered" > async </span>setYoloModeMessage(message: string): Promise&lt;void&gt; {
2107
+ <span class="cstat-no" title="statement not covered" > await this.setState(YOLO_MODE_MESSAGE_KEY, message);</span>
2108
+ }
2109
+ &nbsp;
2110
+ <span class="fstat-no" title="function not covered" > async </span>getYoloModeMessage(): Promise&lt;string&gt; {
2111
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(YOLO_MODE_MESSAGE_KEY);</span>
2112
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('yoloModeMessage');</span>
2113
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveString(</span>
2114
+ projectValue,
2115
+ globalValue,
2116
+ 'continue or final',
2117
+ ).value;
2118
+ }
2119
+ &nbsp;
2120
+ <span class="fstat-no" title="function not covered" > async </span>getYoloModeMessageWithSource(): Promise&lt;SettingWithSource&lt;string&gt;&gt; {
2121
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(YOLO_MODE_MESSAGE_KEY);</span>
2122
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('yoloModeMessage');</span>
2123
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveString(</span>
2124
+ projectValue,
2125
+ globalValue,
2126
+ 'continue or final',
2127
+ );
2128
+ }
2129
+ &nbsp;
2130
+ <span class="fstat-no" title="function not covered" > async </span>setFollowupTokenLimit(limit: number): Promise&lt;void&gt; {
2131
+ <span class="cstat-no" title="statement not covered" > await this.setState(FOLLOWUP_TOKEN_LIMIT_KEY, String(limit));</span>
2132
+ }
2133
+ &nbsp;
2134
+ async getFollowupTokenLimit(): Promise&lt;number&gt; {
2135
+ const projectValue = await this.getState(FOLLOWUP_TOKEN_LIMIT_KEY);
2136
+ const globalValue = this.globalConfigService.get('followupTokenLimit');
2137
+ return this.getEffectiveNumber(projectValue, globalValue, 32000).value;
2138
+ }
2139
+ &nbsp;
2140
+ <span class="fstat-no" title="function not covered" > async </span>getFollowupTokenLimitWithSource(): Promise&lt;SettingWithSource&lt;number&gt;&gt; {
2141
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(FOLLOWUP_TOKEN_LIMIT_KEY);</span>
2142
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('followupTokenLimit');</span>
2143
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNumber(projectValue, globalValue, 32000);</span>
2144
+ }
2145
+ &nbsp;
2146
+ /**
2147
+ * Get effective followup token limit with system prompt override support.
2148
+ * Resolution: system prompt → project override → global config → default
2149
+ */
2150
+ async getEffectiveFollowupTokenLimit(
2151
+ systemPromptId?: string | null,
2152
+ ): Promise&lt;number&gt; {
2153
+ // 1. Check system prompt level first
2154
+ if (systemPromptId) {
2155
+ const systemPrompt = await this.systemPromptsRepository.findOneBy({
2156
+ id: systemPromptId,
2157
+ });
2158
+ if (systemPrompt &amp;&amp; systemPrompt.followup_token_limit !== null) {
2159
+ return systemPrompt.followup_token_limit;
2160
+ }
2161
+ }
2162
+ &nbsp;
2163
+ // 2. Fall back to existing resolution (project → global → default)
2164
+ return this.getFollowupTokenLimit();
2165
+ }
2166
+ &nbsp;
2167
+ <span class="fstat-no" title="function not covered" > async </span>setHistoryCompressionEnabled(enabled: boolean): Promise&lt;void&gt; {
2168
+ <span class="cstat-no" title="statement not covered" > await this.setState(HISTORY_COMPRESSION_ENABLED_KEY, String(enabled));</span>
2169
+ }
2170
+ &nbsp;
2171
+ async getHistoryCompressionEnabled(): Promise&lt;boolean&gt; {
2172
+ const projectValue = await this.getState(HISTORY_COMPRESSION_ENABLED_KEY);
2173
+ const globalValue = this.globalConfigService.get(
2174
+ 'historyCompressionEnabled',
2175
+ );
2176
+ return this.getEffectiveBoolean(projectValue, globalValue, true).value;
2177
+ }
2178
+ &nbsp;
2179
+ <span class="fstat-no" title="function not covered" > async </span>getHistoryCompressionEnabledWithSource(): Promise&lt;
2180
+ SettingWithSource&lt;boolean&gt;
2181
+ &gt; {
2182
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(HISTORY_COMPRESSION_ENABLED_KEY);</span>
2183
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get(</span>
2184
+ 'historyCompressionEnabled',
2185
+ );
2186
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true);</span>
2187
+ }
2188
+ &nbsp;
2189
+ <span class="fstat-no" title="function not covered" > async </span>setLlmRetryEnabled(enabled: boolean): Promise&lt;void&gt; {
2190
+ <span class="cstat-no" title="statement not covered" > await this.setState(LLM_RETRY_ENABLED_KEY, String(enabled));</span>
2191
+ }
2192
+ &nbsp;
2193
+ <span class="fstat-no" title="function not covered" > async </span>getLlmRetryEnabled(): Promise&lt;boolean&gt; {
2194
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(LLM_RETRY_ENABLED_KEY);</span>
2195
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('llmRetryEnabled');</span>
2196
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true).value;</span>
2197
+ }
2198
+ &nbsp;
2199
+ <span class="fstat-no" title="function not covered" > async </span>getLlmRetryEnabledWithSource(): Promise&lt;SettingWithSource&lt;boolean&gt;&gt; {
2200
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(LLM_RETRY_ENABLED_KEY);</span>
2201
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('llmRetryEnabled');</span>
2202
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveBoolean(projectValue, globalValue, true);</span>
2203
+ }
2204
+ &nbsp;
2205
+ <span class="fstat-no" title="function not covered" > async </span>setLlmRetryMaxAttempts(attempts: number): Promise&lt;void&gt; {
2206
+ <span class="cstat-no" title="statement not covered" > await this.setState(LLM_RETRY_MAX_ATTEMPTS_KEY, String(attempts));</span>
2207
+ }
2208
+ &nbsp;
2209
+ <span class="fstat-no" title="function not covered" > async </span>getLlmRetryMaxAttempts(): Promise&lt;number&gt; {
2210
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(LLM_RETRY_MAX_ATTEMPTS_KEY);</span>
2211
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('llmRetryMaxAttempts');</span>
2212
+ const result = <span class="cstat-no" title="statement not covered" >this.getEffectiveNumber(projectValue, globalValue, 3).value;</span>
2213
+ <span class="cstat-no" title="statement not covered" > return Math.min(Math.max(result, 1), 10);</span>
2214
+ }
2215
+ &nbsp;
2216
+ <span class="fstat-no" title="function not covered" > async </span>getLlmRetryMaxAttemptsWithSource(): Promise&lt;SettingWithSource&lt;number&gt;&gt; {
2217
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(LLM_RETRY_MAX_ATTEMPTS_KEY);</span>
2218
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('llmRetryMaxAttempts');</span>
2219
+ const result = <span class="cstat-no" title="statement not covered" >this.getEffectiveNumber(projectValue, globalValue, 3);</span>
2220
+ <span class="cstat-no" title="statement not covered" > return {</span>
2221
+ value: Math.min(Math.max(result.value, 1), 10),
2222
+ source: result.source,
2223
+ };
2224
+ }
2225
+ &nbsp;
2226
+ // ===== OpenAI Compatible Provider =====
2227
+ &nbsp;
2228
+ <span class="fstat-no" title="function not covered" > async </span>setOpenaiApiKey(apiKey: string): Promise&lt;void&gt; {
2229
+ <span class="cstat-no" title="statement not covered" > await this.setState(OPENAI_API_KEY, apiKey);</span>
2230
+ }
2231
+ &nbsp;
2232
+ <span class="fstat-no" title="function not covered" > async </span>getOpenaiApiKey(): Promise&lt;string | null&gt; {
2233
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OPENAI_API_KEY);</span>
2234
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('openaiApiKey');</span>
2235
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue).value;</span>
2236
+ }
2237
+ &nbsp;
2238
+ <span class="fstat-no" title="function not covered" > async </span>getOpenaiApiKeyWithSource(): Promise&lt;SettingWithSource&lt;string | null&gt;&gt; {
2239
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OPENAI_API_KEY);</span>
2240
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('openaiApiKey');</span>
2241
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
2242
+ }
2243
+ &nbsp;
2244
+ <span class="fstat-no" title="function not covered" > async </span>setOpenaiBaseUrl(baseUrl: string): Promise&lt;void&gt; {
2245
+ <span class="cstat-no" title="statement not covered" > await this.setState(OPENAI_BASE_URL, baseUrl);</span>
2246
+ }
2247
+ &nbsp;
2248
+ <span class="fstat-no" title="function not covered" > async </span>getOpenaiBaseUrl(): Promise&lt;string | null&gt; {
2249
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OPENAI_BASE_URL);</span>
2250
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('openaiBaseUrl');</span>
2251
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue).value;</span>
2252
+ }
2253
+ &nbsp;
2254
+ <span class="fstat-no" title="function not covered" > async </span>getOpenaiBaseUrlWithSource(): Promise&lt;
2255
+ SettingWithSource&lt;string | null&gt;
2256
+ &gt; {
2257
+ const projectValue = <span class="cstat-no" title="statement not covered" >await this.getState(OPENAI_BASE_URL);</span>
2258
+ const globalValue = <span class="cstat-no" title="statement not covered" >this.globalConfigService.get('openaiBaseUrl');</span>
2259
+ <span class="cstat-no" title="statement not covered" > return this.getEffectiveNullableString(projectValue, globalValue);</span>
2260
+ }
2261
+ }
2262
+ &nbsp;</pre></td></tr></table></pre>
2263
+
2264
+ <div class='push'></div><!-- for sticky footer -->
2265
+ </div><!-- /wrapper -->
2266
+ <div class='footer quiet pad2 space-top1 center small'>
2267
+ Code coverage generated by
2268
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2269
+ at 2026-05-09T01:03:45.353Z
2270
+ </div>
2271
+ <script src="../../prettify.js"></script>
2272
+ <script>
2273
+ window.onload = function () {
2274
+ prettyPrint();
2275
+ };
2276
+ </script>
2277
+ <script src="../../sorter.js"></script>
2278
+ <script src="../../block-navigation.js"></script>
2279
+ </body>
2280
+ </html>
2281
+