@aerokit/sdk 12.44.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 (399) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +170 -0
  3. package/dist/cjs/bpm/deployer.js +57 -0
  4. package/dist/cjs/bpm/index.js +35 -0
  5. package/dist/cjs/bpm/process.js +636 -0
  6. package/dist/cjs/bpm/tasks.js +973 -0
  7. package/dist/cjs/bpm/values.js +82 -0
  8. package/dist/cjs/cache/cache.js +64 -0
  9. package/dist/cjs/cache/index.js +26 -0
  10. package/dist/cjs/cms/cmis.js +689 -0
  11. package/dist/cjs/cms/index.js +26 -0
  12. package/dist/cjs/component/decorators.js +126 -0
  13. package/dist/cjs/component/index.js +36 -0
  14. package/dist/cjs/core/configurations.js +110 -0
  15. package/dist/cjs/core/context.js +47 -0
  16. package/dist/cjs/core/env.js +45 -0
  17. package/dist/cjs/core/globals.js +54 -0
  18. package/dist/cjs/core/index.js +35 -0
  19. package/dist/cjs/db/dao.js +795 -0
  20. package/dist/cjs/db/database.js +904 -0
  21. package/dist/cjs/db/decorators.js +167 -0
  22. package/dist/cjs/db/index.js +72 -0
  23. package/dist/cjs/db/insert.js +51 -0
  24. package/dist/cjs/db/orm.js +245 -0
  25. package/dist/cjs/db/ormstatements.js +243 -0
  26. package/dist/cjs/db/procedure.js +112 -0
  27. package/dist/cjs/db/query.js +57 -0
  28. package/dist/cjs/db/repository.js +148 -0
  29. package/dist/cjs/db/sequence.js +59 -0
  30. package/dist/cjs/db/sql.js +516 -0
  31. package/dist/cjs/db/store.js +172 -0
  32. package/dist/cjs/db/translator.js +100 -0
  33. package/dist/cjs/db/update.js +43 -0
  34. package/dist/cjs/etcd/client.js +174 -0
  35. package/dist/cjs/etcd/index.js +26 -0
  36. package/dist/cjs/extensions/decorators.js +40 -0
  37. package/dist/cjs/extensions/extensions.js +108 -0
  38. package/dist/cjs/extensions/index.js +39 -0
  39. package/dist/cjs/git/client.js +277 -0
  40. package/dist/cjs/git/index.js +26 -0
  41. package/dist/cjs/http/client-async.js +224 -0
  42. package/dist/cjs/http/client.js +145 -0
  43. package/dist/cjs/http/decorators.js +76 -0
  44. package/dist/cjs/http/errors/ForbiddenError.js +41 -0
  45. package/dist/cjs/http/errors/ValidationError.js +41 -0
  46. package/dist/cjs/http/errors.js +26 -0
  47. package/dist/cjs/http/index.js +59 -0
  48. package/dist/cjs/http/request.js +281 -0
  49. package/dist/cjs/http/response.js +452 -0
  50. package/dist/cjs/http/rs/resource-common.js +32 -0
  51. package/dist/cjs/http/rs/resource-http-controller.js +306 -0
  52. package/dist/cjs/http/rs/resource-mappings.js +130 -0
  53. package/dist/cjs/http/rs/resource-method.js +218 -0
  54. package/dist/cjs/http/rs/resource.js +232 -0
  55. package/dist/cjs/http/rs.js +31 -0
  56. package/dist/cjs/http/session.js +124 -0
  57. package/dist/cjs/http/upload.js +144 -0
  58. package/dist/cjs/http/utils.js +106 -0
  59. package/dist/cjs/index.js +1 -0
  60. package/dist/cjs/indexing/index.js +29 -0
  61. package/dist/cjs/indexing/searcher.js +70 -0
  62. package/dist/cjs/indexing/writer.js +45 -0
  63. package/dist/cjs/integrations/index.js +26 -0
  64. package/dist/cjs/integrations/integrations.js +55 -0
  65. package/dist/cjs/io/bytes.js +101 -0
  66. package/dist/cjs/io/files.js +344 -0
  67. package/dist/cjs/io/image.js +43 -0
  68. package/dist/cjs/io/index.js +38 -0
  69. package/dist/cjs/io/streams.js +243 -0
  70. package/dist/cjs/io/zip.js +251 -0
  71. package/dist/cjs/job/decorators.js +40 -0
  72. package/dist/cjs/job/index.js +39 -0
  73. package/dist/cjs/job/scheduler.js +347 -0
  74. package/dist/cjs/junit/index.js +18 -0
  75. package/dist/cjs/junit/junit.js +67 -0
  76. package/dist/cjs/kafka/consumer.js +70 -0
  77. package/dist/cjs/kafka/index.js +29 -0
  78. package/dist/cjs/kafka/producer.js +70 -0
  79. package/dist/cjs/log/index.js +26 -0
  80. package/dist/cjs/log/logging.js +174 -0
  81. package/dist/cjs/mail/client.js +153 -0
  82. package/dist/cjs/mail/index.js +26 -0
  83. package/dist/cjs/messaging/consumer.js +83 -0
  84. package/dist/cjs/messaging/decorators.js +40 -0
  85. package/dist/cjs/messaging/index.js +42 -0
  86. package/dist/cjs/messaging/producer.js +81 -0
  87. package/dist/cjs/mongodb/client.js +627 -0
  88. package/dist/cjs/mongodb/dao.js +390 -0
  89. package/dist/cjs/mongodb/index.js +36 -0
  90. package/dist/cjs/net/decorators.js +40 -0
  91. package/dist/cjs/net/index.js +42 -0
  92. package/dist/cjs/net/soap.js +228 -0
  93. package/dist/cjs/net/websockets.js +151 -0
  94. package/dist/cjs/net/wrappers/onClose.js +2 -0
  95. package/dist/cjs/net/wrappers/onError.js +2 -0
  96. package/dist/cjs/net/wrappers/onMessage.js +2 -0
  97. package/dist/cjs/net/wrappers/onOpen.js +2 -0
  98. package/dist/cjs/pdf/index.js +26 -0
  99. package/dist/cjs/pdf/pdf.js +160 -0
  100. package/dist/cjs/platform/command.js +47 -0
  101. package/dist/cjs/platform/engines.js +70 -0
  102. package/dist/cjs/platform/index.js +47 -0
  103. package/dist/cjs/platform/lifecycle.js +49 -0
  104. package/dist/cjs/platform/os.js +51 -0
  105. package/dist/cjs/platform/problems.js +127 -0
  106. package/dist/cjs/platform/registry.js +319 -0
  107. package/dist/cjs/platform/repository.js +498 -0
  108. package/dist/cjs/platform/workspace.js +574 -0
  109. package/dist/cjs/qldb/index.js +26 -0
  110. package/dist/cjs/qldb/qldb.js +24 -0
  111. package/dist/cjs/rabbitmq/consumer.js +50 -0
  112. package/dist/cjs/rabbitmq/index.js +29 -0
  113. package/dist/cjs/rabbitmq/producer.js +38 -0
  114. package/dist/cjs/redis/client.js +190 -0
  115. package/dist/cjs/redis/index.js +26 -0
  116. package/dist/cjs/security/decorators.js +48 -0
  117. package/dist/cjs/security/index.js +40 -0
  118. package/dist/cjs/security/oauth.js +75 -0
  119. package/dist/cjs/security/user.js +88 -0
  120. package/dist/cjs/template/engines.js +139 -0
  121. package/dist/cjs/template/index.js +26 -0
  122. package/dist/cjs/utils/alphanumeric.js +107 -0
  123. package/dist/cjs/utils/base64.js +104 -0
  124. package/dist/cjs/utils/converter.js +78 -0
  125. package/dist/cjs/utils/digest.js +167 -0
  126. package/dist/cjs/utils/escape.js +160 -0
  127. package/dist/cjs/utils/hex.js +104 -0
  128. package/dist/cjs/utils/index.js +68 -0
  129. package/dist/cjs/utils/jsonpath.js +489 -0
  130. package/dist/cjs/utils/qrcode.js +41 -0
  131. package/dist/cjs/utils/url.js +82 -0
  132. package/dist/cjs/utils/utf8.js +61 -0
  133. package/dist/cjs/utils/uuid.js +48 -0
  134. package/dist/cjs/utils/xml.js +57 -0
  135. package/dist/dts/bpm/deployer.d.ts +29 -0
  136. package/dist/dts/bpm/index.d.ts +8 -0
  137. package/dist/dts/bpm/process.d.ts +433 -0
  138. package/dist/dts/bpm/tasks.d.ts +2022 -0
  139. package/dist/dts/bpm/values.d.ts +38 -0
  140. package/dist/dts/cache/cache.d.ts +30 -0
  141. package/dist/dts/cache/index.d.ts +2 -0
  142. package/dist/dts/cms/cmis.d.ts +413 -0
  143. package/dist/dts/cms/index.d.ts +2 -0
  144. package/dist/dts/component/decorators.d.ts +52 -0
  145. package/dist/dts/component/index.d.ts +2 -0
  146. package/dist/dts/core/configurations.d.ts +65 -0
  147. package/dist/dts/core/context.d.ts +19 -0
  148. package/dist/dts/core/env.d.ts +23 -0
  149. package/dist/dts/core/globals.d.ts +30 -0
  150. package/dist/dts/core/index.d.ts +8 -0
  151. package/dist/dts/db/dao.d.ts +8 -0
  152. package/dist/dts/db/database.d.ts +507 -0
  153. package/dist/dts/db/decorators.d.ts +89 -0
  154. package/dist/dts/db/index.d.ts +25 -0
  155. package/dist/dts/db/insert.d.ts +32 -0
  156. package/dist/dts/db/orm.d.ts +44 -0
  157. package/dist/dts/db/ormstatements.d.ts +4 -0
  158. package/dist/dts/db/procedure.d.ts +25 -0
  159. package/dist/dts/db/query.d.ts +48 -0
  160. package/dist/dts/db/repository.d.ts +64 -0
  161. package/dist/dts/db/sequence.d.ts +34 -0
  162. package/dist/dts/db/sql.d.ts +267 -0
  163. package/dist/dts/db/store.d.ts +138 -0
  164. package/dist/dts/db/translator.d.ts +26 -0
  165. package/dist/dts/db/update.d.ts +21 -0
  166. package/dist/dts/etcd/client.d.ts +92 -0
  167. package/dist/dts/etcd/index.d.ts +2 -0
  168. package/dist/dts/extensions/decorators.d.ts +11 -0
  169. package/dist/dts/extensions/extensions.d.ts +41 -0
  170. package/dist/dts/extensions/index.d.ts +4 -0
  171. package/dist/dts/git/client.d.ts +478 -0
  172. package/dist/dts/git/index.d.ts +2 -0
  173. package/dist/dts/http/client-async.d.ts +158 -0
  174. package/dist/dts/http/client.d.ts +180 -0
  175. package/dist/dts/http/decorators.d.ts +11 -0
  176. package/dist/dts/http/errors/ForbiddenError.d.ts +20 -0
  177. package/dist/dts/http/errors/ValidationError.d.ts +20 -0
  178. package/dist/dts/http/errors.d.ts +2 -0
  179. package/dist/dts/http/index.d.ts +16 -0
  180. package/dist/dts/http/request.d.ts +158 -0
  181. package/dist/dts/http/response.d.ts +281 -0
  182. package/dist/dts/http/rs/resource-common.d.ts +11 -0
  183. package/dist/dts/http/rs/resource-http-controller.d.ts +43 -0
  184. package/dist/dts/http/rs/resource-mappings.d.ts +70 -0
  185. package/dist/dts/http/rs/resource-method.d.ts +206 -0
  186. package/dist/dts/http/rs/resource.d.ts +126 -0
  187. package/dist/dts/http/rs.d.ts +4 -0
  188. package/dist/dts/http/session.d.ts +81 -0
  189. package/dist/dts/http/upload.d.ts +100 -0
  190. package/dist/dts/http/utils.d.ts +54 -0
  191. package/dist/dts/index.d.ts +0 -0
  192. package/dist/dts/indexing/index.d.ts +4 -0
  193. package/dist/dts/indexing/searcher.d.ts +47 -0
  194. package/dist/dts/indexing/writer.d.ts +22 -0
  195. package/dist/dts/integrations/index.d.ts +2 -0
  196. package/dist/dts/integrations/integrations.d.ts +118 -0
  197. package/dist/dts/io/bytes.d.ts +56 -0
  198. package/dist/dts/io/files.d.ts +261 -0
  199. package/dist/dts/io/image.d.ts +22 -0
  200. package/dist/dts/io/index.d.ts +10 -0
  201. package/dist/dts/io/streams.d.ts +172 -0
  202. package/dist/dts/io/zip.d.ts +178 -0
  203. package/dist/dts/job/decorators.d.ts +11 -0
  204. package/dist/dts/job/index.d.ts +4 -0
  205. package/dist/dts/job/scheduler.d.ts +250 -0
  206. package/dist/dts/junit/index.d.ts +1 -0
  207. package/dist/dts/junit/junit.d.ts +50 -0
  208. package/dist/dts/kafka/consumer.d.ts +48 -0
  209. package/dist/dts/kafka/index.d.ts +4 -0
  210. package/dist/dts/kafka/producer.d.ts +50 -0
  211. package/dist/dts/log/index.d.ts +2 -0
  212. package/dist/dts/log/logging.d.ts +102 -0
  213. package/dist/dts/mail/client.d.ts +90 -0
  214. package/dist/dts/mail/index.d.ts +2 -0
  215. package/dist/dts/messaging/consumer.d.ts +61 -0
  216. package/dist/dts/messaging/decorators.d.ts +11 -0
  217. package/dist/dts/messaging/index.d.ts +6 -0
  218. package/dist/dts/messaging/producer.d.ts +59 -0
  219. package/dist/dts/mongodb/client.d.ts +367 -0
  220. package/dist/dts/mongodb/dao.d.ts +24 -0
  221. package/dist/dts/mongodb/index.d.ts +2 -0
  222. package/dist/dts/net/decorators.d.ts +11 -0
  223. package/dist/dts/net/index.d.ts +6 -0
  224. package/dist/dts/net/soap.d.ts +115 -0
  225. package/dist/dts/net/websockets.d.ts +100 -0
  226. package/dist/dts/net/wrappers/onClose.d.ts +0 -0
  227. package/dist/dts/net/wrappers/onError.d.ts +0 -0
  228. package/dist/dts/net/wrappers/onMessage.d.ts +0 -0
  229. package/dist/dts/net/wrappers/onOpen.d.ts +0 -0
  230. package/dist/dts/pdf/index.d.ts +2 -0
  231. package/dist/dts/pdf/pdf.d.ts +72 -0
  232. package/dist/dts/platform/command.d.ts +41 -0
  233. package/dist/dts/platform/engines.d.ts +35 -0
  234. package/dist/dts/platform/index.d.ts +16 -0
  235. package/dist/dts/platform/lifecycle.d.ts +22 -0
  236. package/dist/dts/platform/os.d.ts +23 -0
  237. package/dist/dts/platform/problems.d.ts +114 -0
  238. package/dist/dts/platform/registry.d.ts +227 -0
  239. package/dist/dts/platform/repository.d.ts +354 -0
  240. package/dist/dts/platform/workspace.d.ts +421 -0
  241. package/dist/dts/qldb/index.d.ts +2 -0
  242. package/dist/dts/qldb/qldb.d.ts +1 -0
  243. package/dist/dts/rabbitmq/consumer.d.ts +25 -0
  244. package/dist/dts/rabbitmq/index.d.ts +4 -0
  245. package/dist/dts/rabbitmq/producer.d.ts +15 -0
  246. package/dist/dts/redis/client.d.ts +134 -0
  247. package/dist/dts/redis/index.d.ts +2 -0
  248. package/dist/dts/security/decorators.d.ts +4 -0
  249. package/dist/dts/security/index.d.ts +5 -0
  250. package/dist/dts/security/oauth.d.ts +39 -0
  251. package/dist/dts/security/user.d.ts +51 -0
  252. package/dist/dts/template/engines.d.ts +98 -0
  253. package/dist/dts/template/index.d.ts +2 -0
  254. package/dist/dts/utils/alphanumeric.d.ts +39 -0
  255. package/dist/dts/utils/base64.d.ts +48 -0
  256. package/dist/dts/utils/converter.d.ts +44 -0
  257. package/dist/dts/utils/digest.d.ts +50 -0
  258. package/dist/dts/utils/escape.d.ts +110 -0
  259. package/dist/dts/utils/hex.d.ts +48 -0
  260. package/dist/dts/utils/index.d.ts +23 -0
  261. package/dist/dts/utils/jsonpath.d.ts +22 -0
  262. package/dist/dts/utils/qrcode.d.ts +16 -0
  263. package/dist/dts/utils/url.d.ts +50 -0
  264. package/dist/dts/utils/utf8.d.ts +33 -0
  265. package/dist/dts/utils/uuid.d.ts +21 -0
  266. package/dist/dts/utils/xml.d.ts +22 -0
  267. package/dist/esm/bpm/deployer.mjs +38 -0
  268. package/dist/esm/bpm/index.mjs +15 -0
  269. package/dist/esm/bpm/process.mjs +617 -0
  270. package/dist/esm/bpm/tasks.mjs +954 -0
  271. package/dist/esm/bpm/values.mjs +63 -0
  272. package/dist/esm/cache/cache.mjs +45 -0
  273. package/dist/esm/cache/index.mjs +6 -0
  274. package/dist/esm/cms/cmis.mjs +660 -0
  275. package/dist/esm/cms/index.mjs +6 -0
  276. package/dist/esm/component/decorators.mjs +107 -0
  277. package/dist/esm/component/index.mjs +6 -0
  278. package/dist/esm/core/configurations.mjs +91 -0
  279. package/dist/esm/core/context.mjs +28 -0
  280. package/dist/esm/core/env.mjs +26 -0
  281. package/dist/esm/core/globals.mjs +35 -0
  282. package/dist/esm/core/index.mjs +15 -0
  283. package/dist/esm/db/dao.mjs +775 -0
  284. package/dist/esm/db/database.mjs +885 -0
  285. package/dist/esm/db/decorators.mjs +148 -0
  286. package/dist/esm/db/index.mjs +42 -0
  287. package/dist/esm/db/insert.mjs +32 -0
  288. package/dist/esm/db/orm.mjs +225 -0
  289. package/dist/esm/db/ormstatements.mjs +223 -0
  290. package/dist/esm/db/procedure.mjs +93 -0
  291. package/dist/esm/db/query.mjs +38 -0
  292. package/dist/esm/db/repository.mjs +129 -0
  293. package/dist/esm/db/sequence.mjs +40 -0
  294. package/dist/esm/db/sql.mjs +497 -0
  295. package/dist/esm/db/store.mjs +153 -0
  296. package/dist/esm/db/translator.mjs +81 -0
  297. package/dist/esm/db/update.mjs +24 -0
  298. package/dist/esm/etcd/client.mjs +155 -0
  299. package/dist/esm/etcd/index.mjs +6 -0
  300. package/dist/esm/extensions/decorators.mjs +21 -0
  301. package/dist/esm/extensions/extensions.mjs +89 -0
  302. package/dist/esm/extensions/index.mjs +9 -0
  303. package/dist/esm/git/client.mjs +258 -0
  304. package/dist/esm/git/index.mjs +6 -0
  305. package/dist/esm/http/client-async.mjs +205 -0
  306. package/dist/esm/http/client.mjs +126 -0
  307. package/dist/esm/http/decorators.mjs +47 -0
  308. package/dist/esm/http/errors/ForbiddenError.mjs +22 -0
  309. package/dist/esm/http/errors/ValidationError.mjs +22 -0
  310. package/dist/esm/http/errors.mjs +7 -0
  311. package/dist/esm/http/index.mjs +29 -0
  312. package/dist/esm/http/request.mjs +262 -0
  313. package/dist/esm/http/response.mjs +433 -0
  314. package/dist/esm/http/rs/resource-common.mjs +13 -0
  315. package/dist/esm/http/rs/resource-http-controller.mjs +287 -0
  316. package/dist/esm/http/rs/resource-mappings.mjs +111 -0
  317. package/dist/esm/http/rs/resource-method.mjs +199 -0
  318. package/dist/esm/http/rs/resource.mjs +213 -0
  319. package/dist/esm/http/rs.mjs +12 -0
  320. package/dist/esm/http/session.mjs +105 -0
  321. package/dist/esm/http/upload.mjs +125 -0
  322. package/dist/esm/http/utils.mjs +87 -0
  323. package/dist/esm/index.mjs +1 -0
  324. package/dist/esm/indexing/index.mjs +9 -0
  325. package/dist/esm/indexing/searcher.mjs +51 -0
  326. package/dist/esm/indexing/writer.mjs +26 -0
  327. package/dist/esm/integrations/index.mjs +6 -0
  328. package/dist/esm/integrations/integrations.mjs +36 -0
  329. package/dist/esm/io/bytes.mjs +82 -0
  330. package/dist/esm/io/files.mjs +325 -0
  331. package/dist/esm/io/image.mjs +24 -0
  332. package/dist/esm/io/index.mjs +18 -0
  333. package/dist/esm/io/streams.mjs +224 -0
  334. package/dist/esm/io/zip.mjs +232 -0
  335. package/dist/esm/job/decorators.mjs +21 -0
  336. package/dist/esm/job/index.mjs +9 -0
  337. package/dist/esm/job/scheduler.mjs +328 -0
  338. package/dist/esm/junit/index.mjs +2 -0
  339. package/dist/esm/junit/junit.mjs +48 -0
  340. package/dist/esm/kafka/consumer.mjs +51 -0
  341. package/dist/esm/kafka/index.mjs +9 -0
  342. package/dist/esm/kafka/producer.mjs +51 -0
  343. package/dist/esm/log/index.mjs +6 -0
  344. package/dist/esm/log/logging.mjs +155 -0
  345. package/dist/esm/mail/client.mjs +134 -0
  346. package/dist/esm/mail/index.mjs +6 -0
  347. package/dist/esm/messaging/consumer.mjs +64 -0
  348. package/dist/esm/messaging/decorators.mjs +21 -0
  349. package/dist/esm/messaging/index.mjs +12 -0
  350. package/dist/esm/messaging/producer.mjs +62 -0
  351. package/dist/esm/mongodb/client.mjs +608 -0
  352. package/dist/esm/mongodb/dao.mjs +360 -0
  353. package/dist/esm/mongodb/index.mjs +7 -0
  354. package/dist/esm/net/decorators.mjs +21 -0
  355. package/dist/esm/net/index.mjs +12 -0
  356. package/dist/esm/net/soap.mjs +209 -0
  357. package/dist/esm/net/websockets.mjs +132 -0
  358. package/dist/esm/net/wrappers/onClose.mjs +2 -0
  359. package/dist/esm/net/wrappers/onError.mjs +2 -0
  360. package/dist/esm/net/wrappers/onMessage.mjs +2 -0
  361. package/dist/esm/net/wrappers/onOpen.mjs +2 -0
  362. package/dist/esm/pdf/index.mjs +6 -0
  363. package/dist/esm/pdf/pdf.mjs +141 -0
  364. package/dist/esm/platform/command.mjs +28 -0
  365. package/dist/esm/platform/engines.mjs +51 -0
  366. package/dist/esm/platform/index.mjs +27 -0
  367. package/dist/esm/platform/lifecycle.mjs +30 -0
  368. package/dist/esm/platform/os.mjs +32 -0
  369. package/dist/esm/platform/problems.mjs +108 -0
  370. package/dist/esm/platform/registry.mjs +300 -0
  371. package/dist/esm/platform/repository.mjs +479 -0
  372. package/dist/esm/platform/workspace.mjs +555 -0
  373. package/dist/esm/qldb/index.mjs +6 -0
  374. package/dist/esm/qldb/qldb.mjs +5 -0
  375. package/dist/esm/rabbitmq/consumer.mjs +31 -0
  376. package/dist/esm/rabbitmq/index.mjs +9 -0
  377. package/dist/esm/rabbitmq/producer.mjs +19 -0
  378. package/dist/esm/redis/client.mjs +171 -0
  379. package/dist/esm/redis/index.mjs +6 -0
  380. package/dist/esm/security/decorators.mjs +29 -0
  381. package/dist/esm/security/index.mjs +10 -0
  382. package/dist/esm/security/oauth.mjs +56 -0
  383. package/dist/esm/security/user.mjs +69 -0
  384. package/dist/esm/template/engines.mjs +120 -0
  385. package/dist/esm/template/index.mjs +6 -0
  386. package/dist/esm/utils/alphanumeric.mjs +88 -0
  387. package/dist/esm/utils/base64.mjs +85 -0
  388. package/dist/esm/utils/converter.mjs +59 -0
  389. package/dist/esm/utils/digest.mjs +148 -0
  390. package/dist/esm/utils/escape.mjs +141 -0
  391. package/dist/esm/utils/hex.mjs +85 -0
  392. package/dist/esm/utils/index.mjs +38 -0
  393. package/dist/esm/utils/jsonpath.mjs +470 -0
  394. package/dist/esm/utils/qrcode.mjs +22 -0
  395. package/dist/esm/utils/url.mjs +63 -0
  396. package/dist/esm/utils/utf8.mjs +42 -0
  397. package/dist/esm/utils/uuid.mjs +29 -0
  398. package/dist/esm/utils/xml.mjs +38 -0
  399. package/package.json +58 -0
@@ -0,0 +1,306 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var resource_http_controller_exports = {};
19
+ __export(resource_http_controller_exports, {
20
+ HttpController: () => HttpController,
21
+ service: () => service
22
+ });
23
+ module.exports = __toCommonJS(resource_http_controller_exports);
24
+ var import_response = require("../response");
25
+ var import_request = require("../request");
26
+ var import_resource_mappings = require("./resource-mappings");
27
+ var import_log = require("@aerokit/sdk/log");
28
+ const { match } = dirigibleRequire("modules/src/http/path-to-regexp/6.2.1/index.js");
29
+ const logger = import_log.Logging.getLogger("http.rs.controller");
30
+ function getRequest() {
31
+ return import_request.Request;
32
+ }
33
+ function getResponse() {
34
+ return import_response.Response;
35
+ }
36
+ function service(oConfig) {
37
+ let config;
38
+ if (oConfig !== void 0) {
39
+ if (typeof oConfig === "object" || oConfig instanceof import_resource_mappings.ResourceMappings) {
40
+ config = oConfig;
41
+ }
42
+ }
43
+ return new HttpController(config);
44
+ }
45
+ class HttpController {
46
+ /**
47
+ * Constructor function for HttpController instances.
48
+ *
49
+ * @param oMappings The mappings configuration for this controller.
50
+ */
51
+ constructor(oMappings) {
52
+ if (oMappings instanceof import_resource_mappings.ResourceMappings) {
53
+ this.resourceMappings = oMappings;
54
+ } else if (typeof oMappings === "object" || oMappings === void 0) {
55
+ this.resourceMappings = new import_resource_mappings.ResourceMappings(oMappings, this);
56
+ } else {
57
+ this.resourceMappings = new import_resource_mappings.ResourceMappings({}, this);
58
+ }
59
+ this.resource = this.resourcePath = this.resourceMappings.resourcePath.bind(this.resourceMappings);
60
+ ["get", "post", "put", "delete", "remove", "method"].forEach((sMethodName) => {
61
+ this[sMethodName] = (...allArguments) => {
62
+ if (allArguments.length < 1)
63
+ throw Error("Insufficient arguments provided to HttpController method " + sMethodName + ".");
64
+ let sPath = allArguments[0];
65
+ if (sPath === void 0)
66
+ sPath = "";
67
+ const sVerb = allArguments[1];
68
+ const arrConsumes = allArguments[2];
69
+ const arrProduces = allArguments[3];
70
+ const resource = this.resourceMappings.find(sPath, sVerb, arrConsumes, arrProduces) || this.resourceMappings.resource(sPath);
71
+ const resourceMethodArgs = allArguments.slice(1);
72
+ resource[sMethodName].apply(resource, resourceMethodArgs);
73
+ return this;
74
+ };
75
+ });
76
+ }
77
+ /**
78
+ * Alias for execute.
79
+ */
80
+ listen(request2, response2) {
81
+ this.execute(request2, response2);
82
+ }
83
+ /**
84
+ * Executes the request handling logic, finding the best matching resource and handler.
85
+ */
86
+ execute(request2, response2) {
87
+ request2 = request2 || getRequest();
88
+ const requestPath = request2.getResourcePath();
89
+ const method = request2.getMethod().toLowerCase();
90
+ const _oConfiguration = this.resourceMappings.configuration();
91
+ const matches = matchRequestUrl(requestPath, method, _oConfiguration);
92
+ let resourceHandler;
93
+ if (matches && matches[0]) {
94
+ const verbHandlers = _oConfiguration[matches[0].d][method];
95
+ if (verbHandlers) {
96
+ resourceHandler = verbHandlers.filter((handlerDef) => {
97
+ return matchMediaType(request2, handlerDef.produces, handlerDef.consumes);
98
+ })[0];
99
+ }
100
+ }
101
+ response2 = response2 || getResponse();
102
+ const queryParams = request2.getQueryParametersMap() || {};
103
+ const acceptsHeader = normalizeMediaTypeHeaderValue(request2.getHeader("Accept")) || [];
104
+ const contentTypeHeader = normalizeMediaTypeHeaderValue(request2.getHeader("Content-Type")) || [];
105
+ const resourcePath = requestPath;
106
+ if (resourceHandler) {
107
+ const ctx = {
108
+ "pathParameters": {},
109
+ "queryParameters": {},
110
+ "response": response2,
111
+ "res": response2,
112
+ "request": request2,
113
+ "req": request2
114
+ };
115
+ if (matches[0].pathParams) {
116
+ ctx.pathParameters = matches[0].pathParams;
117
+ }
118
+ ctx.queryParameters = queryParams;
119
+ const noop = function() {
120
+ };
121
+ let _before, _serve, _catch, _finally;
122
+ _before = resourceHandler.before || noop;
123
+ _serve = resourceHandler.handler || resourceHandler.serve || noop;
124
+ _catch = resourceHandler.catch || catchErrorHandler.bind(this, {
125
+ path: resourcePath,
126
+ method: method.toUpperCase(),
127
+ contentType: contentTypeHeader.join(","),
128
+ accepts: acceptsHeader.join(",")
129
+ });
130
+ _finally = resourceHandler.finally || noop;
131
+ const callbackArgs = [ctx, request2, response2, resourceHandler, this];
132
+ try {
133
+ logger.trace("Before serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}]", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
134
+ _before.apply(this, callbackArgs);
135
+ if (!response2.isCommitted()) {
136
+ logger.trace("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}]", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
137
+ _serve.apply(this, callbackArgs);
138
+ logger.trace("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] finished", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
139
+ }
140
+ } catch (err) {
141
+ try {
142
+ callbackArgs.splice(1, 0, err);
143
+ _catch.apply(this, callbackArgs);
144
+ } catch (_catchErr) {
145
+ logger.error("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] error handler threw error", _catchErr);
146
+ throw _catchErr;
147
+ }
148
+ } finally {
149
+ HttpController.prototype.closeResponse.call(this);
150
+ try {
151
+ _finally.apply(this, []);
152
+ } catch (_finallyErr) {
153
+ logger.error("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] post handler threw error", _finallyErr);
154
+ }
155
+ }
156
+ } else {
157
+ logger.error("No suitable resource handler for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] found", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
158
+ this.sendError(response2.BAD_REQUEST, void 0, "Bad Request", "No suitable processor for this request.");
159
+ }
160
+ }
161
+ /**
162
+ * Returns the ResourceMappings instance of this controller.
163
+ */
164
+ mappings() {
165
+ return this.resourceMappings;
166
+ }
167
+ /**
168
+ * Sends an error response to the client, formatted based on the accepted media type.
169
+ */
170
+ sendError(httpErrorCode, applicationErrorCode, errorName, errorDetails) {
171
+ const clientAcceptMediaTypes = normalizeMediaTypeHeaderValue(import_request.Request.getHeader("Accept")) || ["application/json"];
172
+ const isHtml = clientAcceptMediaTypes.some((acceptMediaType) => isMimeTypeCompatible("*/html", acceptMediaType));
173
+ import_response.Response.setStatus(httpErrorCode || import_response.Response.INTERNAL_SERVER_ERROR);
174
+ if (isHtml) {
175
+ const message = errorName + (applicationErrorCode !== void 0 ? "[" + applicationErrorCode + "]" : "") + (errorDetails ? ": " + errorDetails : "");
176
+ import_response.Response.sendError(httpErrorCode || import_response.Response.INTERNAL_SERVER_ERROR, message);
177
+ } else {
178
+ const body = {
179
+ "code": applicationErrorCode,
180
+ "error": errorName,
181
+ "details": errorDetails
182
+ };
183
+ import_response.Response.setHeader("Content-Type", "application/json");
184
+ import_response.Response.print(JSON.stringify(body, null, 2));
185
+ }
186
+ this.closeResponse();
187
+ }
188
+ /**
189
+ * Flushes and closes the HTTP response stream.
190
+ */
191
+ closeResponse() {
192
+ import_response.Response.flush();
193
+ import_response.Response.close();
194
+ }
195
+ }
196
+ function matchedRouteDefinitionsSorter(p, n) {
197
+ p.w = calculateMatchedRouteWeight(p);
198
+ n.w = calculateMatchedRouteWeight(n);
199
+ if (n.w === p.w) {
200
+ const m1 = p.d.match(/{(.*?)}/g);
201
+ const placeholdersCount1 = m1 !== null ? m1.length : 0;
202
+ const m2 = n.d.match(/{(.*?)}/g);
203
+ const placeholdersCount2 = m2 !== null ? m2.length : 0;
204
+ if (placeholdersCount1 > placeholdersCount2) {
205
+ n.w = n.w + 1;
206
+ } else if (placeholdersCount1 < placeholdersCount2) {
207
+ p.w = p.w + 1;
208
+ }
209
+ }
210
+ return n.w - p.w;
211
+ }
212
+ function calculateMatchedRouteWeight(matchedRoute) {
213
+ return matchedRoute.params && Object.keys(matchedRoute.params).length > 0 ? 0 : 1;
214
+ }
215
+ function transformPathParamsDeclaredInBraces(pathDefinition) {
216
+ const pathParamsInBracesMatcher = /({(\w*\*?)})/g;
217
+ return pathDefinition.replace(pathParamsInBracesMatcher, ":$2");
218
+ }
219
+ function matchRequestUrl(requestPath, method, cfg) {
220
+ return Object.entries(cfg).filter(([_, handlers]) => handlers && handlers[method]).map(([path, _]) => path).reduce((matches, path) => matchingRouteDefinitionsReducer(matches, path, requestPath), []).sort(matchedRouteDefinitionsSorter);
221
+ }
222
+ function matchingRouteDefinitionsReducer(matchedDefinitions, definedPath, requestPath) {
223
+ const pathMatcher = match(transformPathParamsDeclaredInBraces(definedPath));
224
+ const matched = pathMatcher(requestPath);
225
+ if (matched) {
226
+ const pathParams = matched.params;
227
+ const matchedDefinition = {
228
+ p: requestPath,
229
+ d: definedPath,
230
+ pathParams
231
+ };
232
+ matchedDefinitions.push(matchedDefinition);
233
+ }
234
+ return matchedDefinitions;
235
+ }
236
+ function normalizeMediaTypeHeaderValue(sMediaType) {
237
+ if (sMediaType === void 0 || sMediaType === null)
238
+ return;
239
+ let arrMediaType = sMediaType.split(",");
240
+ arrMediaType = arrMediaType.map((mimeTypeEntry) => {
241
+ return mimeTypeEntry.replace("\\", "").split(";")[0].trim();
242
+ });
243
+ return arrMediaType.filter((type) => type.length > 0);
244
+ }
245
+ function isMimeTypeCompatible(source, target) {
246
+ if (source === target)
247
+ return true;
248
+ const targetM = target.split("/");
249
+ const sourceM = source.split("/");
250
+ if (targetM[0] === "*" && targetM[1] === sourceM[1])
251
+ return true;
252
+ if (sourceM[0] === "*" && targetM[1] === sourceM[1])
253
+ return true;
254
+ if (targetM[1] === "*" && targetM[0] === sourceM[0])
255
+ return true;
256
+ if (sourceM[1] === "*" && targetM[0] === sourceM[0])
257
+ return true;
258
+ return false;
259
+ }
260
+ const catchErrorHandler = function(logctx, ctx, err, request2, response2) {
261
+ if (ctx.suppressStack) {
262
+ const detailsMsg = (ctx.errorName || "") + (ctx.errorCode ? " [" + ctx.errorCode + "]" : "") + (ctx.errorMessage ? ": " + ctx.errorMessage : "");
263
+ logger.info("Serving resource[{}], Verb[{}], Content-Type[{}], Accept[{}] finished in error. {}", logctx.path, logctx.method, logctx.contentType, logctx.accepts, detailsMsg);
264
+ } else {
265
+ logger.error("Serving resource[{}], Verb[{}], Content-Type[{}], Accept[{}] finished in error", logctx.path, logctx.method, logctx.contentType, logctx.accepts, err);
266
+ }
267
+ const httpErrorCode = ctx.httpErrorCode || response2.INTERNAL_SERVER_ERROR;
268
+ const errorMessage = ctx.errorMessage || err && err.message;
269
+ const errorName = ctx.errorName || err && err.name;
270
+ const errorCode = ctx.errorCode;
271
+ this.sendError(httpErrorCode, errorCode, errorName, errorMessage);
272
+ };
273
+ const matchMediaType = function(request2, producesMediaTypes, consumesMediaTypes) {
274
+ let isProduceMatched = false;
275
+ const acceptsMediaTypes = normalizeMediaTypeHeaderValue(request2.getHeader("Accept"));
276
+ if (!acceptsMediaTypes || acceptsMediaTypes.length === 0 || acceptsMediaTypes.includes("*/*")) {
277
+ isProduceMatched = true;
278
+ } else {
279
+ if (producesMediaTypes && producesMediaTypes.length) {
280
+ const matchedProducesMIME = acceptsMediaTypes.filter((acceptsMediaType) => {
281
+ return producesMediaTypes.some((producesMediaType) => {
282
+ return isMimeTypeCompatible(acceptsMediaType, producesMediaType);
283
+ });
284
+ });
285
+ isProduceMatched = matchedProducesMIME && matchedProducesMIME.length > 0;
286
+ } else {
287
+ isProduceMatched = true;
288
+ }
289
+ }
290
+ let isConsumeMatched = false;
291
+ const contentTypeMediaTypes = normalizeMediaTypeHeaderValue(request2.getContentType());
292
+ if (!consumesMediaTypes || consumesMediaTypes.length === 0 || consumesMediaTypes.includes("*/*")) {
293
+ isConsumeMatched = true;
294
+ } else {
295
+ if (contentTypeMediaTypes && consumesMediaTypes && consumesMediaTypes.length) {
296
+ const matchedConsumesMIME = contentTypeMediaTypes.filter((contentTypeMediaType) => {
297
+ return consumesMediaTypes.some((consumesMediaType) => {
298
+ return isMimeTypeCompatible(contentTypeMediaType, consumesMediaType);
299
+ });
300
+ });
301
+ isConsumeMatched = matchedConsumesMIME && matchedConsumesMIME.length > 0;
302
+ }
303
+ }
304
+ return isProduceMatched && isConsumeMatched;
305
+ };
306
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBcUM7QUFDckMscUJBQW1DO0FBQ25DLCtCQUFpQztBQUNqQyxpQkFBd0I7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxtQkFBUSxVQUFVLG9CQUFvQjtBQW9CMUQsU0FBUyxhQUFrQjtBQUN2QixTQUFPLGVBQUFBO0FBQ1g7QUFDQSxTQUFTLGNBQW1CO0FBQ3hCLFNBQU8sZ0JBQUFDO0FBQ1g7QUFRTyxTQUFTLFFBQVEsU0FBK0I7QUFDbkQsTUFBSTtB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
@@ -0,0 +1,130 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var resource_mappings_exports = {};
19
+ __export(resource_mappings_exports, {
20
+ ResourceMappings: () => ResourceMappings
21
+ });
22
+ module.exports = __toCommonJS(resource_mappings_exports);
23
+ var import_resource = require("./resource");
24
+ class ResourceMappings {
25
+ // Bound execute function from the HttpController
26
+ /**
27
+ * Constructor function for ResourceMappings instances.
28
+ *
29
+ * @param oConfiguration Configuration object defining initial resource paths and their handlers.
30
+ * @param controller The HttpController instance, for which this ResourceMappings handles configuration.
31
+ */
32
+ constructor(oConfiguration, controller) {
33
+ // Map of resource path (string) to the Resource instance (typed as any for flexibility)
34
+ this.resources = {};
35
+ if (oConfiguration) {
36
+ Object.keys(oConfiguration).forEach((sPath) => {
37
+ this.resources[sPath] = this.resource(sPath, oConfiguration[sPath]);
38
+ });
39
+ }
40
+ if (controller) {
41
+ this.controller = controller;
42
+ this.execute = controller.execute.bind(controller);
43
+ }
44
+ }
45
+ /**
46
+ * Creates or retrieves a Resource object corresponding to the given path.
47
+ * The second, optional argument can be used to initialize the resource.
48
+ *
49
+ * @param sPath The URL path template for the resource (e.g., "users/{id}").
50
+ * @param oConfiguration Optional configuration object for initial resource setup.
51
+ * @returns The created or existing Resource instance.
52
+ */
53
+ path(sPath, oConfiguration) {
54
+ if (sPath !== "" && sPath[0] === "/") {
55
+ sPath = sPath.substring(1);
56
+ }
57
+ if (this.resources[sPath] === void 0) {
58
+ this.resources[sPath] = new import_resource.Resource(sPath, oConfiguration, this.controller, this);
59
+ }
60
+ return this.resources[sPath];
61
+ }
62
+ /**
63
+ * Alias for path().
64
+ */
65
+ resourcePath(sPath, oConfiguration) {
66
+ return this.path(sPath, oConfiguration);
67
+ }
68
+ /**
69
+ * Alias for path().
70
+ */
71
+ resource(sPath, oConfiguration) {
72
+ return this.path(sPath, oConfiguration);
73
+ }
74
+ /**
75
+ * Returns the compiled configuration object for all resources managed by this ResourceMappings.
76
+ * The configuration is structured to be consumed by the HttpController's routing logic.
77
+ */
78
+ configuration() {
79
+ const _cfg = {};
80
+ Object.keys(this.resources).forEach((sPath) => {
81
+ _cfg[sPath] = this.resources[sPath].configuration();
82
+ });
83
+ return _cfg;
84
+ }
85
+ /**
86
+ * Removes all but GET resource handlers from all managed resources, making them read-only.
87
+ *
88
+ * @returns The ResourceMappings instance for method chaining.
89
+ */
90
+ readonly() {
91
+ Object.keys(this.resources).forEach((sPath) => {
92
+ this.resources[sPath].readonly();
93
+ });
94
+ return this;
95
+ }
96
+ /**
97
+ * Disables resource handling specifications matching the arguments, effectively removing them from this API.
98
+ *
99
+ * @param sPath The path of the resource.
100
+ * @param sVerb The HTTP verb (e.g., 'get', 'post').
101
+ * @param arrConsumes Array of consumed media types.
102
+ * @param arrProduces Array of produced media types.
103
+ * @returns The ResourceMappings instance for method chaining.
104
+ */
105
+ disable(sPath, sVerb, arrConsumes, arrProduces) {
106
+ const resource = this.resources[sPath];
107
+ if (resource && typeof resource.disable === "function") {
108
+ resource.disable(sVerb, arrConsumes, arrProduces);
109
+ }
110
+ return this;
111
+ }
112
+ /**
113
+ * Provides a reference to a handler specification matching the supplied arguments.
114
+ *
115
+ * @param sPath The path of the resource.
116
+ * @param sVerb The HTTP verb (e.g., 'get', 'post').
117
+ * @param arrConsumes Array of consumed media types.
118
+ * @param arrProduces Array of produced media types.
119
+ * @returns The matching Resource handler specification or undefined.
120
+ */
121
+ find(sPath, sVerb, arrConsumes, arrProduces) {
122
+ if (this.resources[sPath]) {
123
+ const hit = this.resources[sPath].find(sVerb, arrConsumes, arrProduces);
124
+ if (hit)
125
+ return hit;
126
+ }
127
+ return;
128
+ }
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtbWFwcGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2VcIjtcblxuLyoqXG4gKiBUaGUgUmVzb3VyY2VNYXBwaW5ncyBjbGFzcyBhYnN0cmFjdHMgdGhlIG1hcHBpbmdzIGJldHdlZW4gcmVzb3VyY2UgVVJMIHBhdGggdGVtcGxhdGVzXG4gKiBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZXNvdXJjZSBoYW5kbGVyIHNwZWNpZmljYXRpb25zLiBJdCBhY3RzIGFzIHRoZSBjb25maWd1cmF0aW9uXG4gKiBzdG9yZSBmb3IgdGhlIEh0dHBDb250cm9sbGVyLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgLy8gTWFwIG9mIHJlc291cmNlIHBhdGggKHN0cmluZykgdG8gdGhlIFJlc291cmNlIGluc3RhbmNlICh0eXBlZCBhcyBhbnkgZm9yIGZsZXhpYmlsaXR5KVxuICAgIHJlc291cmNlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnRyb2xsZXI6IGFueTsgLy8gUmVwcmVzZW50cyB0aGUgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VcbiAgICBleGVjdXRlOiBhbnk7IC8vIEJvdW5kIGV4ZWN1dGUgZnVuY3Rpb24gZnJvbSB0aGUgSHR0cENvbnRyb2xsZXJcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBSZXNvdXJjZU1hcHBpbmdzIGluc3RhbmNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvQ29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uIG9iamVjdCBkZWZpbmluZyBpbml0aWFsIHJlc291cmNlIHBhdGhzIGFuZCB0aGVpciBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2UsIGZvciB3aGljaCB0aGlzIFJlc291cmNlTWFwcGluZ3MgaGFuZGxlcyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9Db25maWd1cmF0aW9uOiBhbnksIGNvbnRyb2xsZXI6IGFueSkge1xuICAgICAgICBpZiAob0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9uKS5mb3JFYWNoKChzUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNbc1BhdGhdID0gdGhpcy5yZXNvdXJjZShzUGF0aCwgb0NvbmZpZ3VyYXRpb25bc1BhdGhdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGUgPSBjb250cm9sbGVyLmV4ZWN1dGUuYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3IgcmV0cmlldmVzIGEgUmVzb3VyY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHBhdGguXG4gICAgICogVGhlIHNlY29uZCwgb3B0aW9uYWwgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIFVSTCBwYXRoIHRlbXBsYXRlIGZvciB0aGUgcmVzb3VyY2UgKGUuZy4sIFwidXNlcnMve2lkfVwiKS5cbiAgICAgKiBAcGFyYW0gb0NvbmZpZ3VyYXRpb24gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGluaXRpYWwgcmVzb3VyY2Ugc2V0dXAuXG4gICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgb3IgZXhpc3RpbmcgUmVzb3VyY2UgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcGF0aChzUGF0aDogc3RyaW5nLCBvQ29uZmlndXJhdGlvbj86IGFueSk6IFJlc291cmNlIHtcbiAgICAgICAgaWYgKHNQYXRoICE9PSBcIlwiICYmIHNQYXRoWzBdID09PSBcIi9cIikge1xuICAgICAgICAgICAgc1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7IC8vIHRyYW5zZm9ybSBcIi90ZXN0XCIgaW50byBcInRlc3RcIlxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VzW3NQYXRoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBSZXNvdXJjZSBpcyB0aGUgY2xhc3MgaW1wb3J0ZWQgZnJvbSBcIi4vcmVzb3VyY2VcIlxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNbc1BhdGhdID0gbmV3IFJlc291cmNlKHNQYXRoLCBvQ29uZmlndXJhdGlvbiwgdGhpcy5jb250cm9sbGVyLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc1tzUGF0aF07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBwYXRoKCkuXG4gICAgICovXG4gICAgcmVzb3VyY2VQYXRoKHNQYXRoOiBzdHJpbmcsIG9Db25maWd1cmF0aW9uPzogYW55KTogUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoKHNQYXRoLCBvQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHBhdGgoKS5cbiAgICAgKi9cbiAgICByZXNvdXJjZShzUGF0aDogc3RyaW5nLCBvQ29uZmlndXJhdGlvbj86IGFueSk6IFJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aChzUGF0aCwgb0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBpbGVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBhbGwgcmVzb3VyY2VzIG1hbmFnZWQgYnkgdGhpcyBSZXNvdXJjZU1hcHBpbmdzLlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQgdG8gYmUgY29uc3VtZWQgYnkgdGhlIEh0dHBDb250cm9sbGVyJ3Mgcm91dGluZyBsb2dpYy5cbiAgICAgKi9cbiAgICBjb25maWd1cmF0aW9uKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBjb25zdCBfY2ZnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzb3VyY2VzKS5mb3JFYWNoKChzUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBBc3N1bWluZyBlYWNoIFJlc291cmNlIG9iamVjdCBoYXMgYSBjb25maWd1cmF0aW9uKCkgbWV0aG9kXG4gICAgICAgICAgICBfY2ZnW3NQYXRoXSA9IHRoaXMucmVzb3VyY2VzW3NQYXRoXS5jb25maWd1cmF0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX2NmZztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgYnV0IEdFVCByZXNvdXJjZSBoYW5kbGVycyBmcm9tIGFsbCBtYW5hZ2VkIHJlc291cmNlcywgbWFraW5nIHRoZW0gcmVhZC1vbmx5LlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWFwcGluZ3MgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICAgKi9cbiAgICByZWFkb25seSgpOiB0aGlzIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNvdXJjZXMpLmZvckVhY2goKHNQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzW3NQYXRoXS5yZWFkb25seSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHJlc291cmNlIGhhbmRsaW5nIHNwZWNpZmljYXRpb25zIG1hdGNoaW5nIHRoZSBhcmd1bWVudHMsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIHRoZW0gZnJvbSB0aGlzIEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHNWZXJiIFRoZSBIVFRQIHZlcmIgKGUuZy4sICdnZXQnLCAncG9zdCcpLlxuICAgICAqIEBwYXJhbSBhcnJDb25zdW1lcyBBcnJheSBvZiBjb25zdW1lZCBtZWRpYSB0eXBlcy5cbiAgICAgKiBAcGFyYW0gYXJyUHJvZHVjZXMgQXJyYXkgb2YgcHJvZHVjZWQgbWVkaWEgdHlwZXMuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWFwcGluZ3MgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBkaXNhYmxlKHNQYXRoOiBzdHJpbmcsIHNWZXJiOiBzdHJpbmcsIGFyckNvbnN1bWVzOiBzdHJpbmdbXSwgYXJyUHJvZHVjZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbc1BhdGhdO1xuICAgICAgICAvLyBBc3N1bWluZyB0aGUgaW50ZW50aW9uIGlzIHRvIGZpbmQgdGhlIHNpbmdsZSBSZXNvdXJjZSBpbnN0YW5jZSBhbmQgY2FsbCBkaXNhYmxlIG9uIGl0XG4gICAgICAgIGlmIChyZXNvdXJjZSAmJiB0eXBlb2YgcmVzb3VyY2UuZGlzYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgIHJlc291cmNlLmRpc2FibGUoc1ZlcmIsIGFyckNvbnN1bWVzLCBhcnJQcm9kdWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIGEgaGFuZGxlciBzcGVjaWZpY2F0aW9uIG1hdGNoaW5nIHRoZSBzdXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggb2YgdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBzVmVyYiBUaGUgSFRUUCB2ZXJiIChlLmcuLCAnZ2V0JywgJ3Bvc3QnKS5cbiAgICAgKiBAcGFyYW0gYXJyQ29uc3VtZXMgQXJyYXkgb2YgY29uc3VtZWQgbWVkaWEgdHlwZXMuXG4gICAgICogQHBhcmFtIGFyclByb2R1Y2VzIEFycmF5IG9mIHByb2R1Y2VkIG1lZGlhIHR5cGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBSZXNvdXJjZSBoYW5kbGVyIHNwZWNpZmljYXRpb24gb3IgdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIGZpbmQoc1BhdGg6IHN0cmluZywgc1ZlcmI6IHN0cmluZywgYXJyQ29uc3VtZXM6IHN0cmluZ1tdLCBhcnJQcm9kdWNlczogc3RyaW5nW10pOiBhbnkgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZXNbc1BhdGhdKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWluZyBSZXNvdXJjZSBpbnN0YW5jZSBoYXMgYSBmaW5kIG1ldGhvZFxuICAgICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5yZXNvdXJjZXNbc1BhdGhdLmZpbmQoc1ZlcmIsIGFyckNvbnN1bWVzLCBhcnJQcm9kdWNlcyk7XG4gICAgICAgICAgICBpZiAoaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBoaXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQXlCO0FBT2xCLE1BQU0saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVkxQixZQUFZLGdCQUFxQixZQUFpQjtBQVZsRDtBQUFBLHFCQUFvQyxDQUFDO0FBV2pDLFFBQUksZ0JBQWdCO0FBQ2hCLGFBQU8sS0FBSyxjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQWtCO0FBQ25ELGFBQUssVUFBVSxLQUFLLElBQUksS0FBSyxTQUFTLE9BQU8sZUFBZSxLQUFLLENBQUM7QUFBQSxNQUN0RSxDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQUksWUFBWTtBQUNaLFdBQUssYUFBYTtBQUNsQixXQUFLLFVBQVUsV0FBVyxRQUFRLEtBQUssVUFBVTtBQUFBLElBQ3JEO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLEtBQUssT0FBZSxnQkFBZ0M7QUFDaEQsUUFBSSxVQUFVLE1BQU0sTUFBTSxDQUFDLE1BQU0sS0FBSztBQUNsQyxjQUFRLE1BQU0sVUFBVSxDQUFDO0FBQUEsSUFDN0I7QUFFQSxRQUFJLEtBQUssVUFBVSxLQUFLLE1BQU0sUUFBVztBQUVyQyxXQUFLLFVBQVUsS0FBSyxJQUFJLElBQUkseUJBQVMsT0FBTyxnQkFBZ0IsS0FBSyxZQUFZLElBQUk7QUFBQSxJQUNyRjtBQUVBLFdBQU8sS0FBSyxVQUFVLEtBQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsYUFBYSxPQUFlLGdCQUFnQztBQUN4RCxXQUFPLEtBQUssS0FBSyxPQUFPLGNBQWM7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsU0FBUyxPQUFlLGdCQUFnQztBQUNwRCxXQUFPLEtBQUssS0FBSyxPQUFPLGNBQWM7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxnQkFBd0M7QUFDcEMsVUFBTSxPQUErQixDQUFDO0FBQ3RDLFdBQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBa0I7QUFFbkQsV0FBSyxLQUFLLElBQUksS0FBSyxVQUFVLEtBQUssRUFBRSxjQUFjO0FBQUEsSUFDdEQsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsV0FBaUI7QUFDYixXQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQWtCO0FBQ25ELFdBQUssVUFBVSxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ25DLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV0EsUUFBUSxPQUFlLE9BQWUsYUFBdUIsYUFBNkI7QUFDdEYsVUFBTSxXQUFXLEtBQUssVUFBVSxLQUFLO0FBRXJDLFFBQUksWUFBWSxPQUFPLFNBQVMsWUFBWSxZQUFZO0FBQ25ELGVBQVMsUUFBUSxPQUFPLGFBQWEsV0FBVztBQUFBLElBQ3JEO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLEtBQUssT0FBZSxPQUFlLGFBQXVCLGFBQXdDO0FBQzlGLFFBQUksS0FBSyxVQUFVLEtBQUssR0FBRztBQUV2QixZQUFNLE1BQU0sS0FBSyxVQUFVLEtBQUssRUFBRSxLQUFLLE9BQU8sYUFBYSxXQUFXO0FBQ3RFLFVBQUk7QUFDQSxlQUFPO0FBQUEsSUFDZjtBQUNBO0FBQUEsRUFDSjtBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=