@akasecurity/cli 0.9.13 → 0.9.14

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 (210) hide show
  1. package/README.md +46 -3
  2. package/dist/cli.js +3461 -1491
  3. package/extension/manifest.json +1 -1
  4. package/native-host/content-retention.js +35685 -0
  5. package/native-host/history-sync.js +36816 -0
  6. package/native-host/host.js +2428 -1014
  7. package/native-host/scan-worker.js +1754 -871
  8. package/native-host/sync.js +2231 -950
  9. package/package.json +12 -12
  10. package/web-ui/package.json +3 -3
  11. package/web-ui/packages/dashboard-ui/package.json +5 -5
  12. package/web-ui/packages/plugin-sdk/package.json +2 -2
  13. package/web-ui/packages/schema/package.json +1 -1
  14. package/web-ui/packages/ui-kit/package.json +2 -2
  15. package/web-ui/web-ui/.next/BUILD_ID +1 -1
  16. package/web-ui/web-ui/.next/app-build-manifest.json +253 -253
  17. package/web-ui/web-ui/.next/app-path-routes-manifest.json +7 -7
  18. package/web-ui/web-ui/.next/build-manifest.json +14 -14
  19. package/web-ui/web-ui/.next/prerender-manifest.json +14 -14
  20. package/web-ui/web-ui/.next/required-server-files.json +1 -1
  21. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
  22. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  23. package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  24. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
  25. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
  26. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
  27. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
  28. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
  29. package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
  30. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
  31. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
  32. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
  33. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +2 -2
  34. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
  35. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
  36. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +2 -2
  37. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
  38. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
  39. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
  40. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
  41. package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
  42. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
  43. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
  44. package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
  45. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
  46. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
  47. package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
  48. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +3 -3
  49. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
  50. package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
  51. package/web-ui/web-ui/.next/server/app/(app)/security/page.js +2 -2
  52. package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
  53. package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  54. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
  55. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  56. package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  57. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
  58. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
  59. package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
  60. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js +2 -2
  61. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js.nft.json +1 -1
  62. package/web-ui/web-ui/.next/server/app/(app)/vault/page_client-reference-manifest.js +1 -1
  63. package/web-ui/web-ui/.next/server/app/_not-found/page.js +2 -2
  64. package/web-ui/web-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  65. package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  66. package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
  67. package/web-ui/web-ui/.next/server/app/_not-found.rsc +10 -10
  68. package/web-ui/web-ui/.next/server/app/icon.svg/route.js +1 -1
  69. package/web-ui/web-ui/.next/server/app/icon.svg/route.js.nft.json +1 -1
  70. package/web-ui/web-ui/.next/server/app/index.html +1 -1
  71. package/web-ui/web-ui/.next/server/app/index.rsc +10 -10
  72. package/web-ui/web-ui/.next/server/app/page.js +2 -2
  73. package/web-ui/web-ui/.next/server/app/page.js.nft.json +1 -1
  74. package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  75. package/web-ui/web-ui/.next/server/app-paths-manifest.json +7 -7
  76. package/web-ui/web-ui/.next/server/chunks/167.js +11 -0
  77. package/web-ui/web-ui/.next/server/chunks/197.js +12 -0
  78. package/web-ui/web-ui/.next/server/chunks/247.js +66 -0
  79. package/web-ui/web-ui/.next/server/chunks/259.js +22 -0
  80. package/web-ui/web-ui/.next/server/chunks/285.js +1 -0
  81. package/web-ui/web-ui/.next/server/chunks/293.js +1022 -0
  82. package/web-ui/web-ui/.next/server/chunks/498.js +1 -0
  83. package/web-ui/web-ui/.next/server/chunks/524.js +109 -0
  84. package/web-ui/web-ui/.next/server/chunks/{300.js → 618.js} +1 -1
  85. package/web-ui/web-ui/.next/server/chunks/{121.js → 670.js} +1 -1
  86. package/web-ui/web-ui/.next/server/chunks/74.js +1031 -0
  87. package/web-ui/web-ui/.next/server/chunks/807.js +6 -0
  88. package/web-ui/web-ui/.next/server/chunks/811.js +6 -0
  89. package/web-ui/web-ui/.next/server/chunks/97.js +1 -0
  90. package/web-ui/web-ui/.next/server/functions-config-manifest.json +5 -5
  91. package/web-ui/web-ui/.next/server/middleware-build-manifest.js +1 -1
  92. package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
  93. package/web-ui/web-ui/.next/server/middleware.js +2 -2
  94. package/web-ui/web-ui/.next/server/pages/404.html +1 -1
  95. package/web-ui/web-ui/.next/server/pages/500.html +1 -1
  96. package/web-ui/web-ui/.next/server/pages/_app.js +1 -1
  97. package/web-ui/web-ui/.next/server/pages/_app.js.nft.json +1 -1
  98. package/web-ui/web-ui/.next/server/pages/_document.js +1 -1
  99. package/web-ui/web-ui/.next/server/pages/_document.js.nft.json +1 -1
  100. package/web-ui/web-ui/.next/server/pages/_error.js +9 -9
  101. package/web-ui/web-ui/.next/server/pages/_error.js.nft.json +1 -1
  102. package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
  103. package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
  104. package/web-ui/web-ui/.next/static/{pkVZ1_T311YNkJgZOLTx5 → 5Pl1KmhN7uMqXkPkq0ZmS}/_buildManifest.js +1 -1
  105. package/web-ui/web-ui/.next/static/chunks/333-837ec42ac57bd0f5.js +1 -0
  106. package/web-ui/web-ui/.next/static/chunks/423b6282-fc44d01f7ffd176d.js +1 -0
  107. package/web-ui/web-ui/.next/static/chunks/539-ca04468e745ed73a.js +1 -0
  108. package/web-ui/web-ui/.next/static/chunks/614-2c96a5e95ce63862.js +1 -0
  109. package/web-ui/web-ui/.next/static/chunks/639-6f64a434dce13266.js +1 -0
  110. package/web-ui/web-ui/.next/static/chunks/826-e806952dd7b636f8.js +55 -0
  111. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/loading-dd5849a39c269cf4.js +1 -0
  112. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-5fc18420d8d5bf62.js +1 -0
  113. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/loading-dd5849a39c269cf4.js +1 -0
  114. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-fe72214e54d52a14.js +1 -0
  115. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/loading-dd5849a39c269cf4.js +1 -0
  116. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-47e4dd015f24c04d.js +1 -0
  117. package/web-ui/web-ui/.next/static/chunks/app/(app)/error-be2032a4770a35bf.js +1 -0
  118. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/loading-dd5849a39c269cf4.js +1 -0
  119. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-f90fbb03406e4383.js +1 -0
  120. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/loading-dd5849a39c269cf4.js +1 -0
  121. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/loading-dd5849a39c269cf4.js +1 -0
  122. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-0a1d6a3557b99750.js +1 -0
  123. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-dbf32c5303140e8c.js +1 -0
  124. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/loading-dd5849a39c269cf4.js +1 -0
  125. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-cb1934547acde891.js +1 -0
  126. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/loading-dd5849a39c269cf4.js +1 -0
  127. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-6688bc58741c7c7d.js +1 -0
  128. package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-d357a1d54c653d14.js +1 -0
  129. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/loading-dd5849a39c269cf4.js +1 -0
  130. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-bc95c7097cca0dfc.js +1 -0
  131. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/loading-dd5849a39c269cf4.js +1 -0
  132. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-5bebd818c1bb3a79.js +1 -0
  133. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/loading-dd5849a39c269cf4.js +1 -0
  134. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-42845dce0b734eeb.js +1 -0
  135. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/loading-dd5849a39c269cf4.js +1 -0
  136. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-d3ce8a503e8ce592.js +1 -0
  137. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/loading-dd5849a39c269cf4.js +1 -0
  138. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-802942c0a06fbe31.js +1 -0
  139. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/loading-dd5849a39c269cf4.js +1 -0
  140. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-52c8cd3a2a09a067.js +1 -0
  141. package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-260d84f0d7697773.js +1 -0
  142. package/web-ui/web-ui/.next/static/chunks/app/layout-c64d57251ee073d5.js +1 -0
  143. package/web-ui/web-ui/.next/static/chunks/app/page-b7ea78b4203d219b.js +1 -0
  144. package/web-ui/web-ui/.next/static/chunks/framework-4a8a69f5ce633b25.js +1 -0
  145. package/web-ui/web-ui/.next/static/chunks/main-89a5d50418a9a7e3.js +1 -0
  146. package/web-ui/web-ui/.next/static/chunks/main-app-4a18e3117ef3af1e.js +1 -0
  147. package/web-ui/web-ui/.next/static/chunks/pages/_app-671d04cd06b05cac.js +1 -0
  148. package/web-ui/web-ui/.next/static/chunks/pages/_error-ae172b6a97f64258.js +1 -0
  149. package/web-ui/web-ui/.next/static/chunks/{webpack-f10501a57c4d919d.js → webpack-c0fb35a40828243e.js} +1 -1
  150. package/web-ui/web-ui/.next/static/css/616a1cc3e0d40480.css +2 -0
  151. package/web-ui/web-ui/dist/scan-worker.js +1754 -871
  152. package/web-ui/web-ui/package.json +7 -7
  153. package/web-ui/web-ui/.next/server/chunks/130.js +0 -1026
  154. package/web-ui/web-ui/.next/server/chunks/19.js +0 -22
  155. package/web-ui/web-ui/.next/server/chunks/290.js +0 -6
  156. package/web-ui/web-ui/.next/server/chunks/3.js +0 -1017
  157. package/web-ui/web-ui/.next/server/chunks/475.js +0 -1
  158. package/web-ui/web-ui/.next/server/chunks/585.js +0 -12
  159. package/web-ui/web-ui/.next/server/chunks/589.js +0 -99
  160. package/web-ui/web-ui/.next/server/chunks/662.js +0 -1
  161. package/web-ui/web-ui/.next/server/chunks/67.js +0 -6
  162. package/web-ui/web-ui/.next/server/chunks/70.js +0 -1
  163. package/web-ui/web-ui/.next/server/chunks/743.js +0 -11
  164. package/web-ui/web-ui/.next/server/chunks/935.js +0 -61
  165. package/web-ui/web-ui/.next/static/chunks/288-2743815300ed0872.js +0 -1
  166. package/web-ui/web-ui/.next/static/chunks/399-6887e92996f64590.js +0 -1
  167. package/web-ui/web-ui/.next/static/chunks/421-cc967c01935826d1.js +0 -1
  168. package/web-ui/web-ui/.next/static/chunks/526-f0156de7831566b3.js +0 -50
  169. package/web-ui/web-ui/.next/static/chunks/52b9c8c1-87132a73d61bdb69.js +0 -1
  170. package/web-ui/web-ui/.next/static/chunks/563-a96f29a2819589cb.js +0 -1
  171. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/loading-5ae897a85d4509ca.js +0 -1
  172. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-41fba0354cc950be.js +0 -1
  173. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/loading-5ae897a85d4509ca.js +0 -1
  174. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-d2e03c3ab61af01a.js +0 -1
  175. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/loading-5ae897a85d4509ca.js +0 -1
  176. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-566036afcc87e4c9.js +0 -1
  177. package/web-ui/web-ui/.next/static/chunks/app/(app)/error-4baae46bcee63009.js +0 -1
  178. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/loading-5ae897a85d4509ca.js +0 -1
  179. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-73dbcf0078b82ec4.js +0 -1
  180. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/loading-5ae897a85d4509ca.js +0 -1
  181. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/loading-5ae897a85d4509ca.js +0 -1
  182. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-8051503193da1baf.js +0 -1
  183. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-32c8a853bc8b5d34.js +0 -1
  184. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/loading-5ae897a85d4509ca.js +0 -1
  185. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-dc8fadb56d6d1e77.js +0 -1
  186. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/loading-5ae897a85d4509ca.js +0 -1
  187. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-9b49ef42350ea7bd.js +0 -1
  188. package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-f5f361f817f90ac9.js +0 -1
  189. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/loading-5ae897a85d4509ca.js +0 -1
  190. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-01b303adf3c8ee56.js +0 -1
  191. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/loading-5ae897a85d4509ca.js +0 -1
  192. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-8db3b62245c333a3.js +0 -1
  193. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/loading-5ae897a85d4509ca.js +0 -1
  194. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-7a4ba61626e0d130.js +0 -1
  195. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/loading-5ae897a85d4509ca.js +0 -1
  196. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-0930b49f6ab951bc.js +0 -1
  197. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/loading-5ae897a85d4509ca.js +0 -1
  198. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-9b04f3441a1a3f96.js +0 -1
  199. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/loading-5ae897a85d4509ca.js +0 -1
  200. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-911a76e75f5a1419.js +0 -1
  201. package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-a0f1d816312dcb9c.js +0 -1
  202. package/web-ui/web-ui/.next/static/chunks/app/layout-d6718b04dff0ca9c.js +0 -1
  203. package/web-ui/web-ui/.next/static/chunks/app/page-9f976e619a11c1dd.js +0 -1
  204. package/web-ui/web-ui/.next/static/chunks/framework-78529e4152d251a3.js +0 -1
  205. package/web-ui/web-ui/.next/static/chunks/main-aef82d1ebf75b725.js +0 -1
  206. package/web-ui/web-ui/.next/static/chunks/main-app-ecdeb13a427413ee.js +0 -1
  207. package/web-ui/web-ui/.next/static/chunks/pages/_app-cb7c9f431bf725f7.js +0 -1
  208. package/web-ui/web-ui/.next/static/chunks/pages/_error-fae7cf4a2cfcee1b.js +0 -1
  209. package/web-ui/web-ui/.next/static/css/298a651f6af38209.css +0 -2
  210. /package/web-ui/web-ui/.next/static/{pkVZ1_T311YNkJgZOLTx5 → 5Pl1KmhN7uMqXkPkq0ZmS}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=300,exports.ids=[300],exports.modules={53220:(a,b,c)=>{c.d(b,{W:()=>d});function d(){return Date.now()}},56673:(a,b,c)=>{c.d(b,{Vz:()=>o,hZ:()=>s});let d="api[_-]?key|apikey|private[_-]?key|access[_-]?key|access[_-]?token|token|secret|credentials?|password|passwd|pwd|authorization|sig|signature|sas|assertion",e="Bearer|Basic|Token|Digest|ApiKey|SSWS|AWS4-HMAC-SHA256";function f(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}RegExp(`((?:${d})['"\`]?\\s*[:=]\\s*['"\`]?)(?!(?:${e})[\\s'"\`])[^\\s'"\`&]+`,"gi"),RegExp(`((?:${d})['"\`]?\\s*[:=]\\s*['"\`]?)(${e})\\s+[^\\s'"\`]+`,"gi"),RegExp(`(https?://(?:${[{hosts:["hooks.slack.com"],prefix:"/services/"},{hosts:["discord.com","discordapp.com","ptb.discord.com","canary.discord.com"],prefix:"/api/webhooks/"},{hosts:["hooks.zapier.com"],prefix:"/hooks/"},{hosts:["outlook.office.com","outlook.office365.com"],prefix:"/webhook/"}].flatMap(a=>a.hosts.map(b=>`${f(b)}${f(a.prefix)}`)).join("|")}))[^\\s'"\`<>()[\\]{},;]+`,"gi");let g=new WeakMap,h=new WeakMap,i=new WeakMap;class j{match(a,b){if("keyword"!==b.matcher.type)return[];let{keywords:c,caseSensitive:d}=b.matcher,e=[];for(let f of function(a,b,c){let d="keyword"===a?h:i,e=d.get(b);if(void 0!==e){if(e.stateful)for(let a of e.entries)void 0!==a&&(a.lastIndex=0);return e.entries}let f=c();return d.set(b,{entries:f,stateful:f.some(a=>void 0!==a&&(a.global||a.sticky))}),f}("keyword",b.matcher,()=>c.map(a=>{if(0!==a.length)return new RegExp(a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d?"gu":"giu")}))){let b;if(void 0!==f){if(e.length>=1e4)break;for(;null!==(b=f.exec(a))&&(e.push({start:b.index,end:b.index+b[0].length}),!(e.length>=1e4)););}}return e}}class k{match(a,b){let c;if("regex"!==b.matcher.type)return[];let{pattern:d,flags:e,captureGroup:f}=b.matcher,h=function(a,b){let c=g.get(a);if(void 0!==c)return c.lastIndex=0,c;let d=b();return g.set(a,d),d}(b.matcher,()=>new RegExp(d,e.includes("d")?e:`${e}d`)),i=a.length>2e5?a.slice(0,2e5):a,j=[],k=i.length+1,l=0;for(;null!==(c=h.exec(i))&&!(++l>k);){let a=null!=f?c[f]:c[0];if(0===c[0].length&&h.lastIndex++,a&&j.length<1e4){let b=null!=f?c.indices?.[f]:void 0,d=b?b[0]:c.index;j.push({start:d,end:d+a.length})}if(!e.includes("g")||j.length>=1e4)break}return j}}new j,new k;var l=c(58438);let m=new Set(["prettier","eslint","biome","black","ruff","gofmt","rustfmt","node","npx","npm","pnpm","yarn","make","git","jq","echo"]);JSON.stringify({kind:"hook-conflict",mutation:/(--write|--fix|\s-w\b|\s-i\b|(?<![\d&>])>\s?\S)/.source,note:"two hooks on the same event with overlapping matchers, both mutating the tool target"}),JSON.stringify({kind:"hook-unknown",knownTools:[...m]}),JSON.stringify({kind:"hook-external-egress",pattern:/\b(curl|wget|nc|ncat|netcat|ssh|scp|rsync)\b|https?:\/\//.source});let n=new Set(["blind","degraded"]),o={ruleId:"web-capture-drift",version:"1",name:"Web chat capture is not reading the site",category:"config",severity:"medium",definition:JSON.stringify({kind:"web-capture-drift",states:[...n],minParseFailures:2})};function p(a){return void 0===a?"unreported":0===a.conversationEndpoints?"standby":a.patched?a.blind?"blind":a.shapeMisses.length>0||a.parseFailures>=2?"degraded":a.live?"active":"idle":"unpatched"}let q={blind:0,degraded:1,unpatched:2,idle:3,standby:4,active:5,unreported:6},r={active:{headline:"turns are being observed on this site"},unreported:{headline:`no report in the last ${String(l.oz)} days — open the site in Chrome with the extension loaded`},standby:{headline:"this build declares no endpoints for the site, so nothing is observed yet"},unpatched:{headline:"the page tap captured neither fetch nor XHR — it may not have installed; reload the extension at chrome://extensions"},idle:{headline:"watching; no turn has been observed yet"},blind:{headline:"messages were sent in the page that the network capture never saw",remediation:"reload the tab. If it persists after `aka update` and reloading the extension at chrome://extensions, the site's send path has changed and needs a new extension build."},degraded:{headline:"the site's payloads no longer carry the fields the extension reads",remediation:"run `aka update`, then reload the extension at chrome://extensions. If it stays degraded after an update, the site's contract has changed and needs a new extension build."}};function s(a){return l.AKh.options.map(b=>{let c=function(a){let b,c="";for(let b of a)b.lastReportAt>c&&(c=b.lastReportAt);let d=a.filter(a=>!(a=>{if(a.closed)return!0;let b=Date.parse(c)-Date.parse(a.lastReportAt);return Number.isFinite(b)&&b>l.q6i})(a));for(let c of d.some(a=>(0,l.RbK)(a.status))?d:a)(void 0===b||function(a,b){let c=q[p(a.status)],d=q[p(b.status)];return c!==d?c<d:a.observedAt!==b.observedAt?a.observedAt>b.observedAt:(a.rootSessionId??"")>(b.rootSessionId??"")}(c,b))&&(b=c);return b}(a.filter(a=>a.tool===b)),d=p(c?.status),e=r[d];return{tool:b,state:d,headline:e.headline,...void 0!==e.remediation?{remediation:e.remediation}:{},drift:n.has(d),...void 0!==c?{observedAt:c.observedAt}:{}}})}["a","0"," ","x","ab","a.","a-","a_","a@","a/","a:","a=","a;","aA0"," "].flatMap(a=>[23,25].map(b=>a.repeat(Math.ceil(b/a.length)).slice(0,b)+"!")),["abc-","a.","a ","a=","x","0","a@","a/","ab"].map(a=>a.repeat(1e4).slice(0,4e4)+"!")}};
1
+ "use strict";exports.id=618,exports.ids=[618],exports.modules={73076:(a,b,c)=>{c.d(b,{W:()=>d});function d(){return Date.now()}},76055:(a,b,c)=>{c.d(b,{Vz:()=>o,hZ:()=>s});let d="api[_-]?key|apikey|private[_-]?key|access[_-]?key|access[_-]?token|token|secret|credentials?|password|passwd|pwd|authorization|sig|signature|sas|assertion",e="Bearer|Basic|Token|Digest|ApiKey|SSWS|AWS4-HMAC-SHA256";function f(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}RegExp(`((?:${d})['"\`]?\\s*[:=]\\s*['"\`]?)(?!(?:${e})[\\s'"\`])[^\\s'"\`&]+`,"gi"),RegExp(`((?:${d})['"\`]?\\s*[:=]\\s*['"\`]?)(${e})\\s+[^\\s'"\`]+`,"gi"),RegExp(`(https?://(?:${[{hosts:["hooks.slack.com"],prefix:"/services/"},{hosts:["discord.com","discordapp.com","ptb.discord.com","canary.discord.com"],prefix:"/api/webhooks/"},{hosts:["hooks.zapier.com"],prefix:"/hooks/"},{hosts:["outlook.office.com","outlook.office365.com"],prefix:"/webhook/"}].flatMap(a=>a.hosts.map(b=>`${f(b)}${f(a.prefix)}`)).join("|")}))[^\\s'"\`<>()[\\]{},;]+`,"gi");let g=new WeakMap,h=new WeakMap,i=new WeakMap;class j{match(a,b){if("keyword"!==b.matcher.type)return[];let{keywords:c,caseSensitive:d}=b.matcher,e=[];for(let f of function(a,b,c){let d="keyword"===a?h:i,e=d.get(b);if(void 0!==e){if(e.stateful)for(let a of e.entries)void 0!==a&&(a.lastIndex=0);return e.entries}let f=c();return d.set(b,{entries:f,stateful:f.some(a=>void 0!==a&&(a.global||a.sticky))}),f}("keyword",b.matcher,()=>c.map(a=>{if(0!==a.length)return new RegExp(a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d?"gu":"giu")}))){let b;if(void 0!==f){if(e.length>=1e4)break;for(;null!==(b=f.exec(a))&&(e.push({start:b.index,end:b.index+b[0].length}),!(e.length>=1e4)););}}return e}}class k{match(a,b){let c;if("regex"!==b.matcher.type)return[];let{pattern:d,flags:e,captureGroup:f}=b.matcher,h=function(a,b){let c=g.get(a);if(void 0!==c)return c.lastIndex=0,c;let d=b();return g.set(a,d),d}(b.matcher,()=>new RegExp(d,e.includes("d")?e:`${e}d`)),i=a.length>2e5?a.slice(0,2e5):a,j=[],k=i.length+1,l=0;for(;null!==(c=h.exec(i))&&!(++l>k);){let a=null!=f?c[f]:c[0];if(0===c[0].length&&h.lastIndex++,a&&j.length<1e4){let b=null!=f?c.indices?.[f]:void 0,d=b?b[0]:c.index;j.push({start:d,end:d+a.length})}if(!e.includes("g")||j.length>=1e4)break}return j}}new j,new k;var l=c(32932);let m=new Set(["prettier","eslint","biome","black","ruff","gofmt","rustfmt","node","npx","npm","pnpm","yarn","make","git","jq","echo"]);JSON.stringify({kind:"hook-conflict",mutation:/(--write|--fix|\s-w\b|\s-i\b|(?<![\d&>])>\s?\S)/.source,note:"two hooks on the same event with overlapping matchers, both mutating the tool target"}),JSON.stringify({kind:"hook-unknown",knownTools:[...m]}),JSON.stringify({kind:"hook-external-egress",pattern:/\b(curl|wget|nc|ncat|netcat|ssh|scp|rsync)\b|https?:\/\//.source});let n=new Set(["blind","degraded"]),o={ruleId:"web-capture-drift",version:"1",name:"Web chat capture is not reading the site",category:"config",severity:"medium",definition:JSON.stringify({kind:"web-capture-drift",states:[...n],minParseFailures:2})};function p(a){return void 0===a?"unreported":0===a.conversationEndpoints?"standby":a.patched?a.blind?"blind":a.shapeMisses.length>0||a.parseFailures>=2?"degraded":a.live?"active":"idle":"unpatched"}let q={blind:0,degraded:1,unpatched:2,idle:3,standby:4,active:5,unreported:6},r={active:{headline:"turns are being observed on this site"},unreported:{headline:`no report in the last ${String(l.oz)} days — open the site in Chrome with the extension loaded`},standby:{headline:"this build declares no endpoints for the site, so nothing is observed yet"},unpatched:{headline:"the page tap captured neither fetch nor XHR — it may not have installed; reload the extension at chrome://extensions"},idle:{headline:"watching; no turn has been observed yet"},blind:{headline:"messages were sent in the page that the network capture never saw",remediation:"reload the tab. If it persists after `aka update` and reloading the extension at chrome://extensions, the site's send path has changed and needs a new extension build."},degraded:{headline:"the site's payloads no longer carry the fields the extension reads",remediation:"run `aka update`, then reload the extension at chrome://extensions. If it stays degraded after an update, the site's contract has changed and needs a new extension build."}};function s(a){return l.AKh.options.map(b=>{let c=function(a){let b,c="";for(let b of a)b.lastReportAt>c&&(c=b.lastReportAt);let d=a.filter(a=>!(a=>{if(a.closed)return!0;let b=Date.parse(c)-Date.parse(a.lastReportAt);return Number.isFinite(b)&&b>l.q6i})(a));for(let c of d.some(a=>(0,l.RbK)(a.status))?d:a)(void 0===b||function(a,b){let c=q[p(a.status)],d=q[p(b.status)];return c!==d?c<d:a.observedAt!==b.observedAt?a.observedAt>b.observedAt:(a.rootSessionId??"")>(b.rootSessionId??"")}(c,b))&&(b=c);return b}(a.filter(a=>a.tool===b)),d=p(c?.status),e=r[d];return{tool:b,state:d,headline:e.headline,...void 0!==e.remediation?{remediation:e.remediation}:{},drift:n.has(d),...void 0!==c?{observedAt:c.observedAt}:{}}})}["a","0"," ","x","ab","a.","a-","a_","a@","a/","a:","a=","a;","aA0"," "].flatMap(a=>[23,25].map(b=>a.repeat(Math.ceil(b/a.length)).slice(0,b)+"!")),["abc-","a.","a ","a=","x","0","a@","a/","ab"].map(a=>a.repeat(1e4).slice(0,4e4)+"!")}};
@@ -1 +1 @@
1
- "use strict";exports.id=121,exports.ids=[121],exports.modules={10739:(a,b,c)=>{c.d(b,{Ah:()=>r,MR:()=>s});var d=c(75046),e=c(37067),f=c(44708);class g extends Error{constructor(a){super(`control-plane request failed with status ${String(a)}`),this.status=a,this.name="RemoteRequestError"}}class h extends Error{constructor(a){super(`control plane does not serve ${a}`),this.route=a,this.name="RemoteRouteAbsent"}}class i extends Error{constructor(a,b){super(`refusing to send a malformed body to ${a}`),this.cause=b,this.name="RemoteRequestInvalid"}}class j extends Error{constructor(a){super(`refusing to talk to an unsafe control-plane endpoint: ${(0,d.Vgn)(a)}`),this.name="RemoteEndpointRefused"}}class k extends Error{constructor(a,b){super(`control plane answered ${a} with ${b}`),this.name="RemoteResponseInvalid"}}class l extends Error{constructor(a,b){super(`control-plane request did not complete: ${a}`),this.status=b,this.name="RemoteTransportError"}}async function m(a){let b=new URL(a.url),c=a.timeoutMs??1e4,d="http:"===b.protocol?e.request:f.request,g={method:a.method,headers:{...a.headers,...void 0===a.apiKey?{}:{"x-api-key":a.apiKey},accept:"application/json",...void 0===a.body?{}:{"content-type":"application/json","content-length":String(Buffer.byteLength(a.body))}}};return new Promise((e,f)=>{let h=!1,i=(a,b)=>{h||(h=!0,f(new l(a,b)))},j=d(b,g,a=>{let b=[],c=0;a.on("data",d=>{if((c+=d.length)>8388608){i(`response exceeded ${String(8388608)} bytes`,a.statusCode),a.destroy(),j.destroy();return}b.push(d)}),a.on("aborted",()=>{i("the response was aborted",a.statusCode)}),a.on("end",()=>{h||(h=!0,e({status:a.statusCode??0,headers:a.headers,body:Buffer.concat(b).toString("utf8")}))})}),k=setTimeout(()=>{i(`no response within ${String(c)}ms`),j.destroy()},c);k.unref(),j.on("upgrade",(a,b)=>{i("the deployment answered with a protocol upgrade"),b.destroy()}),j.on("close",()=>{i("the connection closed before a response was read"),clearTimeout(k)}),j.on("error",a=>{i(a.message)}),void 0!==a.body&&j.write(a.body),j.end()})}let n={events:"/v1/events",auditEvents:"/v1/audit-events",auditEventsBatch:"/v1/audit-events/batch",inventory:"/v1/inventory",storePosture:"/v1/store-posture",policyBundle:"/v1/policy-bundle",whoami:"/v1/plugin/whoami",shares:"/v1/shares",commands:"/v1/plugin/commands"};function o(a,b){let c=a.headers[b];if(void 0!==c)return Array.isArray(c)?c[0]:c}function p(a){if(a.status<200||a.status>=300)throw new g(a.status);return a.body}function q(a,b,c){let d;try{d=JSON.parse(b)}catch{throw new k(c,"a body that is not JSON")}let e=a.safeParse(d);if(!e.success)throw new k(c,"a body this client cannot read");return e.data}function r(a){let b=function(a){if(!(0,d.lGs)(a))throw new j(a);let b=a.length;for(;b>0&&47===a.charCodeAt(b-1);)b-=1;return a.slice(0,b)}(a.endpoint),c=a=>`${b}${a}`,e={apiKey:a.apiKey,timeoutMs:a.timeoutMs},f=async a=>{let b=d.qhM.safeParse(a);if(!b.success)throw new i(n.auditEvents,b.error);p(await m({...e,method:"POST",url:c(n.auditEvents),body:JSON.stringify(b.data)}))};return{async ingestEvents(a){let b=await m({...e,method:"POST",url:c(n.events),body:JSON.stringify(a)});return q(d.kg1,p(b),n.events)},async ingestInventory(a){let b=await m({...e,method:"POST",url:c(n.inventory),body:JSON.stringify(a)});return q(d.PUD,p(b),n.inventory)},async recordAuditEvent(a){await f(a)},async recordAuditEvents(a,b){let g=d.lBn.safeParse({events:a});if(!g.success)throw new i(n.auditEventsBatch,g.error);let j=await m({...e,method:"POST",url:c(n.auditEventsBatch),body:JSON.stringify(g.data)});if(404===j.status){if(b?.fallbackToSingleEvents!==!0)throw new h(n.auditEventsBatch);for(let a of g.data.events)await f(a);return{accepted:g.data.events.length}}return q(d.t8P,p(j),n.auditEventsBatch)},async reportStorePosture(a){p(await m({...e,method:"POST",url:c(n.storePosture),body:JSON.stringify(a)}))},async getPolicyBundle(a){let b=await m({...e,method:"GET",url:c(n.policyBundle),...void 0===a?{}:{headers:{"if-none-match":a}}});return 304===b.status?{changed:!1,etag:o(b,"etag")??a}:{changed:!0,bundle:q(d.vap,p(b),n.policyBundle),etag:o(b,"etag")}},async whoami(){let a=await m({...e,method:"GET",url:c(n.whoami)});return q(d.NtJ,p(a),n.whoami)},async recordProjectEgress(a){let b=d.BZd.safeParse(a);if(!b.success)throw new i(n.shares,b.error);let f=await m({...e,method:"POST",url:c(n.shares),body:JSON.stringify(b.data)});if(404===f.status)throw new h(n.shares);p(f)},async pollCommand(){let a=await m({...e,method:"GET",url:c(n.commands)});return 404===a.status?null:q(d.CPm,p(a),n.commands).command},async ackCommand(a,b){let f=d.B0R.safeParse(b),g=`${n.commands}/${encodeURIComponent(a)}/ack`;if(!f.success)throw new i(g,f.error);p(await m({...e,method:"POST",url:c(g),body:JSON.stringify(f.data)}))}}}function s(a=15e3){return async(b,c)=>{try{return await r({...b,timeoutMs:a}).recordProjectEgress(c),{ok:!0}}catch(a){return{ok:!1,kind:function(a){switch("object"!=typeof a||null===a||!("name"in a)?null:"string"==typeof a.name?a.name:null){case"RemoteRouteAbsent":return"route-absent";case"RemoteRequestInvalid":case"RemoteEndpointRefused":return"invalid-request";case"RemoteResponseInvalid":return"rejected"}let b=function(a){if("object"!=typeof a||null===a||!("status"in a))return null;let{status:b}=a;return"number"==typeof b&&Number.isInteger(b)&&b>=100&&b<=599?b:null}(a);if(null===b)return"unreachable";switch(b){case 401:return"unauthorized";case 403:return"forbidden";case 429:case 404:return"unreachable";default:return b>=400&&b<=499?"rejected":"unreachable"}}(a)}}}}},60667:(a,b,c)=>{c.d(b,{db:()=>f});var d=c(9578);let e=globalThis;function f(){if(e.__akaDb)return e.__akaDb;let a=(0,d.Ji)((0,d.KS)());return a.purgeSampleData(),e.__akaDb=a,a}}};
1
+ "use strict";exports.id=670,exports.ids=[670],exports.modules={55670:(a,b,c)=>{c.d(b,{Ah:()=>r,MR:()=>s});var d=c(88477),e=c(37067),f=c(44708);class g extends Error{constructor(a){super(`control-plane request failed with status ${String(a)}`),this.status=a,this.name="RemoteRequestError"}}class h extends Error{constructor(a){super(`control plane does not serve ${a}`),this.route=a,this.name="RemoteRouteAbsent"}}class i extends Error{constructor(a,b){super(`refusing to send a malformed body to ${a}`),this.cause=b,this.name="RemoteRequestInvalid"}}class j extends Error{constructor(a){super(`refusing to talk to an unsafe control-plane endpoint: ${(0,d.Vgn)(a)}`),this.name="RemoteEndpointRefused"}}class k extends Error{constructor(a,b){super(`control plane answered ${a} with ${b}`),this.name="RemoteResponseInvalid"}}class l extends Error{constructor(a,b){super(`control-plane request did not complete: ${a}`),this.status=b,this.name="RemoteTransportError"}}async function m(a){let b=new URL(a.url),c=a.timeoutMs??1e4,d="http:"===b.protocol?e.request:f.request,g={method:a.method,headers:{...a.headers,...void 0===a.apiKey?{}:{"x-api-key":a.apiKey},accept:"application/json",...void 0===a.body?{}:{"content-type":"application/json","content-length":String(Buffer.byteLength(a.body))}}};return new Promise((e,f)=>{let h=!1,i=(a,b)=>{h||(h=!0,f(new l(a,b)))},j=d(b,g,a=>{let b=[],c=0;a.on("data",d=>{if((c+=d.length)>8388608){i(`response exceeded ${String(8388608)} bytes`,a.statusCode),a.destroy(),j.destroy();return}b.push(d)}),a.on("aborted",()=>{i("the response was aborted",a.statusCode)}),a.on("end",()=>{h||(h=!0,e({status:a.statusCode??0,headers:a.headers,body:Buffer.concat(b).toString("utf8")}))})}),k=setTimeout(()=>{i(`no response within ${String(c)}ms`),j.destroy()},c);k.unref(),j.on("upgrade",(a,b)=>{i("the deployment answered with a protocol upgrade"),b.destroy()}),j.on("close",()=>{i("the connection closed before a response was read"),clearTimeout(k)}),j.on("error",a=>{i(a.message)}),void 0!==a.body&&j.write(a.body),j.end()})}let n={events:"/v1/events",auditEvents:"/v1/audit-events",auditEventsBatch:"/v1/audit-events/batch",inventory:"/v1/inventory",storePosture:"/v1/store-posture",policyBundle:"/v1/policy-bundle",whoami:"/v1/plugin/whoami",shares:"/v1/shares",commands:"/v1/plugin/commands"};function o(a,b){let c=a.headers[b];if(void 0!==c)return Array.isArray(c)?c[0]:c}function p(a){if(a.status<200||a.status>=300)throw new g(a.status);return a.body}function q(a,b,c){let d;try{d=JSON.parse(b)}catch{throw new k(c,"a body that is not JSON")}let e=a.safeParse(d);if(!e.success)throw new k(c,"a body this client cannot read");return e.data}function r(a){let b=function(a){if(!(0,d.lGs)(a))throw new j(a);let b=a.length;for(;b>0&&47===a.charCodeAt(b-1);)b-=1;return a.slice(0,b)}(a.endpoint),c=a=>`${b}${a}`,e={apiKey:a.apiKey,timeoutMs:a.timeoutMs},f=async a=>{let b=d.qhM.safeParse(a);if(!b.success)throw new i(n.auditEvents,b.error);p(await m({...e,method:"POST",url:c(n.auditEvents),body:JSON.stringify(b.data)}))};return{async ingestEvents(a){let b=await m({...e,method:"POST",url:c(n.events),body:JSON.stringify(a)});return q(d.kg1,p(b),n.events)},async ingestInventory(a){let b=await m({...e,method:"POST",url:c(n.inventory),body:JSON.stringify(a)});return q(d.PUD,p(b),n.inventory)},async recordAuditEvent(a){await f(a)},async recordAuditEvents(a,b){let g=d.lBn.safeParse({events:a});if(!g.success)throw new i(n.auditEventsBatch,g.error);let j=await m({...e,method:"POST",url:c(n.auditEventsBatch),body:JSON.stringify(g.data)});if(404===j.status){if(b?.fallbackToSingleEvents!==!0)throw new h(n.auditEventsBatch);for(let a of g.data.events)await f(a);return{accepted:g.data.events.length}}return q(d.t8P,p(j),n.auditEventsBatch)},async reportStorePosture(a){p(await m({...e,method:"POST",url:c(n.storePosture),body:JSON.stringify(a)}))},async getPolicyBundle(a){let b=await m({...e,method:"GET",url:c(n.policyBundle),...void 0===a?{}:{headers:{"if-none-match":a}}});return 304===b.status?{changed:!1,etag:o(b,"etag")??a}:{changed:!0,bundle:q(d.vap,p(b),n.policyBundle),etag:o(b,"etag")}},async whoami(){let a=await m({...e,method:"GET",url:c(n.whoami)});return q(d.NtJ,p(a),n.whoami)},async recordProjectEgress(a){let b=d.BZd.safeParse(a);if(!b.success)throw new i(n.shares,b.error);let f=await m({...e,method:"POST",url:c(n.shares),body:JSON.stringify(b.data)});if(404===f.status)throw new h(n.shares);p(f)},async pollCommand(){let a=await m({...e,method:"GET",url:c(n.commands)});return 404===a.status?null:q(d.CPm,p(a),n.commands).command},async ackCommand(a,b){let f=d.B0R.safeParse(b),g=`${n.commands}/${encodeURIComponent(a)}/ack`;if(!f.success)throw new i(g,f.error);p(await m({...e,method:"POST",url:c(g),body:JSON.stringify(f.data)}))}}}function s(a=15e3){return async(b,c)=>{try{return await r({...b,timeoutMs:a}).recordProjectEgress(c),{ok:!0}}catch(a){return{ok:!1,kind:function(a){switch("object"!=typeof a||null===a||!("name"in a)?null:"string"==typeof a.name?a.name:null){case"RemoteRouteAbsent":return"route-absent";case"RemoteRequestInvalid":case"RemoteEndpointRefused":return"invalid-request";case"RemoteResponseInvalid":return"rejected"}let b=function(a){if("object"!=typeof a||null===a||!("status"in a))return null;let{status:b}=a;return"number"==typeof b&&Number.isInteger(b)&&b>=100&&b<=599?b:null}(a);if(null===b)return"unreachable";switch(b){case 401:return"unauthorized";case 403:return"forbidden";case 429:case 404:return"unreachable";default:return b>=400&&b<=499?"rejected":"unreachable"}}(a)}}}}}};