@lcap/nasl 3.3.3-beta.3 → 3.3.3-beta.5

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 (332) hide show
  1. package/.nyc_output/f2d14ce8-876a-4dc0-9aaf-e51d08d081ca.json +1 -0
  2. package/.nyc_output/processinfo/f2d14ce8-876a-4dc0-9aaf-e51d08d081ca.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -0
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/favicon.png +0 -0
  7. package/coverage/index.html +446 -0
  8. package/coverage/prettify.css +1 -0
  9. package/coverage/prettify.js +2 -0
  10. package/coverage/sort-arrow-sprite.png +0 -0
  11. package/coverage/sorter.js +196 -0
  12. package/coverage/src/automate/engine/index.html +116 -0
  13. package/coverage/src/automate/engine/utils.js.html +1414 -0
  14. package/coverage/src/bak/index.html +116 -0
  15. package/coverage/src/bak/translator.js.html +619 -0
  16. package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +175 -0
  17. package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +169 -0
  18. package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +1243 -0
  19. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +145 -0
  20. package/coverage/src/breakpoint/generator/index.html +176 -0
  21. package/coverage/src/breakpoint/generator/index.ts.html +508 -0
  22. package/coverage/src/breakpoint/index.html +116 -0
  23. package/coverage/src/breakpoint/index.ts.html +94 -0
  24. package/coverage/src/breakpoint/shared/constants.ts.html +430 -0
  25. package/coverage/src/breakpoint/shared/index.html +176 -0
  26. package/coverage/src/breakpoint/shared/index.ts.html +94 -0
  27. package/coverage/src/breakpoint/shared/operations.ts.html +160 -0
  28. package/coverage/src/breakpoint/shared/socket.ts.html +1225 -0
  29. package/coverage/src/breakpoint/shared/utils.ts.html +961 -0
  30. package/coverage/src/breakpoint/store/core.ts.html +1600 -0
  31. package/coverage/src/breakpoint/store/dock.ts.html +583 -0
  32. package/coverage/src/breakpoint/store/index.html +146 -0
  33. package/coverage/src/breakpoint/store/index.ts.html +91 -0
  34. package/coverage/src/common/BaseNode.ts.html +3868 -0
  35. package/coverage/src/common/Command.ts.html +310 -0
  36. package/coverage/src/common/EventEmitter.ts.html +370 -0
  37. package/coverage/src/common/Messager.ts.html +820 -0
  38. package/coverage/src/common/asyncFuncMap.ts.html +127 -0
  39. package/coverage/src/common/index.html +191 -0
  40. package/coverage/src/common/index.ts.html +94 -0
  41. package/coverage/src/concepts/Abort__.ts.html +328 -0
  42. package/coverage/src/concepts/Anchor__.ts.html +604 -0
  43. package/coverage/src/concepts/AnonymousFunction__.ts.html +1951 -0
  44. package/coverage/src/concepts/App__.ts.html +13252 -0
  45. package/coverage/src/concepts/Argument__.ts.html +910 -0
  46. package/coverage/src/concepts/Assignee__.ts.html +2236 -0
  47. package/coverage/src/concepts/AssignmentLine__.ts.html +409 -0
  48. package/coverage/src/concepts/Assignment__.ts.html +1078 -0
  49. package/coverage/src/concepts/Attribute__.ts.html +733 -0
  50. package/coverage/src/concepts/AuthInterface__.ts.html +367 -0
  51. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +1984 -0
  52. package/coverage/src/concepts/AuthLogic__.ts.html +781 -0
  53. package/coverage/src/concepts/BackendVariable__.ts.html +1483 -0
  54. package/coverage/src/concepts/Backend__.ts.html +1165 -0
  55. package/coverage/src/concepts/BatchAssignment__.ts.html +3250 -0
  56. package/coverage/src/concepts/BinaryExpression__.ts.html +1336 -0
  57. package/coverage/src/concepts/BindAttribute__.ts.html +3679 -0
  58. package/coverage/src/concepts/BindDirective__.ts.html +1921 -0
  59. package/coverage/src/concepts/BindEvent__.ts.html +3232 -0
  60. package/coverage/src/concepts/BindStyle__.ts.html +1612 -0
  61. package/coverage/src/concepts/BooleanLiteral__.ts.html +403 -0
  62. package/coverage/src/concepts/CallAuthInterface__.ts.html +1615 -0
  63. package/coverage/src/concepts/CallConnector__.ts.html +868 -0
  64. package/coverage/src/concepts/CallFunction__.ts.html +1966 -0
  65. package/coverage/src/concepts/CallInterface__.ts.html +2614 -0
  66. package/coverage/src/concepts/CallLogic__.ts.html +4420 -0
  67. package/coverage/src/concepts/CallQueryComponent__.ts.html +5308 -0
  68. package/coverage/src/concepts/Comment__.ts.html +376 -0
  69. package/coverage/src/concepts/CompletionProperty__.ts.html +925 -0
  70. package/coverage/src/concepts/ConfigGroup__.ts.html +1105 -0
  71. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +424 -0
  72. package/coverage/src/concepts/ConfigProperty__.ts.html +1348 -0
  73. package/coverage/src/concepts/Configuration__.ts.html +1027 -0
  74. package/coverage/src/concepts/Connection__.ts.html +1360 -0
  75. package/coverage/src/concepts/ConnectorTrigger__.ts.html +595 -0
  76. package/coverage/src/concepts/Connector__.ts.html +4255 -0
  77. package/coverage/src/concepts/Constant__.ts.html +913 -0
  78. package/coverage/src/concepts/DataSource__.ts.html +1771 -0
  79. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +331 -0
  80. package/coverage/src/concepts/Destination__.ts.html +2563 -0
  81. package/coverage/src/concepts/End__.ts.html +433 -0
  82. package/coverage/src/concepts/EntityIndex__.ts.html +787 -0
  83. package/coverage/src/concepts/EntityProperty__.ts.html +2620 -0
  84. package/coverage/src/concepts/Entity__.ts.html +2872 -0
  85. package/coverage/src/concepts/EnumItem__.ts.html +535 -0
  86. package/coverage/src/concepts/Enum__.ts.html +1192 -0
  87. package/coverage/src/concepts/Event__.ts.html +1084 -0
  88. package/coverage/src/concepts/ExternalDestination__.ts.html +1033 -0
  89. package/coverage/src/concepts/ForEachStatement__.ts.html +1819 -0
  90. package/coverage/src/concepts/FrontendLibrary__.ts.html +1711 -0
  91. package/coverage/src/concepts/FrontendVariable__.ts.html +292 -0
  92. package/coverage/src/concepts/Frontend__.ts.html +3961 -0
  93. package/coverage/src/concepts/Function__.ts.html +3514 -0
  94. package/coverage/src/concepts/Identifier__.ts.html +1057 -0
  95. package/coverage/src/concepts/IfStatement__.ts.html +1486 -0
  96. package/coverage/src/concepts/Integration__.ts.html +1228 -0
  97. package/coverage/src/concepts/InterfaceParam__.ts.html +1087 -0
  98. package/coverage/src/concepts/Interface__.ts.html +3394 -0
  99. package/coverage/src/concepts/JSBlock__.ts.html +406 -0
  100. package/coverage/src/concepts/JavaLogic__.ts.html +460 -0
  101. package/coverage/src/concepts/LogicItem__.ts.html +1144 -0
  102. package/coverage/src/concepts/Logic__.ts.html +7078 -0
  103. package/coverage/src/concepts/MatchCase__.ts.html +2641 -0
  104. package/coverage/src/concepts/Match__.ts.html +2323 -0
  105. package/coverage/src/concepts/MemberExpression__.ts.html +1666 -0
  106. package/coverage/src/concepts/MicroApp__.ts.html +436 -0
  107. package/coverage/src/concepts/Module__.ts.html +9220 -0
  108. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +1045 -0
  109. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +1018 -0
  110. package/coverage/src/concepts/Namespace__.ts.html +7942 -0
  111. package/coverage/src/concepts/NewComposite__.ts.html +4684 -0
  112. package/coverage/src/concepts/NewList__.ts.html +1567 -0
  113. package/coverage/src/concepts/NewMap__.ts.html +2275 -0
  114. package/coverage/src/concepts/New__.ts.html +289 -0
  115. package/coverage/src/concepts/NullLiteral__.ts.html +349 -0
  116. package/coverage/src/concepts/NumericLiteral__.ts.html +661 -0
  117. package/coverage/src/concepts/OqlQueryComponent__.ts.html +1123 -0
  118. package/coverage/src/concepts/OverriddenLogic__.ts.html +6817 -0
  119. package/coverage/src/concepts/Param__.ts.html +1609 -0
  120. package/coverage/src/concepts/Point__.ts.html +331 -0
  121. package/coverage/src/concepts/ProcessComponent__.ts.html +1666 -0
  122. package/coverage/src/concepts/ProcessElement__.ts.html +5884 -0
  123. package/coverage/src/concepts/ProcessOutcome__.ts.html +352 -0
  124. package/coverage/src/concepts/ProcessOutcomes__.ts.html +343 -0
  125. package/coverage/src/concepts/Process__.ts.html +4768 -0
  126. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +568 -0
  127. package/coverage/src/concepts/QueryFieldExpression__.ts.html +583 -0
  128. package/coverage/src/concepts/QueryFromExpression__.ts.html +910 -0
  129. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +559 -0
  130. package/coverage/src/concepts/QueryJoinExpression__.ts.html +1567 -0
  131. package/coverage/src/concepts/QueryLimitExpression__.ts.html +637 -0
  132. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +679 -0
  133. package/coverage/src/concepts/QuerySelectExpression__.ts.html +1714 -0
  134. package/coverage/src/concepts/Rect__.ts.html +373 -0
  135. package/coverage/src/concepts/Return__.ts.html +1258 -0
  136. package/coverage/src/concepts/Role__.ts.html +601 -0
  137. package/coverage/src/concepts/SelectMembers__.ts.html +1246 -0
  138. package/coverage/src/concepts/Slot__.ts.html +628 -0
  139. package/coverage/src/concepts/SqlQueryComponent__.ts.html +964 -0
  140. package/coverage/src/concepts/Start__.ts.html +304 -0
  141. package/coverage/src/concepts/StringInterpolation__.ts.html +1078 -0
  142. package/coverage/src/concepts/StringLiteral__.ts.html +490 -0
  143. package/coverage/src/concepts/StructureProperty__.ts.html +1102 -0
  144. package/coverage/src/concepts/Structure__.ts.html +2053 -0
  145. package/coverage/src/concepts/SwitchCase__.ts.html +1063 -0
  146. package/coverage/src/concepts/SwitchStatement__.ts.html +826 -0
  147. package/coverage/src/concepts/Theme__.ts.html +358 -0
  148. package/coverage/src/concepts/Transactional__.ts.html +628 -0
  149. package/coverage/src/concepts/TriggerEvent__.ts.html +1012 -0
  150. package/coverage/src/concepts/TriggerLauncher__.ts.html +775 -0
  151. package/coverage/src/concepts/TypeAnnotation__.ts.html +3583 -0
  152. package/coverage/src/concepts/TypeParam__.ts.html +301 -0
  153. package/coverage/src/concepts/UnaryExpression__.ts.html +640 -0
  154. package/coverage/src/concepts/Unparsed__.ts.html +382 -0
  155. package/coverage/src/concepts/UseComponent__.ts.html +331 -0
  156. package/coverage/src/concepts/ValidationRule__.ts.html +1840 -0
  157. package/coverage/src/concepts/Variable__.ts.html +1435 -0
  158. package/coverage/src/concepts/ViewBlock__.ts.html +352 -0
  159. package/coverage/src/concepts/ViewComponent__.ts.html +4180 -0
  160. package/coverage/src/concepts/ViewElement__.ts.html +8557 -0
  161. package/coverage/src/concepts/View__.ts.html +8278 -0
  162. package/coverage/src/concepts/WhileStatement__.ts.html +991 -0
  163. package/coverage/src/concepts/basics/stdlib/index.html +341 -0
  164. package/coverage/src/concepts/basics/stdlib/index.ts.html +208 -0
  165. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +565 -0
  166. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +517 -0
  167. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +226 -0
  168. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +172 -0
  169. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +214 -0
  170. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +145 -0
  171. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +589 -0
  172. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +214 -0
  173. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +229 -0
  174. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +268 -0
  175. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +1999 -0
  176. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +3259 -0
  177. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +6787 -0
  178. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1768 -0
  179. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +163 -0
  180. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +121 -0
  181. package/coverage/src/concepts/basics/types/index.html +131 -0
  182. package/coverage/src/concepts/basics/types/index.ts.html +160 -0
  183. package/coverage/src/concepts/index.html +1961 -0
  184. package/coverage/src/concepts/index.ts.html +103 -0
  185. package/coverage/src/concepts/index__.ts.html +451 -0
  186. package/coverage/src/config.ts.html +325 -0
  187. package/coverage/src/decorators/index.html +131 -0
  188. package/coverage/src/decorators/index.ts.html +574 -0
  189. package/coverage/src/decorators/promise.ts.html +169 -0
  190. package/coverage/src/eventBus.ts.html +100 -0
  191. package/coverage/src/generator/compileComponent.ts.html +142 -0
  192. package/coverage/src/generator/genBundleFiles.ts.html +1828 -0
  193. package/coverage/src/generator/genHash.ts.html +124 -0
  194. package/coverage/src/generator/genMetaData.ts.html +1042 -0
  195. package/coverage/src/generator/genReleaseBody.ts.html +1282 -0
  196. package/coverage/src/generator/icestark.ts.html +220 -0
  197. package/coverage/src/generator/index.html +266 -0
  198. package/coverage/src/generator/index.ts.html +106 -0
  199. package/coverage/src/generator/microApp.ts.html +172 -0
  200. package/coverage/src/generator/permission.ts.html +1036 -0
  201. package/coverage/src/generator/qiankun.ts.html +232 -0
  202. package/coverage/src/generator/styleReplacer.ts.html +199 -0
  203. package/coverage/src/index.html +146 -0
  204. package/coverage/src/index.ts.html +121 -0
  205. package/coverage/src/manager/diagnostic.ts.html +442 -0
  206. package/coverage/src/manager/index.html +131 -0
  207. package/coverage/src/manager/stepRecorder.ts.html +457 -0
  208. package/coverage/src/sentry/index.html +116 -0
  209. package/coverage/src/sentry/index.ts.html +676 -0
  210. package/coverage/src/server/createUiTs.ts.html +919 -0
  211. package/coverage/src/server/entity2LogicNamespace.ts.html +1294 -0
  212. package/coverage/src/server/event.js.html +526 -0
  213. package/coverage/src/server/extendBaseNode.ts.html +1762 -0
  214. package/coverage/src/server/formatTsUtils.ts.html +2689 -0
  215. package/coverage/src/server/getConnector.ts.html +316 -0
  216. package/coverage/src/server/getExtensionModules.ts.html +178 -0
  217. package/coverage/src/server/getFunctions.ts.html +133 -0
  218. package/coverage/src/server/getInterfaces.ts.html +229 -0
  219. package/coverage/src/server/getLogging.ts.html +100 -0
  220. package/coverage/src/server/getLogics.ts.html +1363 -0
  221. package/coverage/src/server/getMemberIdentifier.ts.html +1606 -0
  222. package/coverage/src/server/getProcessComponents.ts.html +112 -0
  223. package/coverage/src/server/getProcesses.ts.html +2023 -0
  224. package/coverage/src/server/getValidates.ts.html +115 -0
  225. package/coverage/src/server/index.html +401 -0
  226. package/coverage/src/server/index.ts.html +229 -0
  227. package/coverage/src/server/naslServer.ts.html +14290 -0
  228. package/coverage/src/server/naslStdlibMap.ts.html +241 -0
  229. package/coverage/src/server/process2LogicNamespace.ts.html +454 -0
  230. package/coverage/src/server/translator.ts.html +2566 -0
  231. package/coverage/src/service/creator/add.configs.js.html +379 -0
  232. package/coverage/src/service/creator/errHandles.js.html +322 -0
  233. package/coverage/src/service/creator/index.html +146 -0
  234. package/coverage/src/service/creator/index.js.html +352 -0
  235. package/coverage/src/service/datasource/api.js.html +118 -0
  236. package/coverage/src/service/datasource/index.html +131 -0
  237. package/coverage/src/service/datasource/index.js.html +103 -0
  238. package/coverage/src/service/logic/api.js.html +109 -0
  239. package/coverage/src/service/logic/index.html +131 -0
  240. package/coverage/src/service/logic/index.js.html +103 -0
  241. package/coverage/src/service/storage/api.js.html +202 -0
  242. package/coverage/src/service/storage/index.html +206 -0
  243. package/coverage/src/service/storage/index.ts.html +103 -0
  244. package/coverage/src/service/storage/init.ts.html +2710 -0
  245. package/coverage/src/service/storage/jsoner.ts.html +502 -0
  246. package/coverage/src/service/storage/map.ts.html +256 -0
  247. package/coverage/src/service/storage/service.ts.html +331 -0
  248. package/coverage/src/service/storage/storagePoint.ts.html +304 -0
  249. package/coverage/src/templator/genCallComponentLogic.ts.html +163 -0
  250. package/coverage/src/templator/genCreateBlock.ts.html +1093 -0
  251. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +1609 -0
  252. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +2254 -0
  253. package/coverage/src/templator/genEditTableBlock.ts.html +955 -0
  254. package/coverage/src/templator/genEnumSelectBlock.ts.html +178 -0
  255. package/coverage/src/templator/genGetBlock.ts.html +451 -0
  256. package/coverage/src/templator/genGridViewBlock.ts.html +1114 -0
  257. package/coverage/src/templator/genListViewBlock.ts.html +475 -0
  258. package/coverage/src/templator/genQueryComponent.ts.html +1207 -0
  259. package/coverage/src/templator/genSelectBlock.ts.html +1243 -0
  260. package/coverage/src/templator/genTableBlock.ts.html +910 -0
  261. package/coverage/src/templator/genUpdateBlock.ts.html +1192 -0
  262. package/coverage/src/templator/index.html +326 -0
  263. package/coverage/src/templator/index.ts.html +154 -0
  264. package/coverage/src/templator/utils.ts.html +1861 -0
  265. package/coverage/src/translator/constant.ts.html +106 -0
  266. package/coverage/src/translator/index.html +146 -0
  267. package/coverage/src/translator/index.ts.html +94 -0
  268. package/coverage/src/translator/utils.ts.html +397 -0
  269. package/coverage/src/utils/cookie.ts.html +265 -0
  270. package/coverage/src/utils/env.ts.html +91 -0
  271. package/coverage/src/utils/index.html +236 -0
  272. package/coverage/src/utils/index.ts.html +655 -0
  273. package/coverage/src/utils/logger.ts.html +145 -0
  274. package/coverage/src/utils/sortTsString.ts.html +187 -0
  275. package/coverage/src/utils/string.ts.html +400 -0
  276. package/coverage/src/utils/time-slicing.ts.html +412 -0
  277. package/coverage/src/utils/traverse.ts.html +568 -0
  278. package/coverage/src/utils/window.ts.html +112 -0
  279. package/out/common/BaseNode.d.ts +22 -11
  280. package/out/common/BaseNode.js +20 -0
  281. package/out/common/BaseNode.js.map +1 -1
  282. package/out/concepts/BinaryExpression__.js +1 -1
  283. package/out/concepts/BinaryExpression__.js.map +1 -1
  284. package/out/concepts/CallLogic__.js +1 -1
  285. package/out/concepts/CallLogic__.js.map +1 -1
  286. package/out/concepts/CallQueryComponent__.js +4 -13
  287. package/out/concepts/CallQueryComponent__.js.map +1 -1
  288. package/out/concepts/ViewElement__.js +21 -0
  289. package/out/concepts/ViewElement__.js.map +1 -1
  290. package/out/concepts/View__.js +7 -2
  291. package/out/concepts/View__.js.map +1 -1
  292. package/out/concepts/types__.d.ts +2 -3
  293. package/out/decorators/index.d.ts +3 -3
  294. package/out/enums/KEYWORDS.js +2 -0
  295. package/out/enums/KEYWORDS.js.map +1 -1
  296. package/out/generator/genMetaData.js +4 -4
  297. package/out/generator/genMetaData.js.map +1 -1
  298. package/out/generator/genReleaseBody.js +2 -2
  299. package/out/generator/genReleaseBody.js.map +1 -1
  300. package/out/generator/permission.js +1 -1
  301. package/out/generator/permission.js.map +1 -1
  302. package/out/natural/transformTSCode.d.ts +2 -2
  303. package/out/server/formatTsUtils.d.ts +3 -3
  304. package/out/server/getMemberIdentifier.d.ts +4 -4
  305. package/out/server/getMemberIdentifier.js +2 -2
  306. package/out/server/getMemberIdentifier.js.map +1 -1
  307. package/out/server/naslServer.js +2 -2
  308. package/out/server/naslServer.js.map +1 -1
  309. package/out/templator/genCurdMultipleKeyBlock.js +2 -1
  310. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  311. package/out/translator/utils.js +2 -2
  312. package/out/translator/utils.js.map +1 -1
  313. package/package.json +1 -1
  314. package/sandbox/stdlib/nasl.util.ts +142 -142
  315. package/src/common/BaseNode.ts +45 -23
  316. package/src/concepts/BinaryExpression__.ts +1 -1
  317. package/src/concepts/CallLogic__.ts +1 -1
  318. package/src/concepts/CallQueryComponent__.ts +4 -12
  319. package/src/concepts/ViewElement__.ts +19 -0
  320. package/src/concepts/View__.ts +7 -2
  321. package/src/concepts/types__.ts +2 -4
  322. package/src/decorators/index.ts +4 -4
  323. package/src/enums/KEYWORDS.ts +2 -0
  324. package/src/generator/genMetaData.ts +4 -4
  325. package/src/generator/genReleaseBody.ts +2 -2
  326. package/src/generator/permission.ts +4 -4
  327. package/src/server/formatTsUtils.ts +8 -8
  328. package/src/server/getMemberIdentifier.ts +6 -6
  329. package/src/server/naslServer.ts +4 -4
  330. package/src/service/storage/init.ts +2 -2
  331. package/src/templator/genCurdMultipleKeyBlock.ts +2 -1
  332. package/src/translator/utils.ts +5 -6
@@ -0,0 +1,2710 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/service/storage/init.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/service/storage</a> init.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">5.89% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>27/458</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0.68% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>2/292</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">1.51% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/66</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">6.17% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>27/437</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
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>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a>
922
+ <a name='L857'></a><a href='#L857'>857</a>
923
+ <a name='L858'></a><a href='#L858'>858</a>
924
+ <a name='L859'></a><a href='#L859'>859</a>
925
+ <a name='L860'></a><a href='#L860'>860</a>
926
+ <a name='L861'></a><a href='#L861'>861</a>
927
+ <a name='L862'></a><a href='#L862'>862</a>
928
+ <a name='L863'></a><a href='#L863'>863</a>
929
+ <a name='L864'></a><a href='#L864'>864</a>
930
+ <a name='L865'></a><a href='#L865'>865</a>
931
+ <a name='L866'></a><a href='#L866'>866</a>
932
+ <a name='L867'></a><a href='#L867'>867</a>
933
+ <a name='L868'></a><a href='#L868'>868</a>
934
+ <a name='L869'></a><a href='#L869'>869</a>
935
+ <a name='L870'></a><a href='#L870'>870</a>
936
+ <a name='L871'></a><a href='#L871'>871</a>
937
+ <a name='L872'></a><a href='#L872'>872</a>
938
+ <a name='L873'></a><a href='#L873'>873</a>
939
+ <a name='L874'></a><a href='#L874'>874</a>
940
+ <a name='L875'></a><a href='#L875'>875</a>
941
+ <a name='L876'></a><a href='#L876'>876</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
942
+ <span class="cline-any cline-yes">1x</span>
943
+ <span class="cline-any cline-yes">1x</span>
944
+ <span class="cline-any cline-yes">1x</span>
945
+ <span class="cline-any cline-yes">1x</span>
946
+ <span class="cline-any cline-yes">1x</span>
947
+ <span class="cline-any cline-yes">1x</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-yes">1x</span>
950
+ <span class="cline-any cline-yes">1x</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-yes">1x</span>
957
+ <span class="cline-any cline-yes">1x</span>
958
+ <span class="cline-any cline-yes">1x</span>
959
+ <span class="cline-any cline-yes">1x</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">1x</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-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-no">&nbsp;</span>
975
+ <span class="cline-any cline-no">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-no">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-no">&nbsp;</span>
984
+ <span class="cline-any cline-no">&nbsp;</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-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-no">&nbsp;</span>
993
+ <span class="cline-any cline-no">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-no">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-no">&nbsp;</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-no">&nbsp;</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
1008
+ <span class="cline-any cline-no">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-no">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-no">&nbsp;</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-no">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-no">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-no">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-no">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
1087
+ <span class="cline-any cline-no">&nbsp;</span>
1088
+ <span class="cline-any cline-no">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
1091
+ <span class="cline-any cline-no">&nbsp;</span>
1092
+ <span class="cline-any cline-no">&nbsp;</span>
1093
+ <span class="cline-any cline-no">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-no">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-no">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-no">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-no">&nbsp;</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-no">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-no">&nbsp;</span>
1121
+ <span class="cline-any cline-no">&nbsp;</span>
1122
+ <span class="cline-any cline-no">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-no">&nbsp;</span>
1133
+ <span class="cline-any cline-no">&nbsp;</span>
1134
+ <span class="cline-any cline-no">&nbsp;</span>
1135
+ <span class="cline-any cline-no">&nbsp;</span>
1136
+ <span class="cline-any cline-no">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-no">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-no">&nbsp;</span>
1142
+ <span class="cline-any cline-no">&nbsp;</span>
1143
+ <span class="cline-any cline-no">&nbsp;</span>
1144
+ <span class="cline-any cline-no">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-neutral">&nbsp;</span>
1152
+ <span class="cline-any cline-no">&nbsp;</span>
1153
+ <span class="cline-any cline-no">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-no">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-no">&nbsp;</span>
1159
+ <span class="cline-any cline-no">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-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-no">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-no">&nbsp;</span>
1170
+ <span class="cline-any cline-neutral">&nbsp;</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1178
+ <span class="cline-any cline-neutral">&nbsp;</span>
1179
+ <span class="cline-any cline-no">&nbsp;</span>
1180
+ <span class="cline-any cline-no">&nbsp;</span>
1181
+ <span class="cline-any cline-neutral">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-no">&nbsp;</span>
1184
+ <span class="cline-any cline-no">&nbsp;</span>
1185
+ <span class="cline-any cline-no">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span>
1187
+ <span class="cline-any cline-no">&nbsp;</span>
1188
+ <span class="cline-any cline-no">&nbsp;</span>
1189
+ <span class="cline-any cline-no">&nbsp;</span>
1190
+ <span class="cline-any cline-no">&nbsp;</span>
1191
+ <span class="cline-any cline-no">&nbsp;</span>
1192
+ <span class="cline-any cline-no">&nbsp;</span>
1193
+ <span class="cline-any cline-neutral">&nbsp;</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1209
+ <span class="cline-any cline-no">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-no">&nbsp;</span>
1212
+ <span class="cline-any cline-no">&nbsp;</span>
1213
+ <span class="cline-any cline-no">&nbsp;</span>
1214
+ <span class="cline-any cline-no">&nbsp;</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-no">&nbsp;</span>
1217
+ <span class="cline-any cline-no">&nbsp;</span>
1218
+ <span class="cline-any cline-neutral">&nbsp;</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-no">&nbsp;</span>
1221
+ <span class="cline-any cline-no">&nbsp;</span>
1222
+ <span class="cline-any cline-no">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-no">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-no">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-no">&nbsp;</span>
1231
+ <span class="cline-any cline-no">&nbsp;</span>
1232
+ <span class="cline-any cline-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-neutral">&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-no">&nbsp;</span>
1239
+ <span class="cline-any cline-no">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-no">&nbsp;</span>
1244
+ <span class="cline-any cline-no">&nbsp;</span>
1245
+ <span class="cline-any cline-no">&nbsp;</span>
1246
+ <span class="cline-any cline-no">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-no">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1252
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1260
+ <span class="cline-any cline-no">&nbsp;</span>
1261
+ <span class="cline-any cline-no">&nbsp;</span>
1262
+ <span class="cline-any cline-neutral">&nbsp;</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1268
+ <span class="cline-any cline-no">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-no">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
1310
+ <span class="cline-any cline-no">&nbsp;</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-no">&nbsp;</span>
1317
+ <span class="cline-any cline-no">&nbsp;</span>
1318
+ <span class="cline-any cline-no">&nbsp;</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-no">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-neutral">&nbsp;</span>
1331
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-yes">1x</span>
1337
+ <span class="cline-any cline-yes">1x</span>
1338
+ <span class="cline-any cline-yes">1x</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-neutral">&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-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-yes">1x</span>
1349
+ <span class="cline-any cline-yes">1x</span>
1350
+ <span class="cline-any cline-yes">1x</span>
1351
+ <span class="cline-any cline-yes">1x</span>
1352
+ <span class="cline-any cline-yes">1x</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1359
+ <span class="cline-any cline-no">&nbsp;</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&nbsp;</span>
1362
+ <span class="cline-any cline-no">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
1367
+ <span class="cline-any cline-no">&nbsp;</span>
1368
+ <span class="cline-any cline-no">&nbsp;</span>
1369
+ <span class="cline-any cline-no">&nbsp;</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-neutral">&nbsp;</span>
1373
+ <span class="cline-any cline-no">&nbsp;</span>
1374
+ <span class="cline-any cline-no">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-no">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-no">&nbsp;</span>
1379
+ <span class="cline-any cline-no">&nbsp;</span>
1380
+ <span class="cline-any cline-no">&nbsp;</span>
1381
+ <span class="cline-any cline-no">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-no">&nbsp;</span>
1384
+ <span class="cline-any cline-no">&nbsp;</span>
1385
+ <span class="cline-any cline-no">&nbsp;</span>
1386
+ <span class="cline-any cline-no">&nbsp;</span>
1387
+ <span class="cline-any cline-no">&nbsp;</span>
1388
+ <span class="cline-any cline-no">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-no">&nbsp;</span>
1392
+ <span class="cline-any cline-no">&nbsp;</span>
1393
+ <span class="cline-any cline-no">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-no">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1404
+ <span class="cline-any cline-no">&nbsp;</span>
1405
+ <span class="cline-any cline-no">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1423
+ <span class="cline-any cline-no">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-no">&nbsp;</span>
1427
+ <span class="cline-any cline-no">&nbsp;</span>
1428
+ <span class="cline-any cline-no">&nbsp;</span>
1429
+ <span class="cline-any cline-no">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-no">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-no">&nbsp;</span>
1450
+ <span class="cline-any cline-no">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1457
+ <span class="cline-any cline-no">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
1468
+ <span class="cline-any cline-neutral">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1474
+ <span class="cline-any cline-no">&nbsp;</span>
1475
+ <span class="cline-any cline-no">&nbsp;</span>
1476
+ <span class="cline-any cline-no">&nbsp;</span>
1477
+ <span class="cline-any cline-no">&nbsp;</span>
1478
+ <span class="cline-any cline-no">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-no">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-no">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&nbsp;</span>
1486
+ <span class="cline-any cline-no">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-no">&nbsp;</span>
1504
+ <span class="cline-any cline-no">&nbsp;</span>
1505
+ <span class="cline-any cline-no">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
1531
+ <span class="cline-any cline-no">&nbsp;</span>
1532
+ <span class="cline-any cline-no">&nbsp;</span>
1533
+ <span class="cline-any cline-no">&nbsp;</span>
1534
+ <span class="cline-any cline-no">&nbsp;</span>
1535
+ <span class="cline-any cline-no">&nbsp;</span>
1536
+ <span class="cline-any cline-no">&nbsp;</span>
1537
+ <span class="cline-any cline-neutral">&nbsp;</span>
1538
+ <span class="cline-any cline-no">&nbsp;</span>
1539
+ <span class="cline-any cline-no">&nbsp;</span>
1540
+ <span class="cline-any cline-no">&nbsp;</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-no">&nbsp;</span>
1544
+ <span class="cline-any cline-no">&nbsp;</span>
1545
+ <span class="cline-any cline-no">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-no">&nbsp;</span>
1552
+ <span class="cline-any cline-no">&nbsp;</span>
1553
+ <span class="cline-any cline-no">&nbsp;</span>
1554
+ <span class="cline-any cline-no">&nbsp;</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-no">&nbsp;</span>
1557
+ <span class="cline-any cline-no">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-no">&nbsp;</span>
1560
+ <span class="cline-any cline-no">&nbsp;</span>
1561
+ <span class="cline-any cline-no">&nbsp;</span>
1562
+ <span class="cline-any cline-no">&nbsp;</span>
1563
+ <span class="cline-any cline-neutral">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-no">&nbsp;</span>
1570
+ <span class="cline-any cline-no">&nbsp;</span>
1571
+ <span class="cline-any cline-no">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-no">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-neutral">&nbsp;</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-no">&nbsp;</span>
1580
+ <span class="cline-any cline-no">&nbsp;</span>
1581
+ <span class="cline-any cline-no">&nbsp;</span>
1582
+ <span class="cline-any cline-no">&nbsp;</span>
1583
+ <span class="cline-any cline-no">&nbsp;</span>
1584
+ <span class="cline-any cline-no">&nbsp;</span>
1585
+ <span class="cline-any cline-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-no">&nbsp;</span>
1588
+ <span class="cline-any cline-no">&nbsp;</span>
1589
+ <span class="cline-any cline-no">&nbsp;</span>
1590
+ <span class="cline-any cline-no">&nbsp;</span>
1591
+ <span class="cline-any cline-no">&nbsp;</span>
1592
+ <span class="cline-any cline-no">&nbsp;</span>
1593
+ <span class="cline-any cline-no">&nbsp;</span>
1594
+ <span class="cline-any cline-no">&nbsp;</span>
1595
+ <span class="cline-any cline-no">&nbsp;</span>
1596
+ <span class="cline-any cline-no">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-neutral">&nbsp;</span>
1599
+ <span class="cline-any cline-no">&nbsp;</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
+ <span class="cline-any cline-neutral">&nbsp;</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-no">&nbsp;</span>
1606
+ <span class="cline-any cline-no">&nbsp;</span>
1607
+ <span class="cline-any cline-no">&nbsp;</span>
1608
+ <span class="cline-any cline-neutral">&nbsp;</span>
1609
+ <span class="cline-any cline-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-neutral">&nbsp;</span>
1611
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-neutral">&nbsp;</span>
1614
+ <span class="cline-any cline-no">&nbsp;</span>
1615
+ <span class="cline-any cline-no">&nbsp;</span>
1616
+ <span class="cline-any cline-neutral">&nbsp;</span>
1617
+ <span class="cline-any cline-no">&nbsp;</span>
1618
+ <span class="cline-any cline-no">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-neutral">&nbsp;</span>
1621
+ <span class="cline-any cline-no">&nbsp;</span>
1622
+ <span class="cline-any cline-no">&nbsp;</span>
1623
+ <span class="cline-any cline-no">&nbsp;</span>
1624
+ <span class="cline-any cline-no">&nbsp;</span>
1625
+ <span class="cline-any cline-neutral">&nbsp;</span>
1626
+ <span class="cline-any cline-no">&nbsp;</span>
1627
+ <span class="cline-any cline-no">&nbsp;</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-no">&nbsp;</span>
1630
+ <span class="cline-any cline-no">&nbsp;</span>
1631
+ <span class="cline-any cline-neutral">&nbsp;</span>
1632
+ <span class="cline-any cline-no">&nbsp;</span>
1633
+ <span class="cline-any cline-no">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-no">&nbsp;</span>
1636
+ <span class="cline-any cline-no">&nbsp;</span>
1637
+ <span class="cline-any cline-no">&nbsp;</span>
1638
+ <span class="cline-any cline-neutral">&nbsp;</span>
1639
+ <span class="cline-any cline-no">&nbsp;</span>
1640
+ <span class="cline-any cline-neutral">&nbsp;</span>
1641
+ <span class="cline-any cline-neutral">&nbsp;</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-neutral">&nbsp;</span>
1644
+ <span class="cline-any cline-no">&nbsp;</span>
1645
+ <span class="cline-any cline-neutral">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-neutral">&nbsp;</span>
1649
+ <span class="cline-any cline-neutral">&nbsp;</span>
1650
+ <span class="cline-any cline-neutral">&nbsp;</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-neutral">&nbsp;</span>
1654
+ <span class="cline-any cline-neutral">&nbsp;</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-neutral">&nbsp;</span>
1657
+ <span class="cline-any cline-neutral">&nbsp;</span>
1658
+ <span class="cline-any cline-neutral">&nbsp;</span>
1659
+ <span class="cline-any cline-neutral">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-yes">1x</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-no">&nbsp;</span>
1664
+ <span class="cline-any cline-no">&nbsp;</span>
1665
+ <span class="cline-any cline-no">&nbsp;</span>
1666
+ <span class="cline-any cline-neutral">&nbsp;</span>
1667
+ <span class="cline-any cline-neutral">&nbsp;</span>
1668
+ <span class="cline-any cline-neutral">&nbsp;</span>
1669
+ <span class="cline-any cline-neutral">&nbsp;</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-neutral">&nbsp;</span>
1672
+ <span class="cline-any cline-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-neutral">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-neutral">&nbsp;</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-neutral">&nbsp;</span>
1680
+ <span class="cline-any cline-neutral">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-neutral">&nbsp;</span>
1683
+ <span class="cline-any cline-neutral">&nbsp;</span>
1684
+ <span class="cline-any cline-neutral">&nbsp;</span>
1685
+ <span class="cline-any cline-neutral">&nbsp;</span>
1686
+ <span class="cline-any cline-neutral">&nbsp;</span>
1687
+ <span class="cline-any cline-no">&nbsp;</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-neutral">&nbsp;</span>
1690
+ <span class="cline-any cline-no">&nbsp;</span>
1691
+ <span class="cline-any cline-neutral">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-no">&nbsp;</span>
1694
+ <span class="cline-any cline-neutral">&nbsp;</span>
1695
+ <span class="cline-any cline-no">&nbsp;</span>
1696
+ <span class="cline-any cline-no">&nbsp;</span>
1697
+ <span class="cline-any cline-neutral">&nbsp;</span>
1698
+ <span class="cline-any cline-no">&nbsp;</span>
1699
+ <span class="cline-any cline-no">&nbsp;</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-no">&nbsp;</span>
1702
+ <span class="cline-any cline-no">&nbsp;</span>
1703
+ <span class="cline-any cline-neutral">&nbsp;</span>
1704
+ <span class="cline-any cline-no">&nbsp;</span>
1705
+ <span class="cline-any cline-no">&nbsp;</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-neutral">&nbsp;</span>
1709
+ <span class="cline-any cline-no">&nbsp;</span>
1710
+ <span class="cline-any cline-no">&nbsp;</span>
1711
+ <span class="cline-any cline-no">&nbsp;</span>
1712
+ <span class="cline-any cline-neutral">&nbsp;</span>
1713
+ <span class="cline-any cline-no">&nbsp;</span>
1714
+ <span class="cline-any cline-no">&nbsp;</span>
1715
+ <span class="cline-any cline-no">&nbsp;</span>
1716
+ <span class="cline-any cline-neutral">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-neutral">&nbsp;</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-neutral">&nbsp;</span>
1722
+ <span class="cline-any cline-neutral">&nbsp;</span>
1723
+ <span class="cline-any cline-neutral">&nbsp;</span>
1724
+ <span class="cline-any cline-neutral">&nbsp;</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-neutral">&nbsp;</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-neutral">&nbsp;</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span>
1731
+ <span class="cline-any cline-neutral">&nbsp;</span>
1732
+ <span class="cline-any cline-neutral">&nbsp;</span>
1733
+ <span class="cline-any cline-neutral">&nbsp;</span>
1734
+ <span class="cline-any cline-neutral">&nbsp;</span>
1735
+ <span class="cline-any cline-no">&nbsp;</span>
1736
+ <span class="cline-any cline-no">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-neutral">&nbsp;</span>
1739
+ <span class="cline-any cline-no">&nbsp;</span>
1740
+ <span class="cline-any cline-no">&nbsp;</span>
1741
+ <span class="cline-any cline-no">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&nbsp;</span>
1743
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
+ <span class="cline-any cline-neutral">&nbsp;</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1746
+ <span class="cline-any cline-yes">1x</span>
1747
+ <span class="cline-any cline-no">&nbsp;</span>
1748
+ <span class="cline-any cline-no">&nbsp;</span>
1749
+ <span class="cline-any cline-neutral">&nbsp;</span>
1750
+ <span class="cline-any cline-no">&nbsp;</span>
1751
+ <span class="cline-any cline-no">&nbsp;</span>
1752
+ <span class="cline-any cline-no">&nbsp;</span>
1753
+ <span class="cline-any cline-no">&nbsp;</span>
1754
+ <span class="cline-any cline-no">&nbsp;</span>
1755
+ <span class="cline-any cline-no">&nbsp;</span>
1756
+ <span class="cline-any cline-no">&nbsp;</span>
1757
+ <span class="cline-any cline-neutral">&nbsp;</span>
1758
+ <span class="cline-any cline-neutral">&nbsp;</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-no">&nbsp;</span>
1761
+ <span class="cline-any cline-no">&nbsp;</span>
1762
+ <span class="cline-any cline-no">&nbsp;</span>
1763
+ <span class="cline-any cline-neutral">&nbsp;</span>
1764
+ <span class="cline-any cline-neutral">&nbsp;</span>
1765
+ <span class="cline-any cline-neutral">&nbsp;</span>
1766
+ <span class="cline-any cline-neutral">&nbsp;</span>
1767
+ <span class="cline-any cline-no">&nbsp;</span>
1768
+ <span class="cline-any cline-no">&nbsp;</span>
1769
+ <span class="cline-any cline-no">&nbsp;</span>
1770
+ <span class="cline-any cline-no">&nbsp;</span>
1771
+ <span class="cline-any cline-no">&nbsp;</span>
1772
+ <span class="cline-any cline-no">&nbsp;</span>
1773
+ <span class="cline-any cline-no">&nbsp;</span>
1774
+ <span class="cline-any cline-no">&nbsp;</span>
1775
+ <span class="cline-any cline-neutral">&nbsp;</span>
1776
+ <span class="cline-any cline-no">&nbsp;</span>
1777
+ <span class="cline-any cline-no">&nbsp;</span>
1778
+ <span class="cline-any cline-no">&nbsp;</span>
1779
+ <span class="cline-any cline-no">&nbsp;</span>
1780
+ <span class="cline-any cline-no">&nbsp;</span>
1781
+ <span class="cline-any cline-no">&nbsp;</span>
1782
+ <span class="cline-any cline-no">&nbsp;</span>
1783
+ <span class="cline-any cline-no">&nbsp;</span>
1784
+ <span class="cline-any cline-neutral">&nbsp;</span>
1785
+ <span class="cline-any cline-neutral">&nbsp;</span>
1786
+ <span class="cline-any cline-neutral">&nbsp;</span>
1787
+ <span class="cline-any cline-neutral">&nbsp;</span>
1788
+ <span class="cline-any cline-no">&nbsp;</span>
1789
+ <span class="cline-any cline-neutral">&nbsp;</span>
1790
+ <span class="cline-any cline-neutral">&nbsp;</span>
1791
+ <span class="cline-any cline-neutral">&nbsp;</span>
1792
+ <span class="cline-any cline-neutral">&nbsp;</span>
1793
+ <span class="cline-any cline-neutral">&nbsp;</span>
1794
+ <span class="cline-any cline-neutral">&nbsp;</span>
1795
+ <span class="cline-any cline-no">&nbsp;</span>
1796
+ <span class="cline-any cline-neutral">&nbsp;</span>
1797
+ <span class="cline-any cline-neutral">&nbsp;</span>
1798
+ <span class="cline-any cline-neutral">&nbsp;</span>
1799
+ <span class="cline-any cline-no">&nbsp;</span>
1800
+ <span class="cline-any cline-no">&nbsp;</span>
1801
+ <span class="cline-any cline-no">&nbsp;</span>
1802
+ <span class="cline-any cline-neutral">&nbsp;</span>
1803
+ <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-neutral">&nbsp;</span>
1805
+ <span class="cline-any cline-neutral">&nbsp;</span>
1806
+ <span class="cline-any cline-neutral">&nbsp;</span>
1807
+ <span class="cline-any cline-neutral">&nbsp;</span>
1808
+ <span class="cline-any cline-neutral">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-yes">1x</span>
1811
+ <span class="cline-any cline-no">&nbsp;</span>
1812
+ <span class="cline-any cline-no">&nbsp;</span>
1813
+ <span class="cline-any cline-no">&nbsp;</span>
1814
+ <span class="cline-any cline-no">&nbsp;</span>
1815
+ <span class="cline-any cline-neutral">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SynatxNode, BindDirective, CallLogic } from '../../concepts';
1817
+ import { addBreakpointNodesFromApp } from '../../breakpoint';
1818
+ import { getConceptConstructor } from '../../decorators';
1819
+ import { config } from '../../config';
1820
+ import storageService from './service';
1821
+ import { v4 as uuidv4 } from 'uuid';
1822
+ import stepRecorder from '../../manager/stepRecorder';
1823
+ /// #if !process.env.NODE_ENV || process.env.BUILD_TARGET === 'node'
1824
+ import * as fs from 'fs-extra';
1825
+ import * as jsoner from './jsoner';
1826
+ import type { NaslServer } from 'src/server/naslServer';
1827
+ /// #endif
1828
+ &nbsp;
1829
+ &nbsp;
1830
+ &nbsp;
1831
+ export const batchQuery = storageService.batchQuery;
1832
+ export const batchAction = storageService.batchAction;
1833
+ export const batchInstruct = storageService.batchInstruct;
1834
+ export const breakpoint = storageService.breakpoint;
1835
+ &nbsp;
1836
+ let tabTimestamp: string;
1837
+ export const databaseTypes = storageService.databaseTypes;
1838
+ &nbsp;
1839
+ function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
1840
+ <span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
1841
+ <span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
1842
+ <span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
1843
+ const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
1844
+ const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
1845
+ const logic = <span class="cstat-no" title="statement not covered" >app.logics.find(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item.name === name)</span>;</span>
1846
+ <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
1847
+ <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
1848
+ }
1849
+ } else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
1850
+ const _pathArr = <span class="cstat-no" title="statement not covered" >key.split('.');</span>
1851
+ const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
1852
+ const _path = <span class="cstat-no" title="statement not covered" >_pathArr[3];</span>
1853
+ const _list = <span class="cstat-no" title="statement not covered" >app.dependencies;</span>
1854
+ const _module = <span class="cstat-no" title="statement not covered" >_list.find(<span class="fstat-no" title="function not covered" >(i</span>t: Module) =&gt; {</span>
1855
+ const name = <span class="cstat-no" title="statement not covered" >it.name.replaceAll('-', '_');</span>
1856
+ <span class="cstat-no" title="statement not covered" > return name === _name;</span>
1857
+ });
1858
+ const logic = <span class="cstat-no" title="statement not covered" >_module?.logics?.find(<span class="fstat-no" title="function not covered" >(i</span>tem: Logic) =&gt; <span class="cstat-no" title="statement not covered" >item.name === _path)</span>;</span>
1859
+ <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
1860
+ <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
1861
+ }
1862
+ }
1863
+ }
1864
+ }
1865
+ /* 获取LogicITEM */
1866
+ function <span class="fstat-no" title="function not covered" >getStatement(</span>state: any, app: any, diffLogicList: string[]) {
1867
+ let logicItems = <span class="cstat-no" title="statement not covered" >[];</span>
1868
+ <span class="cstat-no" title="statement not covered" > switch (state.concept) {</span>
1869
+ case 'Assignment':
1870
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
1871
+ <span class="cstat-no" title="statement not covered" > break;</span>
1872
+ case 'IfStatement':
1873
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
1874
+ <span class="cstat-no" title="statement not covered" > break;</span>
1875
+ case 'ForEachStatement':
1876
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.body, state.each, state.start, state.end];</span>
1877
+ <span class="cstat-no" title="statement not covered" > break;</span>
1878
+ case 'Match':
1879
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];</span>
1880
+ <span class="cstat-no" title="statement not covered" > break;</span>
1881
+ case 'MatchCase':
1882
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.patterns, ...state.body];</span>
1883
+ <span class="cstat-no" title="statement not covered" > break;</span>
1884
+ case 'SwitchStatement':
1885
+ <span class="cstat-no" title="statement not covered" > logicItems = state.cases.map(getStatement).flat(1);</span>
1886
+ <span class="cstat-no" title="statement not covered" > break;</span>
1887
+ case 'SwitchCase':
1888
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.consequent];</span>
1889
+ <span class="cstat-no" title="statement not covered" > break;</span>
1890
+ case 'WhileStatement':
1891
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.body];</span>
1892
+ <span class="cstat-no" title="statement not covered" > break;</span>
1893
+ case 'CallLogic':
1894
+ <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
1895
+ <span class="cstat-no" title="statement not covered" > getLogic(state.calleewholeKey, app, diffLogicList);</span>
1896
+ <span class="cstat-no" title="statement not covered" > break;</span>
1897
+ case 'CallFunction':
1898
+ <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
1899
+ <span class="cstat-no" title="statement not covered" > break;</span>
1900
+ case 'CallInterface':
1901
+ <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
1902
+ <span class="cstat-no" title="statement not covered" > break;</span>
1903
+ case 'ExternalDestination':
1904
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.anchor, state.link];</span>
1905
+ <span class="cstat-no" title="statement not covered" > break;</span>
1906
+ case 'BatchAssignment':
1907
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >[item?.expression, ...item?.members])</span>.flat(1)];</span>
1908
+ <span class="cstat-no" title="statement not covered" > break;</span>
1909
+ case 'MemberExpression':
1910
+ <span class="cstat-no" title="statement not covered" > logicItems = [state.object, state.property];</span>
1911
+ <span class="cstat-no" title="statement not covered" > break;</span>
1912
+ case 'StringInterpolation':
1913
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
1914
+ <span class="cstat-no" title="statement not covered" > break;</span>
1915
+ case 'NewComposite':
1916
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>];</span>
1917
+ <span class="cstat-no" title="statement not covered" > break;</span>
1918
+ case 'NewList':
1919
+ <span class="cstat-no" title="statement not covered" > logicItems = [...state.items];</span>
1920
+ <span class="cstat-no" title="statement not covered" > break;</span>
1921
+ default:
1922
+ <span class="cstat-no" title="statement not covered" > break;</span>
1923
+ }
1924
+ &nbsp;
1925
+ <span class="cstat-no" title="statement not covered" > return logicItems.filter(<span class="fstat-no" title="function not covered" >(i</span>tem: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >!!item)</span>;</span>
1926
+ }
1927
+ &nbsp;
1928
+ /* 小程序影响的服务端发布 */
1929
+ function <span class="fstat-no" title="function not covered" >getMiniAppChange(</span>target: any, obj: any, action: string) {
1930
+ <span class="cstat-no" title="statement not covered" > if (!target.app.miniEnable) {</span>
1931
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1932
+ }
1933
+ /* 分端以后需要改 */
1934
+ const len = <span class="cstat-no" title="statement not covered" >target.nodePath?.split('.').length;</span>
1935
+ <span class="cstat-no" title="statement not covered" > if (len &gt; 2) {</span>
1936
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1937
+ }
1938
+ <span class="cstat-no" title="statement not covered" > if (action === 'delete') {</span>
1939
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1940
+ } else {
1941
+ <span class="cstat-no" title="statement not covered" > if ('name' in obj || 'title' in obj) {</span>
1942
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1943
+ }
1944
+ }
1945
+ }
1946
+ &nbsp;
1947
+ /**
1948
+ * 执行更新
1949
+ */
1950
+ async function <span class="fstat-no" title="function not covered" >doAction(</span>app: any, actionItem: any) {
1951
+ let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
1952
+ let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
1953
+ const actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
1954
+ const { list, actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
1955
+ const itemloop = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(_</span>i: LogicItem, app: any, diffArr: string[]) =&gt; {</span>
1956
+ const _l = <span class="cstat-no" title="statement not covered" >getStatement(_i, app, diffArr);</span>
1957
+ <span class="cstat-no" title="statement not covered" > if (_l.length) {</span>
1958
+ <span class="cstat-no" title="statement not covered" > _l.map(<span class="fstat-no" title="function not covered" >(_</span>ii: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(_ii, app, diffArr))</span>;</span>
1959
+ }
1960
+ };
1961
+ const loopEle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iew: View | ViewElement, checkAuth: boolean) =&gt; {</span>
1962
+ <span class="cstat-no" title="statement not covered" > if (view instanceof View) {</span>
1963
+ <span class="cstat-no" title="statement not covered" > view?.elements?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
1964
+ }
1965
+ <span class="cstat-no" title="statement not covered" > view?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
1966
+ <span class="cstat-no" title="statement not covered" > if (view instanceof ViewElement) {</span>
1967
+ <span class="cstat-no" title="statement not covered" > if (view.bindEvents.length) {</span>
1968
+ const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
1969
+ <span class="cstat-no" title="statement not covered" > view.bindEvents.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) =&gt; {</span>
1970
+ <span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
1971
+ <span class="cstat-no" title="statement not covered" > logic.body.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(logicItem, app, diffArr))</span>;</span>
1972
+ });
1973
+ });
1974
+ const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
1975
+ <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
1976
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
1977
+ }
1978
+ }
1979
+ <span class="cstat-no" title="statement not covered" > if (view.tag === 'u-uploader' || view.tag === 'van-uploader') {</span>
1980
+ const bute = <span class="cstat-no" title="statement not covered" >view?.bindAttrs.find(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'url')</span>;</span>
1981
+ const needUpdateBackEnd = <span class="cstat-no" title="statement not covered" >bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
1982
+ <span class="cstat-no" title="statement not covered" > if (checkAuth) {</span>
1983
+ <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd &amp;&amp; !view.view.parentAuth) {</span>
1984
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
1985
+ }
1986
+ } else {
1987
+ <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
1988
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
1989
+ }
1990
+ }
1991
+ }
1992
+ }
1993
+ };
1994
+ &nbsp;
1995
+ const loopEleAuth = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iewElement: ViewElement) =&gt; {</span>
1996
+ <span class="cstat-no" title="statement not covered" > viewElement?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: ViewElement) =&gt; {</span>
1997
+ const bindDirective = <span class="cstat-no" title="statement not covered" >item?.bindDirectives?.find(</span>
1998
+ <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
1999
+ )
2000
+ <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2001
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2002
+ }
2003
+ <span class="cstat-no" title="statement not covered" > loopEleAuth(item)</span>
2004
+ })
2005
+ }
2006
+ <span class="cstat-no" title="statement not covered" > try {</span>
2007
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(list)) {</span>
2008
+ <span class="cstat-no" title="statement not covered" > list.forEach(<span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2009
+ const emitTarget = <span class="cstat-no" title="statement not covered" >event?.originEvent?.target as SynatxNode;</span>
2010
+ const _path: string = <span class="cstat-no" title="statement not covered" >event.originEvent.path;</span>
2011
+ const _root = <span class="cstat-no" title="statement not covered" >_path.split('.')?.[1] || '';</span>
2012
+ <span class="cstat-no" title="statement not covered" > if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >_root.startsWith(item))</span>) {</span>
2013
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2014
+ }
2015
+ <span class="cstat-no" title="statement not covered" > if (emitTarget) {</span>
2016
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'App') {</span>
2017
+ <span class="cstat-no" title="statement not covered" > if (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
2018
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2019
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2020
+ }
2021
+ }
2022
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ValidationRule') {</span>
2023
+ <span class="cstat-no" title="statement not covered" > if (</span>
2024
+ event?.object?.enableServerValidation ||
2025
+ event?.originEvent?.object?.enableServerValidation
2026
+ ) {
2027
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2028
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2029
+ }
2030
+ }
2031
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Logic') {</span>
2032
+ const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2033
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.body.length &gt; 2) {</span>
2034
+ <span class="cstat-no" title="statement not covered" > emitTarget.body.forEach(<span class="fstat-no" title="function not covered" >(i</span>t: LogicItem) =&gt; {</span>
2035
+ <span class="cstat-no" title="statement not covered" > itemloop(it, app, diffArr);</span>
2036
+ });
2037
+ }
2038
+ const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2039
+ <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2040
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2041
+ }
2042
+ }
2043
+ <span class="cstat-no" title="statement not covered" > if ('view' in emitTarget &amp;&amp; emitTarget.view) {</span>
2044
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2045
+ }
2046
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindDirective') {</span>
2047
+ const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
2048
+ <span class="cstat-no" title="statement not covered" > if (isDelete) {</span>
2049
+ const isAuto = <span class="cstat-no" title="statement not covered" >~event?.originEvent?.path?.indexOf('name=auth')</span>
2050
+ <span class="cstat-no" title="statement not covered" > if (isAuto) {</span>
2051
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2052
+ }
2053
+ }
2054
+ <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name === 'auth') {</span>
2055
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2056
+ }
2057
+ }
2058
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'View') {</span>
2059
+ <span class="cstat-no" title="statement not covered" > if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {</span>
2060
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2061
+ }
2062
+ const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete';</span>
2063
+ const isAuthView = <span class="cstat-no" title="statement not covered" >emitTarget.auth &amp;&amp; event?.originEvent?.object?.name;</span>
2064
+ const isUpdateAuth = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.auth</span>
2065
+ const isUpdateBindRoles = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles;</span>
2066
+ <span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView) {</span>
2067
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2068
+ // const app = emitTarget.app;
2069
+ // const diffArr: string[] = [];
2070
+ // emitTarget.logics.forEach((logic: Logic) =&gt; {
2071
+ // if (logic.body.length &gt; 2) {
2072
+ // logic.body.forEach((it: LogicItem) =&gt; {
2073
+ // itemloop(it, app, diffArr);
2074
+ // });
2075
+ // }
2076
+ // });
2077
+ // const result = diffArr.filter((item) =&gt; item.startsWith('app') || item.startsWith('extensions'));
2078
+ // if (result.length) {
2079
+ // hasBackEnd = true;
2080
+ // }
2081
+ // emitTarget.children.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
2082
+ // emitTarget.elements.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
2083
+ }
2084
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
2085
+ }
2086
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ViewElement') {</span>
2087
+ <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name) {</span>
2088
+ const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget.bindDirectives.find(</span>
2089
+ <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
2090
+ )
2091
+ <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2092
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2093
+ }
2094
+ }
2095
+ <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action === 'delete') {</span>
2096
+ const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget?.bindDirectives?.find(</span>
2097
+ <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
2098
+ )
2099
+ <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2100
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2101
+ }
2102
+ <span class="cstat-no" title="statement not covered" > loopEleAuth(emitTarget)</span>
2103
+ }
2104
+ <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action !== 'create') {</span>
2105
+ <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles) {</span>
2106
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2107
+ }
2108
+ }
2109
+ <span class="cstat-no" title="statement not covered" > loopEle(emitTarget, true)</span>
2110
+ }
2111
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindAttribute' &amp;&amp; emitTarget.name === 'url') {</span>
2112
+ const needUpdateBackEnd =
2113
+ <span class="cstat-no" title="statement not covered" > emitTarget?.value?.endsWith('/import') || emitTarget?.value?.includes('/upload/')</span>
2114
+ <span class="cstat-no" title="statement not covered" > if (!emitTarget.view.parentAuth &amp;&amp; needUpdateBackEnd) {</span>
2115
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2116
+ }
2117
+ }
2118
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'CallLogic') {</span>
2119
+ const arrlist: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2120
+ <span class="cstat-no" title="statement not covered" > getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);</span>
2121
+ const result = <span class="cstat-no" title="statement not covered" >arrlist.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2122
+ // console.log(result, 'CallLogic');
2123
+ <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2124
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2125
+ }
2126
+ }
2127
+ // 更新端时需要出发后端更新
2128
+ <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Frontend') {</span>
2129
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2130
+ }
2131
+ }
2132
+ &nbsp;
2133
+ <span class="cstat-no" title="statement not covered" > event.eventList.forEach(<span class="fstat-no" title="function not covered" >({</span> action, path, object: objItem }: { action: string; path: string; object: any }) =&gt; {</span>
2134
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
2135
+ <span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
2136
+ <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2137
+ action,
2138
+ path,
2139
+ node: objItem[0],
2140
+ });
2141
+ } else {
2142
+ <span class="cstat-no" title="statement not covered" > objItem.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
2143
+ <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2144
+ action,
2145
+ path,
2146
+ node: item,
2147
+ });
2148
+ });
2149
+ }
2150
+ } else {
2151
+ <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2152
+ action,
2153
+ path,
2154
+ object: objItem,
2155
+ });
2156
+ }
2157
+ });
2158
+ });
2159
+ }
2160
+ } catch (error) {
2161
+ <span class="cstat-no" title="statement not covered" > console.log(error);</span>
2162
+ <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(app, {</span>
2163
+ errorInfo: {
2164
+ message: error?.message,
2165
+ stack: error?.stack,
2166
+ },
2167
+ });
2168
+ <span class="cstat-no" title="statement not covered" > return;</span>
2169
+ }
2170
+ &nbsp;
2171
+ const instructList = <span class="cstat-no" title="statement not covered" >[{</span>
2172
+ uuid: uuidv4().replace(/-/g, ''),
2173
+ actions: actionList,
2174
+ }];
2175
+ <span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList });</span>
2176
+ &nbsp;
2177
+ <span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
2178
+ <span class="cstat-no" title="statement not covered" > if (app._historyIndex !== app._historyList.length) {</span>
2179
+ <span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
2180
+ }
2181
+ <span class="cstat-no" title="statement not covered" > app._historyList.push({</span>
2182
+ actionMsg,
2183
+ list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item.originEvent)</span>,
2184
+ });
2185
+ <span class="cstat-no" title="statement not covered" > app._historyIndex = app._historyList.length;</span>
2186
+ } else {
2187
+ const actionMap = <span class="cstat-no" title="statement not covered" >{</span>
2188
+ undo: '已撤销操作:',
2189
+ redo: '已重做操作:',
2190
+ };
2191
+ let msg = <span class="cstat-no" title="statement not covered" >actionMap[action as 'undo' | 'redo'];</span>
2192
+ <span class="cstat-no" title="statement not covered" > msg += actionMsg;</span>
2193
+ <span class="cstat-no" title="statement not covered" > if (process.env.BUILD_TARGET !== 'node') {</span>
2194
+ <span class="cstat-no" title="statement not covered" > require('element-plus').ElMessage.info(msg);</span>
2195
+ }
2196
+ <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
2197
+ }
2198
+ <span class="cstat-no" title="statement not covered" > stepRecorder.initialized &amp;&amp; stepRecorder.record(actionMsg, actionItem, actionList);</span>
2199
+ }
2200
+ &nbsp;
2201
+ type Instruct = {
2202
+ uuid: string,
2203
+ actions: any[],
2204
+ };
2205
+ type TaskOption = {
2206
+ app: any,
2207
+ hasFrontEnd: boolean,
2208
+ hasBackEnd: boolean,
2209
+ instructList: Instruct[],
2210
+ };
2211
+ enum TaskQueueStatus {
2212
+ ExceedMaxTaskCount,
2213
+ Retrying,
2214
+ }
2215
+ type RefreshNaslOptions = {
2216
+ errorInfo: {
2217
+ message?: string,
2218
+ stack?: string,
2219
+ }
2220
+ };
2221
+ &nbsp;
2222
+ class TaskQueue {
2223
+ queue: TaskOption[] = []
2224
+ lastQueue: TaskOption[] = []
2225
+ running: Boolean = false
2226
+ maxTaskCount: number = 10
2227
+ status?: TaskQueueStatus = undefined
2228
+ &nbsp;
2229
+ <span class="fstat-no" title="function not covered" > addTask(</span>task: TaskOption) {
2230
+ <span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
2231
+ &nbsp;
2232
+ <span class="cstat-no" title="statement not covered" > if (this.queue.length &gt;= this.maxTaskCount) {</span>
2233
+ <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.ExceedMaxTaskCount;</span>
2234
+ <span class="cstat-no" title="statement not covered" > task.app.emit('ExceedMaxTaskCount');</span>
2235
+ }
2236
+ &nbsp;
2237
+ <span class="cstat-no" title="statement not covered" > this.run();</span>
2238
+ }
2239
+ &nbsp;
2240
+ <span class="fstat-no" title="function not covered" > clear(</span>) {
2241
+ <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
2242
+ <span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
2243
+ <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
2244
+ <span class="cstat-no" title="statement not covered" > this.running = false;</span>
2245
+ }
2246
+ &nbsp;
2247
+ <span class="fstat-no" title="function not covered" > async </span>run(queue = <span class="branch-0 cbranch-no" title="branch not covered" >this.queue)</span> {
2248
+ <span class="cstat-no" title="statement not covered" > if (this.running)</span>
2249
+ <span class="cstat-no" title="statement not covered" > return;</span>
2250
+ <span class="cstat-no" title="statement not covered" > if (queue.length === 0)</span>
2251
+ <span class="cstat-no" title="statement not covered" > return;</span>
2252
+ &nbsp;
2253
+ const app = <span class="cstat-no" title="statement not covered" >queue[0].app;</span>
2254
+ let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2255
+ let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2256
+ let instructList: Instruct[] = <span class="cstat-no" title="statement not covered" >[];</span>
2257
+ &nbsp;
2258
+ <span class="cstat-no" title="statement not covered" > for (const task of queue) {</span>
2259
+ <span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
2260
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
2261
+ <span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
2262
+ <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2263
+ <span class="cstat-no" title="statement not covered" > instructList = instructList.concat(task.instructList);</span>
2264
+ }
2265
+ &nbsp;
2266
+ <span class="cstat-no" title="statement not covered" > if (queue === this.queue) {</span>
2267
+ <span class="cstat-no" title="statement not covered" > this.lastQueue = [...queue];</span>
2268
+ <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
2269
+ }
2270
+ &nbsp;
2271
+ <span class="cstat-no" title="statement not covered" > this.running = true;</span>
2272
+ const error = <span class="cstat-no" title="statement not covered" >await _saveNasl({</span>
2273
+ app, hasFrontEnd, hasBackEnd, instructList,
2274
+ });
2275
+ &nbsp;
2276
+ // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新
2277
+ // code: 500502 msg: "该应用已在新tab 页打开,请刷新!" 不重试或刷新
2278
+ <span class="cstat-no" title="statement not covered" > if (!error)</span>
2279
+ <span class="cstat-no" title="statement not covered" > this.recover(app);</span>
2280
+ else <span class="cstat-no" title="statement not covered" >if (![401650, 500502].includes(error.code)) {</span>
2281
+ // 连接失败,或超时,或后端持久化异常
2282
+ <span class="cstat-no" title="statement not covered" > if ((error.message === 'Network Error' || error.message?.includes('timeout') || error.code === 500500)</span>
2283
+ &amp;&amp; this.status !== TaskQueueStatus.Retrying) {
2284
+ <span class="cstat-no" title="statement not covered" > this.running = false;</span>
2285
+ <span class="cstat-no" title="statement not covered" > this.retry();</span>
2286
+ } else
2287
+ <span class="cstat-no" title="statement not covered" > this.refreshNasl(app);</span>
2288
+ &nbsp;
2289
+ <span class="cstat-no" title="statement not covered" > return;</span>
2290
+ }
2291
+ &nbsp;
2292
+ <span class="cstat-no" title="statement not covered" > this.running = false;</span>
2293
+ &nbsp;
2294
+ <span class="cstat-no" title="statement not covered" > this.run();</span>
2295
+ }
2296
+ &nbsp;
2297
+ <span class="fstat-no" title="function not covered" > retry(</span>) {
2298
+ <span class="cstat-no" title="statement not covered" > if (this.lastQueue.length === 0)</span>
2299
+ <span class="cstat-no" title="statement not covered" > return;</span>
2300
+ &nbsp;
2301
+ const app = <span class="cstat-no" title="statement not covered" >this.lastQueue[0].app;</span>
2302
+ <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.Retrying;</span>
2303
+ <span class="cstat-no" title="statement not covered" > app.emit('Retrying');</span>
2304
+ <span class="cstat-no" title="statement not covered" > this.run(this.lastQueue);</span>
2305
+ }
2306
+ &nbsp;
2307
+ <span class="fstat-no" title="function not covered" > async </span>refreshNasl(app: App, options: RefreshNaslOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{ errorInfo: {} })</span> {
2308
+ const failedQueue = <span class="cstat-no" title="statement not covered" >this.lastQueue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
2309
+ hasFrontEnd, hasBackEnd, instructList,
2310
+ }));
2311
+ const queue = <span class="cstat-no" title="statement not covered" >this.queue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
2312
+ hasFrontEnd, hasBackEnd, instructList,
2313
+ }));
2314
+ <span class="cstat-no" title="statement not covered" > await storageService.saveFrontendNasl({</span>
2315
+ body: {
2316
+ nasl: app?.toJSON(),
2317
+ failedQueue,
2318
+ queue,
2319
+ errorInfo: options.errorInfo,
2320
+ },
2321
+ }).catch(<span class="fstat-no" title="function not covered" >(e</span>rr: any) =&gt; {
2322
+ <span class="cstat-no" title="statement not covered" > console.log('备份 nasl 失败:', err);</span>
2323
+ });
2324
+ <span class="cstat-no" title="statement not covered" > this.clear();</span>
2325
+ <span class="cstat-no" title="statement not covered" > app.emit('refresh');</span>
2326
+ }
2327
+ &nbsp;
2328
+ <span class="fstat-no" title="function not covered" > recover(</span>app: App) {
2329
+ <span class="cstat-no" title="statement not covered" > switch (this.status) {</span>
2330
+ case TaskQueueStatus.ExceedMaxTaskCount:
2331
+ <span class="cstat-no" title="statement not covered" > app.emit('BelowMaxTaskCount');</span>
2332
+ <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
2333
+ <span class="cstat-no" title="statement not covered" > break;</span>
2334
+ case TaskQueueStatus.Retrying:
2335
+ <span class="cstat-no" title="statement not covered" > app.emit('SuccessRetry');</span>
2336
+ <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
2337
+ <span class="cstat-no" title="statement not covered" > break;</span>
2338
+ }
2339
+ }
2340
+ }
2341
+ &nbsp;
2342
+ export const taskQueue = new TaskQueue();
2343
+ async function <span class="fstat-no" title="function not covered" >saveNasl(</span>options: TaskOption) {
2344
+ <span class="cstat-no" title="statement not covered" > taskQueue.addTask(options);</span>
2345
+ }
2346
+ &nbsp;
2347
+ async function <span class="fstat-no" title="function not covered" >_saveNasl(</span>options: TaskOption) {
2348
+ const { app, hasFrontEnd, hasBackEnd, instructList } = <span class="cstat-no" title="statement not covered" >options;</span>
2349
+ <span class="cstat-no" title="statement not covered" > app.emit('saving');</span>
2350
+ let ChangedNASLType = <span class="cstat-no" title="statement not covered" >'';</span>
2351
+ <span class="cstat-no" title="statement not covered" > if (hasFrontEnd &amp;&amp; hasBackEnd) {</span>
2352
+ <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'both';</span>
2353
+ } else <span class="cstat-no" title="statement not covered" >if (hasFrontEnd) {</span>
2354
+ <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'web';</span>
2355
+ } else <span class="cstat-no" title="statement not covered" >if (hasBackEnd) {</span>
2356
+ <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'backend';</span>
2357
+ }
2358
+ let err;
2359
+ <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
2360
+ <span class="cstat-no" title="statement not covered" > try {</span>
2361
+ <span class="cstat-no" title="statement not covered" > await storageService.batchInstruct({</span>
2362
+ body: instructList,
2363
+ headers: {
2364
+ appId: app.id,
2365
+ ChangedNASLType,
2366
+ tabTimestamp,
2367
+ // 其他封装在 storageService 里了
2368
+ },
2369
+ });
2370
+ } catch (error) {
2371
+ <span class="cstat-no" title="statement not covered" > err = error;</span>
2372
+ }
2373
+ } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
2374
+ // Do nothing
2375
+ } else {
2376
+ const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
2377
+ &nbsp;
2378
+ let actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2379
+ <span class="cstat-no" title="statement not covered" > for (const { actions } of instructList) {</span>
2380
+ <span class="cstat-no" title="statement not covered" > actionList = actionList.concat(actions);</span>
2381
+ }
2382
+ &nbsp;
2383
+ <span class="cstat-no" title="statement not covered" > jsoner.batchAction(json, actionList);</span>
2384
+ <span class="cstat-no" title="statement not covered" > await fs.writeJSON(config.storage.basePath, json, {</span>
2385
+ spaces: 4,
2386
+ });
2387
+ }
2388
+ <span class="cstat-no" title="statement not covered" > app.emit('saved', err);</span>
2389
+ <span class="cstat-no" title="statement not covered" > return err;</span>
2390
+ }
2391
+ &nbsp;
2392
+ export interface ProxyApp extends App {
2393
+ _isCollectingCount: number;
2394
+ _collectingList: number[];
2395
+ _historyList: number[];
2396
+ _historyIndex: number;
2397
+ _historying: boolean;
2398
+ _timer: NodeJS.Timeout;
2399
+ _noTimer: NodeJS.Timeout;
2400
+ _actionMsg: string;
2401
+ _action: string;
2402
+ naslServer: NaslServer;
2403
+ }
2404
+ &nbsp;
2405
+ export function <span class="fstat-no" title="function not covered" >handleApp(</span>app: ProxyApp) {
2406
+ <span class="cstat-no" title="statement not covered" > app._isCollectingCount = 0;</span>
2407
+ <span class="cstat-no" title="statement not covered" > app._collectingList = [];</span>
2408
+ <span class="cstat-no" title="statement not covered" > app._historyList = [];</span>
2409
+ <span class="cstat-no" title="statement not covered" > app._historyIndex = 0;</span>
2410
+ <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
2411
+ <span class="cstat-no" title="statement not covered" > app._timer = null;</span>
2412
+ &nbsp;
2413
+ <span class="cstat-no" title="statement not covered" > app.on('undo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
2414
+ const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
2415
+ <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
2416
+ });
2417
+ &nbsp;
2418
+ <span class="cstat-no" title="statement not covered" > app.on('redo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
2419
+ const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
2420
+ <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
2421
+ });
2422
+ &nbsp;
2423
+ /**
2424
+ * 开启收集
2425
+ */
2426
+ <span class="cstat-no" title="statement not covered" > app.on('collect:start', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
2427
+ const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
2428
+ <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
2429
+ <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
2430
+ }
2431
+ <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
2432
+ <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = event.noTimer;</span>
2433
+ }
2434
+ <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
2435
+ <span class="cstat-no" title="statement not covered" > proxyApp._timer = setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2436
+ <span class="cstat-no" title="statement not covered" > console.error('收集超时,请及时排查原因', event);</span>
2437
+ <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(proxyApp, {</span>
2438
+ errorInfo: {
2439
+ message: '收集超时,请及时排查原因',
2440
+ },
2441
+ });
2442
+ }, 2500);
2443
+ }
2444
+ <span class="cstat-no" title="statement not covered" > if (!proxyApp._isCollectingCount) {</span>
2445
+ <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = event?.actionMsg;</span>
2446
+ <span class="cstat-no" title="statement not covered" > proxyApp._action = event?.action;</span>
2447
+ }
2448
+ <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount++;</span>
2449
+ });
2450
+ &nbsp;
2451
+ /**
2452
+ * 结束收集
2453
+ */
2454
+ <span class="cstat-no" title="statement not covered" > app.on('collect:end', <span class="fstat-no" title="function not covered" >async </span>function (this: ProxyApp) {</span>
2455
+ const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
2456
+ <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount--;</span>
2457
+ <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
2458
+ <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
2459
+ <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
2460
+ }
2461
+ // 结束收集时,立即将全局收集变量状态重置,防止下次收集数据混乱
2462
+ const collectingList = <span class="cstat-no" title="statement not covered" >proxyApp._collectingList;</span>
2463
+ const actionMsg = <span class="cstat-no" title="statement not covered" >proxyApp._actionMsg;</span>
2464
+ const action = <span class="cstat-no" title="statement not covered" >proxyApp._action;</span>
2465
+ <span class="cstat-no" title="statement not covered" > proxyApp._collectingList = [];</span>
2466
+ <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = '';</span>
2467
+ <span class="cstat-no" title="statement not covered" > proxyApp._action = '';</span>
2468
+ <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = undefined;</span>
2469
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(collectingList) &amp;&amp; collectingList.length) {</span>
2470
+ <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(proxyApp);</span>
2471
+ <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
2472
+ value: collectingList,
2473
+ });
2474
+ <span class="cstat-no" title="statement not covered" > await doAction(proxyApp, {</span>
2475
+ list: collectingList,
2476
+ actionMsg,
2477
+ action,
2478
+ });
2479
+ }
2480
+ } else <span class="cstat-no" title="statement not covered" >if (proxyApp._isCollectingCount &lt; 0) {</span>
2481
+ <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount = 0;</span>
2482
+ <span class="cstat-no" title="statement not covered" > throw Error('关闭收集有问题,请排查');</span>
2483
+ }
2484
+ });
2485
+ &nbsp;
2486
+ /**
2487
+ * 有变更
2488
+ */
2489
+ <span class="cstat-no" title="statement not covered" > app.on('storage', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
2490
+ const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
2491
+ // 是否正在收集
2492
+ <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
2493
+ <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
2494
+ value: [event],
2495
+ });
2496
+ let actionMsg = <span class="cstat-no" title="statement not covered" >'';</span>
2497
+ const { action, target } = <span class="cstat-no" title="statement not covered" >event.originEvent || {};</span>
2498
+ const { concept, name } = <span class="cstat-no" title="statement not covered" >target || {};</span>
2499
+ <span class="cstat-no" title="statement not covered" > switch (action) {</span>
2500
+ case 'create':
2501
+ <span class="cstat-no" title="statement not covered" > actionMsg = '添加';</span>
2502
+ <span class="cstat-no" title="statement not covered" > break;</span>
2503
+ case 'delete':
2504
+ <span class="cstat-no" title="statement not covered" > actionMsg = '删除';</span>
2505
+ <span class="cstat-no" title="statement not covered" > break;</span>
2506
+ case 'update':
2507
+ <span class="cstat-no" title="statement not covered" > actionMsg = '修改';</span>
2508
+ <span class="cstat-no" title="statement not covered" > break;</span>
2509
+ }
2510
+ <span class="cstat-no" title="statement not covered" > actionMsg += getConceptConstructor(concept).nodeTitle;</span>
2511
+ <span class="cstat-no" title="statement not covered" > if (name) {</span>
2512
+ <span class="cstat-no" title="statement not covered" > actionMsg += `“${name}”`;</span>
2513
+ }
2514
+ <span class="cstat-no" title="statement not covered" > doAction(proxyApp, {</span>
2515
+ list: [event],
2516
+ actionMsg,
2517
+ });
2518
+ } else {
2519
+ <span class="cstat-no" title="statement not covered" > proxyApp._collectingList.push(event);</span>
2520
+ }
2521
+ });
2522
+ }
2523
+ &nbsp;
2524
+ type BreakpointItem =
2525
+ | any
2526
+ | {
2527
+ path: string
2528
+ breakpointStatus: null | 'ENABLED' | 'DISABLED'
2529
+ }
2530
+ &nbsp;
2531
+ /**
2532
+ * 加载 app
2533
+ * @param appId 如果是从文件读,就不需要传
2534
+ * @returns app 对象
2535
+ */
2536
+ export async function <span class="fstat-no" title="function not covered" >loadApp(</span>appId?: string) {
2537
+ let app: App;
2538
+ <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
2539
+ <span class="cstat-no" title="statement not covered" > console.time('batchQuery');</span>
2540
+ const promises = <span class="cstat-no" title="statement not covered" >[</span>
2541
+ storageService.batchQuery({
2542
+ body: [
2543
+ {
2544
+ path: 'app'
2545
+ // excludes: ['views'],
2546
+ }
2547
+ ],
2548
+ headers: {
2549
+ appId,
2550
+ checkTabOpenTime: 'true'
2551
+ // 其他封装在 storageService 里了
2552
+ },
2553
+ config: {
2554
+ shortResponse: false
2555
+ }
2556
+ }),
2557
+ storageService.breakpoint({
2558
+ body: { appId }
2559
+ })
2560
+ ]
2561
+ &nbsp;
2562
+ const [batchQueryRes, breakpointRes] = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
2563
+ &nbsp;
2564
+ // 请求
2565
+ <span class="cstat-no" title="statement not covered" > console.timeEnd('batchQuery');</span>
2566
+ &nbsp;
2567
+ <span class="cstat-no" title="statement not covered" > tabTimestamp = batchQueryRes?.headers?.tabtimestamp;</span>
2568
+ const data = <span class="cstat-no" title="statement not covered" >batchQueryRes?.data?.result;</span>
2569
+ &nbsp;
2570
+ <span class="cstat-no" title="statement not covered" > console.time('new App');</span>
2571
+ <span class="cstat-no" title="statement not covered" > app = new App(Object.assign(data?.[0], { id: appId }));</span>
2572
+ &nbsp;
2573
+ <span class="cstat-no" title="statement not covered" > breakpointRes?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: BreakpointItem = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> =&gt; {</span>
2574
+ const { path, breakpointStatus } = <span class="cstat-no" title="statement not covered" >item</span>
2575
+ &nbsp;
2576
+ <span class="cstat-no" title="statement not covered" > if (breakpointStatus) {</span>
2577
+ const node = <span class="cstat-no" title="statement not covered" >app.findNodeByPath(path)</span>
2578
+ &nbsp;
2579
+ <span class="cstat-no" title="statement not covered" > if (node) {</span>
2580
+ <span class="cstat-no" title="statement not covered" > node.breakpoint = breakpointStatus</span>
2581
+ }
2582
+ }
2583
+ })
2584
+ <span class="cstat-no" title="statement not covered" > console.timeEnd('new App');</span>
2585
+ <span class="cstat-no" title="statement not covered" > if (!app.id) {</span>
2586
+ <span class="cstat-no" title="statement not covered" > app.id = appId;</span>
2587
+ }
2588
+ <span class="cstat-no" title="statement not covered" > addBreakpointNodesFromApp(app)</span>
2589
+ } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
2590
+ <span class="cstat-no" title="statement not covered" > app = new App({</span>
2591
+ id: appId,
2592
+ concept: 'App',
2593
+ name: 'devapp',
2594
+ title: '开发应用',
2595
+ envs: 'dev,online',
2596
+ hasAuth: true,
2597
+ hasUserCenter: true,
2598
+ dataSources: [],
2599
+ structures: [],
2600
+ enums: [],
2601
+ logics: [],
2602
+ interfaces: [],
2603
+ processes: [],
2604
+ roles: [],
2605
+ dependencies: [],
2606
+ interfaceDependencies: [],
2607
+ frontends: [],
2608
+ });
2609
+ } else {
2610
+ const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
2611
+ <span class="cstat-no" title="statement not covered" > app = new App(appId ? Object.assign(json, { id: appId }) : json);</span>
2612
+ }
2613
+ // config.scope = app.scope;
2614
+ <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
2615
+ (<span class="cstat-no" title="statement not covered" >app as any)._isCollectingCount = 0;</span>
2616
+ <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(app);</span>
2617
+ <span class="cstat-no" title="statement not covered" > return app as App;</span>
2618
+ }
2619
+ &nbsp;
2620
+ // 在app上挂载所有的数据库类型
2621
+ export async function <span class="fstat-no" title="function not covered" >mountDatabaseTypes(</span>app: App) {
2622
+ <span class="cstat-no" title="statement not covered" > if (!app.__databaseTypeMap) {</span>
2623
+ <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap = {};</span>
2624
+ }
2625
+ const dataSources = <span class="cstat-no" title="statement not covered" >app?.dataSources;</span>
2626
+ const dbTypeSet = <span class="cstat-no" title="statement not covered" >new Set();</span>
2627
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
2628
+ <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
2629
+ const dataSourceSqlType = <span class="cstat-no" title="statement not covered" >JSON.parse(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;</span>
2630
+ <span class="cstat-no" title="statement not covered" > if (dataSourceSqlType &amp;&amp; !app.__databaseTypeMap[dataSourceSqlType]) {</span>
2631
+ <span class="cstat-no" title="statement not covered" > dbTypeSet.add(dataSourceSqlType);</span>
2632
+ }
2633
+ });
2634
+ }
2635
+ const dbTypes = <span class="cstat-no" title="statement not covered" >[...dbTypeSet];</span>
2636
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(dbTypes) &amp;&amp; dbTypes.length) {</span>
2637
+ const res: any = <span class="cstat-no" title="statement not covered" >await databaseTypes({</span>
2638
+ query: {
2639
+ dbTypes: dbTypes.join(','),
2640
+ },
2641
+ });
2642
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(res)) {</span>
2643
+ <span class="cstat-no" title="statement not covered" > res.forEach(<span class="fstat-no" title="function not covered" >(d</span>atabaseType: any) =&gt; {</span>
2644
+ const { dbType, columnTypes } = <span class="cstat-no" title="statement not covered" >databaseType || {};</span>
2645
+ const columnTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
2646
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(columnTypes)) {</span>
2647
+ <span class="cstat-no" title="statement not covered" > columnTypes.forEach(<span class="fstat-no" title="function not covered" >(c</span>olumnType) =&gt; {</span>
2648
+ const { naslType, dataBaseTypes } = <span class="cstat-no" title="statement not covered" >columnType;</span>
2649
+ const dataBaseTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
2650
+ let defaultDataBaseType;
2651
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataBaseTypes)) {</span>
2652
+ <span class="cstat-no" title="statement not covered" > dataBaseTypes.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataBaseType) =&gt; {</span>
2653
+ const { type } = <span class="cstat-no" title="statement not covered" >dataBaseType || {};</span>
2654
+ <span class="cstat-no" title="statement not covered" > if (type) {</span>
2655
+ <span class="cstat-no" title="statement not covered" > dataBaseTypeMap[type] = dataBaseType;</span>
2656
+ const { defaultType } = <span class="cstat-no" title="statement not covered" >dataBaseType;</span>
2657
+ <span class="cstat-no" title="statement not covered" > if (defaultType) {</span>
2658
+ <span class="cstat-no" title="statement not covered" > defaultDataBaseType = dataBaseType;</span>
2659
+ }
2660
+ }
2661
+ });
2662
+ }
2663
+ <span class="cstat-no" title="statement not covered" > columnTypeMap[naslType] = {</span>
2664
+ dataBaseTypes,
2665
+ dataBaseTypeMap,
2666
+ defaultDataBaseType,
2667
+ };
2668
+ });
2669
+ }
2670
+ <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap[dbType] = columnTypeMap;</span>
2671
+ });
2672
+ }
2673
+ }
2674
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
2675
+ <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
2676
+ <span class="cstat-no" title="statement not covered" > dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);</span>
2677
+ });
2678
+ }
2679
+ }
2680
+ &nbsp;
2681
+ /**
2682
+ * 加载 app
2683
+ * @returns app 对象
2684
+ */
2685
+ export function <span class="fstat-no" title="function not covered" >loadAppSync(</span>) {
2686
+ const json = <span class="cstat-no" title="statement not covered" >fs.readJSONSync(config.storage.basePath);</span>
2687
+ const app = <span class="cstat-no" title="statement not covered" >new App(json);</span>
2688
+ <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
2689
+ <span class="cstat-no" title="statement not covered" > return app;</span>
2690
+ }
2691
+ &nbsp;</pre></td></tr></table></pre>
2692
+
2693
+ <div class='push'></div><!-- for sticky footer -->
2694
+ </div><!-- /wrapper -->
2695
+ <div class='footer quiet pad2 space-top1 center small'>
2696
+ Code coverage generated by
2697
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2698
+ at 2023-10-19T09:18:56.902Z
2699
+ </div>
2700
+ <script src="../../../prettify.js"></script>
2701
+ <script>
2702
+ window.onload = function () {
2703
+ prettyPrint();
2704
+ };
2705
+ </script>
2706
+ <script src="../../../sorter.js"></script>
2707
+ <script src="../../../block-navigation.js"></script>
2708
+ </body>
2709
+ </html>
2710
+