tapimo 0.1.0 → 0.3.0

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 (520) hide show
  1. package/README.md +57 -16
  2. package/dist/ApiKey.d.ts +4 -1
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +6 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +98 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +150 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7917 -2315
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +141 -329
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +20 -4
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +23 -4
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/Webhooks.d.ts +2 -2
  19. package/dist/Webhooks.d.ts.map +1 -1
  20. package/dist/Webhooks.js +2 -2
  21. package/dist/Webhooks.js.map +1 -1
  22. package/dist/admin/App.d.ts +203 -120
  23. package/dist/admin/App.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.d.ts +111 -6
  25. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  26. package/dist/admin/apps/api-keys.js +67 -0
  27. package/dist/admin/apps/api-keys.js.map +1 -1
  28. package/dist/admin/apps/scopes.d.ts +12 -1
  29. package/dist/admin/apps/scopes.d.ts.map +1 -1
  30. package/dist/admin/apps/scopes.js +3 -0
  31. package/dist/admin/apps/scopes.js.map +1 -1
  32. package/dist/admin/apps/verified-tokens.d.ts +116 -116
  33. package/dist/admin/apps/verified-tokens.js +1 -1
  34. package/dist/admin/apps/verified-tokens.js.map +1 -1
  35. package/dist/admin/ui.generated.d.ts +1 -1
  36. package/dist/admin/ui.generated.js +13 -13
  37. package/dist/admin/ui.generated.js.map +1 -1
  38. package/dist/analytics/Analytics.d.ts +151 -0
  39. package/dist/analytics/Analytics.d.ts.map +1 -0
  40. package/dist/analytics/Analytics.js +212 -0
  41. package/dist/analytics/Analytics.js.map +1 -0
  42. package/dist/analytics/tables/requestEvents.d.ts +215 -0
  43. package/dist/analytics/tables/requestEvents.d.ts.map +1 -0
  44. package/dist/analytics/tables/requestEvents.js +264 -0
  45. package/dist/analytics/tables/requestEvents.js.map +1 -0
  46. package/dist/apps/data/App.d.ts +19576 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +272 -0
  49. package/dist/apps/data/App.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +3 -0
  51. package/dist/apps/data/index.d.ts.map +1 -0
  52. package/dist/apps/data/index.js +3 -0
  53. package/dist/apps/data/index.js.map +1 -0
  54. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  55. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  56. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  57. package/dist/apps/data/routes/activities.js.map +1 -0
  58. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  59. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  60. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  61. package/dist/apps/data/routes/addresses.js.map +1 -0
  62. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +4 -4
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  64. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  65. package/dist/apps/data/routes/balances.js.map +1 -0
  66. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  67. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  68. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  69. package/dist/apps/data/routes/blocks.js.map +1 -0
  70. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +8 -8
  71. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  72. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  73. package/dist/apps/data/routes/coingecko.js.map +1 -0
  74. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +108 -108
  75. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  76. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  77. package/dist/apps/data/routes/exchanges.js.map +1 -0
  78. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +39 -39
  79. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  80. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  81. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  82. package/dist/apps/data/routes/funding.d.ts +765 -0
  83. package/dist/apps/data/routes/funding.d.ts.map +1 -0
  84. package/dist/apps/data/routes/funding.js +383 -0
  85. package/dist/apps/data/routes/funding.js.map +1 -0
  86. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  87. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  88. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  89. package/dist/apps/data/routes/indexer.js.map +1 -0
  90. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
  91. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  92. package/dist/apps/{receipts.js → data/routes/receipts.js} +14 -20
  93. package/dist/apps/data/routes/receipts.js.map +1 -0
  94. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +33 -40
  95. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  96. package/dist/apps/{rpc.js → data/routes/rpc.js} +35 -7
  97. package/dist/apps/data/routes/rpc.js.map +1 -0
  98. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +40 -40
  99. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  100. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  101. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  102. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
  103. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  104. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  105. package/dist/apps/data/routes/tokens.js.map +1 -0
  106. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
  107. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  108. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  109. package/dist/apps/data/routes/transactions.js.map +1 -0
  110. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +62 -62
  111. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  112. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  113. package/dist/apps/data/routes/transfers.js.map +1 -0
  114. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +6 -6
  115. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  116. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  117. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  118. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +17 -17
  119. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  120. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +38 -34
  121. package/dist/apps/data/routes/webhooks.js.map +1 -0
  122. package/dist/apps/docs/App.d.ts +29 -0
  123. package/dist/apps/docs/App.d.ts.map +1 -0
  124. package/dist/apps/docs/App.js +54 -0
  125. package/dist/apps/docs/App.js.map +1 -0
  126. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  127. package/dist/apps/docs/fonts.d.ts.map +1 -0
  128. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  129. package/dist/apps/docs/fonts.js.map +1 -0
  130. package/dist/apps/docs/index.d.ts +2 -0
  131. package/dist/apps/docs/index.d.ts.map +1 -0
  132. package/dist/apps/docs/index.js +2 -0
  133. package/dist/apps/docs/index.js.map +1 -0
  134. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  135. package/dist/apps/docs/logo.d.ts.map +1 -0
  136. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  137. package/dist/apps/docs/logo.js.map +1 -0
  138. package/dist/apps/docs/reference.d.ts +21 -0
  139. package/dist/apps/docs/reference.d.ts.map +1 -0
  140. package/dist/apps/docs/reference.js +112 -0
  141. package/dist/apps/docs/reference.js.map +1 -0
  142. package/dist/apps/index.d.ts +5 -0
  143. package/dist/apps/index.d.ts.map +1 -0
  144. package/dist/apps/index.js +5 -0
  145. package/dist/apps/index.js.map +1 -0
  146. package/dist/apps/mcp.d.ts +76 -0
  147. package/dist/apps/mcp.d.ts.map +1 -0
  148. package/dist/apps/mcp.js +188 -0
  149. package/dist/apps/mcp.js.map +1 -0
  150. package/dist/apps/metadata.d.ts +7 -0
  151. package/dist/apps/metadata.d.ts.map +1 -0
  152. package/dist/apps/metadata.js +15 -0
  153. package/dist/apps/metadata.js.map +1 -0
  154. package/dist/apps/platform/App.d.ts +5262 -0
  155. package/dist/apps/platform/App.d.ts.map +1 -0
  156. package/dist/apps/platform/App.js +84 -0
  157. package/dist/apps/platform/App.js.map +1 -0
  158. package/dist/apps/platform/Billing.d.ts +279 -0
  159. package/dist/apps/platform/Billing.d.ts.map +1 -0
  160. package/dist/apps/platform/Billing.js +477 -0
  161. package/dist/apps/platform/Billing.js.map +1 -0
  162. package/dist/apps/platform/index.d.ts +3 -0
  163. package/dist/apps/platform/index.d.ts.map +1 -0
  164. package/dist/apps/platform/index.js +3 -0
  165. package/dist/apps/platform/index.js.map +1 -0
  166. package/dist/apps/platform/routes/api-keys.d.ts +973 -0
  167. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/api-keys.js +430 -0
  169. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  170. package/dist/apps/platform/routes/billing.d.ts +1520 -0
  171. package/dist/apps/platform/routes/billing.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/billing.js +795 -0
  173. package/dist/apps/platform/routes/billing.js.map +1 -0
  174. package/dist/apps/platform/routes/invitations.d.ts +851 -0
  175. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  176. package/dist/apps/platform/routes/invitations.js +471 -0
  177. package/dist/apps/platform/routes/invitations.js.map +1 -0
  178. package/dist/apps/platform/routes/me.d.ts +95 -0
  179. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  180. package/dist/apps/platform/routes/me.js +81 -0
  181. package/dist/apps/platform/routes/me.js.map +1 -0
  182. package/dist/apps/platform/routes/members.d.ts +554 -0
  183. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  184. package/dist/apps/platform/routes/members.js +251 -0
  185. package/dist/apps/platform/routes/members.js.map +1 -0
  186. package/dist/apps/platform/routes/orgs.d.ts +596 -0
  187. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  188. package/dist/apps/platform/routes/orgs.js +276 -0
  189. package/dist/apps/platform/routes/orgs.js.map +1 -0
  190. package/dist/apps/platform/routes/projects.d.ts +740 -0
  191. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  192. package/dist/apps/platform/routes/projects.js +286 -0
  193. package/dist/apps/platform/routes/projects.js.map +1 -0
  194. package/dist/apps/platform/routes/scopes.d.ts +107 -0
  195. package/dist/apps/platform/routes/scopes.d.ts.map +1 -0
  196. package/dist/apps/platform/routes/scopes.js +66 -0
  197. package/dist/apps/platform/routes/scopes.js.map +1 -0
  198. package/dist/apps/platform/routes/usage.d.ts +588 -0
  199. package/dist/apps/platform/routes/usage.d.ts.map +1 -0
  200. package/dist/apps/platform/routes/usage.js +391 -0
  201. package/dist/apps/platform/routes/usage.js.map +1 -0
  202. package/dist/apps/relay/App.d.ts +44 -0
  203. package/dist/apps/relay/App.d.ts.map +1 -0
  204. package/dist/apps/relay/App.js +211 -0
  205. package/dist/apps/relay/App.js.map +1 -0
  206. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  208. package/dist/apps/relay/Sponsorships.js +194 -0
  209. package/dist/apps/relay/Sponsorships.js.map +1 -0
  210. package/dist/apps/relay/index.d.ts +3 -0
  211. package/dist/apps/relay/index.d.ts.map +1 -0
  212. package/dist/apps/relay/index.js +3 -0
  213. package/dist/apps/relay/index.js.map +1 -0
  214. package/dist/cli/Cli.d.ts +9 -2
  215. package/dist/cli/Cli.d.ts.map +1 -1
  216. package/dist/cli/Cli.js +12 -4
  217. package/dist/cli/Cli.js.map +1 -1
  218. package/dist/cli/commands/admin.d.ts +5 -1
  219. package/dist/cli/commands/admin.d.ts.map +1 -1
  220. package/dist/cli/commands/admin.js +82 -3
  221. package/dist/cli/commands/admin.js.map +1 -1
  222. package/dist/db/Db.d.ts +17 -0
  223. package/dist/db/Db.d.ts.map +1 -1
  224. package/dist/db/Db.js +254 -0
  225. package/dist/db/Db.js.map +1 -1
  226. package/dist/db/Schema.d.ts +159 -0
  227. package/dist/db/Schema.d.ts.map +1 -1
  228. package/dist/db/Schema.js +187 -2
  229. package/dist/db/Schema.js.map +1 -1
  230. package/dist/db/tables/billingSettings.d.ts +55 -0
  231. package/dist/db/tables/billingSettings.d.ts.map +1 -0
  232. package/dist/db/tables/billingSettings.js +70 -0
  233. package/dist/db/tables/billingSettings.js.map +1 -0
  234. package/dist/db/tables/invitations.d.ts +84 -0
  235. package/dist/db/tables/invitations.d.ts.map +1 -0
  236. package/dist/db/tables/invitations.js +165 -0
  237. package/dist/db/tables/invitations.js.map +1 -0
  238. package/dist/db/tables/memberships.d.ts +108 -0
  239. package/dist/db/tables/memberships.d.ts.map +1 -0
  240. package/dist/db/tables/memberships.js +153 -0
  241. package/dist/db/tables/memberships.js.map +1 -0
  242. package/dist/db/tables/organizations.d.ts +48 -0
  243. package/dist/db/tables/organizations.d.ts.map +1 -1
  244. package/dist/db/tables/organizations.js +97 -2
  245. package/dist/db/tables/organizations.js.map +1 -1
  246. package/dist/db/tables/projects.d.ts +65 -0
  247. package/dist/db/tables/projects.d.ts.map +1 -0
  248. package/dist/db/tables/projects.js +75 -0
  249. package/dist/db/tables/projects.js.map +1 -0
  250. package/dist/db/tables/requestUsage.d.ts +121 -0
  251. package/dist/db/tables/requestUsage.d.ts.map +1 -0
  252. package/dist/db/tables/requestUsage.js +150 -0
  253. package/dist/db/tables/requestUsage.js.map +1 -0
  254. package/dist/db/tables/sponsoredTransactions.d.ts +239 -0
  255. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  256. package/dist/db/tables/sponsoredTransactions.js +314 -0
  257. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  258. package/dist/db/tables/stripeCustomers.d.ts +81 -0
  259. package/dist/db/tables/stripeCustomers.d.ts.map +1 -0
  260. package/dist/db/tables/stripeCustomers.js +120 -0
  261. package/dist/db/tables/stripeCustomers.js.map +1 -0
  262. package/dist/db/tables/users.d.ts +48 -0
  263. package/dist/db/tables/users.d.ts.map +1 -0
  264. package/dist/db/tables/users.js +65 -0
  265. package/dist/db/tables/users.js.map +1 -0
  266. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  267. package/dist/handlers/internal/executionError.js +2 -0
  268. package/dist/handlers/internal/executionError.js.map +1 -1
  269. package/dist/handlers/internal/multisig.d.ts +2 -6
  270. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  271. package/dist/handlers/internal/multisig.js +11 -36
  272. package/dist/handlers/internal/multisig.js.map +1 -1
  273. package/dist/handlers/internal/sponsorship.d.ts +35 -2
  274. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  275. package/dist/handlers/internal/sponsorship.js +53 -14
  276. package/dist/handlers/internal/sponsorship.js.map +1 -1
  277. package/dist/handlers/internal/utils.d.ts +10 -3
  278. package/dist/handlers/internal/utils.d.ts.map +1 -1
  279. package/dist/handlers/internal/utils.js +14 -6
  280. package/dist/handlers/internal/utils.js.map +1 -1
  281. package/dist/handlers/relay.d.ts +6 -2
  282. package/dist/handlers/relay.d.ts.map +1 -1
  283. package/dist/handlers/relay.js +16 -2
  284. package/dist/handlers/relay.js.map +1 -1
  285. package/dist/index.d.ts +1 -0
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +1 -0
  288. package/dist/index.js.map +1 -1
  289. package/dist/internal/Auth.d.ts +222 -6
  290. package/dist/internal/Auth.d.ts.map +1 -1
  291. package/dist/internal/Auth.js +625 -74
  292. package/dist/internal/Auth.js.map +1 -1
  293. package/dist/internal/Cache.d.ts.map +1 -1
  294. package/dist/internal/Cache.js +4 -1
  295. package/dist/internal/Cache.js.map +1 -1
  296. package/dist/internal/EdgeCache.d.ts +10 -0
  297. package/dist/internal/EdgeCache.d.ts.map +1 -1
  298. package/dist/internal/EdgeCache.js +39 -8
  299. package/dist/internal/EdgeCache.js.map +1 -1
  300. package/dist/internal/Fees.d.ts +27 -0
  301. package/dist/internal/Fees.d.ts.map +1 -0
  302. package/dist/internal/Fees.js +48 -0
  303. package/dist/internal/Fees.js.map +1 -0
  304. package/dist/internal/FundingRoutes.d.ts +183 -0
  305. package/dist/internal/FundingRoutes.d.ts.map +1 -0
  306. package/dist/internal/FundingRoutes.js +490 -0
  307. package/dist/internal/FundingRoutes.js.map +1 -0
  308. package/dist/internal/Id.d.ts +15 -0
  309. package/dist/internal/Id.d.ts.map +1 -0
  310. package/dist/internal/Id.js +22 -0
  311. package/dist/internal/Id.js.map +1 -0
  312. package/dist/internal/Log.d.ts +9 -3
  313. package/dist/internal/Log.d.ts.map +1 -1
  314. package/dist/internal/Log.js +7 -0
  315. package/dist/internal/Log.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +10 -20
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +8 -58
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/RateLimit.d.ts +25 -0
  321. package/dist/internal/RateLimit.d.ts.map +1 -1
  322. package/dist/internal/RateLimit.js +51 -0
  323. package/dist/internal/RateLimit.js.map +1 -1
  324. package/dist/internal/Response.d.ts +1 -1
  325. package/dist/internal/Response.d.ts.map +1 -1
  326. package/dist/internal/Schema.d.ts +8 -0
  327. package/dist/internal/Schema.d.ts.map +1 -1
  328. package/dist/internal/Schema.js +7 -0
  329. package/dist/internal/Schema.js.map +1 -1
  330. package/dist/internal/Store.d.ts +7 -1
  331. package/dist/internal/Store.d.ts.map +1 -1
  332. package/dist/internal/Store.js +16 -2
  333. package/dist/internal/Store.js.map +1 -1
  334. package/dist/internal/Viem.d.ts +84 -0
  335. package/dist/internal/Viem.d.ts.map +1 -1
  336. package/dist/internal/Webhooks.d.ts +1 -1
  337. package/dist/internal/Webhooks.d.ts.map +1 -1
  338. package/dist/internal/Webhooks.js +3 -3
  339. package/dist/internal/Webhooks.js.map +1 -1
  340. package/package.json +33 -6
  341. package/src/ApiKey.ts +10 -2
  342. package/src/ApiKeys.test.ts +155 -1
  343. package/src/ApiKeys.ts +203 -1
  344. package/src/App.test.ts +64 -75741
  345. package/src/App.ts +218 -420
  346. package/src/Client.test-d.ts +657 -15
  347. package/src/Scope.ts +26 -4
  348. package/src/Webhooks.ts +2 -2
  349. package/src/admin/apps/api-keys.test.ts +51 -0
  350. package/src/admin/apps/api-keys.ts +84 -0
  351. package/src/admin/apps/scopes.test.ts +11 -1
  352. package/src/admin/apps/scopes.ts +3 -0
  353. package/src/admin/apps/verified-tokens.ts +1 -1
  354. package/src/admin/ui/src/components/Page.tsx +2 -3
  355. package/src/admin/ui/src/routes/__root.tsx +2 -2
  356. package/src/admin/ui/src/routes/api-keys.tsx +2 -2
  357. package/src/admin/ui.generated.ts +13 -13
  358. package/src/analytics/Analytics.test.ts +527 -0
  359. package/src/analytics/Analytics.ts +318 -0
  360. package/src/analytics/tables/requestEvents.ts +523 -0
  361. package/src/apps/composition.test.ts +66 -0
  362. package/src/apps/data/App.test.ts +72 -0
  363. package/src/apps/data/App.ts +330 -0
  364. package/src/apps/data/index.ts +2 -0
  365. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  366. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  367. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  368. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
  369. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  370. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
  371. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  372. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  373. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  374. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
  375. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  376. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  377. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  378. package/src/apps/data/routes/funding.test.ts +214 -0
  379. package/src/apps/data/routes/funding.ts +584 -0
  380. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
  381. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  382. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
  383. package/src/apps/{receipts.ts → data/routes/receipts.ts} +15 -22
  384. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +122 -7
  385. package/src/apps/{rpc.ts → data/routes/rpc.ts} +38 -8
  386. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
  387. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  388. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
  389. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  390. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
  391. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  392. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
  393. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  394. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
  395. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  396. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +7 -7
  397. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +50 -43
  398. package/src/apps/docs/App.ts +65 -0
  399. package/src/apps/docs/index.ts +1 -0
  400. package/src/apps/docs/reference.ts +132 -0
  401. package/src/apps/index.ts +4 -0
  402. package/src/apps/mcp.test.ts +206 -0
  403. package/src/apps/mcp.ts +250 -0
  404. package/src/apps/metadata.ts +23 -0
  405. package/src/apps/platform/App.ts +169 -0
  406. package/src/apps/platform/Billing.test.ts +530 -0
  407. package/src/apps/platform/Billing.ts +682 -0
  408. package/src/apps/platform/index.ts +2 -0
  409. package/src/apps/platform/routes/api-keys.test.ts +493 -0
  410. package/src/apps/platform/routes/api-keys.ts +543 -0
  411. package/src/apps/platform/routes/billing.test.ts +1100 -0
  412. package/src/apps/platform/routes/billing.ts +966 -0
  413. package/src/apps/platform/routes/invitations.test.ts +409 -0
  414. package/src/apps/platform/routes/invitations.ts +587 -0
  415. package/src/apps/platform/routes/me.test.ts +351 -0
  416. package/src/apps/platform/routes/me.ts +106 -0
  417. package/src/apps/platform/routes/members.test.ts +195 -0
  418. package/src/apps/platform/routes/members.ts +313 -0
  419. package/src/apps/platform/routes/orgs.test.ts +313 -0
  420. package/src/apps/platform/routes/orgs.ts +365 -0
  421. package/src/apps/platform/routes/projects.test.ts +181 -0
  422. package/src/apps/platform/routes/projects.ts +367 -0
  423. package/src/apps/platform/routes/scopes.test.ts +29 -0
  424. package/src/apps/platform/routes/scopes.ts +85 -0
  425. package/src/apps/platform/routes/usage.test.ts +422 -0
  426. package/src/apps/platform/routes/usage.ts +527 -0
  427. package/src/apps/relay/App.test.ts +933 -0
  428. package/src/apps/relay/App.ts +236 -0
  429. package/src/apps/relay/Sponsorships.test.ts +375 -0
  430. package/src/apps/relay/Sponsorships.ts +306 -0
  431. package/src/apps/relay/index.ts +2 -0
  432. package/src/cli/Cli.test.ts +25 -2
  433. package/src/cli/Cli.ts +18 -3
  434. package/src/cli/commands/admin.test.ts +83 -0
  435. package/src/cli/commands/admin.ts +91 -3
  436. package/src/db/Db.ts +296 -0
  437. package/src/db/Schema.ts +241 -2
  438. package/src/db/tables/billingSettings.test.ts +87 -0
  439. package/src/db/tables/billingSettings.ts +108 -0
  440. package/src/db/tables/invitations.ts +198 -0
  441. package/src/db/tables/memberships.ts +208 -0
  442. package/src/db/tables/organizations.test.ts +38 -2
  443. package/src/db/tables/organizations.ts +117 -2
  444. package/src/db/tables/projects.ts +107 -0
  445. package/src/db/tables/requestUsage.ts +231 -0
  446. package/src/db/tables/sponsoredTransactions.test.ts +325 -0
  447. package/src/db/tables/sponsoredTransactions.ts +464 -0
  448. package/src/db/tables/stripeCustomers.test.ts +109 -0
  449. package/src/db/tables/stripeCustomers.ts +162 -0
  450. package/src/db/tables/users.ts +85 -0
  451. package/src/handlers/internal/executionError.ts +2 -0
  452. package/src/handlers/internal/multisig.test.ts +84 -10
  453. package/src/handlers/internal/multisig.ts +15 -50
  454. package/src/handlers/internal/sponsorship.ts +106 -20
  455. package/src/handlers/internal/utils.ts +19 -7
  456. package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
  457. package/src/handlers/relay.ts +23 -5
  458. package/src/index.ts +1 -0
  459. package/src/internal/Auth.test.ts +491 -25
  460. package/src/internal/Auth.ts +839 -84
  461. package/src/internal/Cache.ts +5 -1
  462. package/src/internal/Cursor.test.ts +3 -2
  463. package/src/internal/EdgeCache.test.ts +27 -4
  464. package/src/internal/EdgeCache.ts +47 -9
  465. package/src/internal/Fees.test.ts +32 -0
  466. package/src/internal/Fees.ts +51 -0
  467. package/src/internal/FundingRoutes.ts +583 -0
  468. package/src/internal/Id.test.ts +17 -0
  469. package/src/internal/Id.ts +24 -0
  470. package/src/internal/Log.test.ts +2 -1
  471. package/src/internal/Log.ts +16 -3
  472. package/src/internal/MetricSink.ts +1 -1
  473. package/src/internal/OpenApi.ts +12 -60
  474. package/src/internal/RateLimit.test.ts +84 -0
  475. package/src/internal/RateLimit.ts +70 -0
  476. package/src/internal/Response.ts +1 -1
  477. package/src/internal/Schema.ts +8 -0
  478. package/src/internal/Store.test.ts +52 -0
  479. package/src/internal/Store.ts +24 -5
  480. package/src/internal/Tidx.local.test.ts +1 -1
  481. package/src/internal/VerifiedTokens.test.ts +1 -1
  482. package/src/internal/WebhookDestination.test.ts +1 -1
  483. package/src/internal/Webhooks.test.ts +7 -7
  484. package/src/internal/Webhooks.ts +4 -4
  485. package/dist/apps/activities.js.map +0 -1
  486. package/dist/apps/addresses.js.map +0 -1
  487. package/dist/apps/balances.d.ts.map +0 -1
  488. package/dist/apps/balances.js.map +0 -1
  489. package/dist/apps/blocks.d.ts.map +0 -1
  490. package/dist/apps/blocks.js.map +0 -1
  491. package/dist/apps/coingecko.d.ts.map +0 -1
  492. package/dist/apps/coingecko.js.map +0 -1
  493. package/dist/apps/exchanges.d.ts.map +0 -1
  494. package/dist/apps/exchanges.js.map +0 -1
  495. package/dist/apps/fee-amm.d.ts.map +0 -1
  496. package/dist/apps/fee-amm.js.map +0 -1
  497. package/dist/apps/indexer.d.ts.map +0 -1
  498. package/dist/apps/indexer.js.map +0 -1
  499. package/dist/apps/receipts.d.ts.map +0 -1
  500. package/dist/apps/receipts.js.map +0 -1
  501. package/dist/apps/rpc.d.ts.map +0 -1
  502. package/dist/apps/rpc.js.map +0 -1
  503. package/dist/apps/tokenlist.d.ts.map +0 -1
  504. package/dist/apps/tokenlist.js.map +0 -1
  505. package/dist/apps/tokens.d.ts.map +0 -1
  506. package/dist/apps/tokens.js.map +0 -1
  507. package/dist/apps/transactions.d.ts.map +0 -1
  508. package/dist/apps/transactions.js.map +0 -1
  509. package/dist/apps/transfers.d.ts.map +0 -1
  510. package/dist/apps/transfers.js.map +0 -1
  511. package/dist/apps/verified-tokens.d.ts.map +0 -1
  512. package/dist/apps/verified-tokens.js.map +0 -1
  513. package/dist/apps/webhooks.js.map +0 -1
  514. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  515. package/dist/internal/OpenApi.fonts.js.map +0 -1
  516. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  517. package/dist/internal/OpenApi.logo.js.map +0 -1
  518. package/src/handlers/internal/multisig.localnet.test.ts +0 -146
  519. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  520. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -36,4 +36,4 @@ export const pilatFontFaces = `@font-face {
36
36
  font-display: swap;
37
37
  src: url("data:font/woff2;base64,d09GMgABAAAAAKn4ABEAAAACbgAAAKmTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoJyG4HFeBzLAAZgAJZcCIEuCZwMEQgKhrcEhdhtC4k+AAE2AiQDkngEIAWSVAeoBQyBYVsAOZIAioftBAHhd9sAOirqX/u5dwV1sqTsVS5D3Yag07ayqB73DuDORwvcrVQawVqPsv////9XJIsx5t9j9/CAYVJaWi23bUKVNCHE5NlKlTH6uY5tupSS516unjkW5y05YxOKEVqGulwhoouDmeT1Pnl+gDs2sE2l2riHrpMsxCfbNkt7vYt2I1RklFWxsIpcAkzpki02Mz79PHwN8C8qVT51gUsS10ytu2qmU2fw7bibrHsKSEgkkvASF8OO38NskoBiS5cOXT+kDzDqFjx+7FBMTByTdTPkfMgZS8yfZWDDeeVjcrEOPmAKf2tX2dUf9vs4zuCnZ9/TloGmpOUTQ40a4y0qEajEBgYlbArJJ/YrkcFkIJEPNKsc5q+6luP/pqRXzgm/FqlqHJxX/a4dYpoJT6eoK7X4OsWocBQ/VGppp+LDvwTEcXMlLBGxle4oR4y44sl8ef7/97Pa576fVKV+0gCsSDUPIC0/LAyikGgBQBGqUQxCdX6en9ufc9/b25pRuVGDlh4xsgxAKmejfqkSR5VRAdgY+fWHmRhRqFgwQNts6lHaWGASQku1Chy0CIoipShhFUbNmvbURet0myu392P7Vhf10du+0o9o4elVteYjDIABSYuSnFZySHFDLo23TVdedfw//fDfrX3u+z+uCxUZG6ESSmkWHF3IZgQOoUsbz3gcTlT6p9/731bve/6bgexQhvIoZHLBTbBIhxEhK4zMRmSV3lFObcOOlMgsghWwtSKIPSWgV+/4+215vjlfkv9FbiyJ3IRiOdZ7U6ZzRAWk41CBLilfenZIDcAMHo7n/xlzb/YnltQwSWQijbMSy+5hbrWvZ56rwaSvArupHQN+YkM6FQt1YHg3/c5lmW7844mY15zWk4pH1BCPvQAhQLA/Qtv6iLwvjGqMxmLuLCzGsLGwGcNoxjD7jIh6N0QUQFHT/f6TTuv9r9GIyJKBJBOHDUl2ArvsLKCrw6LeorrjrqGiWf/7Un079+b3GiAUMikqJzoKBdM0nCHT/Bsa9sxADX3+Vmslofaq3pCTAwCefv56L/DGgLf7NUZEtGi82j5zUrQJAW0aSiRb0p3tQIal815aOj1N4Yd57alqPu4llmbZ/p46TELWYO9lDNhUScqQyJQ5w5I/ndbbbHJYQE8SWYAkRMgm2F5f1A+5qX5R1Df2+cvXVf0bG5OuRzo5pBP9T11pB4oKSIGn/PCOHaADh7R0CPpB6da3RX1Fra568jFVcOL+sYQkLhEvcycCCuC/LXWP3cPGGKiNn2m29P4HCCytvA+epsrkqjAdqg9BUYXAbYVQDzEYtS2IrDwsLr4tU/tsBAGMNDJmlORKa+/q/3+bfX8OhJazIbRUeavIvVwClaKoCK86zzwTMoW1/uiZyahVM5l8sGQyMwFkCcmEAfftc4f0CEshfPj/rb3a//6E6AXXBqbgusLV2Cq3Ox9nX4lupuwS3jOqTBLIiAjdKZADlIDyC1OhdSpchRblwf5EbfJoC0Z6V8AQfPWOtgJAxXSE/Xnf1N72nnmTQGm1IPEDNoM/2FxHwakeDEE6xTTv3Hvnzrw04AQQwBAMAAFSACURACko77vvvvfw5mEAgRAIgUstNyTuOin9kLUAxQ2ZdMxlSL1WDiEWZS7dgZIDnenORanSpZvGZb+li9pNZfh//r6f3nNWwx/mLLEPlmrnNO/7GkfAEWeggOOEswADk7D512nVfimTjb2YDGb20IeeI6qX0XtFf1ff+/qWE0l2PJaVeGQr5GQhsGAPKs6SYfxkWEe29WRIFpCVZID4AKBCou4qwHrfdRVwfUXZXVFe2RzB115nb5PQjXqOyBOeIm2pR6Cr6onLlxlcrRqhMIrBIRmPdFgBLoPyFuK/bpxVdM8WCPungdREWRM1E4Acz5cX6v0+oLVoQCyTk3aClc4sFrBY+P7/Un1zdu5uWtFu9BVSOpYGWgEgFMQoBipdLL7ZeKR7BqyawCI8xiHktYDqJixCyuahGfpSDr9+arKq/dKldUafTJH0dqX16MtWSq/cZvIhJSyAJawClkNJZ2HwMEwkwNPXjXemtTTAByJHfYSTAGNPMOjdks954SeXeggipUgprrjan0hPOy93LezSb8VataoiV1ERkYsn4omo+PbublmzmoQEENApWEdRabr3a4/XbeK0uTQA/oALFCgEaLUdKbLuETbHksWUBDlHDP7s1/ofktonP2bZrhXCEZxcAEHBJbXmfT2f32/+rtMF6ItcgGKDUYt8Fd87cshcdYNwBUS/FoUERCkqNRAgCSmge9NeVz9kg95bdd/Nf1dKSqOEUEIADfH7VNBt3gu7pgJF5XlDCq8gCBGALImwU//gkJg5ZCkQChYORUqAkoyDJvgLKlQKleuEZlsALbUW2qAP2m8/dNBJ6F+nobOuQ7c9hp56Ab3yBfrqB/QrCjAS2KiYI0TFCiUqdrKj4oQTFTeCqHiSREUhNyoBlFEJoYlKBENUYuRHZaSCqIxmiUqcoqjEs4ZZaGFYHhNESj5NWGNWElbSnGFlrCyECDAGLoDMyoSBhZeFgISMgoYuGwsbBw+fgIiYhEyOXHIKSipqGjp6BkUhKjEKWEJgTv/mR054OyYBRNc+KZoGJmjAdJgCejq8cY/9KFQq7In4CKm4J+MSpDKfDQyXmvxiXLRUycujYqRUb5hjpTrfmqOlHzgDN2x0MIcEdFdNCOlpioi+pqkx0CxihpqhzkizaTDWHJpMNJcWSZhHm5Tpx1QwDU5pwy64pt9Dz7312WAO/RD4m1sYDikFDhWHhJJB0e78eMpUXnXa9BoxbZ9jTrmg/YvnpUDQZtG2exTi5qLwQiwCWozIOPlvOWKPwa0Y4uOz+YH6QzZShQgOMup+gwJe8MmHTwEJLGQG6vagbgwsVDLnzr/Zmm/RrN3ZWjUniPHtB79BC5jB+fX5IQo4FCiOABxI6AK5uhEwsATG2cFZTxmBAC9sQAUF4XUmFsnIIOShRPEqxKIBbQjbDBkaGEJeqgfLwArYbg8+h5/hJ2GHoQQ4Df5Q9Gn1v6QnK+mHuCkIccrgK1Gd2tTHuAmxtB51oCuJ2odBpCKS8SCVWV8UsAyp2Tu6iX5GmWbxBzBJTTXI8Rt5DvX7EJpDi6IKaJ0Um5Ie4qGHuGzznif3qI7BdO6xHJtzHy+ZDWpOk1avOe2n9wxREY+fENqNuWexsPLUfqfWn61nR8v3ncPnxDlloxfOtdP/sofn+S6dt+fzqs6fZ+h28IFm8epu8UOSJbNDm7wgbiaubRcTCDNiGyHQGwZXWnQK81P/wE/2oupe6aQQ4Vtbx3O/JOZuSVRgSwEzNHHDRClWFNUH3cthOpUZKFPpnorIi/Y10KH6dVWTYhFb9TioINvqSelCnYqmpsm1HMp0dco5gYMmQE1H7nlGNyM10sw7XHBRlrKsUDjQ2YWteGqVOLCyJin7ANlkK3ZDLLEXukNqNrjkJ9tX+NjwOqhDikPiQzpW0tvb1FesbKyAS3ZSepCjGcfGcVOeb8kP1TlV3V3ipCEXpm5DSDL3SpJk6AgjGaoF6ZBscClccMfvHERsxlxiYNwYr1zykxm2lhhYosXQErO09tBEy7VavqXmcFjhw2/9jveF05DEBpf8ZJ5mptzxOlJ59m9wMxMCBiiQk+69LctvGqViOGQL2wg37yHXaKLb6ew1pBHW9ocw12Lcd6X1to7YoW/Mw0445QJ9jUT9GPXQ8/a3PhuMziFloAkPqOQ3vCJGGEu7U8MMK2f5R3OJaEjqQAD5CPU2G3SBagSa4UVbig6VUDG+IWUIkJqpW3f8YgqCXPnCF0pHpXewRRXIPfI87yAyQkZdraLYdNvJmo00E6c4F4oDn3DFlb3slWR1acv40LmHUEK/yFe+8qLDaKl0hDnm0jaXp0Fp4AhH5LPWa5QbphAvHVvFk0/5dMY7sUNCYs+nl73RvLcu/fa/fX1b+s38+1/r8pCKx9nGy1eAmzI12w+rr0kHoOBcQL2guJTHdYpmzp+IUrZ7xpv5jrcnlj2e3e1QRFrTysNtkNgWxPP/7vcr0MDrVTnlsBs8PAcesYAkdOEAMjLQhDCygMFCwG8ylBF5iSCWJMayjC0MMs4sy0RJs0VhWAxwBIzQkTUaxthozGP2dCb7BCdp5syxaUpLrIILFEpomQsnvGKVrAzlqURValCbwkoqr6pwsQLSTdgctoitZcBwKxhhpHVtaTs7m2AvB5jicMc6yxcRcMzCHcGIRyZKUY929GMSbKzjkOgkBkpOilKRurQkmHSqocPlW34X4XK4Iq5WAQUrmdItbOHLq6iVWGXVU2hJLeCZNXsLNrxVWrPBRjW6zRvXhA5qakd21/puUVfkil+pK2tVrKF918Zs903dJcf8OBzCoRzoVJyukz7VA54nwCEmuBvQlYLODrpK0HlB5wOdH3QB0FWBYm4i6/XavgPH7uA/xyfMwO4W8qHfe//9wdz1ZjBjXYX/ZiIl6dCxoN3M5Tlb6azqXOe3TAe/AksUg5gh1A4IazH6RMz/mqCme63qqpePHfxdYus95HpBcSm6t/1TsNfeF6xn0jBg2tfUZKkTSoCuUO+2d/zBLwP5DByvpoOtOtkl//Xe3Ia/5SHtmSkMbP2NmdtMiPbAWsSHllRBbqfqKrdcgfKcMspBVahUlarn7M6bxiN3U+0Sd+4Ud2U8ZGdnN2HChImxTxzSNx/Pj2DPHTzd6S+a39Qn3RM12KPpi7JZUxdXW23TrYeDNQCCqTQ6g6mjl74P3ZMenk1Y38jY23zn7PE6r8dMTCUB3CuHHUC4OFKLsIUqh2d4n4ezg11mPaqcclHlNcooN1uFSlWqZyJGSOYQRjGp05MivZQnR8ZajZZBhuQaOG0Iq1/0M9VMraTdRX6/giFIP3dVm2UKHRO6YMK++OHI1SM2VUGENUpoLAw2Di4efhIMjpI1ArEdhcbCYOPg4uEThOeVvCIXVB5lXmC/QqWKFCtRmpf5tXJ/V6FSleqoYWmmWrPyAUJfSX3z3aAf+U/RfhH67Y+hNPzGXmxPyDdRySJ5Bnm9h5fFFk49jXmE8V1dUeMAe/zh9KLBRApVpTyp5aXINVweZV7AVSGqIsVKlOZl9Mr9U4VKVapDhalOvQaNmjRr0apNu47UOWryyDxPKHrnJqyO55px48aNT1mzAyIfhcbCYOPg4uEThNBWopkIFy8ijVS6DJmyZMuJXLPlUeYFIhViKlKsRGleZqtyQ1WoVKU6aniaqdasOcbz/8SOIj+hwkSFcgTUqPk2aJ7rLxRBJh8ldfFV2Cg2C+ZaOvY5PD86+H1DiuC73gUUev5/0mEDfvMVxpD7zaj7hYXuA6IfGUTDcHYYUp4NIaXBLqhj3SHFLqk/etMDBrhvJi0AKWOj3judV6Az7UDGw27QwvskyJA+awiU8PiOxPloc01GQA2gS9AqiebyjBqalJh3/1uGLAPZlvVhWp3UGMwuB3vrvVLHNHCycx/DXrF0dj3FuKHJbUv6NfKRKRaGifJkkr6P2yY3DeXeB+4mdNU9bKm8qBGP2OrRYRPaC5sz9/3sVSv7/0uzPWyxhZ9nZvXOAuYJcEc30SyGOEtx49n/3EfAsv7/S9E2GIOGDXouU5/C9w8SoM70SLN6bQTlFHpFOW3KpdNp7vxH1PKDrHpVPAGG+jhiMBVJVQXiEzGi8lYBFGOCvPx4QVFuhFEfSAXb5UgWFjs32Fs3omZ++ueO8kIWm9+3IgXtHX/4leThv/Rl4DnjgVvoHguJbwIuzc2ZCbcSvevmYf4NjVn3NxgmasOYZvYstI8FUvShLrb2davprJckWPnUWrfiwTJJCOrXNwKsJcJV6SSw0shnu2vfjOmV+d16Sc7tvLC03fA4wPhFNsqPoalg8mW6Lw2JyWVKkI5tURxxIi1sNwuH//djwfem5FBZ/MrXLachAw//aoElbw3w/mGtfFd5L3uHIBQUlRGmJYzhNbbaDuR0pqRFl2+gPNAuZpYFeGErFrKXwNlKLgJxcUOgzIsH05gRQmn9m2qJ76cpxoZ3U0BsvFWe7hzLeLO82z7LdbDCAdHAx95V8nSaH9jyhP8YLn7sNx4PLPP53rc+EBQJ1ouFxOqgjZlAFly9Ft/5kc/wWUuycDck4EPncyP16cnJcm5uTaRlhTsk6SCzkOtjA4wp4CsEqu83Ch2oRe5zv8F7zf1llDx8a/gFyGaLJCn3aLqPqJY/Sq4Qd9Mh3GyupqDGul7+0Ieed/cB92+fvlh/ckvYpeoY7aMYq0CcVufeY3+SEqJZ8pSCq2iUNla+sb1mxqNYunUE/VNvyj3VdGKowWXsKrQlx4j7XTa2bbj2kM2tIa7mJxBeAE4EjlRJPtIslYuUxdHnrjrBz/nxFwNzqEBWCy2k69kw5Bmvely/cONeCPLJ98nGVq35gYx6vPtHv6j14mjHyRp5jcduiTdbMK03BWAelvCafxoZ49aF2Ratgqi1tiF5unBsOfeMrNrakcq8//armbZRsSBsiP7dSMsSR12XCXWZXs+r4jsvetuCX9znYHwpiUU528sEkRfTOac4B2aZhy/Dqyo5HENNhlPwjY/3i2cNewPI7T+esn0JlSOXBvums4sa9rSSHU+bysFpM0WqMWVmZ7gjk2aCyoDhOrFD9YEwiwGbpvTr6HHD39W7qhn5QPi4dqQg4oIKAMQ0uSQ/XPyMpNHl45ik3OaUz4C3JWVNqW3djXHwRx3TpUquLFuaQbW7v+l3V3Ap+RY3zGXWS3VpfrUb4xdWS9w+9LXXDtH+/EQzZNWiQav+9oEbveNKXE6/c2Fg8GTrQKqnrkEYj0zXvqOqR9Y7shfKOfVmSB96tQQ7fWNEsZafWB0xF/VuNbp7cgxvrpfWOvbs2sYqMU1wC9k4yw1urCBGHuJHwEsekUIjz7i2VG67pSHL5a8NKTCHuVyqIXUzTo5lqr1NIDP/dgrl76UL8rv4IqoQ8ASwFmSnnX43w54UXidD3vST05yHy2kDW1cEGmkTrmUPp1Sj6epbHEzCLLGm108swwM/S1sEUPRS5U7DMujnLpUwzTXz63O9KKHi/auOcSpj7uHliFjktvEyTlDzL7O4wesNz1S9HpxRDXPyzdDDu0HvIYuXNZFYg9n+sqwCNj94tUVLWiVZoy+LQ9lMnmkWtRIv7ErFLllh1mzTWA3aEiO01msD235ZytQn8I72Urfp06ZiDWTn7aqFCR8aqyjdODaZQFbMjEoEiS13RGm1/RdaydtjG8/tSLcI1XrbXS+tc9Krw6tOJSs7gu24YM16xYd1oGfPhE0bEiNCdz3Dn/rZX/icY72eS+jm6Ppjx+0Do0EJKfz4ctnyq1Jk1O1YQsKm/6DtEG+SLlw1DLtNovf+oRl/+dBGw+VPWgc7JQdffHHJU9n4RVtW+g6pn+/1yHh7Vz0csQoiwC/m2Mi+Dwy12Evs3Aj/8/2tFTceTDnV13U8okv3yiqeyYVvcRbJwLSoFPpVlWSQwual2dbs5Qw3VGkusk5mdmtuapvpuLCm2z5orEpI1fNV0mWQO3jBOxukpaalLGRK37qp3m4HXS9q44uyTOT+CtsdtQ5L5lpj+MnyKIgiTNRb4TnKF2az5FSTF75sCX6FNUFVufg0m5d5/0MnWzDb8jFmbZr9KL3dVU2rQb/XaY7BafMbEU4NPjMcZ3xuN06Hf+258PL2MZHq9ThBpe2PzrX/8Brv6XniNYkGLuuQENf0OND1n56WBWfnjd/KhE8/+tmiw1231JeBNUDat4l2NzcPHSQ7k2O1q2tmozGspyfGZkz2xqx4NRn9sa7y5D4k3ym/c5FPnvGyM7poRjoaCWGmSxPbY/mCFdtoWKzUDlnTbiC1H2vCa57rAxhCJuEbn4zYJYDvpnP79/UO/226D0Y91A5+SEj+08w1yGwgtYw1Q5u2b3+0P2z4WXrQmyMAXSAzrZCpEaXzLhTLq3gi8LtHAP89jrzsu3G7kx3bbM5HE01uX99sy2IGe1EW1AKX74qVtp52UIIDiK6PBI+aelLcSFjhpyqy2x8e/km7CEndSEhtKlf11P89dNs1NsxQKeUHNPNU7N7z0v0oUl/910bwDVN2MPNupGW9iQG90gDj5sumLNv+af5PvHoLP+VMTo0mWXq4wDxWg7hptuBV0GzLk2ZLjL5+imjPvvq4ISFoZNbjupHNyChGVxnFvmH1dwSXZk1CzC2trOShowk010j/FOC07Z8IggEk4ITh3klw5Bh5t/aG7f4LvAx3typWd4jjwm+tDis+xqjxdlXUpuYqffZra6GrvBySXf7pC9+mLaCsF2kmSARw2I4Q3XiG1yT5OE3tGhP+UQ6xrZnBHdEZs1d/tzcfCwxQZ1uPoZlJteigvAwUmPBr9Y+AqMoyY/thmZuDGa84rvS+v45uj+/2NtPwCMkXkYUBEz71YkohgMd3kfEhgBjSGMdkaq3xN9269NpjkT59VjrokFWOOmHNN5LZyDb1fR2Z45zVpW8Yc3u6f/KJujMfu/fU2quNXUlvv2TMu1iXfvrqsE8YIAQhfIo2PgPm1FmyYciBnJS3QHbhsKsE5el7UWkXAcTrSU6xl1Pt99McdlK636BSeqxJX3amUKW+opqum9ck1U+hxm8uM4eFtvRCt8xExRRTTDHFFFNMMcW0Mt1YwWBQQMAiG0mDN1+a/AXSNVYiA2mUjIw3nkyBBawsski0pbrF2GGHLLvsku2wI3Icd1yef5QOOovJnsEqL7nO+zXrDURBQwkN0YKS2FtYFk+Ly1HVkiaqaVUV+lvdkKHWjRAC60cTGjZMfXFtnM0obZr7BG2Oyu6tCySqexHb6okN9Q642r1+f+raQh2WCziFYrqWBwRmahOOxTpl6tYDa0oLc3PmsbBkM1v3PeDuY08E+txLIb73XrgffRbhN99F+88fI20TcNQAwsa4IQgfExdNxByjjMo95pjKxx6bZ4JpVKxwLq14hv6IXkIiFDUE0+ETOvQJ80yo1Agr2z5VyJYHLjkvJrz54FHwxefHjyBxYb4gEbgixRPmIihjk9Ukvqm6JKl0pcmhL5eSgXHGpfhwYxPMYKIAkTARUmWETZWrZqbGLOY5fXiADp1sdCFB+Q1rCxFFfsDXYlhhSdzeUuvYWP/qjjbYws1W3QL06KWw3R5erBAFr5Fon+IK+x3g7SB7OSSJGeb7OOoYRZ7B199ihRPs76T4ZR4CnEG8iwGC3IBt3OQgt56V6La7wtzzWLgnhWlPJTZTMcpzONYLGZm1EsTGeiKpSVI5QbKfhFP8Mgyp7cAGadn8DviLK2ErMacPcQ5JnlOeueVQuTTySLMKaVUp7bzSyVcjfv5xQFXiqtUUWi1iZ7I4mSL3GuRRo9iZJk6my70WedSqmNpkVYfkdcqz7qL16Ol5PmexSZbND5K1x9yEmVcGGbZkVemdKArupOI7pdGtyLnTGtEZRXdWEZ2Tbefr4Hvf9TJ6A4X0phJ6S2N6Wy69I6feVXTvKbL3ZdsHCuxDZfaxxvaJ4tqSa58rqi9k15fK7HtlNhlXW+H5CEK+9iJJ7bvcuVm0o0dRfTsICyFoAKENQlgGJex7CMJdJ5zwEkH4iSaixBC1xC72pY6aiMtr3KXES5BjNdlNCtGfVz6TJizUU+JTFFPxKb0Vy2cl0ptNwkqqcdrnWCd1zrjm6iXL+cNc274ErAoDayGh20JIMQg95UJ4xqYjhNTUQ/NdCFoIDi6+EAJCImrEsetO6kxPcC9mxGs6jOjGaPYI1hv71/ZRO+zZ7BYcp7lfsANC2cep/xbMZZEJ/j/DyVk3GPGXEyNOum9GlP15JmdhgAQpo5hkbmWu9lsv78q74hlzKbqJJckgGeaaCKuoIqyiaiFVU1dbo37L363EEiXi2KLh3LPYtbUnLp06dm3ryLk8YgY5+LhySbEJ6b+1AZ9vnuZwPHtvGU2wrW1twDqoL3RrAHGzm2Bb2/KAxRgBxijwZjoR+ynG2PDNdxuwKAF2CXE29wn2eZCv2HGGCYAb91bKNPeEBuHenXvCPeHeXdLrBeXFuv9ja33VHIYYwJR9+zmDJMk1VZk6nZZYb7uD/nXJHc998js2akgvAI8gQ1Vw35MK+UyTUfzZkaCjto4e7OjrjhE75202+LxmHHgKlizPNOXqdVlqgx0O+c9ld73w2Z84qCljtMGQVONrm3PkJUSsFErTVWgw2zIb7XTY/66456UvhuKilky5MgnH57YwgrdQI6Ua5y+VGs2x3Ca7HHHKVfe9MmAYDbVhjvaiUfJl8o6vbcmJjzCjpRlvhipN5lphs92OOu2aB177GmCPOrD9MtnH15ZxphBujHQTFKjWbJ6VttjjmDOue+iNbyEKUBdOlMlBPs2KC18R4mSYqFCNFvOtstVex5O5hz/y1vcIClEPvlchE5mx5sqvWPd1Mk1SZKZWC6y2TZ+/nXPTY+8MRqEI9WX1yuQjX9uGG39REmSZrFitNgut0W2fE8675Yn3fkSjGhogiDJZyde25S5AtLGyTVFilnaLrNVjv5MuuO2pD37GQrFURFEmN/lddjwEipEoR75SKh0WW6fXAf+4qN8zH/2KQXVpSMjC8KlDRieP3k3eFH7klU8AtFjxEn3LfFGhCYSCZg4Hzx1p8zs2j8nCxYPkKVOnTZ+xOfedlojX7DhykXdFHnnhnS+ACftZtSWMOAmSpEAdyAgWbjpfY68JkY8gVJHipcpSoGzWXKlE0qRDnxFTFqzZceRi3l3KBvrIC+98AYBhxI53Cv+WuFJJclRoAqGgmcPBf93ffFGS4IcsVLREkBxFKmbde3WJtugxYsaKHSd5U+yRV9unI0UGgGHEjpcwSXJUaO7gXypQ0Mzh4Lkj8UMWekb/vxYSQXIUqVCnRZcBY3PmHlPHlmzYc+Iq/xd/4pUPvs3f9/aEzWkx48RPFJwCBCTdMGoOx7BkxxmBlwAU4WIjubk8Q54SVRq06TFkwlysNI9vOXCWNyUeeOaNT374G/TNF6y4CRInQ4k6bfpMAtsCYc2BKyIfQagixUuNrBaKAmVqNOnQZ8SUBWux0yJx5CLvSj7ywjtfAGAYJ/tdTpvkJUySHBWaQCho5h8cV7uSeO5I/JCFipYIknMW7SMuWSHUadFlwJgZSzbsnSeUeiWH/X/5fzGBmViztO/U9b8+kl7dSbgvy9MYV/Ep7iRc8DTGBOfcS7hn7VVCjbhQVI1ka8+vvPI0xhhb7iWwtdfXbi+79NI2muWCEU8UE/bTgPdeeuxu9Le8MQO6tKhToUgOSGLEt7JIVEF8ELlyYA3LJIxanS4kBAVwovhxYkYbsNYG+OKdF/mo3LlwZMdarLRuzoQhPdo0qFIiT0ZAbUgULRSZHxJ3eDjmgW0cuKrgVKyAjpKMACupl1sGaTXTGqbVS6j9FiBBpaZOAw1/dAZsJEinlK9IlXrt5ltuvW57HHXKJbc89NJHgwHOohgKBhmLiJyOhV2FGi26jWg119LqxsP8KOOZgmil+Mm+mtFIPSpqqaGKinZZzL2qZNMVOt/mb6P7evV2BmJKjTMhNBAjIpMKyny03tFEMZs+PvPTg/sBfDK0Y9A1it4aeN0bWDwISvN2TcApLsS5vzTvaWoseIgQR6nEZrscdsFDrw0YyimCIaiYiIFFR0q6+Tyia1QkMyy/M0S0GJCSsZ82Dno8TaH1WEdd4VpLoWsSWSuze3SkSxhtFujFBk4RR5RvLx90MWLESLTFLhTM+BONR0yH0QyRpGiKvWyq9MLJnnj0spm1LGdhSM2zCan1cAqoSfsrc9/Uvhds3XL9KzWt9cBJCa42mNU2UraUpCyVH8Fj72lbh7aJ1MWzHVlwo+Vi/BQykcUvdf8ZMkyEhBBCEZqwCHMuGTRbFLYfHN8oU//HcKmJyEScTQCykEE2cpCLPOTP6l72ile95vU4ZHxCYlIyCp2Smpb+rTYECoMjkCg0BquuoZnyavb2P3RAB4cn6BL1SGSKPjXldqfcUi+JS0hKScvIyskrKCopq6iqgR2omm6YXNw8vHz8oOV/p5x2xlnnIuMTWbRqq2269ei13Q477bLbHnv12We/Aw5aZLElllpmuRVWWmW1NdZaZ70NNtpkc2Rc4+hC+EUB53vmeUfiF0f632lx4C4npzIV6jVo1qJTj36DhtSp16RZV6T/mWSFK5tjRbP35M2Uet66kjlXqg/JWe7yJp9iyoFTTT3NXCuedu6ylC7Sf4x1PBf2rw1P6K1xY+zETfSMXlfdWtv7fl4mcO9rw74/Te0Qh/cFj4PWo2QvtNFvgcR3oID0Qw3XPN1cZtIPVB/UvvYkRLZD30eSkKEcPBnqMttCS623wVYHHPWPf5110y233fO0s740X/30K8DLOJRxq+BJilCrLjFza9SkU4ce3fr1pUeYRZWiCRs06tIZacGT1yDDkzdRnXoNGjVp1qJVm/a5Z8lakiOS21sqG1ZSyOL32mvPBBEdh4SyOv+7O6TZbIutttlxt7y08is4x6PhIosgKZrHvMZPHMwCFE5s6hJBbsO0bB/7Wr91xxZlVfKeV9PFVrsoq7rHvS6fWTI0bqxNHxnMYrV//uWHN15x7JSV0CHRDI/RECBeyQgptBzkpVClqkQtCiqurKoipVvANjK7xY0wytYmmGzIZW5z1qTF0Byt0Ic/ooFHIeoBY9T2xSnQJBztcwaQepwB1NI6i6Qz1S7ZD+wJtdvhPbzjZ2Za6zbU6u2a6s/SGsOWmAPD1rhDw7YEm6E7yW7oSXEYetOcH+7tGa6WVdYcz07GP5YsNwBpkXRs/mtku/K8OwWHOtBsd4Fvp+Iwh2V7ivw7jQD+jmd7SwI7nSB+JrK+suDOIAS/kNm+itDOJBQOUNn+qvDOIjR+pbMDNZGdTVj4jckOwqI7Zwx+Z6Nq7Av5qxN/AgkmlPCjyDX6TIzilKAkpShNGcpSDvMmW2pJkiRJ2tObjjRo0KBBgwYNGrQTFjVa9BgxD3mtr8bJDrWoTWDBYWPhgayPQ/dXy05TVVVVVVVVVVU/5IDSbwf736PqSXlb0j9PEELvaXpMn+gzfaGv9G19X/XVSDN7938+Y+zQP/hvCwoUKFCgQFF28933UCgUCoVCodALM0nOtzEwlopuNfLWwwVUwpMoRcqPVxQN2M5F8GhBtEAklW91cpK0vn/VK3HzXJZC6/GQ1ptQn0OZIqDIxiEgkUtJwxBS40ChQI+jBkrRqk1Qh+6hhhk2hHogIssjCB2FMJUhpEBgVtkcCCLSWYggVBAR7F8EyQytgU1p8rHYRD04NvBnzN1sqESe7YnrOTzf8yYDIv4B0x1qaRG0sXJqRnY2J4g0JkXQ59Lpexc56Ic75P7bkm9h85Z89iaNOcwW5zqeoT77PCmFm0dWGkmZeOKJD+w0YITkTGcEdyAOYB+WFS4Vd1RVRIOju/UDMgLDoiMwam+U8fhbMjlSWI4me/LKWHLUHJG83iZxm0+SLEXqmSOIWwGHGd/cXu4mA15EMIhZoPZOWu2IuWpQzaqFOj6FHwk8EhoWHhEZORVdiCTiXoR1OJwjZ6ZOO7Xkif7gLQwtTTFKI4xthSUO+FJHHGWaUJg7S9zSTbfJ3IvbeOIpW6/EPsWZw/wLjGgHgj1BkA8uRaEQvIpB47xzcBaZW1nReVQUW62WRo1Sd5T0SqXUp7+0hjWX0ZyuxsVaTZCJEfEnLWeapg1tU1mCKs/XIURUyeBpRvuYONxHhY6AjmAbsFIYZlJtKHYWTRw/01TD7qYpFNW88G21SFtpjacoeCQ0Z0Q1Z8IYn0sCXk6V2zZioat1yYHTX6+bq4ovN6ieQ1EAdLcGzbPorU5+JS4GpKR/A/n3fhLG10csTUfUom0ENnzUCGsgrHvnb41g+Ep0tzZwvQAsjkbwUqM7OZ1KA/YZJosJt/2fCX0/DAiDh0WGIcPIYdcyxjJ+wSRgUjAZGByGiGFhJBgVpgUzgJnDPICNxyZjcVgiloHdjz2KC8VBcTE4JC4Fl4Gj4XS4ClyA8DwBjf/A8DDYwIm3NXrzYuC3z8/pTbg7U1PkMTsMxaM0yMimDxILII9vHt9//Pgs9XSg/fFQ81U3MOJ/+99OXzuh3X1UkBta9HNGHfmWPfLI5F88QD8/PPzzR06/9Gj676fgaejbR1Lg+y8x+tENgO8fhA8DfH8vxEMPfnhwBHFUH6s0newRmgbcnwbyJLNvPKjXdiKo93dqV9a/+0F9H9SPe7v3+7iBDYa6+vM19Ne91RMWc0vS1DhsybTHV12uln9quoo5lGplUzLs0oZTbu4C8pv3OgxYsGTLgSdvCkGCRRorUZI0uSYoUKhMuZqGFRiZVJeMYh54l0LjM+Hu0+gnW7oiu7naY76pI9hLPs7Qva8VNxvbrEpGH1lg2pCLXwJP1P+I6MsUj5A2Q0aMSTgawYkLfWGiRIsRa+RSijPRJJPlqzTek6b/Pw2tOiywzHIrrNJrux12WeKUc8674KJLM+ya1954670/XhoGjmZcLQTaqZtDw1xa5tM0j65F9CwmtZqpNcysZW4dEyvJbGRlE2ub2djCzjb2ujnbydVubvbwsJe7PnL7eTnIxxG+jvH3Nz/HBTopwAkh/hPutFD/i3DGKJeNdsUYVyW4IVm/VHeluCPdfRkeyPJIpofyPDPOC1O8M9UH03w03Sd/+WyGL0oMqjKk2sxCYFYU1EaAr41Ip3jXZXtM6XkyVFJaeUyYwKKGri8wmZUHD43lt01zrcg3xb4r9UOF3xX1+VnJK8DHr8q0NhUOmbuoGadf/kwrmGXmMYaKyWBg5DsE8NpK1NkQVlj8nGAIF+T32mgzEmakfPXqNGjSqNUCyy3L2WHb9Vaccr7igkueN15na0utc2FZP9pVmO1Jc4r2PGa4S08obqQwGn5Zjg8y2hhjjjW6uFwa8JBrZXGPsGyLk4wihALtgYYRm2MogSh1KIkDLnXkhqF6cY7IJr+APODzC6haUizGaBKGDLU6slMAp/ESMmlfMkzCXKKNfl2YUKO7jVUpsukXchWR4BdqFZHjF/ArEFS8s1OP/Oku7NYe7in4FWniYj5Ttv2eS/8d8ec+/qb+/9tdr9LzyhTlxbbiz4l2ZxqBZt0EmNTlKLdBr7n1oreIm2PHHH6ydRioIB4KhA75TRO1cZdGudH9G4uqBONOlvweL+we+fkC27vpVS3/rqbyg5iB+OiHCixfwD9Zpjz75Xm6ztFNmCJ9vCZbvDRlRKqJHBhriQNxJ4MOJAyuIoF5Pq3IEAvkWagB7bG2cKtwfSZECC7zQt/lfptk7hyBbiSzH1uK46OOWy0Gx6J5YHMhwb/zF8udB/j6ieuSMB+Hld3xxh9ql4XWrwHhpzlTeoL1ILPErq5BC35DkX51ozDJ4WRImXlLzXTrty/kTfpi2TfHe1pVOrn+OnZ9o8jIG1uOhCUCc/iKWYHANx9Mkf6KX2DT4cDkZMb+ws/BOR9Uy+ZANrqcEO888XJN25AyAm+N39qLF6FMqJoXupSqbVSSO0vugW4OZhSnFXVgCAqLLWhww9OIjmZ0xtry1ryilDUk4B3ZKB1iUFFtJuvojafMGy/1vk2sPpHy/39Kz6tBo0ibPmyYuKVe1CqozjwxRiWWbEyrogFa7HVgHQPT14pOQLhHiuRySqp4Gv3GYwE59fc5uRBSponWo3JFXBgEM7PRWVPCoXttjQY4wUZkc1Nwk0usmcJCcFzqFmgl7URdG3BtWqeSFk/NsraB+GS8pCx7NzCExcBHhZnVsTch7WzDWyNWX1sWBcjcyvhzjbdiiIYCeAIuJSZmWOxRhhHsHRZCYCMsZonMEhdCqtQtGDEgfa8OJoHMMsbyjs+iHuhTeo0cHUBy5KZf3t6yxjYliXEJGXF/l4qHAFLhGLkWp4PN5WCHhSLSkoCaOSbLzkGx96S/8JvesG/lStWPzdAAE958aFMGHGuIRCSEpiLR31wzkMiAROK6oxD2WyxFkeFsxzOODkP60dGLlLlDOK+slDJb3Cicc6UHJW1SkUsjzr97609UiDNkpL2K5QknUMEZVHEN1HAB6rgOGrgETdwALdwEbdxqnEJUPyBlvrzjBTXpoaFAvVZ/FpNl8ozzbCAvXyxHwaOX8SapON0SzZVNrMg72tWe9nWgQx3pWCfaeVsXQGOsYOkfWMnRl621r0+KWmZhr44VMpQ3VH+5To4AjFGRLRJnxKlHTmVMycExuWnJ/lBmbYPxqJ/1sDj0b7WE1hPZTAW99RT4lOuGMxQoQXY9geT5CEuaI7ITAMD9N5nJp2GxnNfJOdBgnHeeuFNQ304XqO80FddsDlKUKBVvkFmWnqGWHqLbUNoW01/j+O6I8AfG44qj69YhLN58Lfy3IDKWO1bYx8zCZ1e2mg57h2kRgSatYRd2tajTclAeqoBww3zvT8TqxB8Lva5m6EjX19R52U6bSF2wQ0Ymo2RdZYKnIzskDcHQCnXGVhEbNhpigpcLCXdHQaVPklGcMY3H5qiz4mxeIWsAtok/pWSHNOHWLfqQDB6KlAHcaG2weNFTXYfSzn6pBhqROj0hXpqZ87IrjjaNGgH6RVSB9muyuSCkkuHhkT74Go1YU7VlkKcaEctKC2IWhy2kBsNauqWimGju9kehWfGWAxN6NyGLW6Vfh8LC1AqEftZl+g2zpR6N1nkVFnqZnd8cfMtsJL7lixh8me/Arf9a4D2485RrY18K05rNj5I1VwI85pDZpi0pnY90DVls9DypoEEtM2n7P0G2B8yVR92cfyHGFozKg3zYRRuZMdZW6qzmETxtxLanEPpZAG2dlaWlJNXFx57b0jrv7NC4qRsx3Xl/t7xoe4kM2rC8IOpVnt6MYD8jZENBjVHqFopyPsCYYYL4+r1Gx8oAJ0lsNI5gzNYIWByOIL4C4GQsAUcwdmsELBFH/yT6TwCO50OwZLCkdBEsFSxpE4BYOlgyugiWCW5lXc9O9OxYlJwOguU6lrwxwCmmdCzjOgg23lET8mQnMDGCMqmLYJNBTUGBLB8sU7sINg28nU7/ARTa01+RvS8B+pI8Q4HrAolPFgpaFp7ukB5FYFYMRskRfFNUqX1VZt9NOZocVTE7RiUYVeCquiv8VGM/zbSfau2nWTMUKjDqwFU9FP5qsL8a7a8m+6t5hqIFjFZw5ONtz5v8Qe3H3CENP6cJFfqB+X3JePQjyN2XM+5TzeK9W0t95geE0+H/n2NHXfVpureC7szguJcBLvoL8I2c8QIf/QkMUKgfm9Zl1lcjJr67CJKhNJKiLkBo5c9CfgrIx1SeoBJuZI9aUcvnCUvJrzhq1Yg6dHaiAipb3MlB4YVSWfQ7/PDlyMv43orqGLbikccKf1LEx56A36MpjKGOqMJWnxeq7+KOMbdpiqNm9iks2eNGM8sPgWVGg5pS2GRhoHCyCJYGX4kXMfRVbhYn5BAriUsP3XlwNG+fjYEJvetigEBaGOCtZgzHO9CA/rPoBS6I/HFxIUZyE4LegBGDGe0teyBpxsdABQvc3I2Q0DmMAu7kbi3gCYp6QVPQLc00WoACAmkDY/OJd5jBi7tNMsdGIABBMugzngkSpdgPE7M2lwHkaeSAprRfQdR7yRXvR6IKVBccSwKI3SqHBgoIpA0McOgIix78HuyNDeQ3+glOSM4NJ2ejD/Sjfu57DKuEbGBIH587jstOCBwA6Lkk5UG72Jb5iSdMNE3uyvJquMAmJPHq1KPWMQYE0gbG5hPvRhXee819SHMt/ao+4YlA4+VJHxOZehAlJlIVA9riaWYFtwy7xttBayhb88OPbMeO54teyC7mOF+aD9Fen5aFy+sEpJT0yJ0C81LbOSrmWR0RZ9VjptxVlmNAfmwppGSXYXQDOsbYnSgsvjH8I+ZRnAlHCj99TLgdWniY7+H1+WI/t2Eanc9fdHV66nxU66kYRdnMJVM39ET9er/Ym0fRUBNGxWR0dq+royN+b6oSZV+F1ggho2QhUb1zwAPiQpWsHDFeGD9ZwSgntmdWANwde0rj3DU7tMP1q50ttKCgaMboWAMCacM/wFGxGLxOdtmHn4rM229wU+UShaGyRZXx9Eb9hs6XCIVuvNSmxeY/5oc2HNl4cjh3fEMMDRKsCXLPQHleL8UaWbs7RLl4UXEw52eDdq8oRZ7CR9eWgGDDatXzfbW1saFgTXZgwO0f1Kszw7rXGl7jHVp3bMCdlvVlsdbp4UMPJZx/Uco+c28lUrgp14DSQ7lbChNn8ioR2r4ErpIEKkTUEelYEd25oZZBPBW+uzsFv2AX7hHZuUZJzqP0jWPbok5t75Kw54OFUK4IcfRuAqy/CViRf8QMkeeepBM5lIugLLFS0vJCcHm7YhBCqDndsZx7tedxfzNyKr2Kcg/wTXzAG6ssSjo+ueS9dCyUEMvKGY40wLxciOt4pfNvdbHv0DRQWwglY+7p4Rqbt1a/S0Xv7T3ZBwo1tezYiBTiH6I8MAZKeTf+QRI+7ctBSPbRCZ8EulASQK84A0h4Qc2D86OUGGRfpJwJaFos9I0RlvPq8ews3ooZsxn2uUH7E7YnRCzLGmBxxK862qH2K0fzGURyyPMkIWGwEhciKSqjuDqnBGJGtyF2v3t6mECmNwgJ0FgQIy5Q3y1j38s+56eSm0BwRo8MLn0CTrMeHBRCZgu6/PZC8FnKD/hiu5Y4sDwbnkScoo63YpDHIJBYF2fY2mMXOSPRKn5guXVALfLwYklBHVB5IiqqUF+x6hhQkgcDMGoF7sCmysLz53dQZ5TyJNmw8uJzBZFiFjzisSzfGGRotiQSFURriphyHVS8wpgrviDT6owYCdkebPP7NixDykYsO+5aIxK+URyZkEmpiOPVEMOXb36mMQMHZu+OchuXQl+uW1BlYZHleRlIuS5ygGhUSixZgkE+mDdPySRo3QwMQXUGRMyAgod+yrnECS5hQcEzgxYW/ChbYBjyWA5dzsFXTfz4jbehFnrmYffeiPPEaLzn2dI8x5Nj4W5Zhwlv3FzNg3BoK+faTb8ineOISLxJ9Fbx3Yyf+IAwvVVzPugdOk2OE0lnylMBw5xlNyALN/igYdDrRSeMH9vKkwE2a9+SIUu1Kwj+qyjt4YHClk1Na3Giiw8xAZp26KGo52Gi2ry8bQ/pGK4MHislv2X10aM8cYR9Elnwf4uX3Locjxl85J0O+usLCKXtwtyc5Ze6+CHnRzwbVt/dM5+mJrNKVyOmXb+hP3+lBgof5YfG/ZKarPBFSoDPvrjPYrepy4a9hxKl4dD9nFPgQ+pUuy2+oieTqCPBjRKF3/TFXCZxr9O8BuWrCItq8tqX/MKS8OZxBA2D0BO7jTbValatiGBxBELhcijSFfuH+1XOXPapORQVEW6U7hCTiOAsX1g2CV9/0hjucTeKR6TXvTlN5VOUa2Z1ClPmlq3Ouh/NegZqq7basBLbiQTDYsfBXWissrmHmEjdAJZpJjkbry6siOLtrH9mxxrQxkxzPal7cijB6IM4GJ4kd3vjvDUs+Xxjo8JW4N6saUTbIR0D/raxdc6I/ckCnZzdJmTKP9tJ4l7zJynGx0B548fb6uJtR4mSiS+jLuF2zNNSJwDrEKgtq6VLrKN3iIQDcQvd9nd7WvPPsSWdZzy9FYxZivADQq8bEvCQMMZcbTcV/RtVTh4cDlbHFJsD+n1YXRg0pKqpHPwDccqps1jQwHLeTqTuWfHFDXVXwSH7w6Amg4f8eak1JHxQ0D06n+AQ2esEzgF0ljqzYK3p2Fle9XSpYpqDTeYL+/KuoAgfixl9iEGuhw99qL7H78L6wZBnNVl31eYoeNeMSmYnmQvilnwheFVDkPBFYBe6MAnH8AZh4P/E1B7mn/LF7s1qQs0Sj2ZKXJx5UsdI7KIhCgra4JiuiDMHgh+IygoQ8dAHMt4gIuKJETGghMxHAIhYZ7LBgTU9ZScxUS0G1NaelYtt/zwiR2Wf7VjppJgrmUEK2KSIbo3agEuKyFMkUcz44A9oQMvy+JP2K/y6DSOf0yfIrE2LjNu96hlV8i9Z1daTx7ZISwW997roBNQx6gGPEubrV2MmyiwOaGFHRRgNHKU83nMt3k6beteAAOz8AqezDIpJXf6APEWjCghC6w0KkG076LX5OGVps1Dl0VmSDYN7H19mLz3SecisQYilOaYOq9WZjsAQj269Ln6z74Qu6J6HZJ/I+lCKovgYRg1KJ9YB+xqWVQYD8Qp0bodsFQsVp05Zw4jToce/8hQKrSCY6K6DPueeTTY2DIZ0Ok6e1f8WgdlpqPD1DtRW1PLwkJg+CekQZvnZQvg8VlV4ccJ8hgZGZfFkVaX7RfTjhUqefl0ty/E8choTf2qiD6h7SrpsQFBcVIt4Lq7lWgNczBiqZY0BajYM0RQYXVc7ivikDKbgbapQ7ZZ8wIquyAcF3Y8fouxy/NHVoz4fBS06pTZmUwRB6qxtasMFC06fsLsDiPCbvqB8Y2dOsd2TEc5uKEK7oxyPvdf0STMVc9nETvyDO4HYToRFpYv9mOdytmYzJ5F6hCF3iANkEZQz8X2uGxPaJ08IGGO78hR7pXM3GkZ6Sh8TMjUH8XuiXIvHdI0NxYsF11Eap7/WqvpQQxsctoYpPG62rQ+vuxloPCjwHaZKk8G4BzaNg+hYDXDn5aldKIuO0p7OgfYhGKuczqTMeFVLRtY61ajbT6uJ/aHfwd4YtNIxaOONSHnRVa3oSiNt27eKWiwjr0pxGypLoI1E1Q2JpckY19Cp7GMUIErXPWQhdqVJQIpf9t2ZEwN/3skE6kAKu749fbyUhRjrdnClAo0mINOoweoYsSTNTCJbNBYZeybSsttMkFVGi8Yyl40Rmsrssc/u+gCTMdz4zWTnGWH2bSWLvl0jo6mH+z5GAaHBijXQnvxIdVMr0fmVE19ceIwkWp1IELLaDbbjkMKFcsdpT354RtFdmEnZ2MtuQImYqfM8EbrYN/50EX0aSdvBiP6OJGPHyCTCPwFh/oz+2vh3XXh1ThaigJbzlx3S19M6MiHH4sceiafYMKr7fAAD8ewElpKg9kWd8rvYBho9zHCvdvXln6/ePNTsO9wgb3wz/vjgXH5EXYLObE15+dILP9QwMt04vxuzDr/uf398sTTOcCiBKve7pk4+HhdAIrVj6Mupfwr3qjZeoGbFzsuKm6M60mouLFGTPz51sTyVldDX4prYhhX63YZ9ioEKK9xYgOr9onoRM1zUipmqBK3GXNzfHP3z2aQn1+Sz63uf5//Xc3TsT73UUkGCa4ThSJQr/+zohef4LNvqMG2aVDwzfu4ZAmT79OJxaMaUxZmpi8/zGbpj8qIhbA5zI+efpTbe5JrDS3N/PfqblwWiAjMUGD0cQA0arQZ07IWnKuJoCSq2Yy5bnj8yrG93HseJ3vJE730+097IjwI7yLu0d9z1Dp1uRuWojSTfaf2HfZuKIxWxu6tSjw2voQJzjIgOW3mn+2VmvH/yboSbCsAfX3Osh6e/T7tEVBpV1a3RlvHVqEY2Jc6n6N3OKh6mRw19hh6UoQ00UTap2oEXHhreG1CB0zgSiD3SyIIKHRpUxdwdhdLyFflbBFczFrtdKS+YekKJxKKdaWh9ONFLEKHXkGOxLjXa/HtLawtY9Uyr3hTGy21Qt5GUo4BaYYHRMsd6j1gGbGJYSKcBzfy/ROBNO/kxwUZSYcNNrc/ygBVqjEH/8hA+uUX55PF1WRUX7xGY79OVjxJGlV8dhUm3jMSk166mUntEfc2O/9GnmifM5Yc63m/RT2oPUO1SSGhulEdG4z1DDVq16nyv0bHwPJvQt8B4t32WYgO/Chox5nsJ65n6LaIqVkpTeYQW7y8BiMX4NXYGtt8Z6xJ/zOUMfuGeadgScpsOxizMfkBij1w1jcKSYTzPNC4n7soWLhUReNzNGPOkw3dkeWFX9u/7GQQ2niEVoU5p20q7RLv2L19GOk2e/rGmis0TK6Q/KPvunVn6Whau/IrN+tiSLdkSl92D8RqYGGvW+zAUrgZQNEPNIj9pY+PHLJr283+RqKwR6yhCCZdvoWO5i8jrS9xme4TNYHXQ98Sy9C1bdzZN0ZKHZZPGItPndumJmUnafXxwoVatb+ElvIHTo987tWYhhkNIxUVxsVDoZp/z9F9U0id1B83+mybFmXJZwEKzX2EboI8hJ729qEmxsmO1dmTuGb+/b/aGeHoiMrIvmTi5y080eWWSo5alnyuLNONd6jMENIMD4xqbcVGhfpRFJdRAwRSoaryG0FjLSu+RzeadsiFzNWyk8XkTvtS5UGnGf+DnE3kb7/N3irQuYyfKme4aezopX7Z0J/fwEXqBEjUHy5Cx8MF/JZl+OyC8zqKEPZq6srgppvjgs11M8fk9p2Wf0vua7jed78G+6P2nU/p7h95/sRNviJQNpEw+nS9+ZWr5+y8JaMEp3FTe082rPP3Hgic8bOzAe/F8BFEOj61Nmca0qF4SD8hLFlT52PSEC3TPZBQbLXDrNDDGS9nt7tDANc2jKB46jH4DBYJ+TCaMmsteONXEzVJiej3bkLSJaRT8BZ3IHuGNc5QTgP11Mh8nt52Rdota4XkSSSgx5k1zg6YoTVKa4gZPR83XRnsPp5QnMI8YtBsFvE8FZkOUe7FhZaz3IpRgsE0d3srPgTtY1f5vDIkJoubRWV67JGTGdNyrV+dNrXO7VufjR1p2Kp3NHfwcxSOHnSyUKEYtCmt+dVONOi/Ri3yXOUzXUJPL4MbUoAjMKbPkFklz5N3De0NDSjGaGaTj2GF11pCe0/pH7wSmhgRzqpxxm31ySZMib444bkWu9X2xOWNRc3YfqqS5B4ZjokkcWHnlNJbritmIucZBDwjokwSr0gPBXjbsmOkws/ir20X9Rypd7PXrU+b8tgWGDtdAlc5zDYW3cUzY4PsCKXxh4z8fGh647yVVyNk+5gNNSVSaA6qdWg9qA/Xi7gww5TpGDwe71HuLxkNdUKE6WFQfPD0Yw+j2KZRC20Fx3gAD7jJpZ2j+KamJeLVC5NBfrHjKukO+pGHbaCpHhYW5/8z6BeqbX3X54HHtjhsStnCDY6rc4HH8u8FjM3dBExCuGrdSkZH3jhSCUL9o1nbZ+3xmxXwu5KPZIOh1xf/5bXcQs89ttKgpGXepSi1pc4YmpeJIk7PoA9rSrSCjJv0zbAtOV7UHaoE97OnpAZMNTRlv0FLxULPbHGwod8g24WCWmNZwpK0BN0iHfWE5JEQ7F/roMMPXUDDRQI43vQ01iYyiLN5cf4rIQIVCQ0+JHaaoAdURXAsF/rLg7ixCKn5kVgRFBQ8hutAyDMZrVVOOlwP1gGztCENSPG/i5pr9+SfLP3h32Yc3PfY9nvjfw1fS9v9jGvuvL81i7NL5wtOPZ9KKpt/7KPNi5mcxM17S4XOZOA9o9jLjbighkYoE5FHko7/ZyPayR2Kxy/9f1g9mG1E/XflWxW5t6+znb7Y/Ozg7PzN+f8ahEL33jxOD/m6j72BxRFd4TvtAAzynW+n088RgnTK3UZ6bxc0aD/8gMkWfQYVOQtEoaygdegSaORgqyqf9jwc8l0nwiGe31xu9w97kl17LmTe3dtV3rST/4r6MUYBh3yJ3tSm3erR6cy16yrtuxoG0j2L2s1upoZWxUe9w7J5YdtrHbTHR7+LcnsL/tti6bvdqbznqu+tFvnhivGNxa/Jo/5foSyIv6zIw6+F3yywyiLIRDc/Co9CNEGWQOfldFlHT8GsqHV8g8G6VSjtBCATzUoIoVDAldV0cHYZkb9GkgdeKreoDAa7pWl6ccYg8lBTbMncvcfAdjJr8zc7w6G8SCYWDDGvDeBex8pr51AOu9d6RpoWm4abFJvgGfAq9T1qh7L7E/uKOfYHXzj1dUeMcaN2oLvVn0YyyKJBreAIqhwp12pj6taVHxesMgPFaXuzF1QfBUCYMp6Dl7EQkt8yAeXuDue15e2bAluSKfo62Osa8/JkhWxGlVrNQTjlVjnKqWeooxd7ns+WYAm1Ny9VezsYZHx5flVTWxzGOHECs/KKx1BV3j6frJt0oerT6HTfZ+g6/y1E/Ww/h+pJ+MDFy6aPEhq62Tjhh1wxv13R43+LyWrtxTbd2fGGVtcFaPb64vlvu7H98v2qHnp3qlifJU916DjE1rGTK1c/COkXEFiGRbKVAzoHIPbJCvQLU+1eOCA9HyxEbCIviKDsbfn7slvsCx+3XezpkF5L8q820cC4xT4oCC1EQCyL3rrhd9To/OsxxcBo+q9EFkBVd6gmkdVl+9t1YzwiKq8e0hJVUuDx5bTtLwrWyqn1jUQjruVF4d4H0ZYofQEStHl9Yy1k7vrgaNbHkT2xZedZAyItTa1kpTjldnuLUMtVJH6kzUlSiG8PlrrWjC40iG1Z3pYo3y1RXgdQt+UyE543UrWKfscCWL1mqx0v84TiybDmAyNMdS8BA9B88spgGpi1sLKSAKYtYnizyo266iZrc31uEtgUbaFu0CRfr76jL78fiwWJQejftjL9tZMieiA2Xfse4OGgYkqjFOUPAs2tBeGEr9efWloOlbCWO3s6FxtuTO3S/Q3Ashh057+kEJRiVNRvz7qnHFnlZek4ECG4k3A01DUZjOM3JP3/Qdw1l8b1Svj4OKpRJs5Jzx5fq6Dvb+fX48DNZ5p+ZLYr6xR3HsNN4m1GhWZQbSUkZpzdf5cI8FZhz2fl+9fL+jC9y9YJ8tEqE6Jvuf7vjNz+px769B7WBbVi67ENmkmWoDAk2ShbiNljBDdal/PEvYojoyUkw14/VU+aO0qDPUqfvUKG0IxuI02/Czr35N/atH5BIaPzRjR/j4qEJRzOe/bVCxD33pTxy2i+NuTBhBRmjgPFSu55+d4ulcNt2OZoXf68q02KvZXW0XPoijpYbfXjj68SbO6Sro+8M8usZlgoX/eJi4OLC2XHVDi0T7VzL0U6txW4BFUU401N2dcaGxFclwzzAcECH+4K9QpR5FdReUaG6zd+JOXr7VW2wOZyxIfd8gbMd23jO4HBukQTCu7boiuDOqXRww/Z37TJ2nYqtwokD5wxNhoJV9kDXZ/gpY7Mx/+IRbqfvkCfgkC242q7vK56k7FxP/pYSjE3Y+Z3nWXLXk1c/MzP3jwppmo9b6nzHLvXcJtmxvV9l4HTBcP5KV3HvLmxU22porEprRltzw9CLl8ovf/So4mFJuPQH6ltNqwcX1rhrBxdX0y4cWLiAtXIad8Ba6w7VDg0z2SnHlH4I5smou7uwUVtajWdYVMgCjqEbpv6mKXd1YZkkZjAeeEC6trEpeIMD5SdzjhfyDIgPuqF5shSrHzgD4JeRHKlQ5kSm+9QhPEvGXQhEySjJYofpV1of/gqrURMZCOKWMtQT1ga0usph76MirUPZJjdEs3JSjxUrHqND4uZVHhoEWlweRJHWN0IbnPdmOf6lKh353ujG3dNcYXkLaJ8az+wdW2w//uCbLSPVTbCB6Q19NIAYdiMqBPV4r9ylhh5Dj/8prIc1yV/dM0OLgtfH9eNvpSaPIxqALeQlezZNzvuwI+7URjcvPokCnlxqXopZjGF23c+I7msjPb6e2GBv3fC1Rw2Pvfi4iMGO5rgYAUR0w4hAOtBwemkhB63e4Cbx1tBq2cLS6YYTeOrKOtExRc6CMchOaCpQbGaHEzlMkeBM5xJ5krNut2he7kgiD+ry4J3GVGQ4YXkHETm78obyG/a+h+LTkqZp6K3JacCr6K3OuTFTy3qZmPBfPgB09g4fAzwbRkqHKxOn+jciIv5KIJDee3WbrT0VC12PPZPqvTfy/uj7986sn21JgM4nXJxLgDUnLGIL9d174k13HEZDek7GiiSv6ldBTDy9kZ1xUz+9I7ccu1VW3Nhc+gsy9dfDH2q2ijYOfA45/PnDn5Vg1hbJwP5HV+DQz7FnoXvTT/bJ04PuSxiJ7J2HQLGYfnowOT87/mafPHg3N2mzcbDniaox6mD3E+OUObH5MKv7gpyLbmHykXhk4BGjwV57ftIuR/AszAmbkUN+1JD1JVX5Noip0OwBHoDHSpgs2jvzM3HWJnMdvKAax3Vay9YIGLLcwaGMQ1vTcUt2sKTq/7bOiV0Fhj0jd9yboNp6YDp578+VgU1Z/XZQ1FH/r39+pLLUf+YR7rZt7LXSknr1FSc4iz+VJPUI6s9JxYg/TGKrdGyJRDeyKi3DLthTwHT0U2z9NvEeZgYw6RrBB3xok7CNIJMW5x/NH+QltRtvV9PKPklD3NuJCD/AKwPqdr3a7LXJsebPYK0ZXQtMF6H4EYZ6pqTNT6lKnPw1i8DfnE0wNjjaNll6CPgmJOfdP5Lyx53Tzf0PNPq2+M35rmxj7kcIekUOKP1McWsA5Re3+ZlKQL75MUQTbKYQB3MicgaIFLJgYJ7loGAQjQjXNnBkwcokr6ztsZba8EBrWYxj92N/EDBfzIoTxLNfYAh/Ptoe42gtq83POjgeFbB0sIGmqCxJ01T5uutSKbQP3XDcj9TP1uvXmd+vb4asReotDk0UcWKGNzphEzEbbbuNHY+b00A+3pQDigBT3OZHBcStAaYCkF/5CPLjHBoVuw2FqJgYgDoXvj0VkeDDYDcGX+vVx73HSXMkspcccmP9zN1JRoSb2th5LWXwUn5tJUtBKjzEXXnyt039ymAM0md++oWutXGkVwW3Ti5E+mQdLZziHskTRoTxCYnk3NhyDoxcMCyN+nBDEyenwxfld3AuYgg3Gp+rOtnuuBaH81fv/0wObtxpQqnUIMnbZpTCfclkeypMScVfXkf2X/25eq8kHpzv3nDj6umBBFlGUO5bvUPLyZ1L5fafQklG35eevzdTx34QT7oPkUdCdvbsmowMbBYk2Jg91ivbj4pH/puEX/8r4bc/HWwp6AlRUnTW9DxLtYTybVboSHBkeXaZmbUKA2vRypzRmbONDJ5Wkgt5WUUSQfIqGPwGd0IZr6GckQsR6UgvQ3Jmv7QI3XVEmzjrx3GvGMnYj1n42DOSGPHZ2Fe+r/IzG7pSlVqWf7IVnOvAZ0I92xFFkj/Tw+65BR0lSnrOPH660pNEIVve9BZ58cxZAUhi8az6rNmN2W3oOw1LIbHiGGETif6djPuUEFbFIhUmfnW5VC+VNEta8i51UgfnX1pvnG3cvYqcRdLXXANj+cEIwFASkND1yaBPes++BM5O0z/FG7f94fWPxS2HTmdirWK9c98s+Hot0o4Y+fsCfEvXG7gIzwyb/eTuhZtzKQ6l6Byav+kmz1j/nX/TqgDQP9cZt2c6RRduEV7TgEJdktGz8x83JaZY9qW4s/ct9OXZjdkx6Po7q7fuvZRzftc9qEKXtZa18sbMTAOtNn7ttoH1uTdM+hnZZjCp3/LQXyaA51Dy9GzkUMuQfPbVqy1XMXGL8Wawfqweb5kVZJvmM7mhesLcAgYB8t01i5wtgX6nZMnlNioe+D+fCdoqzAFzxZKx1RXKqcp0pwhcX8hcXv+q6KdWgAJfZX9bUS8IVrb9QX5kH0EKnun45Zh5kYqJlXayUdgGz/4ohrHNPW07CRE72LNrKmqqZ2Toi5rsl26ih8hfzo3IXeITCfyHciNyHuJnV1qtCnG3WTExMOwhpyUf2U0q7HAFiiqlqdBk4m3cflCrQyqkrrM7u59rZCqcvADMIsysiSoUq/nydH+BUwupiFTGxDlf5JTnyGcgA2QIbC+055TlKGaAMBxQ/N0LKCpn9shX+yqjQi54nHdi9uyhr/YWGnWVk7Wt/VinDc2ld2QwdsAIvFyaJoww1LWUeKA2Sz1En3Z9uMiefhWYc2YQNpmtZS/fHAMrRqAR4oZ7ofrs1YNKPVlQKRsUkLcZlNVi43r5oZ+rEWKGUIWWajAQN8LQfGKKnUXOWqHvaohKUpoMMmFXSTIurh5nmvbExBeLkL2wXgefGcF4BKQxqI0rnF/awvK+xEHTRD8WhWlD9QSUgg6z9ZjrEL5OeZx9z0M/E2l/pkPShD+lKkN0RPQE8LIB06A/O7lbv52C7OCrTasH3WJky6VqyGFYH/ogGjiRX1JgDieMz/B2lULKdTE63JOtypXaZ5Rf9H6/3PFJqdBbSzFC2+o8OqhA6oT+obK4kI2NlS01rabcl9gI6pCioIXM8TOgJAcD4L2gdXiMmnxshlb8ryPouDB7oSXY8mbWfRk2nTKW1yr1BbqVEpsUl0vmTc3PFAOoL7z6EtRZUuutxTDUtIWDqXMvrc5Wzf4ITb5s9paaYkZHvfQatN3Y0c7SXAQZLq792JYP6iH/ucTFbRqoV/T9aizmAobdeEbyvp0ldgLMXd5u8GVtYYNJZB/01YrSlxmcJ+54Z0Urc7QspWn+WJGNAlTenjbjo+gDTyL5wFeuO7kQCUgrqyBoMFaj6aNJDbAnD735ictxx7oGID0Dc6mnHnTZnfYnBuOOmjqglR27KzogBR0z2HeqLTtyncJlv31Mxo0kjmMS5+Jd3HbVZ//0kcOTq1Zzof1xSPfjJ9cjHwYu1J2BNJw59WgoJmr1oP7itZgjQQ+k3TOfVpzBgh37KgJHLslYhggukt4f5cQGL7sYP2SkIHTFLS5214r7TzfvYJ4FTwzCO4pQppy17pXxc/Ze8vdbhU6p7G2KHP+I+29Y3cXkPjbwbLNIbZGpgRxlrjFsFBpJEeIyfyrtjwGdeTZIXnEqRauMm0wVpDEdhDQPcK0dfZ+QTB3cAM7/ygYEZgLdaUFa6E4zQQCwfz1PC4orGDVghLKGwahRRoA1g1/HwMV2EttljjazXXaSGF5qN0Vo+o/+lJJVmxcrr8lK+flIVYTaXlB7K3lQAJz/lAPwLQqNLAQ+wPn0KjcG7z3LtFt/WwMPH/rXpnfBZA4Sx21BFHLcDpIMnlOaxXQVYtFoPwm1s0p/F1fGPgqlH2+B2wLaELORb1KVZmeCqLDKQGXeQB7zlz10SQMLIe9rPoojzNA4wMHWbICbj6eUGGPzKcX5eC6Q3XIQYA6MKBk6R7oqJI0Go0RRYbS0VBeJGkUhubaBPckDv7JpBCKf//kgdfB54LExnqogx0YKtypdg66BsdODp+nLZ4ZJAtOI8ENsMUxBr6SvJA9QB+jAxJn9h84s/3coYwH4Jet08iB1MP5y8s5fOX/jCXj+lxqEg/jlGzg9oAIeK+FxVNi3w26/zgcNskJzxhgJhRGA8zVUf8acVtnk6UB09o9QGe6t83QiOsQ1NfQjYITyCF35KyPAI9mE9d912A4kEUyFwK317g7XMaHx07F9MHu9hSB+QnJ34PSAErjcyCP9EINwlYuilCPq79GksCRI/D6MIbRtTYWHqgJyB4xXlOAfHu4oSFWQAeRwnCF05EEwC6qvyx1KSc6R/j1pf1URUIwPjFsD1gXyJCGRgluv86KC5twSFTf51PTKtBUPKcEPpeYmHzEi3honAivjslRIQWovOwDZsNmxXyYfLp0EnJPzB+/vfvlwQS/E0js//yLm53mVeGJlZboUCSlEDqUNJVdX3nj/qYD1IbxEadmhazEKWtm8tatOh1Jg9VbIFoj8kUEBUGIwQ/L0zi0nX1vu8PTWXjHXJIotV07RoikB77YOigV2cZEf/7wpCfmr6T5t0zTCfZdvKTilMRu38a/vj8bx8POGKJ/DGkUPBZmVExSHWX3Ur/y/DWo10V9vFhLI3Jn/etfKkv8ekv/rxKVczAlJ/q/PRpWz70J2HLTTCASGXdwaLdClE8oMTN6BlyNpHt3xvzhQyASCdMK3+kgzM5gcw+b+JuYUV+rMKDDiaKmAYBLJ4lZfQsnVyYy88JP3keTqJGgWShBiL9VopHrFYg8nnZcagtcSpQo9ZJ2O7BEKEaLOQw5hvKdY+2bcObvguqXTFZntQl4mM7h0Ykm27d2axmCWH/R0Jo6my2ngsqWTS8zoTwd/HcyITh/7stbP0XHHK7UjbL4WavZenLCf8hYy7q2zm3vju1is+NMJTz0OIGrZrDXrwfD22YY6aGEjW1gsgHNTNI/LQuuSFr9bOrHU0BuH1LFqHUbyBJTX4wGCzsBLUT8hPT2NvTci7lDCz8urXq/nxXT4lH17qx0nJSRtC8XFwcRLewaFeJg2rabhhhMSV/YPkgfjH9nrJBIlZxCt7/hs72vK98znvY5h9pLhOWjG686g+LIHIGaMLG3MmlBBRkVsa5bKcOg/y594GVOauIJBP+Kzj7Mrjff5MPkYtO8oLh9n/E8GUmL+tsKsGTFcq33cSrISdyUpBIjfu03REKhgNkPeW0OgUNXlICMbtoGZlvtLJ5YyLNHGokU5aqMaVh+TPd5wvjaqpGdnWruH56FZ9fdC8et1UfXnH5c9Vr9aF91uuuGyNU5Bo+jxd9OXMyQ47ifdL+pv608jrc+3I2SPxJG+fIZkO3BSNT6tUM2gXlAGG9oVF6gMTZpFjZfiihIyQISYQbt54Q3o6xdv0BliBJiRQEp3nOozuY9Mv7F+G3rn6Zu0Tza5mQlFOJkKn2bRMKgXFO0NQeUFKkOdVqjCy+jZdPVqZr9nLhInQ6GuA1R1RVJLANKDyaxoo3MmqrpZG04rHVPRg4FYAmmo53QtF0ovtOhaGKUMyoe+ASdrEVjIs5YjWY3SNGHkBaFgr1KNlYAgAYbr/7kMUgApxeDkfIT0ZTR0g6bjhdub3MPRmiasoiBE2cdW4aSgNRoWOhqwYfF6yYfldC1/Ps3u3QHm1BAuHDc0xWSQ/yvrzCc++zXbNft3mfaCPBssJ1OPkhLwbx0dulnQcGaEMFJz5XrNuOMoua1UPlUZV0wf9ulLlNMkyBtvCeB8HSHDDbfGwotY7gKCAMHvqoF0D1MFTdJ0tqzTH1dbOrgorus8Vm486SPufXjxSaIfXqCtqo51YKjbsKDYgh/kabTv4cpY00eF2zNFVX4aiPWIgjOHzx2wH+gbzhScnWs8gmvfqWdNlpPLAZqj2wXBfg6CRpDSEFvt9jQmNYrFqI51l6giFLSgKFCCgwpgAhSJobiSgChIi1Ccp3hN8ReFCW2tp7+yqPlSCHtHBkZ/E3tayzIEVI/zKZe/IZ2Ahqbur1WIZXyz/guLVmqIA7V5lk7vdV+DD1edCk/z278oq4E0OdSO5mNAVQSkPLylPByIqCl/zPwexPLeBeHaG51z7P4hBv4Gw4fEdBciLD2cvWANyS5G20kk+2W1s+V7Y2OmN8b8nDudokwoChpRF3vRFys/WtUNQeTumoZ29AXvA/Q1eVMuuH0unj0ff3AXvGpPlCEQXDtSw2N4YRatGeSGAiGgWQuzMLwanh3JRdQMmBNr57f/yrPw95VZZpKEZM5Svo7L4v79/+/atQPmBxprnO0+aEsBsmBpSZtCyfuSAadHqkKLgWaIzVMEKWuqaYa1O9s90G5zuGl508UKFkBoUarQEqAp8MkVUbWzqhn6fGGNy3u2VMRqsiWVshpLRWe9rspiqMcdVbj7sT+yMH98kl7+ByaLahf/3e5xFcPy7Mph2+M2s426p3esF+EfLI7175ueY0u2891gZtjj9jpXzf4TT5ifiGrhDfUIAz3Dzbzn0XJpxj/mf0iTB3/eGLWRmnve3L7000ONX0Imvlxe+qnTfIGevmnezC1DxFUM5Sj29Et2KuaHcirivEM58vmdkn7FnuGc7bwUGvsPfToVJ1Ji0gp1h8NFCmyaRWdJobB+0ybbE9ZVj0akdJ2gwIhSI+Z/GrEosaaxg7nQm6Orhx3PpBbTO4sw/lKpOa4nNQVKhBR1ipX4+oMIk97ZRlRHjY1W++Al+ipf0nhGzaG/idGHTSZEjLqHYimDFRwq6ljD9jthtJu5nSPNoptZUPpNPk2VPncwwqBzNJHUEV1TLis0l6OmQY05+XpYw1TzeNKBs54XM/X3Fp29zpmeP9OhPyUwTIhoYxfZ6ITpDq1pM3g7W+ASOU/FUKFjJjKPfD3ijz4Mc2jQub2tHfXwzrkhUz4CkVedYtSQR2tZtaRRvSaQkgf/iLJ58Poih76eptemQmMMeO1AY0sNLDjTM9GvGech+B1azRgfwRtfTXvcwoEdGwFHM+UIeFEvHfQYYTu+CaDh7zC0Aoh1Z800dHqgxgoRMLRfw6vQYzAj6Omhyx9ihpKhzEckkpNMKDmUkchR/CGCM9NF2cJsJlz0R3P27RI9zmuL7OyLaQaNrrW6fHfPuLkoVk3B7nLHVg1b0q+MxsHJFQi4zJei15AaH25OJIPn+lO0GoIH032ivypKQKa/Jv/2fBptKjXfNBhHn0ox5ZcnxKfflf+7OjZ9bd5ogk5TSv4U/Xp65fmppilTIXHkuY2d6o9Ekmfx40e2Ikf640cq40ecsb07ks+wN264P26ADSH0sb0w0fZwY9yusQ/9KIrk9Xi9PTo/X84eGgmDwyKhoDk/2qQvrcfLWSs/0T7/+cdcxtJL6fDDzgAMkgLAAZI5/aUlBveTz+YTSwdMFVU1Re1+oNMQ41i4pU5g5BzJhKUH9vnC9KElBJxOCDMHixuA9qL2T7y4HHXd4slbTCklDcC07/MBhlArFqcSw0sGSxqB13autwgKwEbtw8ph26jNbJvvHdjBxH8aw2FC14v778IjPRlWIWrtZHm8hjdCjRJkg2uTrjkmzNadV004t5WYpxwPmRKxCK1XkLrK4eU9RLhBwyPRWgXBg+k+0V8looWsW6FvVqFok6lqcPAqfTJFDWagSeZbIV/YeOkhkgkosGcn6T+BFiCVoe1YpXb8jSd7R1VpbXNkb1RiZCYE84BU8u75g/H1k7bmqOFJpx0mxJmtDD28PbJ9z6uZwGGiqXFk8nKYqZfCRJ9lOqGpcc+0uFJ9xi9O1uBAY1T+qh4e/EooHGiVI5Blw0JwtC26rYdzbBn3cf8/Rmal98Oo74RCZXq6Djz8hFCRnq5XRmMsbR9FQR/nJawLjMakQAdnS3I2WqmPS6eNHXxna/oNUepI64UOqNiCpdqtCdYezhOJoVIzlsxB6E/mx+0VcUR7cdhh+adhmP1/X38epM04bGMexwz0Nap4icqq8PxY/8exofEt6WnXeDsRunKpHu4uVsgAwd9gjC3B/1MC9Ofiux3w/CoZwjhAtqBFZCChLBUsy2FiwxIeTEp+WbUzXG2XmeCFdh4PIMCgEPxANjC+LXb39Tlfnz228dg3DA/ju/LgbkjjuE/JC6tfHK4bUKejJDyAK2f/3Rr/t77iHagB8uAnFGOeJhdidBhn7ncgJFYs3W5NKKbYCzEyWGFR3jMDR+n46+wYyIn9ZItcmRumKTFUuHETaAh6Aoc7DC+Dh3fd7lt8XgT9KtBbnfViB6LUJQchxWAk5D0VwDJLy2GeAikLAN+HgFFWCOiWFwHZWUDSfFrafBKQxYCexzyaAqAC6THpARSQclofcZNYguFWimN7+R3DnhWyWTFKW6K34tF9GE3Rdffl9nWbs6FTKbr/dRm4Nl2iLmEfTUJ5qkIH015k8MXUenVQsIqotGAsRGUVNOSyVA/VeE8fX1Oph6n0Qu0KHpX9v89EqQM+0xbcre1lw+0zGYaUqYXpx+7Xjuy77TsiM1+sPePV62pT6NsbOSGvBSJVb2y17zAwnxpQkuI096C4g1L/T96Dkk2ruxt3LtsEdzIOf+HdONNfvh93kJXbyXtmnOlV69fPoJUXIB0io22bKRo0TWu4C8n6eNkWt/shph++D3F13TGPyPQXIaYH11cDumju4LorPv5xCLpkYEmfM0WVFJTZI0oLPCVRtnxPaYQ9vyzC5L9kN5Io33HhnG8p1G85cO53Xz4YaSsojzVGuS3SZiqHfYCrlPIvD8b5N/wCgvG+fUnWzN55EEq98xvQu2MLlQkP9731OyDdIm5B8JpKKf/Vl/7rTqO+Hwx7j0rp71desvfmq75Xb3lvDQ66C9oWvRmueRhjxDdy3HucXRDvxTnglxrN0vLJUwAlbNGy4sQprQjq+thf7V9gpd2LC2zXha6d9d/y3/y+12Zql/x7RdPP+3+RL9dIvta/b4O9AJYWaynn2O+4FQeYTu65V/fwGB2332Gl6+Zu3dWxvGMNvkpo35i+5bgbTRNm4KPR9NqfRmx05Z1HfY/KBlkXpACqZXBt0dfunPRBZQ23BnKi5/73Pu8lq66Brok6QkXPVXsel2bwvzTp/TaDcjbRn1RRoVE7XRVTKSnTzU7XCs0iJPkTE9p/91ao1S5XCJcb4nI56F6Yfm+PN9EDDKaPTg8yGR3mrkF1mZaZ59aqpQ4e2ymWsB0OnlTt1uYxy7RqmZ3HckjELKedR3uW9zmZ/v+7d/6nkz//Zon8OQ95mjyXoffR/qlbc48Sodrl7pGwYS2k/PHNv3nxh9eEYpEynmdezw/L9ZiRotQibTYYA+qyZ16ENO8X1RR2nTl8FlYYVTAWQJappuaNLTEtc0Z45pchA6axoijYuekURERPV7AB+fHdXGX6NtTOViy1UVVRM6N/6+FZ0OoRae5MT1EFsQ9U2VP5PYLinIicIgHfKxfLn49c7UIzzaLIfIqlJFNJ6kphbMqNlMJVA8nSqqa6katJvSdoRjJk8EgD2rvK352RBsmg7bYvkD7gnU/GP3wPqOHuW114h/jOQpUbUy3RmQjpxfp7Bw7PHlb2FfZVXqF9Rc+II0RNmaH/KqnStG9PAVGXogc2ZgXZ/R9iMR/0MwSzhdcPUVQkMkijewgiChUkkUA6DSD4UDS4TRzelONewr9giH+MvsFohdpHqQfxBVLNX89mpDcqGcICucsix1cXukGWhKFOy/qUZJJ2/XZwVE+MnEwBk2Otp6Vno4vmRPU+2a58E0Lk54RFoV7Y8LOGCUCGuF8ubyTleo4UDIDf1rmnuAVH5S1ZkddP3pLVYwu/ycx69qds98tNGCt251igGWKSl74OjD9PBoTsogaGA9oxXgpvPDjRRAfKcoEk7xefPCib21f1PjV9OiFmMyYjq6Do/snfUCQ4T87e1hhpDpRws3UQvek/TFIRArZrV0d4MHSZ0GLgQVVssPTE0ul60UCPkLGhB9M3JFjlhcnFEnht/Lb+P6Estexykjnjoyw5UQsiQQUWzut3n2l/UebQU09WLYcAE4AoSYpM8s5ZMxdy0hSP07SqBqn4z7ofTA8Me6hK8qMuUSr3yCkyd5pkRHESrisRWkAqvvSIlPPk25pBKmpPSBS3MKVXKh6QyvfZzWSfqRjZOq7T25AcZuCsYnTTBBs6sTMKsslJ/diROkCZQx6TTVanRwkEO1d+Fykrk4y0NpXDlHynG3guUwoRMgpqKY5fhl6zzUQIeUA0YTloGR4ZPnB+dbf4Aw6EK88U5qVltXbBMjNWHC7A4VrJTIdRBIpDXxf5X2NrNzQTe9rlgDgdp9OxsMTMe9BuWDoBJ3DB88810O5U1tCE2XJlEww91Bb8FvdNsO3wjgHQPb55hXt4R9n2De7btmDoIfDKZgprhH+dpZvn8w1pc9IMk7izHfADi5ht046R71CnpiglYVeGnbkAcWcC6qZDds1tdxc2PIPt5R3QwkKvOfJJzFPnopsu0x596FEeyEZwCjjts16t7vXzd3Ab35+8+hn99V5twxKiELYrYv8plh0qxzCfSN636MRagPHinzUXxspOMZznXWWelFMpQOrDzsWVFoAL9cRokMrEoHyiBbCrHHzx7iTzz6WAsErYSsQrEUcZ8NYs1dtXez9l9pex7XvnLxz7k4xFdiZEg+75+UOxjC8V6KT4+78N6k8Q6EHvqr6n1v/4t901Rjn67/+kT1/A0CAd2NF4lOOBvzIal+8YxmI9QhBHryhqo7XjwyibUc8B1pIraH1QcETy//87MTY0UPH/n5/fvjlzanN1PU+D5FFA8OaKrlb0yoWWEUBQ+ozl/cc2wCVaHAGgF9u+0A4AdEKHQNjlM23vP3ZhnjoUQpnqzW7qVtwP0wIRwbnWaKASqos/1B4iU//MxWhnuxf/fWn/PYQIQUh0AwH6Kgg3jCLo8RBe4zNX3n+McJ9qWy+/9PVlqY7ZD0H4+JbihkpMhmTq0QCGaJORNWf12dPRxW4zzEpy9Bmti1wVFOffiL9DJr9vSVBIbrdjFoWB77kEI6urGSa4TKudXbnQg+2LEBOCo0YL0zTdxIz3UZ2GtgUgjv59mw4NW+kGuYDOV7s6F07635fi30OwNKb52hZCML405lnKROFX+drptPztSBBIrpUdSjAge2hqugrGNK4jeqEziBAm6TsV7LUvuEnC3eLf07k5gff1fj1FNNQ0F+PawEBDhQTtnmhz8aI82Zuchy/h4VEmBa/teT0HRRAdi05sEh0y7Zr7mxcaMNGCgNjpMw3o+AQLs2BQc/ni2d2E2yCzGk7mYtmCIqmjVFb4d6MJrNQYEjrRQ3u7dW332QWpFcVyXYOUyI4HKVU64rbi0t3oCq/aRdlwoIrEsd75rX98B6mJdgozrSCJbJuJ8g9Mq0mJSOMyKT2HMMqE3Nm1i/+++L+HYMOJCdvAujP1OxZqiTcpRSsBbiFsTxzOO+laENU5C2qIOdg8sit4wEfJrjRypxjBwjR6xi28KLTjbdIy6q9AnFuH+aC2pUJcWcjSdSxhKbm6GQ9cSpAZnugZiw9du7ibN9b6nVaInm7Zs+EZaPQSOjeuLaXcGpY2WnLw5JaKkJ+u4Kben/5plcBa6clpkbHAcwl6uyyXI0YHu35xf0XowK8iFYAUJIpwgAa8Za8JXYMjgHTkix7Xgekg4irAmRohYjgFd0AdLEsNBecVIPBJ9nDY8R6CkLjfPkAsKcUKEDg8ACNAH0cXM/mgb65ypSnU4A7LZo5tjerluronX5a6VfJFsHPIMLJWAqjGFzBzgPdzCDDMhHJVtKt5i8IAmiyGZepSN8L08x9oQLMRBRjZA8YYP9iDvV0nGXfgodqLUjJd0PlqOw5RENRHELIeKjbAr2jRw0e3GoVyq85TIdKjg213bHIqC+u8mIbVQckcbCzHLtC+2kBxhSKbSErNXSG6G9UNurCHy9xiJiYVzHcPcNkwCxkcVccRicT5K1xlonmHB5MeD4IR69pUmCibF+kW+isFc7Wpq8FQNEpDJZ3QHNKU9mrINYfz2dBnXV8IiWOrUqbK4BB/iXwgMHXrbEjacCwkocYcWaBQF5JYljjPDrDdj2pAyLIuh4QUUoQUPsNDRslLusfG2MJ8CiqBi2Y0wdfLwpA1wNLncGTSkK5eIFHD64AaIc96KFlLVXVrwWmb2k6YHFir71YpG6ESrknlNGabZ6enlSj+puUjMEILvF4OfVPyOAp9x3qYLBIG4yJL3yZYmuYQs626sDueFkLr+KHA5o5BUAlcdBBJuaR4fuwSQFaFifr6ipRATj1XUG0K3M5mbiVsVCUSkxP7xt6WhvQDUzIGuJqqyBSzVXlFJn9jJZbn06YuC/mF2tBqiLehE6CswX2EZKOdA1U69YWFYzSjIlZhndd7b9cgglWgVyY3M8y8xx1gtkwUuhoaFrEimkbsnDCE7w96tht34rBTYMuv2Fkbawto480tJEkIuvJvQYFjPzySClyQpH/eNEBNfYSJCPIaWDJYOw2QB4X5Qt+YbDNIOMU2MFHeEBvewZheEM7Oy8lB9s8ppr/SUkNuQFiNzHmlRMUd9PNXIXFRibgIFrR3EDiiRBwXo42TkiywKf2I+L1rN4ryydOx9Dmru2ms9MCz8kEi6PkwmUv1IDccWWIneNWofTY8jC7tPUtvOysZvC5bKWbT2CzFpTSbS8BopbiV4tVUBdGitmvvJF7sZE7bx4/uPkcwNkqGakc3qm2wUYDUlRv7E2dod98XNx3gjARqnNJfz2IxgyxG7Hy0rxZihQcHJ0r5oxBFZGiOCgGtWKa+W73vlIF32jD8SFxKclvGXrPDyth3kgZ+/D6aygDvTTgcpxqranqrjTlMSIJI9RsHSZ2opWQY3Y6OvkdW6Qb6CKlevFwYufsCqqssEFpsGtLm8LlOyGibkulmT6HNMg9ucY+JqmxfrbNurUFUdYTP5AQxij2+UighTAqLsT8KVlOiI9TEIqKNi+lHsmGoVYI23tZepEIetcjkcw6A/QhIVWKDVMJb8IumPm4I+pq4paOAF7zljf3jshuRqnfyxI2nNktUk+bhYlsqJbjqD4iHKmCAHFBwb+hEJikZRqTCLFAT4B4ACaZNKl7NIXiEWxncdw9mtMJzdZbuX/ob6sGC/GyGbFdQBvKQMOGJe1KLaCmOoweoclpjlaQGfyQuAylVz3trSUunsKpe1BnAbjtXLa+zF9PjJNURrTl2iVf9aXGXraQ/Elvx9unujtf4tdx5paxpe2gXTVQJAtdVZmsfP9oRmd4O3A+Uql9FEDqQZLmuNEBN/SkahE8AlqzWlwYIvli9AINfWIf9Uz39oGSUHlipxH87mMPCd7fyZlHcyg8eu7mfK7MreHgX0/K5RhFbGKyrYNO91cDgGxf5+rdLAq76h6wKdHO/DRps56u2Hspv8yUGRcX1kVIphqRRqeChMFs1BcHEwhOJs4BfReA2orWT84wng2RKT+6H2JrEmeYihgbLtcO0v11N46RF2hOcxGy08cbBqv4mzT1jxYsZi56jXsGxyaLVrQDoVAnLWVA0AmD6s2Y2ZYv2+OkAYdD+dG0Ji77aSG+ZDzzerGP9HF92PsNvxjyynPObW54+J78RnUaTdjR/5w/O1M74W4sXOPBshE3ZToA6X/Bg7090Cq6BHVfP4fFDPSvxvAiLZ3wtyfZ7JPCItW8YJT6X4tfuGDMJIznf26CHuAhgKAd8chLls/j9+ZX+yrB2LNCrXbc/dwQl3uFKGSBK1PU3BJsy81kSkYLmxZnXcV06cRCjBQ2BSaeotim2m89Tq8ZRIEOp4tZ44+z8NsCCFhMyZ2AcFnKeI6vXH6X71XelcZEUt2hijuwYGy9q4gJplqAPYeGS3jEUViJw3exRriSvRa1i4VnBoaqpvk4+QMMLMMK4YIGdTe/zBcZEZvqK+L6SEWG+vxk+QFT0ai2I66xQ2fjh4ErPkyCBcvoFEA8MhEIAun7N5EBGLro/QeRCxaX1W8bydCh5EoceQcfihtd8WxR4rEJKHTw2YJOxWQMEpDDIZaXgKKBlK31XCqa9gmg4SHB6YjcJPqP721WGlxeFkiKJPGr3teiePo7o6AFsWiOXWrIOlMcQWQwtEeS9i1bvnA41wM5YGbRZUnFnI6jdNL8nCaKV3lzXZa5EEnoYmV38oryMGL2/UPHVLXqBCBUIqvBBGu4AtxdI0jwBjE/zCWfwEokUnQJ4yaI3+KXHg+mnfbKeM0qjtffcF3LZ5MVvKnpOrmaWzUxOOFfbo1dzxea+u7FFoYoPTC05wLWoNbliaOorPiH/JrD84vy8zpPSZLrR2qONRoDTR9FQtebBvcFEC4xtTETmxCvvIiWVXlXboo656L1o/s45QHgyGfKvL3du3bh+5eLZU8P2epn+z3/oIEzP0rwGUbKdmWyRNIsGT0XAUFfzJwQidVbchN5zP1DjsI1DJala73ApbfrFYCGTyAzJRgLd2bs5rKPgkcRTCDA5/83cb7EwPUR0UDvT67ZvVwqGCxNrfWX9SICTqRjxHbGB2pzlYmzVcFzl9ThRTuiCWIo0ivy0TTVcXcN2rbqti9qW9RpmXB4dqkmgO1TZMtKNTQdbfeyW7dyX1PW2gk1KzUKzKMKT/idqEpAkWS8aoKb+gxI1AEum60QDXLPKNhNqAvZVBe3bn8EnIyVi5vZ+n/EiBQY1AyVwf7GA4EXWay6xh7xlOyeoIc4Ftr7Pi3mLsq+eMtSP2VcVpG9/Ft3JWeBQ62iS73ohQRJMMbTqnQo4+mxSZOo9+2M4goslGhOTdteksGwTcsOwWtyThQYah/GjiIbMPijtdWkla0ays4EXpEBNVNpJFHJKdRLLkrlg85xws5Ok/tNoL6gutwtkZOgk+is0NJbIPfPCUESM1RVso6Eco2O4LEftKnqd2CbqtNg1Bd40Ez87EfulppClGKACPAvFK84aW0zFH160IguDknHZurhBWHzoFYIoeKGAJWPDuRnBwDvOdSkFZalMC13piYptuIlMINblPsBWkbwiWC0MhpsoNceQ/LshvEDTyzkTh+IIj3uEOLD1CBvzTS+hFkTKYkDkYoI1UWF677JC4vJ/Bfsm51lUsNAjXTtrVuAY8EbPu3kJCb3WhNshUpvgWUI4RwU0LDbmrdbRiha1IETLQTwfHuDaVIAkLGuNWuVC7+Wh9MHxjLNcIR9t8hVnz/ZMoKbmexRKalkBZHjQFSuZT2xyqxi8jxYhWR8d4PmrAl0vxOKQtPi5BT7EXJ53nG7U/pN+6/ZCmnIELiSF+z9EkJiFmV9fLVa7AuDtlBI7NieuSKttOLBSmnWyAa6DKvH1SixELKLApybLvqnGgHsQUARv9tFR68Yr0cXsLHXDIm/5IV0dGNDWjhCrJM3X9zXzE/qNvH0dAHExqGIdc4DQ7vezuLbEiqgYBw9s/ZR7XVHPYcSnr1EGQGtrBEneuEVogKD21dWX38KhZKYvwCdY8totQEOxmrq+alvIypxMD+9BMru8Xb+RXVuXSsbREx9Ywa1LokIw8qgEy+mY3VRvuoo6j+9+JP91TpSOKxOvamu5uZRaBdl6+gDB90+j30BiatJrB5ITwsko4n2ZUAhdFT6JcGpOxyIAq4XuzHjyoYFL7d4JwyDr1XRcIzK/hcnzrVXTqzAo1qQy5BDdQRTxNF08SiNCYXyZnAIEg+kyRMJ1UC2NWix/C0Aj+fnpNNaFykTKQofsajDGMzY3TNXFdTzZWXPp3v/o0k24tOukBjL1GP92ML2OsH+9uy2noW/rQqXxnnrYOvee2BTmRDxfnJDj/C3iRrnXGP4/xMeC1LG+6iy5Wk9VwT4C8KD5983VdZ0nd7pqJg4CALrvzzwnoWBBJPQfuzM4nzKAxCd/rzGx1sNksPALg6LOSjg6OGhu1Zrnct35vy/39/4Ctc18ISQv1g9kZOU9J+9L9SKi1z3g8ezC0R2NG6gqEF/incKaBo5ysWEsfU0WQSVO3kq0NUBMbp4gHiCsfeADGyUHuEKdI985zvEMZsxxbAcwxv0xps7rWtyz1ZDf38F6fV0/nz9Pp6GLUeBe+ueh2O7T8Y4flLMmnl77xAjiKn6obAHnxHR/4V+ptdns6IRKs2odmbruXHXgQxlq5XWbuCgFF9RyXqwggsrC+sb/LW6Fa0hfWvDKYO1z+YNVmjrAFepGRTsndTKDm2g5tgOY4H6dMIFer7/5eA1//nP29LD7+H77fl7nU99VeQ7sli6Bd9Nf6MuIcBrIiCIlPkuXNWU/gLfy3rgCQbhBKEviL5EdP4A445Gx7/dzDPGcM1v137qT+3VQb3ZdrMAiuvygTXlDZ6l9xVIHFql1fP3YjhqHHcjpdavFQgL28CV3eC+Hyhva4PGVrcVCm2fW+RLf2OJQTq97+zzxHIJ/WA/0KIfKG9oY+XUrVCy0eWadj/hHF+/E9Hp4lInQd50LT8vpwRx1Jw5BenMrJCDQQwMa8NYV3CCugFoU17JxhCcBafy+BaRGtvO9Hg8xKgBQ0mhnUybmaewTgR3o+U67OBhKfDtGzYk8DuWFEn4lyPBCOCuGfXdyJk6/V0Yx+tjldA+NNzcUsEQ1PpmgDXQkTbuJ37JoCJDXc+6ISFC8gyAaQywX2GzaZIVifdwDnLv2ttNROJ1nOBINypLk2y5e27tRZKaffCGxT8R0NXvnecGbik9iYufOo+0acLASD5wYO6u7pRIvIFRIvygTmq1DaHVN8vyDviEvpvlczL53pK77fMj6SwyTd5W+bcDq3DnaTzejWMNkGS4Sdrf94YKa4xqabCN5m2Vxtllg0aXXOY3No0edFl7gPTYs1N1gkiJCgrNtNhJvpugfEHUb4P8DkMAV/DncP+ClKJ93ws4BvS6AjrbTA6FFWSyq0yYKvMeGg4UEJmkytVE2bqO/zAz//bfwAfK3Yl7Xy97SyUY1b/tv7Ap9Jp+66esiTGNoQBCEBrpWAJ4m6PTIAu+x4cGTg67pm3dhKGVNfqGueUeH0n2gPGOAWAgaisVj8UV6NQXq2HGvr3ZPth48Gqo2b3cHORi9PPKoaXECWOFbfSF9XHsXJcqX7GUSBXb48t8o3YkVx5D4APmmu53jybmjcsMjKrR/8+xpYw2El/NmaifrbDg7yaWIQ4K267Al5p9KOUkYBNQXJvLBzGZRSFQHFSFYLTC2H6PACX0FcP56tiLfI2ivxxU3ObePEy1osZTYmQmxlA3lhh8trI3LrX3Sd7PT2C39UuGMXi788ELf9Q7fJzlQVsVKA7jeoyMRdfBu0H2lyGBnO35wrx2Sjkmc/qAZAgiRIKfFiiiFOc82pMOMTHdJgWKVOd6XXvKUEHLpyWTcx1ER2njb7APEUmKm+RVGpSFvluVH9TEbdJpneMjHVn5WxhH4IRaX0CKL9YuWxSE5ZS6Q5FcOvhpqjB9RSv5VZJpLBPusfif/0kueNVyL9zV4kK1d1RSHNmcgjhLHvJm6HPbpl8/D9/H7VnUo9EBfbRQvytWIkWnXhdjriprbpEp/0EoRnN0ihodFzyCZCt4ZfU22QWaDoXW2b6TZ7kA+5PiaWK99xgir0dcik56f6qkOXZmBWEoM2P8hnJ+RBX5zdf6zekKWbSUS36XEepys+iA5QdDrgOLniUl/0ELwXeydw6Xu9LZZEorFU6hBsqZ7CmCQfcF3TqiXPGuYpPU1eJKB978+NDGjjad09bbRZfsJcp80LB49PGtf1XWdnbRfui9FLhKPWl0t+lTPAfRiyewkPE1eE79oiQDoUT0Agzbz2GaHahgLB4I1kD8RPECIeTuxnJQVeVJDv29r/wq52BrCfIAD3FXifznjeZOT2azT9/m3/C5WMZREjp5Cx7v+rmB5BsOQSrrhaJDMIc/tPd6LSLaDIFFMXCLECby4d5S1y3flUnyRQ3EyS7ekZMFFJhskBRRt4PfCHXYM1fTnq7ZhhfZsP8O7bgHwXUBXaOzztu6i4cm4kP2wHNcRrGDlZgTsJpU4kOiWFqgAd0WNeqFlGj7QtjqiyZU1iyKxL42ZmZ/mIw7jWaNFQWUckGS6bjQ4tvIAgNyWiS1EcZ4uWDJZFxoszJUsBAyCLgy6TsvcrVypvlfxPQBjhMwSR8hd5r02otfmIowWXovVfRqlatnI9xmaTTa1yKgIM0if1cDKDFXFwBU9SBhHjANb598rJnafADmtk/DoVtGZU2DlH6sbEdzr8CJ8A5XM7Fzr7VksQzRT+6kBJ8GHV/mtM4+nK3xO0qnKF7zXZL8+u3sx4F57rz7Dd6S97map/dI5HKwG/huJtl+6iNY6SMXT1BtcjK6YhiksXqRowtnWzFy2D6ewFMOnpKrACGI2G7IGu8nTwKSJGPw0Fb0mBGhPGV6ZheOw3r6+wq4qJei9q/DgHMnfLwUuQ9HMLlsZZHSR0mR6WBcoTYrzHlX6Po90w8Dm1MYy3TVr1d/IrOGYE1QV8G8M4DSGcB95AProEIgiqkeTJpKEsjPUpW1NjW0OVRb/9O5RDh5+fzlxB3xmojIXmC2z0EwVxcutOpOYVjVGjfBgfJps2GGQpfQELlHgv7UoXNV6ad7sWZ+F3HYpDM969mtYeDxieVDrzRmpxEQ9QabyBeNqh/ZsHam2tEnwGaXaOVGzr3qshNdW149odJDYIMn+CaDBAW2n6VvStN8DWLJdTxoc7G/ydWFFrORmedbjlTUWD8GgavbkNaKTnDETGtN/z0qOidOrDe4L1WhYaGYwRvx6g8pDUTURGQ2V/prjlLYYCpPPjMCUxEOUwArSMSitBn5NwzmZc81ChfH9m473SlUJ2OYeBsuol0xu/BACxOPqSmgjH1ATkuz+ULmTL1Aka93rqBdpZCNh/Eru/PAqv4pJG1yuFf29z9vqPY0KFB299BC+x7z+tGnK9wG9dBeqh16+PrSYsgYwef0jcS2vMfa4pujnnfc1BYYvnwlq1DCoi+E+xGpZOafIv4pGOjUqGcz4ljz+4Y7pWNddYT0voB0mHfMg0i8Z1e68yNTbnk+TV1X6tH3vqaEsLL7TZLOBjXOy88EsuO31TXLby+RVNOCilmzfOdV6hfvvXD4vw/KZoHlmNmiHqHavRaHmODPyVO84gphNz0/HhZegW6vMSFyJvmJiP0n0akSAU3E/w/QOqFOXSNm3copS0Nrn7FF8rPq/Kfbx1NSGvN9Mv2a38aw+NSc5vk0csCzwmE+HWkCoeYpL5GyJ0iWUdBFz+2DEjbsNgutd7DxYaXE2Vq9VAguR0X9oIqQU3EoJNEFCHaQxQMFCKz1ThfuzmtqyO/NZANxuSZMZXT1uEwAf4/Mz8YLylcSHteg+lVhbjTw1f/AW9EIYRyIpP3vbVAApywJKI7q6ZbQrZnJnWIrLaT5i3LmzHUxP9PxcI2XSFGbMy0tbahThjcwg2/IViOfN2W0BV9T9NTb26kymldq8sjYUzrvyj8z8PZ4MRBqzK4BVwhSv+OZTTmFs7CMqGw1fcb+LO22eWedtAkcT5sJ7vDjPM8FHHGxqk7y9d/oAOYWxsXHI42a0ggaQhpoyMpW1Vm7eNng8oZm7x+urqlDZF+A7yOqa+Hl5NhkOkjZR5cIGES9U0IBl6YwQGhnLVQl+CgMaPvUoTSRuouZU0pBhnm8ODlrHnvbxxVeBwsr7rC8cc1KLxV5dN5UARfz6Amwf3EPIC6EemK/TRZbp1GrQatwt81lwohoYUDBJQmK9WDERfrQM4EbeI7mDcNr6nTzt5aJfTYeaOr4H0ZbNlGm2AR/BJ61SjsTWINVEyRAODulKGTGNzU2zOHJTAHpOb/ZJacebIfq8lrw/qFZbGAZHLpi7meUCQ2qpwUy2l9+EpnIkortA52bZ+sq0NIAmtqpePPzBePcf2gqMr+CVoHtJ7LD5THG4KfZzBTIAkFPxWiGLe9ATJFmb09jsCX2LZ4WYWOZUfP+i8IxPWGy9Mhy35CD9lPIrYL3Kge627WVxFJEF36HaqrDtOkROlPpaQnoRI0yPUlYIrAcPjAnyZQD4B7aEOWK2oJVYn+e0WAwfLW0K6/U76JY6tgLC94KD34MMoXq+IHjEMODE3SFx5yx9ZoLmsOgzIqPb+bF2IqbrpS5u4ehZRJyVazYPyLODNWtB1QhIgGfLIgC1imLZqlanZSs3GsasBVbuHTUgeFuMRnk2jfcTgBbAj7NS2eH+isveZVC93XpFw7kUA97n3DzGeq8BqPKai3so6uNLp3gd4elIZVIk7B0Ink85qfrMq40D/R/Mo7sp3lUw02/FpjdS8wwV/dQB121tVjL0qqhrY5H+eP9ne5llAkEiqb+XWZiILcR3d5DU3+vM+WmzRpFHptrk2oxtk+ptaK7NKCybfMw/KwmksViKcUHJJo0VItLIvh8SjhF6BQT2ISKS/NIDEyyL+7rcR3pf2/fSSBenSYZ33PssNxOFK/r9mfVt5Jkm9/s1y1As53xQJ+rnlkjAhAG7OvBJJ9y5rmN/kRNN4PSqMPUaYZpeLbEhJV3q3w4t4dbUfScwJ/41LFLITJ9o9QpDyDHT7+Ld4m3BTuhfnZN+V8ZhUFLI5qFH48NDWj2FzORG0yMIIcdUWW4oEIWu/U7xOpM89Y+F8ImYhPBqSVjGqIZa5xPBJAjh12cSaO66EBOckABw+gROn1DbzhOFmxPNxGvtC7AHWeHGZg97zkfIEKaR0WWFw8A7Q71s6TCGeNXQN3vHaSZC9nEr6GRGS1rgEuFrk2ARpQaAGi+1X20fz8fdU1CfGI2UAIXnidEkRn8hCJvzIUnaXJLJ2GnOzVx9oZE2nkcjAH0h3spNst8Zn02UqRJ747/mQYZE05tDfILVzW4JsPIhk0Qzm0YV7oeEKa0EfSRY5+CUoeKHQ5mTfleNLAC3PJOBoOyQ3NGA18SUEGKOn0YOGRNkzCkhjTwTJM1PIy2Qx2AikEE+CZILVKOUDCmJB3zlDe/1+U9YAgPHGNQkHCqs6N15NQ9TA1E/+DfgrRxldbUhgLNZ8TECzIxiFbcMiuM/nGjA+OR5RV1b7zgRjmnUoxBUkIrWpTlSECAaLAH1Y0sqY6j0NboF0cQ/H4mWlSE44qD0xY6oEDG0hsQGSZrnQQOAxjgckbNaYceg6o66moFpLruo/91qyuN2+ENjrA0y92BoQMKH/4r4ETVffvndki+2Yl3s5g11FV1iEAv1I9hRxQ9pdLzl1WC4qygfbW0YHHUGib6SLUFGuAz/AdPOAv/AY5VxVPKkWOJh44eESzSsZG+8gYctQDn8Wo5is9yptQBcZS1uBUfvs5cdYAx4era1oO2W3DZJivj2yRaWRXT1igtEF5T2COOICSmxHiN+h8KPFGYE4mHfgDxvihqVhTRRV7nEL8t6UAS/gUSDxCTPb5dZqwZsl9I4y0BwFP/BRP3HFu2RjksisIUVPKyXaBemv8DIsgGu3yJHQL5WgoCqLPbT3yCiMRzekrC50rEqzs5V8yd1p6nHRY5xgIEOdSv4H9tkj9QVf/Y9MmFw2IUSlmgHofLNkPm1o7ePX2c0Svx3K/b0nCd8n4Qd4CaIHynhpsDAtYQ8T8vWNagYGLEQ9xjQlvRimvikaWkrt5q0dMpjwUWaNZG6LCYqnp2kVhrVnskLPttg4U9bNenGNbVz7PKqrogfgPO9uqzkqdX6DFUWNla6c6eYRIxHwjFnmMSaW5BvI4+oVPfoPRS1N2CI6fPbsNAsw8mdtvHXTNUvTnVFWkKWONlMYi0TpvAuwIyHoMLMvM87Fa/FfAgQkAxK00zrd4A5PmcwO7a8FW8hmaoM0X6PbIBsIQaK3rs7k5vd5jFupZDYbfQK3RIbwozAnB9Nn9pBXZtXeCM9haCsP+GWBU326Tbvh8N3X0bsd8q1N9wi855MfUVdjRNlU6NWIdnZlSABhSMwSwmtwBpDdK3Ur2XU42FZkHthyxEI1hIqZlRVBy4uEJ1kKRm1Lq4ldEgwAQRIK2hpVsaK79GpHssf71Eh/mtBxZvUZgIeGRZQ19JVPJNzhSiLy+BdHoeLU+gc55b7rfOJa61xHPr1niksGsZ7LUggsLQuMn987l1DG1dVJS6H+ykJASbb6uFs5Q7dDH1GuwhnKSieqGgSjDlwxtxa8WkLVHRqC9gZ4TAQKHRfChISkXvYf4BrGRCOSEpgQhOpV1L+a/rxFr39taEFBTOxnoDQrsLzPQ7EVLc8zogGQxpQRMwurn0cvFHDoW0KSYnthnthPdzKjybCtLh94iTZVt+MN1Wq8edeoLsjjl7nLSBIICeQyC6rACNTnG/pZopuvRJcblVigDVgSxfNJIZQR6gHhyyb0NqbxB5deo6QALJ7sd4poRH+XGNrdap/h2VkaTK6IMoepRGyN+agOf8DVYr9QhMTLkRg6lTFiooipohl0WNvBMpxzyYlfg3JDMwVdbqsi5NnPkgIZVceYNcU+n5oSbylJZlPfADt7vS2LF6cvnPmTr5qayrlGtiYDN2/5Z+TEkx/CgIJBgb8AhK69wna80IArms22ppeQctByfy7IqmL9UNfw1p3uGYrfQq1aP1jiMUN2mKcw54ybCv+hoBK4IBiU6pkknr9ZRAuMg7mbzEGVsJQ6NGqVsP2DW2meDZEKEU/lvnbEBInI9PpEgXzc/WA0/kLC5jLmVrZ+HANYDw9vyWH+/P3LtyD9fpyGqgHtmABxYeM39Nfs47Qo8DJFkUKzJLDz8CSCPHgj+RS4SzHAgZB8BGrDYA41UKj6Oh+9MssXyHESHoS7pEdkS5u/csopSZGdmXTkojVy9XKsOOsW36//Ft1AHOgABkyv4OT9Xmehlb95TztfrJlXCo/9XxFqZjxX8ahPMzmr9SIslh2HEJLdEfV3fbkr+Ds8tNv/V17sS5Vkaujp1f3UDn7hOc0FGlBAgZqdaF1zdpxtPpG7h2fbtNt7EfZkV+3Lnxj4ksI8UKjCghn+YizBX3Cy2pjiF3DMnUlokJnAjjtzW+ImvT6CgOBdZan8xxHdUWunh0kOWjwrhFuxxc4Hek1kM5v3QSW0nobslOjwhHvhI3uIOX3sobGDg5bKBaeBHYkFkiAjJcCrDliOHESCJ6kCOdPlCAV3JDHA96LPk14c9QdOj3WOh/WF/T9yjJiBgmIxcemgUlFoxZJIWp04jn18qmVg2xl1Oa/633Zun8CbrCNNNrv7iTeLOyaXQPFjGkH4BptQNenDiT99RxaIkT+If6ooVEzGEGyZBdwJRoxfT7Ofg14idu4Wk4IlbwkdeUDGCyvl31blUWuXvfxwsCjyC4Zjrd8PzyOP6INYwhnp9S2Z80VYnvluvc0L0LCJA1F/lahw1K3z3XB2SCYn6sI8TEmkuWwKrQ3m83c3qySesr+rDhgDFF+gB7wBuWFaot/dhXT8VDSSGGKRVHa+/qNJDEJFxlwfl1khY7jToSFcC+5osrm9wKReMm5mNZKfr2GnQhsVcl9QjsvCaWG9RvZe6hdVsfCC0OThFU+RzMBJz9hM8A42AFQxiZxHDo8Oz0efPZUbSc4OCb+/X6IsEIh/030cDs76/ZENCzcoUUv7G6Ecf/ADBS5APs183pgwQ1gs3iYAkdKrC2Wi52Eu4LfkZzE3zLsgpnzv7F+wC1pEhrjGPKiqHdCSEUoCBA9XRuTX6xb70vVr94vDOfGKQZb7HrDd1M69AKHBuaJn1qJIPSZLm2WW5vJaBJ5zFTsqS7z5IMWh3pwtvC9WzREWFohXR5nuVm/qCErH9p9l/cLtq64TZVbNEHU2cCvzgqXaiu7duxeWS5mAQJ5g8rGEg2NY8s4v5mHRyD0MkOejbOTOsURxcgemlSepmUDYo7lZXJmwSy87OFnZ69u7jFgWKtlR/5oL46aDYEmBeJQUl2NX34Tfnk2fj19rQo+iB7bcot37tn3GXyHylMGyq4FMnfELLtm5UGxelSUxT8qA4Y1bFAw6bAe33X0fc/+HbJe74P36JfG15G+Ml7T3DPyxKpPHK9DtuozjS92IWq9tW6oCnFWfGIHou+LwUyZQP9u3cAH5wd5Jm7mX6drdOr2bmL6eRooZnxsimi4uOfpp/bjqQjLe84opodhONVnk5nhQkzrqizveRgb+q45mOn3PHMAg5ln+AW/DI/D6Q252VzuIxkYSlr5wmOo2N/T7jEyerbMALG76AxCdNeu8ohiYqe7MQj1yRh690Zmp4sB/jgBcKd235vf6QvEiRHjLwx/dGBKIMM7gBkH4l1rEs9MZjPI9BYwlEU7gTNTFWxNj5zHwqC1VrlzjGepmNrpoMUIPNYEOlyloKbTjx2AR/WApPz6+NobbgJ9/eESn65Vm7Ooxuz4c11fdwJOhiYBXh6eHOPITxVlBvP0PuPEaIxIjn//xgp93CChv7v9uMa/eyQxQCjS8LLeO6QMpdLIjb5L+aqOXHBvDqwh4wctKzHnCYT47zQR/p/AUel72bx9xq0Jb6KAa+YXgjHYvk+s/p0dgh+iKAryAUVHpcyQmWoFMkMyS6OBIhv7XQBxTE2iKZ2gknwEzzn8tnvcaV017gXPGZBMXBtpyS0np9fW9g+GzhUShbW4wN5jkK61//s1q5QWVB/YR8Gqs7ykrmBrdm9St+s5X44+zMO9gZujdxAXJ3xzcDXRACPHArQwR3wqxEmE1sv6FD5HkKKw7ROqU+ni14LmH3/OHFk4doJsOwQI9lSgog8nAH05SuQmGE5ITQbF3HAAQWjaDH2cAfY16IiS5HF9fmk4SkrxBCCW+98VxdFkHDND3i7ra3PNBKviEpmyzYui3hZ8u44V/e+38AGUjisQwoxCOrmcC0gPlZIg+5QfWzxL2O1l1JrVzNyGvrkfyIN3hxVXh+2Ov560V6QyeRpHJlWcO5j5kHiVVtRhRSKVW4HzRcxK99qHxBoeWAOKi0lGkAjSAlxgZH+kor26pMbvlQxxtdnniTxZi3F/TXFs3Ob94/o69Kl+6Y7cD/AgjTj8Y/ms+vF1cU3cIwRSG/p0G/eeM+Z+IA/+2nff6ptrmNnD3yRxmW+sIHm7kwkhwbFu6hPq7MBZKww5/CB6UH22aagPjiCCiEHcKRCuGfB2WQ7tuNqyx10dpkAiJx/3UtGsc0yWCNdSBimBvz1SLH7jfXLENu0dIA65BsgXmhqUnJ+ArewCbXXeXOB8USD8ZU7X2L99kcicvw64fumMPgZ3hxthyKJ5w5nmC8pCPulFVeQahDyhyCInFBRoZl2PoQ2/M/KOVtYuX+AXsa3c5xqsKbvpGNUgarB7S3NDUwpbnNlpKSJgWTkWwfKN0mbucw1LQMgFmFhgqVOGdzkroYmyjS6eQ4N5FrurXIMibc8zSOgnu/iChjIUDQ9AJm2KCKZuiY7NH4p/y/98n3UswYFBnDjHCUWhRt21QFpSMNUQq/4Wq3lc2OT9oksiyMCovpv7OTpkN0vNmRbN1wH6pQSTBDm1cWHL9I0ZGGBry5oahM9l9l/PbNFdIbCtRFtLQQCmcXAXtvasQ8hSMv7zpOQ3ZDpUh/hFMEKgU4CvpqAh/8j0pt82dNBKKMo5zvwCelOk/UR+EtmpdMhq6BfL3XNy5+I+TC+lcsSLXR4cSwHo8a2XVHrH7gTHTmYl9xdX/PV6/r5872o5qWnfgRseU01mQO89z1Q8TFeTcFEgoNYQPs2YmprNcp02c0dvVb2bTdQPF2tk1JfMN7jtrtOVr0u1L1zFU/nbm2dOH/9t+o9PN5/denb54ukbZ24Mm3XqavmLdbO6cDGccmH/DezejkHK/55DnbQjEX5MPFZBeBzODnAno8nWeLxwmP6xv+jtnAguEDU2WIUJVTvmkztoWpQFC6uwShesjOhVTtnIsw2bSs3fUkTgWAIYq144EIfArtLsUWnc/80pSnsnfDk7EC8wQZbmQu62u1cnuRCa1RVXaT2q0kee+HtRz/eM5C92jWC68DuVBJfNeMI0loxUGQYaib+40KPbla08HeVZwvwxGCe+w5Q8r7CoOWN8WmyflcTUuPb/KaeuPb3UthFVmBD4S0j29pxNNte9DmmGAnoh5AnN0FkxdA1aajYhEdg/ba/yqd2p0K3lq1cwL25mVq/0l/vNl6D4cyPmJ+12tvJkKPusJ7DZo72Ufexs2gHNdArlVAtKdJuhXAejT3g+QpmH1zwebeXVvFrqpVA8cYjdh2GbFutpjuasHNIuVCRjjThaEYGpgIJgNxiHMVF2WGlLX4M4gjaIc0PmTUbYHR+F1bbhmL7RtB4+hub6+zI7cEBJ+mNN6Y7vA5MNQ0o3tOfJK4B7AZI+lb40JycXgEeVjYhACDl9gmFavdT3ubRNOoUhT4ZikAM8/ezsuM27OSBsu6W62tztZIp5UcisXjdZMw1pjd1WDs8ibhURmKxfK4Hpr8aAnb3IAW0qTJwhpk4oEmKBmMC65xZj1i4KJnCkjbVO0vRjP0bhAKoKh5vNO9J39oRutvQrfhdEyswByZZKc1lzlAiGdpGNQmZTCGuFKXqbNzlzD8klWG4Sx4tjMBlEGGxO8ngQBciSXdqOAX/mdbtjqF2CUC9iOBrM4DWiYI7uVotVg+EV8vZW7nfTkpfWTlSPZWxQCg6eWzKvL30DL2pOQGeUvpCw0s2ndeDVVDa0q/l3wOo4Du4KrDk0wbst4rGCRh92PyKCe5OVyqybDUPwfUgsCImhSWzsuSoUBRfvL1j5+MqTs2X5dv6mvBl/u/A6NJoQL0IBfJKjWiQCK+kZuLa+4CHT3AC64JxOibXxlDLvrYeCa7qonIv6kLE93yoeLiqA7L7E81ge1DPghizaJSv6Ev6JOkhMTojvaYtk+/css4vtskAyLpV2XEuWmlOz3QjPxvZoF9sPFJN2aBmxMEVXGBvuO1Bm+o3zMJPCGlPpn6vo2YB1z8iwcqGcKsOtSDZztTMlRmBBv3Vd47vQbmaG3Gm5tVdhOCRc5lla3WNnFhTBgNhtNpZHQJCCBnLSRCdBuoRtvFDpiCYHV+wP53mekjmx84LWUIsBuTjLQCFco3cc4nLSwET2iiwdGJOA/1n2ZWcsGAab8DbZC0mIlhBJkns4NESHGkn41/u8gIaeoDAbe4e459RleuKnCY1gdFi3D6HOqeUamgMFcwC56w/vZZOlGUiN6jFQI0IqvmDR1Gz6nYqocULb3kfTGI1a65T/JwbDsCfBXA6sU3LWfbEnRn12KAWcu6REJW2hDP87JUhePErvSku1gRCHedzSTgADqD3gTdqTwq+X56Kt4OBuSaLOkrz7jLSjBEy8z6yi+DBpEnrIIqNsX9aor4W5IPBwhT3hxtKhay/mcnQ25xGmEueWVl5kujNr1flyZY/l5bvU4IsB9dqBXCnZSiFjtCY7PkWL35hsMYtpDKbQZh8of/k+rcyO8Ov16Zf0Jlk0JbcSyBjPZs7fhGrZjXNeMcTbQh+yk5GWbIMhB+LOkk5+qsbRt1O7fF7q2Zf1j/Jxfjy0apS1y2x9TiSV3WvTEgTixA1VQ1Ab9BkbSI30G+ujoVUAL7ak1xvfle0L3SYrPDlhyYhJia9Af73wXWyor6TM14OJC2W/f1FCgjzFuyABExKB7JWevHq6rJUwOxcDP5Rdc/9RBJgEJWb47LKUeQYc1ItTaV53xTkQnwRIAEUbduMQYzO7ZMGbFs+b+BqiCtg82AAJmrtn1bIq1wIt/rZR6c8ALLefD8rOjQ2KP4tCtE+R/svtU8SE0n+54xKYYv1hMFpgDZUYgE4GGhi4hXc0yOgkmx54F+7M6F5nfF6R7J68sw8Huaw2N6LAxCjuQbh6AxDlnDS7kndngPmsrVnwH6bwDmbUUct0YiOWCRLxZkf6WfdCOwtmo70x8cET6C1t7CNRC7AAU8CY7xmkzSDWdCNnk4sy6Gl9LLC0WUB/TExP7Wm7Sv6Xg8Pgib1K3AMjb6Vx9/FKYJYtsCLvql9Pzl/iX5wtX9Yv83Qaj2jyjMHVss3NFNfddApyqKrb34JQMEWPRFBiDbzkca1+NkDU8YHQlu8SszCIgMTh0ZQj2HNyGcS3cepDtpT8FrM2VCN72MUGhsRnKrnzzLOBjsaEQ7sDsbSAjPlWokDhdDB8W042Gc1AFSv79dRozodammrNaYHSJ9V3uVMxBtQXspyOVY0Yco4vp74gZfNIGWDMOLpq559DQVzOmLpeeS+1m1nou6mXgiegmMZOsBot8DrknGSnbcYy53ElttouBuMM4j2a9tcVLReh2Nc42JEUtsyf4dQUzdUmTIi7oakndGbH7F1qzkzPigIfC0B4/a9ThECBl/5YO1jFyP7msKmXAd9+9/HzAPzyPcCHL+fayTyiEIUABLTv/78DDI66+9/fiCR085C6ahsFOFfZXRbB9es7FrB+uetg8r2R3Ze+k1yDH/mrk0PVT+u77Pb9l36ZvAcyAnlj+GYXv8r/AFfgFfRbl/eOAbeOauSxePSGOp88xatY106o0w6c20DMDx0GTuWI9SX5KTucdZFmv1P2F24mxw93OWn2KvfHXnVq5hpcCoddwc/rlwk6nUQddfGndSxBHf+h52Txo4SY7u1n4pdrumSLT1KWzndKDgR0AC4DCzMajlO+eKKTlazjvq3nd/1kjf8dr/ISsAdJcMGu0VaIWutmYGB5iplVMghT4vCmJL6hszrZCZ7hh37k5EmSYPacpbEhuokakwEMClwcmxF+bspkdcelxy8NK3N0k6JbXuaXsUbGKd3Ij503GQy/kuG9W9bTSQrAvbvy4uYpU28lcxbH/5ecWwf2JrhX6zNbU2Zf5t3wxjA7LjPNeyZ29YxdXxO86CzOoF9TgWk8QR0cS6nAq7/+5bVAeDQWkJmrhFG5YyEsNwam5haCISSlDGA3HEztgtXQBguhCXrSux+xkqwNcXgmRmT31xuKT+3LuOD8unEzSOi/zm+2ux26my09SunkaZbN6MfyleT71UrXpWDXkpR7jJR4LJ1OaAe2PLrEPVVQ+Y3BTkHyigWGC4qjYo3h/HSomGD2Q2lWkz42nTX7pad7FrO+vXn/ZfCgcyqNXss4Xx5w+S75+jID6N72A3NdXzqg8RWC6s62V1eTrT/r3VbryxxswBqMU9YVUxc/VF+j3GbL9uWfUmbfe2x+qP5sfIcUCA9ob+rh41tZo4EIhKAG6rYAzyfOm0HW7HJZ1g1dN73hsVBsPoIT/3/o/vadrbrzC2aXIv0L93Urzj2Vbge+KhHQSqKuWzsU4Pxgt+PLcsj05cZ4fcqqNnyymTT7JfEmc9wLyeOOpebjjWbXUoIWmvH+SG0+zanyJM+dLyZn9RhrUSDSjLT0PWAfNOIMZ8xd4jPU+BvGQ325HIoZ+zm7/cbcS8lHT4au/zL4uS+/7a+SuT5/g6CuahUGoMiM0QE8fFMAAHaOEa7XJUCwJCu0DI22HB2eEgNFag3xDJhhY8gszUhGRPE2xyudnn7DxrQ7NpN1H8q848stYFgIAX6xU9XQQH3p01HHDOo1QxryPQOaM0fBjgvgueXeIF7TQHCaEYrtyULTOgVYXp5cDK2LAVvcpRyH7PIwLqPLG3gKLj/jc7nyE7C9OkSo4OraLeK85mwIMB4qAUHnuiWk4ygwu14cml4Jq/eHoV8/2CC78TDgw5dfxgQJjdzc9g/FjNhncsEHYSWCmxBOcynnwwN5LplwnCWn7Z4xWVK0UtvUJkywMqiQ0afmE7+ZianVjY+QpgnG6S9hQ44GqpLPoYb1eIr3ehON6Y7C/phHN/rz/iM+Ho27fa2VD6RZv9ftSuz9o2c4Ic0zK4MHlTubA/2qG2JDHi/xujIbaEaPgSBMfmPZc9PjUz54OQSZyU9qJxu0io/36ckVRvKZx8Vy/TwCTfnCzmfws7QgGf9sfVep+FBdMvTBxkmp31DAhv9sG8f1ggYQt+FLT2Rg9e3fBaAXV3pbF3aI09TayOVB8g309Ey+6OvqmWL2FV0DzIj5TC74YOrMpYKhm0zqMmzG2eQh6bKyjEqZiJlxLS595nC/RmHHWXKMnrTni9APjqikQpVGe8rlNsYJhhcqcfu47upPNWK9c7QxGz/k1Hork5OyOXhW2WlKCBQiW20Tqmf5He6Z0KQY0wjxLsUGWtuOZMf9yLGuPk27ZrqgmfSUp1JTYory0KEJ0ng7ma4O6sBGy47uSF8V6xWGuI7JNW3W1sT6MjeDcO1p5llzqDB9xwZeLoUZXmoT1fAW4Q3GUysXAWzJ3i3024uPVLN2L7Hvx6u8XG283h8Bmz2eDpPt9DCZ7epCzvfsKoqWh2zyx6CSjo4rT8GhSIx62TuRYb3IYdVWUx+HaxTQxBQPTNmyd8u0Hx/8PFyciXsX3/p73/UHR9PrC8t2U4OzxPKnNz1fvM66qj+yjYUep/2vV26hSEFeALJgdgxYkvkTG4Yxg5JVCOTBK9bOGudUfDgDq+pBYMO22AYRPlWzk02zd9E559PuAr6qaj9lIAc1kKOqNUKmMnqc5Eb/aRkGtvHh4HNx1SWXbTehLATE5mTVDq7cuEdGQc0jGnpP/coBI3lMLOze8XTDNddzaWJcLJjdwrwwOJj/pyXNhyJZb/LtEN9ye55/ISabZIqp8pNTNC0lsNWFFCrMUKF24ElNF55WCLwWYYa/FKSrMD0Do/wiRWXqRyOZi86isBjFipRUVGlWxUq6WaLSYrNzNDJno3JxK+tJmY02Jo+KyqrkLU6FcpWqVeXjF2hN49spXoKxVatRW2J16nvmd/m1SKpRk+beSzZTjdr+ahbGnz+J23WUIrVOXbr1lCa93t5W2UEZ9feiagMGDZlFpU69Bo2aNGvRqk27Dp26zDbHXPPMt8BCiwoOplW9Dql3SwZ7JPVuy0CdCkFe1euXenek3j2p90Dq3ZWB7qtzeii/A6kxYUzdNuKuR1vXicys7SSKn+Yee0G5PB0Py1HH8F/9GycN/rK8tKszBdnd2Zqc7Fx8gpx3IT8BveJSmbJ7zZWEVE5o1My8e7Vp7VrtVljZ9ZjciK1eQzdb2K2+YEId1/ODMGKYsHwi2kKAWz7hbCG6LSVOrt9IwECAAgMOAiQo2EEDwGvGHRd40B+6IIxYnKRcyEzlRVnVTdv1GF9mT/OyAsx047sSsLD+JMS+w74a8A3Hf0Q+mOej/aS65NgkkISp+RZY74i5DixwyhZbboMlllr2M4Zn/3bh84yOQIABJhoTFpWB4S3srHwIckLsiLr/IfsFv+EP/IV/8B8QLiDBBQIPfAgghAhiSCDFevz/CkaRbuwjXmW6uVQKh6GSfXRg6eWAnyfzWflcvrRK4n4btSWl77KlW3KETKxcRyur1y3GgsY6SD5P4U9F+ew+hxZR84ZcKGXitBCsH1phwI3+n1SG0Ssy8xicx6ZyYhZDemvy3gHzNbemQ2HLOYGc8p9ATtGGwhEfqxx3Eq3DZI3rV84/U48htwSuShjKSVG1eYlBl8xhC3obEk92T6ZiYZd9sh/yffFwf1X5fl03S86ErZXnhA7J8XC8OjSAHMMxOR6vj532mjwWqkhbo9xF537VcBKdM4fz+/TsRq+dosfRD1ok4McJ9DPugP3suAnml+CA4ZoScCd6lCDFbWkDCSQEFAh98HM+BmuBhCGUUMKt1GF7GG8gnHhErhN3yZrI8tYk4pXVJh0pCSbHq2SNkUyyXLZKQYnKK1RSSJErpMQSy5Ooio/V8apqAKlD3dYbSFLn61BLKy22WSt3vMsje5xmqC2wA3ZZgAQXCDzwIYAQIoghgRQyUHCFHAoooYIaGmjhBvfsEUnr3bDRUJvb+VS4yUTSlAzjzKC0Qk82e3noKY4BuK9k6aZB6ExRu2eYxVbvYS/omWwujKgzhdIKU74JlOFULCnEHY2WbnCla9mcgiCrQunaSOhMobSGHlZOmMXVEIY+uUZznVuPy+NCwzNwxNHU+mZaQicZle60wpi5s24MHUtpWwlzmN3WtA/CbHh0eQTr1zFa3A2PBpuQK6sJB71x7l9gwd/T4BuqUR+9HdUxFn+z00Z3Yerxw73/jUETI9l3YWhlB370o3RVlrnz0ecIneI0sNtTT+2G42VGyeltWKQxHtbjU85q4zSzMa2OrJVExbmCD+wuq7ZzJpOGnykkaedT6pXjJEIf7TMyrssxHeqpjk3VL7FeqL1hWeZLcxjbfWordTuG+iF43pk4vJxa2o9n6GGxSzjLy1zRhM2qgEgklPY8uvsUPSmrDBJcJvap5M+j6jci0V0ZOuzTgnw+Mf6i+8vxj/bdGdKGysvAE9mYeK50ATIIgJCCQB4CCAikECCAQAopBBgBQSZAKZEXCJEKApFKJVxxvVdthEJnqLZGVMrdiTIPJ5qTp2F+DsvVWcvbE2kJnKNOEnq0cRqfY7X/FS51h93E3clxcZVuVTsSvo6Mw2Fwx0DiIBxGHOY4HAYnBOFw6jDMw9zzcBopeDkvG1ItnbFKRGTVUSfSqihhNSwOq6DQ4ttCi26RWGyFqedl1yRsRhAV6BiMEISCxGCOgVAYqbVnsolnfM+pIeK06Aju1ToZM3dUW2+2eu797GqrxZt3b0/IH6/tx2FjD1UUt8YanmD44sAWaqsUQBPzNK04LdGmPeHn7BaBR1jFcYo254lyqRN+Jm9i3xR16O/rmyR+eqBdGumCHR4xKerNw1OV4dT7H8/ybNeXHxee1SIXewPodY+7JsFYke16SqcQGW3U7o2NSNeJerfs1ZlmYnXMYm3XEeIHlIDo33HqjQd2EnZ++DBd8phvfbET7OO+AZzA/v7+Dlvup2+JCo/+iB+zD+GW+gDlCb5aMtMUN/5oB3MN/kZ43Pcll4ZLVPty7Qu1jwCG+LyiOUTALfHN74ACJ/zQ2558375DTX7hV5Rro4v7TbCegxPeN/zBavzUQbM27GpO/1Qs5M0/BIisM05644500i+oyPZbHG74VDs+4+TzP+nK246QpwAA") format("woff2");
38
38
  }`;
39
- //# sourceMappingURL=OpenApi.fonts.js.map
39
+ //# sourceMappingURL=fonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/apps/docs/fonts.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B5B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { docs } from './App.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/apps/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { docs } from './App.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/apps/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA"}
@@ -3,4 +3,4 @@ export declare const logoUrl: {
3
3
  dark: string;
4
4
  light: string;
5
5
  };
6
- //# sourceMappingURL=OpenApi.logo.d.ts.map
6
+ //# sourceMappingURL=logo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../../src/apps/docs/logo.ts"],"names":[],"mappings":"AAgBA,2EAA2E;AAC3E,eAAO,MAAM,OAAO;IAAK,IAAI;IAAiB,KAAK;CAAkB,CAAA"}
@@ -16,4 +16,4 @@ const light = `<svg width="626" height="181" viewBox="0 0 626 181" fill="none" x
16
16
  const dataUri = (svg) => `data:image/svg+xml,${encodeURIComponent(svg)}`;
17
17
  /** Theme-aware Tempo API wordmark for the docs header (`vocs.logoUrl`). */
18
18
  export const logoUrl = { dark: dataUri(dark), light: dataUri(light) };
19
- //# sourceMappingURL=OpenApi.logo.js.map
19
+ //# sourceMappingURL=logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo.js","sourceRoot":"","sources":["../../../src/apps/docs/logo.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,kEAAkE;AAClE,MAAM,IAAI,GAAG;;;;OAIN,CAAA;AACP,MAAM,KAAK,GAAG;;;;OAIP,CAAA;AACP,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,sBAAsB,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAA;AAChF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { Hono } from 'hono';
2
+ import type * as App from '../../App.js';
3
+ import type { docs } from './App.js';
4
+ /**
5
+ * Builds the Vocs reference handler. Loaded via dynamic import on the first
6
+ * docs request (see `docs()` in `App.ts`), keeping the multi-MB renderer off
7
+ * isolate startup.
8
+ */
9
+ export declare function create(options: create.Options): Hono;
10
+ export declare namespace create {
11
+ /** Options for building the reference handler. */
12
+ type Options = {
13
+ /** Host mount prefix derived from the wrapper's matched `routePath` (`''` at root). */
14
+ mount: string;
15
+ /** Memoized OpenAPI document builder — the same document served at `/openapi.json`. */
16
+ spec: App.create.DocsContext['spec'];
17
+ /** Vocs reference options (theme, top navigation, logo, socials, …). */
18
+ vocs: docs.Options;
19
+ };
20
+ }
21
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/apps/docs/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAIpC;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAgBpD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,kDAAkD;IAClD,KAAK,OAAO,GAAG;QACb,uFAAuF;QACvF,KAAK,EAAE,MAAM,CAAA;QACb,uFAAuF;QACvF,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACpC,wEAAwE;QACxE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAA;KACnB,CAAA;CACF"}
@@ -0,0 +1,112 @@
1
+ import { Hono } from 'hono';
2
+ import { Handler as vocs_Handler } from 'vocs/server';
3
+ import openrpcSpec from '../../openrpc.json' with { type: 'json' };
4
+ import { pilatFontFaces } from './fonts.js';
5
+ import { logoUrl } from './logo.js';
6
+ /**
7
+ * Builds the Vocs reference handler. Loaded via dynamic import on the first
8
+ * docs request (see `docs()` in `App.ts`), keeping the multi-MB renderer off
9
+ * isolate startup.
10
+ */
11
+ export function create(options) {
12
+ const { mount, spec, vocs } = options;
13
+ const handler = vocs_Handler.openApi({
14
+ // Inline the OpenRPC doc so vocs expands it without a self-subrequest
15
+ // (see `inlineOpenrpc`); the public `/openapi.json` keeps the URL ref.
16
+ spec: () => spec().then(inlineOpenrpc),
17
+ sidebar: { collapsed: true },
18
+ vocs: { logoUrl, title: 'Tempo API Reference', ...vocs },
19
+ }, { css, fallback: 'next' });
20
+ if (!mount)
21
+ return handler;
22
+ // Re-mount under the host prefix so the handler's `routePath`-derived mount
23
+ // (asset link bases, known-route checks) matches a direct `.route()` mount.
24
+ return new Hono().route(mount, handler);
25
+ }
26
+ /**
27
+ * Custom CSS injected into the standalone reference's shell `<head>` (via
28
+ * `Handler.openApi(_, { css })`), after the Vocs design-system styles so it
29
+ * overrides them:
30
+ *
31
+ * - Page/surface backgrounds use Tempo's near-black dark palette and pure-white
32
+ * light palette via `light-dark(<light>, <dark>)`.
33
+ * - The dark border color is darkened (the light theme keeps its default).
34
+ * - Every corner is squared. The universal `!important` rule beats hard-coded
35
+ * `border-radius` values and inline styles (e.g. the Scalar playground), which
36
+ * overriding the radius scale variables alone would miss.
37
+ * - The default sans/body font is Pilat (Vocs reads `--vocs-font-family`); the
38
+ * webfont is embedded via {@link pilatFontFaces}. Body stays at the default
39
+ * weight (400); headings are pinned to 500, which renders Pilat Demi (the
40
+ * family has no 500 cut, so Demi covers the 500-600 range — see
41
+ * {@link pilatFontFaces}).
42
+ */
43
+ const css = `${pilatFontFaces}
44
+
45
+ :root {
46
+ --vocs-font-family: "Pilat", Arial, Helvetica, sans-serif;
47
+ --vocs-background-color-primary: light-dark(#fafafa, #0a0a0a);
48
+ --vocs-background-color-surface: light-dark(#fff, #121212);
49
+ }
50
+
51
+ :is(h1, h2, h3, h4, h5, h6)[data-v] {
52
+ font-weight: 500;
53
+ }
54
+
55
+ /* Nudge the header logo a touch larger than the default max-h-7 (1.75rem). */
56
+ [data-v-logo-image] {
57
+ max-height: 2rem;
58
+ }
59
+
60
+ /* Sidebar leaf items render Regular (the nav's 450 default otherwise resolves to
61
+ * Demi via the 500-600 range). Group labels ([data-v-sidebar-section-header])
62
+ * keep their heavier weight. */
63
+ [data-v-sidebar-item] {
64
+ font-weight: 400;
65
+ }
66
+
67
+ [data-vocs-theme='dark'] {
68
+ --vocs-color-gray4: oklch(20% 0 0);
69
+ --vocs-color-gray5: oklch(0.23 0 0);
70
+ --vocs-border-color-primary: oklch(0.25 0 0);
71
+ --vocs-border-color-secondary: oklch(0.25 0 0);
72
+ }
73
+
74
+ *,
75
+ *::before,
76
+ *::after {
77
+ border-radius: 0 !important;
78
+ }`;
79
+ /**
80
+ * Returns a shallow copy of `spec` with the JSON-RPC passthrough operation's
81
+ * `x-openrpc` replaced by the inline OpenRPC document, for the docs handler.
82
+ *
83
+ * Vocs expands `x-openrpc` at request time. A URL reference (as kept in the
84
+ * public `/openapi.json` by `App.create`'s `applyOpenrpcLink`) would make the
85
+ * docs worker fetch its own `/openrpc.json` — a self-subrequest that is
86
+ * unreliable on Cloudflare Workers and silently falls back to a single,
87
+ * unexpanded operation. Inlining the committed artifact keeps expansion
88
+ * deterministic across local and deployed environments, without bloating the
89
+ * public spec. Only the affected path/op are cloned; the rest of the (large)
90
+ * document is shared by reference.
91
+ */
92
+ function inlineOpenrpc(spec) {
93
+ const paths = {};
94
+ for (const [pathname, item] of Object.entries(spec.paths)) {
95
+ let next = item;
96
+ if (isRecord(item))
97
+ for (const [method, op] of Object.entries(item))
98
+ if (isRpcOperation(op))
99
+ next = { ...item, [method]: { ...op, 'x-openrpc': openrpcSpec } };
100
+ paths[pathname] = next;
101
+ }
102
+ return { ...spec, paths };
103
+ }
104
+ // The JSON-RPC passthrough's operation id, set by its route definition and
105
+ // targeted by `App.create`'s `applyOpenrpcLink`.
106
+ function isRpcOperation(op) {
107
+ return isRecord(op) && op['operationId'] === 'rpcRequest';
108
+ }
109
+ function isRecord(value) {
110
+ return !!value && typeof value === 'object' && !Array.isArray(value);
111
+ }
112
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../../src/apps/docs/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAGrD,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACrC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAClC;QACE,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;QACtC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,IAAI,EAAE;KACzD,EACD,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAC1B,CAAA;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAA;IAC1B,4EAA4E;IAC5E,4EAA4E;IAC5E,OAAO,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,GAAG,GAAG,GAAG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmC3B,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,SAAS,aAAa,CAAkD,IAAU;IAChF,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,IAAI,QAAQ,CAAC,IAAI,CAAC;YAChB,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7C,IAAI,cAAc,CAAC,EAAE,CAAC;oBAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAA;QAC7F,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC;AAED,2EAA2E;AAC3E,iDAAiD;AACjD,SAAS,cAAc,CAAC,EAAW;IACjC,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,YAAY,CAAA;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACtE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { data } from './data/index.js';
2
+ export { mcp } from './mcp.js';
3
+ export { platform } from './platform/index.js';
4
+ export { relay } from './relay/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { data } from './data/index.js';
2
+ export { mcp } from './mcp.js';
3
+ export { platform } from './platform/index.js';
4
+ export { relay } from './relay/index.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,76 @@
1
+ import * as z from 'zod/mini';
2
+ import type * as App from '../App.js';
3
+ /** Zod schemas owned by the MCP endpoint's OpenAPI description. */
4
+ export declare namespace schema {
5
+ /** JSON-RPC request identifier. */
6
+ const Id: z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniNumber<number>, z.ZodMiniNull]>;
7
+ /** JSON-RPC error payload. */
8
+ const Error: z.ZodMiniObject<{
9
+ code: z.ZodMiniNumber<number>;
10
+ data: z.ZodMiniOptional<z.ZodMiniUnknown>;
11
+ message: z.ZodMiniString<string>;
12
+ }, z.core.$strip>;
13
+ /** MCP JSON-RPC response payload. */
14
+ const Response: z.ZodMiniObject<{
15
+ error: z.ZodMiniOptional<z.ZodMiniObject<{
16
+ code: z.ZodMiniNumber<number>;
17
+ data: z.ZodMiniOptional<z.ZodMiniUnknown>;
18
+ message: z.ZodMiniString<string>;
19
+ }, z.core.$strip>>;
20
+ id: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniNumber<number>, z.ZodMiniNull]>>;
21
+ jsonrpc: z.ZodMiniLiteral<"2.0">;
22
+ result: z.ZodMiniOptional<z.ZodMiniUnknown>;
23
+ }, z.core.$strip>;
24
+ }
25
+ /**
26
+ * The MCP route group: a stateless streamable-HTTP MCP server at `/mcp` whose
27
+ * tools mirror the API's data domain (scoped via the OpenAPI document's
28
+ * `Data API` tag group), plus the remote Tempo docs tools. Mount alongside
29
+ * the other route groups:
30
+ *
31
+ * ```ts
32
+ * App.create(options).route('/', mcp({ fetch: (request) => getApp().fetch(request) }))
33
+ * ```
34
+ */
35
+ export declare function mcp(options: mcp.Options): import("hono/hono-base").HonoBase<App.Environment, {
36
+ "/mcp": {
37
+ $post: {
38
+ output: {};
39
+ outputFormat: string;
40
+ status: import("hono/utils/http-status").StatusCode;
41
+ input: {};
42
+ };
43
+ };
44
+ } & {
45
+ "/mcp": {
46
+ $all: {
47
+ output: {};
48
+ outputFormat: string;
49
+ status: import("hono/utils/http-status").StatusCode;
50
+ input: {};
51
+ };
52
+ };
53
+ }, "/", "/mcp">;
54
+ export declare namespace mcp {
55
+ /** Options for the MCP route group. */
56
+ type Options = {
57
+ /** Remote docs MCP source mounted as the `docs` tool group, or `false` to omit it. @default 'https://mcp.tempo.xyz/mcp' */
58
+ docs?: Source | false | undefined;
59
+ /** In-process fetch handler for the composed app (e.g. `(request) => app.fetch(request)`). */
60
+ fetch: (request: Request) => Response | Promise<Response>;
61
+ /** MCP server name. @default 'tapimo' */
62
+ name?: string | undefined;
63
+ /** MCP server version. @default '0.0.0' */
64
+ version?: string | undefined;
65
+ };
66
+ /** A remote streamable-HTTP MCP server endpoint. */
67
+ type Source = string | URL | {
68
+ /** Fetch handler used for MCP requests. Defaults to `globalThis.fetch`. */
69
+ fetch?: ((request: Request) => Response | Promise<Response>) | undefined;
70
+ /** Headers merged into every MCP request. */
71
+ headers?: Record<string, string> | undefined;
72
+ /** Streamable-HTTP MCP endpoint URL. */
73
+ url: string | URL;
74
+ };
75
+ }
76
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAerC,mEAAmE;AACnE,yBAAiB,MAAM,CAAC;IACtB,mCAAmC;IAC5B,MAAM,EAAE,4FAEiF,CAAA;IAEhG,8BAA8B;IACvB,MAAM,KAAK;;;;qBAU0D,CAAA;IAE5E,qCAAqC;IAC9B,MAAM,QAAQ;;;;;;;;;qBAaoD,CAAA;CAC1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;gBAgHvC;AA8CD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,uCAAuC;IACvC,KAAK,OAAO,GAAG;QACb,2HAA2H;QAC3H,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;QACjC,8FAA8F;QAC9F,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QACzD,yCAAyC;QACzC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,2CAA2C;QAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;IAED,oDAAoD;IACpD,KAAK,MAAM,GACP,MAAM,GACN,GAAG,GACH;QACE,2EAA2E;QAC3E,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAA;QACxE,6CAA6C;QAC7C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;QAC5C,wCAAwC;QACxC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAClB,CAAA;CACN"}
@@ -0,0 +1,188 @@
1
+ import { Hono } from 'hono';
2
+ import { Cli as incur_Cli } from 'incur';
3
+ import * as z from 'zod/mini';
4
+ import * as Auth from '../internal/Auth.js';
5
+ import * as OpenApi from '../internal/OpenApi.js';
6
+ import * as Metadata from './metadata.js';
7
+ /** Document tag group whose operations surface as MCP tools (the data domain). */
8
+ const tagGroup = 'Data API';
9
+ /** Tags inside the group hidden from MCP: partner-shaped CoinGecko mirrors and the MCP endpoint itself. */
10
+ const excludedTags = ['CoinGecko', 'MCP'];
11
+ /** Usage guidance surfaced to MCP clients on initialize. */
12
+ const instructions = "Tools mirror the Tempo API's data domain. Authenticated tools accept a Tempo API key: send it as an `Authorization: Bearer` header on the HTTP request, or pass the `authorization` tool input per call. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.";
13
+ /** Zod schemas owned by the MCP endpoint's OpenAPI description. */
14
+ export var schema;
15
+ (function (schema) {
16
+ /** JSON-RPC request identifier. */
17
+ schema.Id = z
18
+ .union([z.string(), z.number(), z.null()])
19
+ .check(z.describe('Client-supplied JSON-RPC request id used to match responses to requests.'));
20
+ /** JSON-RPC error payload. */
21
+ schema.Error = z
22
+ .object({
23
+ code: z
24
+ .number()
25
+ .check(z.int(), z.describe('Numeric JSON-RPC error code returned by the MCP server.')),
26
+ data: z
27
+ .optional(z.unknown())
28
+ .check(z.describe('Optional extra error details returned by the MCP server.')),
29
+ message: z.string().check(z.describe('Human-readable JSON-RPC error message.')),
30
+ })
31
+ .check(z.describe('JSON-RPC error object returned when a message fails.'));
32
+ /** MCP JSON-RPC response payload. */
33
+ schema.Response = z
34
+ .object({
35
+ error: z
36
+ .optional(schema.Error)
37
+ .check(z.describe('JSON-RPC error object returned when a message fails.')),
38
+ id: z
39
+ .optional(schema.Id)
40
+ .check(z.describe('Client-supplied JSON-RPC request id used to match responses to requests.')),
41
+ jsonrpc: z.literal('2.0').check(z.describe('JSON-RPC protocol version; MCP uses `2.0`.')),
42
+ result: z.optional(z.unknown()).check(z.describe('Result returned by the MCP method.')),
43
+ })
44
+ .check(z.describe('One MCP JSON-RPC response returned by the server.'));
45
+ })(schema || (schema = {}));
46
+ /**
47
+ * The MCP route group: a stateless streamable-HTTP MCP server at `/mcp` whose
48
+ * tools mirror the API's data domain (scoped via the OpenAPI document's
49
+ * `Data API` tag group), plus the remote Tempo docs tools. Mount alongside
50
+ * the other route groups:
51
+ *
52
+ * ```ts
53
+ * App.create(options).route('/', mcp({ fetch: (request) => getApp().fetch(request) }))
54
+ * ```
55
+ */
56
+ export function mcp(options) {
57
+ const { docs = 'https://mcp.tempo.xyz/mcp', fetch, name = 'tapimo', version = '0.0.0' } = options;
58
+ // One incur instance per caller origin: the OpenAPI document is parsed once,
59
+ // and generated commands rebase onto the origin so tool results embed real
60
+ // absolute URLs (e.g. token asset URIs).
61
+ const clis = new Map();
62
+ function resolve(origin) {
63
+ let cli = clis.get(origin);
64
+ if (!cli) {
65
+ cli = build(origin);
66
+ clis.set(origin, cli);
67
+ // A failed build (spec fetch or docs resolution) retries next request.
68
+ cli.catch(() => clis.delete(origin));
69
+ }
70
+ return cli;
71
+ }
72
+ async function build(origin) {
73
+ const response = await fetch(new Request(new URL('/openapi.json', origin)));
74
+ if (!response.ok)
75
+ throw new Error(`openapi.json request failed: ${response.status}`);
76
+ const document = (await response.json());
77
+ const cli = incur_Cli.create(name, {
78
+ description: 'Tempo API',
79
+ // Generated commands build requests against `http://localhost`; rebase
80
+ // them onto the caller origin and dispatch in-process.
81
+ fetch: (request) => {
82
+ const url = new URL(request.url);
83
+ return fetch(new Request(new URL(url.pathname + url.search, origin), request));
84
+ },
85
+ mcp: { instructions },
86
+ openapi: scope(document),
87
+ openapiConfig: { forwardHeaders: ['authorization'], mode: 'namespace' },
88
+ version,
89
+ });
90
+ if (docs !== false)
91
+ cli.command('docs', { description: 'Search the Tempo documentation.', mcp: docs });
92
+ return cli;
93
+ }
94
+ async function handler(c) {
95
+ const cli = await resolve(new URL(c.req.url).origin);
96
+ // incur routes on the first path segment; pin the path to `/mcp` so a
97
+ // mount prefix never leaks into its router.
98
+ return cli.fetch(new Request(new URL('/mcp', c.req.url), c.req.raw));
99
+ }
100
+ // The documented POST carries the auth policy (described routes are
101
+ // default-closed); other methods fall through to the bare route and incur's 405.
102
+ const app = new Hono()
103
+ .post('/mcp', Auth.policy({ apiKey: { scopes: [] }, public: true }), OpenApi.describeRoute({
104
+ description: "A stateless streamable-HTTP MCP server: send JSON-RPC 2.0 messages as `POST` with `Accept: application/json, text/event-stream`. Tools mirror the API's data domain, plus `docs_*` documentation search. Anonymous requests use the public quota; send `Authorization: Bearer <api key>` for protected tools.",
105
+ operationId: 'mcpRequest',
106
+ // The JSON-RPC request envelope is protocol-owned (like `/rpc`), so the
107
+ // body documents an example rather than a schema.
108
+ requestBody: {
109
+ content: {
110
+ 'application/json': {
111
+ example: { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} },
112
+ },
113
+ },
114
+ required: true,
115
+ },
116
+ responses: {
117
+ 200: {
118
+ content: {
119
+ 'application/json': {
120
+ example: {
121
+ jsonrpc: '2.0',
122
+ id: 1,
123
+ result: { tools: [{ name: 'v1_tokens_get', description: 'List tokens' }] },
124
+ },
125
+ schema: OpenApi.resolver(schema.Response),
126
+ },
127
+ },
128
+ description: 'JSON-RPC response returned by the MCP server.',
129
+ headers: { ...OpenApi.successHeaders },
130
+ },
131
+ 202: {
132
+ description: 'The message was a notification or client response; there is nothing to return.',
133
+ },
134
+ 400: {
135
+ content: { 'application/json': { schema: OpenApi.resolver(schema.Response) } },
136
+ description: 'Malformed or invalid MCP message, returned as a JSON-RPC error response rather than the standard error envelope. A malformed API key returns the standard `400` envelope instead.',
137
+ },
138
+ 401: OpenApi.standardError(401, 'The presented API key is invalid. Anonymous requests are allowed under the public quota.', ['api_key_invalid']),
139
+ 406: {
140
+ content: { 'application/json': { schema: OpenApi.resolver(schema.Response) } },
141
+ description: 'The `Accept` header must include both `application/json` and `text/event-stream`. Returned as a JSON-RPC error response.',
142
+ },
143
+ 429: OpenApi.standardError(429, 'Rate limit exceeded.'),
144
+ 500: OpenApi.standardError(500, 'Internal server error.'),
145
+ },
146
+ summary: 'Call MCP',
147
+ tags: ['MCP'],
148
+ }), handler)
149
+ .all('/mcp', handler);
150
+ return Metadata.attach(app, openapi);
151
+ }
152
+ /** The OpenAPI metadata this group owns: the MCP endpoint's tag, surfaced under the `Data API` group. */
153
+ const openapi = {
154
+ tags: [
155
+ {
156
+ name: 'MCP',
157
+ description: 'A hosted Model Context Protocol server: the data domain and Tempo docs exposed as tools.',
158
+ },
159
+ ],
160
+ 'x-tagGroups': [{ name: tagGroup, tags: ['MCP'] }],
161
+ };
162
+ /** HTTP methods that carry operations in an OpenAPI path item. */
163
+ const methods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put', 'trace']; // prettier-ignore
164
+ /**
165
+ * Narrows the document to the data domain: operations tagged inside the
166
+ * `Data API` tag group, minus excluded tags. Platform, relay, and session
167
+ * operations never surface as tools.
168
+ */
169
+ function scope(document) {
170
+ const group = document['x-tagGroups']?.find((entry) => entry.name === tagGroup);
171
+ if (!group)
172
+ throw new Error(`openapi.json is missing the "${tagGroup}" tag group`);
173
+ const tags = new Set(group.tags.filter((tag) => !excludedTags.includes(tag)));
174
+ const paths = {};
175
+ for (const [path, item] of Object.entries(document.paths)) {
176
+ // Keep in-domain operations; non-method keys (parameters, summary) ride along.
177
+ const entries = Object.entries(item).filter(([method, operation]) => {
178
+ if (!methods.includes(method))
179
+ return true;
180
+ const tags_operation = operation.tags;
181
+ return tags_operation?.some((tag) => tags.has(tag)) ?? false;
182
+ });
183
+ if (entries.some(([method]) => methods.includes(method)))
184
+ paths[path] = Object.fromEntries(entries);
185
+ }
186
+ return { ...document, paths };
187
+ }
188
+ //# sourceMappingURL=mcp.js.map