@jigx/core-sdk 1.0.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 (902) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +87 -0
  3. package/dist/PACKAGE.d.ts +4 -0
  4. package/dist/PACKAGE.d.ts.map +1 -0
  5. package/dist/PACKAGE.js +5 -0
  6. package/dist/abstract/app-info.d.ts +8 -0
  7. package/dist/abstract/app-info.d.ts.map +1 -0
  8. package/dist/abstract/app-info.js +8 -0
  9. package/dist/abstract/app-name.d.ts +15 -0
  10. package/dist/abstract/app-name.d.ts.map +1 -0
  11. package/dist/abstract/app-name.js +28 -0
  12. package/dist/abstract/base-builder.d.ts +4 -0
  13. package/dist/abstract/base-builder.d.ts.map +1 -0
  14. package/dist/abstract/base-builder.js +3 -0
  15. package/dist/abstract/element-base-builder.d.ts +7 -0
  16. package/dist/abstract/element-base-builder.d.ts.map +1 -0
  17. package/dist/abstract/element-base-builder.js +11 -0
  18. package/dist/abstract/generic.d.ts +31 -0
  19. package/dist/abstract/generic.d.ts.map +1 -0
  20. package/dist/abstract/generic.js +2 -0
  21. package/dist/abstract/index.d.ts +12 -0
  22. package/dist/abstract/index.d.ts.map +1 -0
  23. package/dist/abstract/index.js +11 -0
  24. package/dist/abstract/register.d.ts +31 -0
  25. package/dist/abstract/register.d.ts.map +1 -0
  26. package/dist/abstract/register.js +48 -0
  27. package/dist/abstract/sdk.expression.d.ts +43 -0
  28. package/dist/abstract/sdk.expression.d.ts.map +1 -0
  29. package/dist/abstract/sdk.expression.js +175 -0
  30. package/dist/abstract/sdk.text.d.ts +23 -0
  31. package/dist/abstract/sdk.text.d.ts.map +1 -0
  32. package/dist/abstract/sdk.text.js +110 -0
  33. package/dist/abstract/sdk.types.d.ts +16 -0
  34. package/dist/abstract/sdk.types.d.ts.map +1 -0
  35. package/dist/abstract/sdk.types.js +88 -0
  36. package/dist/abstract/zod.strata.d.ts +17 -0
  37. package/dist/abstract/zod.strata.d.ts.map +1 -0
  38. package/dist/abstract/zod.strata.js +11 -0
  39. package/dist/abstract/zod.types.d.ts +1937 -0
  40. package/dist/abstract/zod.types.d.ts.map +1 -0
  41. package/dist/abstract/zod.types.js +848 -0
  42. package/dist/action/action-definition.builder.d.ts +16 -0
  43. package/dist/action/action-definition.builder.d.ts.map +1 -0
  44. package/dist/action/action-definition.builder.js +35 -0
  45. package/dist/action/action.descriptor.d.ts +8 -0
  46. package/dist/action/action.descriptor.d.ts.map +1 -0
  47. package/dist/action/action.descriptor.js +2 -0
  48. package/dist/action/index.d.ts +57 -0
  49. package/dist/action/index.d.ts.map +1 -0
  50. package/dist/action/index.js +48 -0
  51. package/dist/action/ja.abstract.d.ts +33 -0
  52. package/dist/action/ja.abstract.d.ts.map +1 -0
  53. package/dist/action/ja.abstract.js +58 -0
  54. package/dist/action/ja.action-definition.d.ts +11 -0
  55. package/dist/action/ja.action-definition.d.ts.map +1 -0
  56. package/dist/action/ja.action-definition.js +12 -0
  57. package/dist/action/ja.action-list.d.ts +9 -0
  58. package/dist/action/ja.action-list.d.ts.map +1 -0
  59. package/dist/action/ja.action-list.js +15 -0
  60. package/dist/action/ja.clear-queue.d.ts +9 -0
  61. package/dist/action/ja.clear-queue.d.ts.map +1 -0
  62. package/dist/action/ja.clear-queue.js +9 -0
  63. package/dist/action/ja.color.d.ts +3 -0
  64. package/dist/action/ja.color.d.ts.map +1 -0
  65. package/dist/action/ja.color.js +2 -0
  66. package/dist/action/ja.confirm.abstract.d.ts +16 -0
  67. package/dist/action/ja.confirm.abstract.d.ts.map +1 -0
  68. package/dist/action/ja.confirm.abstract.js +25 -0
  69. package/dist/action/ja.confirm.d.ts +23 -0
  70. package/dist/action/ja.confirm.d.ts.map +1 -0
  71. package/dist/action/ja.confirm.js +28 -0
  72. package/dist/action/ja.delete-queue-command.d.ts +9 -0
  73. package/dist/action/ja.delete-queue-command.d.ts.map +1 -0
  74. package/dist/action/ja.delete-queue-command.js +9 -0
  75. package/dist/action/ja.delete-sync-scope.d.ts +10 -0
  76. package/dist/action/ja.delete-sync-scope.d.ts.map +1 -0
  77. package/dist/action/ja.delete-sync-scope.js +14 -0
  78. package/dist/action/ja.delete-sync-status.d.ts +9 -0
  79. package/dist/action/ja.delete-sync-status.d.ts.map +1 -0
  80. package/dist/action/ja.delete-sync-status.js +9 -0
  81. package/dist/action/ja.evaluate.d.ts +12 -0
  82. package/dist/action/ja.evaluate.d.ts.map +1 -0
  83. package/dist/action/ja.evaluate.js +9 -0
  84. package/dist/action/ja.execute-action.d.ts +11 -0
  85. package/dist/action/ja.execute-action.d.ts.map +1 -0
  86. package/dist/action/ja.execute-action.js +15 -0
  87. package/dist/action/ja.execute-entities.d.ts +7 -0
  88. package/dist/action/ja.execute-entities.d.ts.map +1 -0
  89. package/dist/action/ja.execute-entities.js +8 -0
  90. package/dist/action/ja.execute-entity.abstract.d.ts +41 -0
  91. package/dist/action/ja.execute-entity.abstract.d.ts.map +1 -0
  92. package/dist/action/ja.execute-entity.abstract.js +104 -0
  93. package/dist/action/ja.execute-entity.d.ts +6 -0
  94. package/dist/action/ja.execute-entity.d.ts.map +1 -0
  95. package/dist/action/ja.execute-entity.dynamic-data.d.ts +6 -0
  96. package/dist/action/ja.execute-entity.dynamic-data.d.ts.map +1 -0
  97. package/dist/action/ja.execute-entity.dynamic-data.js +2 -0
  98. package/dist/action/ja.execute-entity.generic.d.ts +11 -0
  99. package/dist/action/ja.execute-entity.generic.d.ts.map +1 -0
  100. package/dist/action/ja.execute-entity.generic.js +2 -0
  101. package/dist/action/ja.execute-entity.js +8 -0
  102. package/dist/action/ja.execute-entity.sql.d.ts +12 -0
  103. package/dist/action/ja.execute-entity.sql.d.ts.map +1 -0
  104. package/dist/action/ja.execute-entity.sql.js +2 -0
  105. package/dist/action/ja.execute-sql.abstract.d.ts +6 -0
  106. package/dist/action/ja.execute-sql.abstract.d.ts.map +1 -0
  107. package/dist/action/ja.execute-sql.abstract.js +2 -0
  108. package/dist/action/ja.execute-sql.d.ts +16 -0
  109. package/dist/action/ja.execute-sql.d.ts.map +1 -0
  110. package/dist/action/ja.execute-sql.js +64 -0
  111. package/dist/action/ja.find-replace.d.ts +12 -0
  112. package/dist/action/ja.find-replace.d.ts.map +1 -0
  113. package/dist/action/ja.find-replace.js +22 -0
  114. package/dist/action/ja.generate-file.d.ts +11 -0
  115. package/dist/action/ja.generate-file.d.ts.map +1 -0
  116. package/dist/action/ja.generate-file.js +19 -0
  117. package/dist/action/ja.generate-pdf.d.ts +10 -0
  118. package/dist/action/ja.generate-pdf.d.ts.map +1 -0
  119. package/dist/action/ja.generate-pdf.js +10 -0
  120. package/dist/action/ja.go-back.d.ts +9 -0
  121. package/dist/action/ja.go-back.d.ts.map +1 -0
  122. package/dist/action/ja.go-back.js +11 -0
  123. package/dist/action/ja.go-to.d.ts +18 -0
  124. package/dist/action/ja.go-to.d.ts.map +1 -0
  125. package/dist/action/ja.go-to.js +41 -0
  126. package/dist/action/ja.in-background.d.ts +95 -0
  127. package/dist/action/ja.in-background.d.ts.map +1 -0
  128. package/dist/action/ja.in-background.factory.d.ts +88 -0
  129. package/dist/action/ja.in-background.factory.d.ts.map +1 -0
  130. package/dist/action/ja.in-background.factory.js +98 -0
  131. package/dist/action/ja.in-background.js +247 -0
  132. package/dist/action/ja.info-modal.d.ts +37 -0
  133. package/dist/action/ja.info-modal.d.ts.map +1 -0
  134. package/dist/action/ja.info-modal.js +61 -0
  135. package/dist/action/ja.jig-actions.d.ts +16 -0
  136. package/dist/action/ja.jig-actions.d.ts.map +1 -0
  137. package/dist/action/ja.jig-actions.js +35 -0
  138. package/dist/action/ja.on-button.factory.d.ts +89 -0
  139. package/dist/action/ja.on-button.factory.d.ts.map +1 -0
  140. package/dist/action/ja.on-button.factory.js +86 -0
  141. package/dist/action/ja.open-app-settings.d.ts +6 -0
  142. package/dist/action/ja.open-app-settings.d.ts.map +1 -0
  143. package/dist/action/ja.open-app-settings.js +8 -0
  144. package/dist/action/ja.open-map.abstract.d.ts +6 -0
  145. package/dist/action/ja.open-map.abstract.d.ts.map +1 -0
  146. package/dist/action/ja.open-map.abstract.js +2 -0
  147. package/dist/action/ja.open-map.d.ts +11 -0
  148. package/dist/action/ja.open-map.d.ts.map +1 -0
  149. package/dist/action/ja.open-map.js +25 -0
  150. package/dist/action/ja.open-media-picker.abstract.d.ts +8 -0
  151. package/dist/action/ja.open-media-picker.abstract.d.ts.map +1 -0
  152. package/dist/action/ja.open-media-picker.abstract.js +2 -0
  153. package/dist/action/ja.open-media-picker.d.ts +18 -0
  154. package/dist/action/ja.open-media-picker.d.ts.map +1 -0
  155. package/dist/action/ja.open-media-picker.js +46 -0
  156. package/dist/action/ja.open-scanner.d.ts +14 -0
  157. package/dist/action/ja.open-scanner.d.ts.map +1 -0
  158. package/dist/action/ja.open-scanner.js +23 -0
  159. package/dist/action/ja.open-url.d.ts +10 -0
  160. package/dist/action/ja.open-url.d.ts.map +1 -0
  161. package/dist/action/ja.open-url.js +13 -0
  162. package/dist/action/ja.print.d.ts +10 -0
  163. package/dist/action/ja.print.d.ts.map +1 -0
  164. package/dist/action/ja.print.js +17 -0
  165. package/dist/action/ja.reset-application-state.d.ts +9 -0
  166. package/dist/action/ja.reset-application-state.d.ts.map +1 -0
  167. package/dist/action/ja.reset-application-state.js +12 -0
  168. package/dist/action/ja.reset-component-state.d.ts +9 -0
  169. package/dist/action/ja.reset-component-state.d.ts.map +1 -0
  170. package/dist/action/ja.reset-component-state.js +13 -0
  171. package/dist/action/ja.reset-screen-state.d.ts +9 -0
  172. package/dist/action/ja.reset-screen-state.d.ts.map +1 -0
  173. package/dist/action/ja.reset-screen-state.js +12 -0
  174. package/dist/action/ja.reset-state.d.ts +9 -0
  175. package/dist/action/ja.reset-state.d.ts.map +1 -0
  176. package/dist/action/ja.reset-state.js +13 -0
  177. package/dist/action/ja.retry-queue-command.d.ts +9 -0
  178. package/dist/action/ja.retry-queue-command.d.ts.map +1 -0
  179. package/dist/action/ja.retry-queue-command.js +9 -0
  180. package/dist/action/ja.sdk.d.ts +4 -0
  181. package/dist/action/ja.sdk.d.ts.map +1 -0
  182. package/dist/action/ja.sdk.js +2 -0
  183. package/dist/action/ja.set-active-tab.d.ts +13 -0
  184. package/dist/action/ja.set-active-tab.d.ts.map +1 -0
  185. package/dist/action/ja.set-active-tab.js +29 -0
  186. package/dist/action/ja.set-application-state.d.ts +9 -0
  187. package/dist/action/ja.set-application-state.d.ts.map +1 -0
  188. package/dist/action/ja.set-application-state.js +17 -0
  189. package/dist/action/ja.set-screen-state.d.ts +9 -0
  190. package/dist/action/ja.set-screen-state.d.ts.map +1 -0
  191. package/dist/action/ja.set-screen-state.js +12 -0
  192. package/dist/action/ja.share.d.ts +12 -0
  193. package/dist/action/ja.share.d.ts.map +1 -0
  194. package/dist/action/ja.share.js +23 -0
  195. package/dist/action/ja.show-alert.d.ts +33 -0
  196. package/dist/action/ja.show-alert.d.ts.map +1 -0
  197. package/dist/action/ja.show-alert.js +61 -0
  198. package/dist/action/ja.start-location-sharing.abstract.d.ts +6 -0
  199. package/dist/action/ja.start-location-sharing.abstract.d.ts.map +1 -0
  200. package/dist/action/ja.start-location-sharing.abstract.js +2 -0
  201. package/dist/action/ja.start-location-sharing.d.ts +18 -0
  202. package/dist/action/ja.start-location-sharing.d.ts.map +1 -0
  203. package/dist/action/ja.start-location-sharing.js +33 -0
  204. package/dist/action/ja.start-sync-scope.d.ts +9 -0
  205. package/dist/action/ja.start-sync-scope.d.ts.map +1 -0
  206. package/dist/action/ja.start-sync-scope.js +18 -0
  207. package/dist/action/ja.stop-location-sharing.d.ts +6 -0
  208. package/dist/action/ja.stop-location-sharing.d.ts.map +1 -0
  209. package/dist/action/ja.stop-location-sharing.js +8 -0
  210. package/dist/action/ja.submit-form.abstract.d.ts +11 -0
  211. package/dist/action/ja.submit-form.abstract.d.ts.map +1 -0
  212. package/dist/action/ja.submit-form.abstract.js +2 -0
  213. package/dist/action/ja.submit-form.d.ts +31 -0
  214. package/dist/action/ja.submit-form.d.ts.map +1 -0
  215. package/dist/action/ja.submit-form.js +124 -0
  216. package/dist/action/ja.swipeable-action.d.ts +19 -0
  217. package/dist/action/ja.swipeable-action.d.ts.map +1 -0
  218. package/dist/action/ja.swipeable-action.js +25 -0
  219. package/dist/action/ja.sync-entities.abstract.d.ts +25 -0
  220. package/dist/action/ja.sync-entities.abstract.d.ts.map +1 -0
  221. package/dist/action/ja.sync-entities.abstract.js +2 -0
  222. package/dist/action/ja.sync-entities.d.ts +32 -0
  223. package/dist/action/ja.sync-entities.d.ts.map +1 -0
  224. package/dist/action/ja.sync-entities.js +142 -0
  225. package/dist/action/ja.update-profile.d.ts +12 -0
  226. package/dist/action/ja.update-profile.d.ts.map +1 -0
  227. package/dist/action/ja.update-profile.js +20 -0
  228. package/dist/application/application.sdk.d.ts +84 -0
  229. package/dist/application/application.sdk.d.ts.map +1 -0
  230. package/dist/application/application.sdk.js +217 -0
  231. package/dist/application/application.tab.d.ts +20 -0
  232. package/dist/application/application.tab.d.ts.map +1 -0
  233. package/dist/application/application.tab.js +45 -0
  234. package/dist/application/context.sdk.d.ts +48 -0
  235. package/dist/application/context.sdk.d.ts.map +1 -0
  236. package/dist/application/context.sdk.js +116 -0
  237. package/dist/application/index.d.ts +4 -0
  238. package/dist/application/index.d.ts.map +1 -0
  239. package/dist/application/index.js +4 -0
  240. package/dist/assets/example-extraction-cache.json +9 -0
  241. package/dist/assets/extracted-core-sdk-examples.yaml +44440 -0
  242. package/dist/assets/extracted-core-sdk-types.yaml +12100 -0
  243. package/dist/assets/stream-line-icons.csv +19281 -0
  244. package/dist/assets/type-extraction-cache.json +9 -0
  245. package/dist/builder/application-analyzer/application-analyzer.d.ts +42 -0
  246. package/dist/builder/application-analyzer/application-analyzer.d.ts.map +1 -0
  247. package/dist/builder/application-analyzer/application-analyzer.js +150 -0
  248. package/dist/builder/application-analyzer/create-application-analyzer.d.ts +17 -0
  249. package/dist/builder/application-analyzer/create-application-analyzer.d.ts.map +1 -0
  250. package/dist/builder/application-analyzer/create-application-analyzer.js +121 -0
  251. package/dist/builder/application-analyzer/index.d.ts +5 -0
  252. package/dist/builder/application-analyzer/index.d.ts.map +1 -0
  253. package/dist/builder/application-analyzer/index.js +5 -0
  254. package/dist/builder/application-analyzer/select-component-nodes.d.ts +7 -0
  255. package/dist/builder/application-analyzer/select-component-nodes.d.ts.map +1 -0
  256. package/dist/builder/application-analyzer/select-component-nodes.js +15 -0
  257. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts +8 -0
  258. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts.map +1 -0
  259. package/dist/builder/application-analyzer/select-datasource-node-by-id.js +20 -0
  260. package/dist/builder/application-analyzer/types.d.ts +60 -0
  261. package/dist/builder/application-analyzer/types.d.ts.map +1 -0
  262. package/dist/builder/application-analyzer/types.js +16 -0
  263. package/dist/builder/application-analyzer/utils.d.ts +3 -0
  264. package/dist/builder/application-analyzer/utils.d.ts.map +1 -0
  265. package/dist/builder/application-analyzer/utils.js +8 -0
  266. package/dist/builder/builder.d.ts +8 -0
  267. package/dist/builder/builder.d.ts.map +1 -0
  268. package/dist/builder/builder.js +54 -0
  269. package/dist/builder/index.d.ts +5 -0
  270. package/dist/builder/index.d.ts.map +1 -0
  271. package/dist/builder/index.js +4 -0
  272. package/dist/builder/transform-summary.d.ts +3 -0
  273. package/dist/builder/transform-summary.d.ts.map +1 -0
  274. package/dist/builder/transform-summary.js +39 -0
  275. package/dist/builder/types.d.ts +8 -0
  276. package/dist/builder/types.d.ts.map +1 -0
  277. package/dist/builder/types.js +2 -0
  278. package/dist/builder/validate-datasource-ids.d.ts +17 -0
  279. package/dist/builder/validate-datasource-ids.d.ts.map +1 -0
  280. package/dist/builder/validate-datasource-ids.js +51 -0
  281. package/dist/component/common/index.d.ts +22 -0
  282. package/dist/component/common/index.d.ts.map +1 -0
  283. package/dist/component/common/index.js +16 -0
  284. package/dist/component/common/jc.avatar-field.types.d.ts +9 -0
  285. package/dist/component/common/jc.avatar-field.types.d.ts.map +1 -0
  286. package/dist/component/common/jc.avatar-field.types.js +11 -0
  287. package/dist/component/common/jc.chart.common.abstract.d.ts +85 -0
  288. package/dist/component/common/jc.chart.common.abstract.d.ts.map +1 -0
  289. package/dist/component/common/jc.chart.common.abstract.js +2 -0
  290. package/dist/component/common/jc.chart.common.builders.d.ts +37 -0
  291. package/dist/component/common/jc.chart.common.builders.d.ts.map +1 -0
  292. package/dist/component/common/jc.chart.common.builders.js +81 -0
  293. package/dist/component/common/jc.component.types.d.ts +101 -0
  294. package/dist/component/common/jc.component.types.d.ts.map +1 -0
  295. package/dist/component/common/jc.component.types.js +144 -0
  296. package/dist/component/common/jc.context.d.ts +7 -0
  297. package/dist/component/common/jc.context.d.ts.map +1 -0
  298. package/dist/component/common/jc.context.js +2 -0
  299. package/dist/component/common/jc.element.types.d.ts +14 -0
  300. package/dist/component/common/jc.element.types.d.ts.map +1 -0
  301. package/dist/component/common/jc.element.types.js +13 -0
  302. package/dist/component/common/jc.field-base.builder.d.ts +21 -0
  303. package/dist/component/common/jc.field-base.builder.d.ts.map +1 -0
  304. package/dist/component/common/jc.field-base.builder.js +101 -0
  305. package/dist/component/common/jc.field-base.types.d.ts +28 -0
  306. package/dist/component/common/jc.field-base.types.d.ts.map +1 -0
  307. package/dist/component/common/jc.field-base.types.js +2 -0
  308. package/dist/component/common/jc.left-right.element.avatar.d.ts +11 -0
  309. package/dist/component/common/jc.left-right.element.avatar.d.ts.map +1 -0
  310. package/dist/component/common/jc.left-right.element.avatar.js +18 -0
  311. package/dist/component/common/jc.left-right.element.badge.d.ts +11 -0
  312. package/dist/component/common/jc.left-right.element.badge.d.ts.map +1 -0
  313. package/dist/component/common/jc.left-right.element.badge.js +17 -0
  314. package/dist/component/common/jc.left-right.element.button.d.ts +11 -0
  315. package/dist/component/common/jc.left-right.element.button.d.ts.map +1 -0
  316. package/dist/component/common/jc.left-right.element.button.js +14 -0
  317. package/dist/component/common/jc.left-right.element.checkbox.d.ts +13 -0
  318. package/dist/component/common/jc.left-right.element.checkbox.d.ts.map +1 -0
  319. package/dist/component/common/jc.left-right.element.checkbox.js +21 -0
  320. package/dist/component/common/jc.left-right.element.d.ts +31 -0
  321. package/dist/component/common/jc.left-right.element.d.ts.map +1 -0
  322. package/dist/component/common/jc.left-right.element.icon.d.ts +18 -0
  323. package/dist/component/common/jc.left-right.element.icon.d.ts.map +1 -0
  324. package/dist/component/common/jc.left-right.element.icon.js +32 -0
  325. package/dist/component/common/jc.left-right.element.image.d.ts +16 -0
  326. package/dist/component/common/jc.left-right.element.image.d.ts.map +1 -0
  327. package/dist/component/common/jc.left-right.element.image.js +29 -0
  328. package/dist/component/common/jc.left-right.element.js +2 -0
  329. package/dist/component/common/jc.left-right.element.progress.d.ts +11 -0
  330. package/dist/component/common/jc.left-right.element.progress.d.ts.map +1 -0
  331. package/dist/component/common/jc.left-right.element.progress.js +17 -0
  332. package/dist/component/common/jc.left-right.element.switch.d.ts +13 -0
  333. package/dist/component/common/jc.left-right.element.switch.d.ts.map +1 -0
  334. package/dist/component/common/jc.left-right.element.switch.js +21 -0
  335. package/dist/component/common/jc.left-right.element.value.d.ts +10 -0
  336. package/dist/component/common/jc.left-right.element.value.d.ts.map +1 -0
  337. package/dist/component/common/jc.left-right.element.value.js +12 -0
  338. package/dist/component/common/jc.picker-field-options.types.d.ts +13 -0
  339. package/dist/component/common/jc.picker-field-options.types.d.ts.map +1 -0
  340. package/dist/component/common/jc.picker-field-options.types.js +2 -0
  341. package/dist/component/common/jc.text.types.d.ts +6 -0
  342. package/dist/component/common/jc.text.types.d.ts.map +1 -0
  343. package/dist/component/common/jc.text.types.js +2 -0
  344. package/dist/component/common/jc.validation.d.ts +9 -0
  345. package/dist/component/common/jc.validation.d.ts.map +1 -0
  346. package/dist/component/common/jc.validation.js +48 -0
  347. package/dist/component/index.d.ts +86 -0
  348. package/dist/component/index.d.ts.map +1 -0
  349. package/dist/component/index.js +83 -0
  350. package/dist/component/jc.abstract.d.ts +32 -0
  351. package/dist/component/jc.abstract.d.ts.map +1 -0
  352. package/dist/component/jc.abstract.factory.d.ts +488 -0
  353. package/dist/component/jc.abstract.factory.d.ts.map +1 -0
  354. package/dist/component/jc.abstract.factory.js +757 -0
  355. package/dist/component/jc.abstract.js +53 -0
  356. package/dist/component/jc.abstract.utils.d.ts +3 -0
  357. package/dist/component/jc.abstract.utils.d.ts.map +1 -0
  358. package/dist/component/jc.abstract.utils.js +26 -0
  359. package/dist/component/jc.amount-control.d.ts +16 -0
  360. package/dist/component/jc.amount-control.d.ts.map +1 -0
  361. package/dist/component/jc.amount-control.js +36 -0
  362. package/dist/component/jc.avatar-field.d.ts +11 -0
  363. package/dist/component/jc.avatar-field.d.ts.map +1 -0
  364. package/dist/component/jc.avatar-field.js +27 -0
  365. package/dist/component/jc.avatar.d.ts +14 -0
  366. package/dist/component/jc.avatar.d.ts.map +1 -0
  367. package/dist/component/jc.avatar.js +26 -0
  368. package/dist/component/jc.banner.d.ts +81 -0
  369. package/dist/component/jc.banner.d.ts.map +1 -0
  370. package/dist/component/jc.banner.js +49 -0
  371. package/dist/component/jc.bar-chart.d.ts +23 -0
  372. package/dist/component/jc.bar-chart.d.ts.map +1 -0
  373. package/dist/component/jc.bar-chart.js +45 -0
  374. package/dist/component/jc.button.d.ts +20 -0
  375. package/dist/component/jc.button.d.ts.map +1 -0
  376. package/dist/component/jc.button.js +39 -0
  377. package/dist/component/jc.card.abstract.d.ts +14 -0
  378. package/dist/component/jc.card.abstract.d.ts.map +1 -0
  379. package/dist/component/jc.card.abstract.js +31 -0
  380. package/dist/component/jc.card.on-default.d.ts +91 -0
  381. package/dist/component/jc.card.on-default.d.ts.map +1 -0
  382. package/dist/component/jc.card.on-default.js +96 -0
  383. package/dist/component/jc.carousel.d.ts +31 -0
  384. package/dist/component/jc.carousel.d.ts.map +1 -0
  385. package/dist/component/jc.carousel.js +58 -0
  386. package/dist/component/jc.chat-message.d.ts +17 -0
  387. package/dist/component/jc.chat-message.d.ts.map +1 -0
  388. package/dist/component/jc.chat-message.js +32 -0
  389. package/dist/component/jc.chat.d.ts +23 -0
  390. package/dist/component/jc.chat.d.ts.map +1 -0
  391. package/dist/component/jc.chat.js +68 -0
  392. package/dist/component/jc.checkbox.d.ts +15 -0
  393. package/dist/component/jc.checkbox.d.ts.map +1 -0
  394. package/dist/component/jc.checkbox.js +38 -0
  395. package/dist/component/jc.choice-field-item.d.ts +15 -0
  396. package/dist/component/jc.choice-field-item.d.ts.map +1 -0
  397. package/dist/component/jc.choice-field-item.js +41 -0
  398. package/dist/component/jc.choice-field.d.ts +21 -0
  399. package/dist/component/jc.choice-field.d.ts.map +1 -0
  400. package/dist/component/jc.choice-field.js +34 -0
  401. package/dist/component/jc.count-down.d.ts +18 -0
  402. package/dist/component/jc.count-down.d.ts.map +1 -0
  403. package/dist/component/jc.count-down.js +55 -0
  404. package/dist/component/jc.count-up.d.ts +15 -0
  405. package/dist/component/jc.count-up.d.ts.map +1 -0
  406. package/dist/component/jc.count-up.js +42 -0
  407. package/dist/component/jc.custom-component.interop.d.ts +58 -0
  408. package/dist/component/jc.custom-component.interop.d.ts.map +1 -0
  409. package/dist/component/jc.custom-component.interop.js +115 -0
  410. package/dist/component/jc.date-picker.d.ts +15 -0
  411. package/dist/component/jc.date-picker.d.ts.map +1 -0
  412. package/dist/component/jc.date-picker.js +31 -0
  413. package/dist/component/jc.divider.d.ts +7 -0
  414. package/dist/component/jc.divider.d.ts.map +1 -0
  415. package/dist/component/jc.divider.js +8 -0
  416. package/dist/component/jc.dropdown.d.ts +20 -0
  417. package/dist/component/jc.dropdown.d.ts.map +1 -0
  418. package/dist/component/jc.dropdown.item.d.ts +22 -0
  419. package/dist/component/jc.dropdown.item.d.ts.map +1 -0
  420. package/dist/component/jc.dropdown.item.js +85 -0
  421. package/dist/component/jc.dropdown.js +33 -0
  422. package/dist/component/jc.duration-picker.d.ts +18 -0
  423. package/dist/component/jc.duration-picker.d.ts.map +1 -0
  424. package/dist/component/jc.duration-picker.js +35 -0
  425. package/dist/component/jc.email-field.d.ts +11 -0
  426. package/dist/component/jc.email-field.d.ts.map +1 -0
  427. package/dist/component/jc.email-field.js +19 -0
  428. package/dist/component/jc.entity-field.d.ts +23 -0
  429. package/dist/component/jc.entity-field.d.ts.map +1 -0
  430. package/dist/component/jc.entity-field.js +71 -0
  431. package/dist/component/jc.entity.d.ts +15 -0
  432. package/dist/component/jc.entity.d.ts.map +1 -0
  433. package/dist/component/jc.entity.js +27 -0
  434. package/dist/component/jc.event.d.ts +22 -0
  435. package/dist/component/jc.event.d.ts.map +1 -0
  436. package/dist/component/jc.event.js +68 -0
  437. package/dist/component/jc.expander.d.ts +49 -0
  438. package/dist/component/jc.expander.d.ts.map +1 -0
  439. package/dist/component/jc.expander.header.d.ts +25 -0
  440. package/dist/component/jc.expander.header.d.ts.map +1 -0
  441. package/dist/component/jc.expander.header.js +39 -0
  442. package/dist/component/jc.expander.js +53 -0
  443. package/dist/component/jc.field-row.d.ts +34 -0
  444. package/dist/component/jc.field-row.d.ts.map +1 -0
  445. package/dist/component/jc.field-row.entity.d.ts +12 -0
  446. package/dist/component/jc.field-row.entity.d.ts.map +1 -0
  447. package/dist/component/jc.field-row.entity.js +35 -0
  448. package/dist/component/jc.field-row.js +37 -0
  449. package/dist/component/jc.form.d.ts +98 -0
  450. package/dist/component/jc.form.d.ts.map +1 -0
  451. package/dist/component/jc.form.js +127 -0
  452. package/dist/component/jc.gallery-item.d.ts +12 -0
  453. package/dist/component/jc.gallery-item.d.ts.map +1 -0
  454. package/dist/component/jc.gallery-item.js +24 -0
  455. package/dist/component/jc.grid-item.d.ts +15 -0
  456. package/dist/component/jc.grid-item.d.ts.map +1 -0
  457. package/dist/component/jc.grid-item.js +31 -0
  458. package/dist/component/jc.grid.d.ts +16 -0
  459. package/dist/component/jc.grid.d.ts.map +1 -0
  460. package/dist/component/jc.grid.js +64 -0
  461. package/dist/component/jc.guards.d.ts +17 -0
  462. package/dist/component/jc.guards.d.ts.map +1 -0
  463. package/dist/component/jc.guards.js +14 -0
  464. package/dist/component/jc.icon.d.ts +19 -0
  465. package/dist/component/jc.icon.d.ts.map +1 -0
  466. package/dist/component/jc.icon.js +41 -0
  467. package/dist/component/jc.image.abstract.d.ts +28 -0
  468. package/dist/component/jc.image.abstract.d.ts.map +1 -0
  469. package/dist/component/jc.image.abstract.js +52 -0
  470. package/dist/component/jc.image.d.ts +5 -0
  471. package/dist/component/jc.image.d.ts.map +1 -0
  472. package/dist/component/jc.image.js +2 -0
  473. package/dist/component/jc.image.on-carousel.d.ts +23 -0
  474. package/dist/component/jc.image.on-carousel.d.ts.map +1 -0
  475. package/dist/component/jc.image.on-carousel.js +19 -0
  476. package/dist/component/jc.image.on-default.d.ts +25 -0
  477. package/dist/component/jc.image.on-default.d.ts.map +1 -0
  478. package/dist/component/jc.image.on-default.js +22 -0
  479. package/dist/component/jc.interactive-image.d.ts +41 -0
  480. package/dist/component/jc.interactive-image.d.ts.map +1 -0
  481. package/dist/component/jc.interactive-image.item.d.ts +24 -0
  482. package/dist/component/jc.interactive-image.item.d.ts.map +1 -0
  483. package/dist/component/jc.interactive-image.item.js +78 -0
  484. package/dist/component/jc.interactive-image.js +78 -0
  485. package/dist/component/jc.jig-header.d.ts +19 -0
  486. package/dist/component/jc.jig-header.d.ts.map +1 -0
  487. package/dist/component/jc.jig-header.js +42 -0
  488. package/dist/component/jc.jig-widget.d.ts +15 -0
  489. package/dist/component/jc.jig-widget.d.ts.map +1 -0
  490. package/dist/component/jc.jig-widget.js +41 -0
  491. package/dist/component/jc.jig.d.ts +11 -0
  492. package/dist/component/jc.jig.d.ts.map +1 -0
  493. package/dist/component/jc.jig.js +24 -0
  494. package/dist/component/jc.line-chart.d.ts +28 -0
  495. package/dist/component/jc.line-chart.d.ts.map +1 -0
  496. package/dist/component/jc.line-chart.js +45 -0
  497. package/dist/component/jc.list-item.d.ts +106 -0
  498. package/dist/component/jc.list-item.d.ts.map +1 -0
  499. package/dist/component/jc.list-item.js +274 -0
  500. package/dist/component/jc.list-item.standalone.d.ts +13 -0
  501. package/dist/component/jc.list-item.standalone.d.ts.map +1 -0
  502. package/dist/component/jc.list-item.standalone.js +10 -0
  503. package/dist/component/jc.list.abstract.d.ts +36 -0
  504. package/dist/component/jc.list.abstract.d.ts.map +1 -0
  505. package/dist/component/jc.list.abstract.js +2 -0
  506. package/dist/component/jc.list.d.ts +39 -0
  507. package/dist/component/jc.list.d.ts.map +1 -0
  508. package/dist/component/jc.list.js +95 -0
  509. package/dist/component/jc.location.d.ts +41 -0
  510. package/dist/component/jc.location.d.ts.map +1 -0
  511. package/dist/component/jc.location.js +63 -0
  512. package/dist/component/jc.marker-item.d.ts +29 -0
  513. package/dist/component/jc.marker-item.d.ts.map +1 -0
  514. package/dist/component/jc.marker-item.js +48 -0
  515. package/dist/component/jc.media-field.d.ts +13 -0
  516. package/dist/component/jc.media-field.d.ts.map +1 -0
  517. package/dist/component/jc.media-field.js +37 -0
  518. package/dist/component/jc.menu-item.d.ts +89 -0
  519. package/dist/component/jc.menu-item.d.ts.map +1 -0
  520. package/dist/component/jc.menu-item.js +65 -0
  521. package/dist/component/jc.number-field.d.ts +21 -0
  522. package/dist/component/jc.number-field.d.ts.map +1 -0
  523. package/dist/component/jc.number-field.js +33 -0
  524. package/dist/component/jc.pie-chart.d.ts +26 -0
  525. package/dist/component/jc.pie-chart.d.ts.map +1 -0
  526. package/dist/component/jc.pie-chart.js +45 -0
  527. package/dist/component/jc.product-item.amount.d.ts +17 -0
  528. package/dist/component/jc.product-item.amount.d.ts.map +1 -0
  529. package/dist/component/jc.product-item.amount.js +31 -0
  530. package/dist/component/jc.product-item.d.ts +30 -0
  531. package/dist/component/jc.product-item.d.ts.map +1 -0
  532. package/dist/component/jc.product-item.js +68 -0
  533. package/dist/component/jc.progress-bar.d.ts +45 -0
  534. package/dist/component/jc.progress-bar.d.ts.map +1 -0
  535. package/dist/component/jc.progress-bar.js +58 -0
  536. package/dist/component/jc.rating.d.ts +17 -0
  537. package/dist/component/jc.rating.d.ts.map +1 -0
  538. package/dist/component/jc.rating.js +38 -0
  539. package/dist/component/jc.section.abstract.d.ts +87 -0
  540. package/dist/component/jc.section.abstract.d.ts.map +1 -0
  541. package/dist/component/jc.section.abstract.js +33 -0
  542. package/dist/component/jc.section.on-default.d.ts +85 -0
  543. package/dist/component/jc.section.on-default.d.ts.map +1 -0
  544. package/dist/component/jc.section.on-default.js +85 -0
  545. package/dist/component/jc.section.on-entity.d.ts +11 -0
  546. package/dist/component/jc.section.on-entity.d.ts.map +1 -0
  547. package/dist/component/jc.section.on-entity.js +11 -0
  548. package/dist/component/jc.segmented-control.d.ts +23 -0
  549. package/dist/component/jc.segmented-control.d.ts.map +1 -0
  550. package/dist/component/jc.segmented-control.js +66 -0
  551. package/dist/component/jc.signature-field.d.ts +11 -0
  552. package/dist/component/jc.signature-field.d.ts.map +1 -0
  553. package/dist/component/jc.signature-field.js +18 -0
  554. package/dist/component/jc.slider.d.ts +36 -0
  555. package/dist/component/jc.slider.d.ts.map +1 -0
  556. package/dist/component/jc.slider.js +53 -0
  557. package/dist/component/jc.stage.d.ts +23 -0
  558. package/dist/component/jc.stage.d.ts.map +1 -0
  559. package/dist/component/jc.stage.js +31 -0
  560. package/dist/component/jc.step.d.ts +30 -0
  561. package/dist/component/jc.step.d.ts.map +1 -0
  562. package/dist/component/jc.step.js +35 -0
  563. package/dist/component/jc.stepper.d.ts +34 -0
  564. package/dist/component/jc.stepper.d.ts.map +1 -0
  565. package/dist/component/jc.stepper.js +59 -0
  566. package/dist/component/jc.story-group.d.ts +18 -0
  567. package/dist/component/jc.story-group.d.ts.map +1 -0
  568. package/dist/component/jc.story-group.js +27 -0
  569. package/dist/component/jc.summary.abstract.d.ts +15 -0
  570. package/dist/component/jc.summary.abstract.d.ts.map +1 -0
  571. package/dist/component/jc.summary.abstract.js +29 -0
  572. package/dist/component/jc.summary.card.d.ts +14 -0
  573. package/dist/component/jc.summary.card.d.ts.map +1 -0
  574. package/dist/component/jc.summary.card.js +36 -0
  575. package/dist/component/jc.summary.counter.d.ts +12 -0
  576. package/dist/component/jc.summary.counter.d.ts.map +1 -0
  577. package/dist/component/jc.summary.counter.js +28 -0
  578. package/dist/component/jc.summary.default.d.ts +16 -0
  579. package/dist/component/jc.summary.default.d.ts.map +1 -0
  580. package/dist/component/jc.summary.default.js +34 -0
  581. package/dist/component/jc.summary.progress.d.ts +46 -0
  582. package/dist/component/jc.summary.progress.d.ts.map +1 -0
  583. package/dist/component/jc.summary.progress.js +35 -0
  584. package/dist/component/jc.tab-button.d.ts +18 -0
  585. package/dist/component/jc.tab-button.d.ts.map +1 -0
  586. package/dist/component/jc.tab-button.js +43 -0
  587. package/dist/component/jc.text-field.d.ts +20 -0
  588. package/dist/component/jc.text-field.d.ts.map +1 -0
  589. package/dist/component/jc.text-field.js +49 -0
  590. package/dist/component/jc.text.d.ts +24 -0
  591. package/dist/component/jc.text.d.ts.map +1 -0
  592. package/dist/component/jc.text.js +44 -0
  593. package/dist/component/jc.titles.d.ts +19 -0
  594. package/dist/component/jc.titles.d.ts.map +1 -0
  595. package/dist/component/jc.titles.js +34 -0
  596. package/dist/component/jc.trend.d.ts +18 -0
  597. package/dist/component/jc.trend.d.ts.map +1 -0
  598. package/dist/component/jc.trend.js +31 -0
  599. package/dist/component/jc.types.d.ts +75 -0
  600. package/dist/component/jc.types.d.ts.map +1 -0
  601. package/dist/component/jc.types.js +74 -0
  602. package/dist/component/jc.video-player.abstract.d.ts +28 -0
  603. package/dist/component/jc.video-player.abstract.d.ts.map +1 -0
  604. package/dist/component/jc.video-player.abstract.js +38 -0
  605. package/dist/component/jc.video-player.d.ts +4 -0
  606. package/dist/component/jc.video-player.d.ts.map +1 -0
  607. package/dist/component/jc.video-player.js +2 -0
  608. package/dist/component/jc.video-player.on-jig.d.ts +25 -0
  609. package/dist/component/jc.video-player.on-jig.d.ts.map +1 -0
  610. package/dist/component/jc.video-player.on-jig.js +31 -0
  611. package/dist/component/jc.view.d.ts +158 -0
  612. package/dist/component/jc.view.d.ts.map +1 -0
  613. package/dist/component/jc.view.js +85 -0
  614. package/dist/component/jc.web-view.abstract.d.ts +15 -0
  615. package/dist/component/jc.web-view.abstract.d.ts.map +1 -0
  616. package/dist/component/jc.web-view.abstract.js +33 -0
  617. package/dist/component/jc.web-view.on-default.d.ts +5 -0
  618. package/dist/component/jc.web-view.on-default.d.ts.map +1 -0
  619. package/dist/component/jc.web-view.on-default.js +4 -0
  620. package/dist/component/jc.web-view.on-full.d.ts +10 -0
  621. package/dist/component/jc.web-view.on-full.d.ts.map +1 -0
  622. package/dist/component/jc.web-view.on-full.js +14 -0
  623. package/dist/database/database.abstract.d.ts +39 -0
  624. package/dist/database/database.abstract.d.ts.map +1 -0
  625. package/dist/database/database.abstract.js +42 -0
  626. package/dist/database/index.d.ts +2 -0
  627. package/dist/database/index.d.ts.map +1 -0
  628. package/dist/database/index.js +2 -0
  629. package/dist/datasource/datasource.abstract.d.ts +39 -0
  630. package/dist/datasource/datasource.abstract.d.ts.map +1 -0
  631. package/dist/datasource/datasource.abstract.js +47 -0
  632. package/dist/datasource/datasource.descriptor.d.ts +11 -0
  633. package/dist/datasource/datasource.descriptor.d.ts.map +1 -0
  634. package/dist/datasource/datasource.descriptor.js +2 -0
  635. package/dist/datasource/datasource.reference.d.ts +33 -0
  636. package/dist/datasource/datasource.reference.d.ts.map +1 -0
  637. package/dist/datasource/datasource.reference.js +66 -0
  638. package/dist/datasource/datasource.sdk.d.ts +7 -0
  639. package/dist/datasource/datasource.sdk.d.ts.map +1 -0
  640. package/dist/datasource/datasource.sdk.js +5 -0
  641. package/dist/datasource/datasource.sqlite.d.ts +88 -0
  642. package/dist/datasource/datasource.sqlite.d.ts.map +1 -0
  643. package/dist/datasource/datasource.sqlite.js +286 -0
  644. package/dist/datasource/datasource.static.d.ts +21 -0
  645. package/dist/datasource/datasource.static.d.ts.map +1 -0
  646. package/dist/datasource/datasource.static.js +30 -0
  647. package/dist/datasource/datasource.system.d.ts +18 -0
  648. package/dist/datasource/datasource.system.d.ts.map +1 -0
  649. package/dist/datasource/datasource.system.js +10 -0
  650. package/dist/datasource/entity.descriptor.d.ts +9 -0
  651. package/dist/datasource/entity.descriptor.d.ts.map +1 -0
  652. package/dist/datasource/entity.descriptor.js +2 -0
  653. package/dist/datasource/index.d.ts +11 -0
  654. package/dist/datasource/index.d.ts.map +1 -0
  655. package/dist/datasource/index.js +9 -0
  656. package/dist/datasource/sqlite-normalizer.d.ts +3 -0
  657. package/dist/datasource/sqlite-normalizer.d.ts.map +1 -0
  658. package/dist/datasource/sqlite-normalizer.js +194 -0
  659. package/dist/datasource/sqlite-validator.d.ts +28 -0
  660. package/dist/datasource/sqlite-validator.d.ts.map +1 -0
  661. package/dist/datasource/sqlite-validator.js +218 -0
  662. package/dist/function/function.abstract.d.ts +538 -0
  663. package/dist/function/function.abstract.d.ts.map +1 -0
  664. package/dist/function/function.abstract.js +271 -0
  665. package/dist/function/function.guard.d.ts +17 -0
  666. package/dist/function/function.guard.d.ts.map +1 -0
  667. package/dist/function/function.guard.js +62 -0
  668. package/dist/function/function.operation.d.ts +26 -0
  669. package/dist/function/function.operation.d.ts.map +1 -0
  670. package/dist/function/function.operation.js +118 -0
  671. package/dist/function/function.rest.continuation.d.ts +12 -0
  672. package/dist/function/function.rest.continuation.d.ts.map +1 -0
  673. package/dist/function/function.rest.continuation.js +24 -0
  674. package/dist/function/function.rest.d.ts +31 -0
  675. package/dist/function/function.rest.d.ts.map +1 -0
  676. package/dist/function/function.rest.error-builder.d.ts +38 -0
  677. package/dist/function/function.rest.error-builder.d.ts.map +1 -0
  678. package/dist/function/function.rest.error-builder.js +161 -0
  679. package/dist/function/function.rest.js +72 -0
  680. package/dist/function/function.rest.parameter-builder.d.ts +33 -0
  681. package/dist/function/function.rest.parameter-builder.d.ts.map +1 -0
  682. package/dist/function/function.rest.parameter-builder.js +81 -0
  683. package/dist/function/function.rest.types.d.ts +28 -0
  684. package/dist/function/function.rest.types.d.ts.map +1 -0
  685. package/dist/function/function.rest.types.js +2 -0
  686. package/dist/function/function.sdk.d.ts +10 -0
  687. package/dist/function/function.sdk.d.ts.map +1 -0
  688. package/dist/function/function.sdk.js +12 -0
  689. package/dist/function/function.soap.d.ts +19 -0
  690. package/dist/function/function.soap.d.ts.map +1 -0
  691. package/dist/function/function.soap.js +36 -0
  692. package/dist/function/function.soap.parameter-builder.d.ts +25 -0
  693. package/dist/function/function.soap.parameter-builder.d.ts.map +1 -0
  694. package/dist/function/function.soap.parameter-builder.js +41 -0
  695. package/dist/function/function.soap.types.d.ts +17 -0
  696. package/dist/function/function.soap.types.d.ts.map +1 -0
  697. package/dist/function/function.soap.types.js +2 -0
  698. package/dist/function/function.sql.d.ts +20 -0
  699. package/dist/function/function.sql.d.ts.map +1 -0
  700. package/dist/function/function.sql.js +53 -0
  701. package/dist/function/function.sql.parameter-builder.d.ts +24 -0
  702. package/dist/function/function.sql.parameter-builder.d.ts.map +1 -0
  703. package/dist/function/function.sql.parameter-builder.js +44 -0
  704. package/dist/function/function.sql.types.d.ts +20 -0
  705. package/dist/function/function.sql.types.d.ts.map +1 -0
  706. package/dist/function/function.sql.types.js +2 -0
  707. package/dist/function/function.types.d.ts +7 -0
  708. package/dist/function/function.types.d.ts.map +1 -0
  709. package/dist/function/function.types.js +2 -0
  710. package/dist/function/index.d.ts +17 -0
  711. package/dist/function/index.d.ts.map +1 -0
  712. package/dist/function/index.js +13 -0
  713. package/dist/icon/index.d.ts +3 -0
  714. package/dist/icon/index.d.ts.map +1 -0
  715. package/dist/icon/index.js +3 -0
  716. package/dist/icon/sdk.icon.d.ts +10 -0
  717. package/dist/icon/sdk.icon.d.ts.map +1 -0
  718. package/dist/icon/sdk.icon.data.d.ts +7 -0
  719. package/dist/icon/sdk.icon.data.d.ts.map +1 -0
  720. package/dist/icon/sdk.icon.data.js +19283 -0
  721. package/dist/icon/sdk.icon.js +27 -0
  722. package/dist/icon/sdk.icon.loader.d.ts +7 -0
  723. package/dist/icon/sdk.icon.loader.d.ts.map +1 -0
  724. package/dist/icon/sdk.icon.loader.js +15 -0
  725. package/dist/icon/sdk.icon.name.d.ts +7 -0
  726. package/dist/icon/sdk.icon.name.d.ts.map +1 -0
  727. package/dist/icon/sdk.icon.name.js +19305 -0
  728. package/dist/index.d.ts +14 -0
  729. package/dist/index.d.ts.map +1 -0
  730. package/dist/index.js +14 -0
  731. package/dist/jsonata/ast.d.ts +15 -0
  732. package/dist/jsonata/ast.d.ts.map +1 -0
  733. package/dist/jsonata/ast.js +118 -0
  734. package/dist/jsonata/base.d.ts +7 -0
  735. package/dist/jsonata/base.d.ts.map +1 -0
  736. package/dist/jsonata/base.js +43 -0
  737. package/dist/jsonata/builder.d.ts +28 -0
  738. package/dist/jsonata/builder.d.ts.map +1 -0
  739. package/dist/jsonata/builder.js +140 -0
  740. package/dist/jsonata/context.d.ts +10 -0
  741. package/dist/jsonata/context.d.ts.map +1 -0
  742. package/dist/jsonata/context.js +349 -0
  743. package/dist/jsonata/expression.d.ts +35 -0
  744. package/dist/jsonata/expression.d.ts.map +1 -0
  745. package/dist/jsonata/expression.js +498 -0
  746. package/dist/jsonata/index.d.ts +6 -0
  747. package/dist/jsonata/index.d.ts.map +1 -0
  748. package/dist/jsonata/index.js +6 -0
  749. package/dist/logger/index.d.ts +2 -0
  750. package/dist/logger/index.d.ts.map +1 -0
  751. package/dist/logger/index.js +2 -0
  752. package/dist/logger/logger.d.ts +14 -0
  753. package/dist/logger/logger.d.ts.map +1 -0
  754. package/dist/logger/logger.js +40 -0
  755. package/dist/runtime/auth.d.ts +19 -0
  756. package/dist/runtime/auth.d.ts.map +1 -0
  757. package/dist/runtime/auth.js +11 -0
  758. package/dist/runtime/index.d.ts +5 -0
  759. package/dist/runtime/index.d.ts.map +1 -0
  760. package/dist/runtime/index.js +3 -0
  761. package/dist/runtime/system.d.ts +27 -0
  762. package/dist/runtime/system.d.ts.map +1 -0
  763. package/dist/runtime/system.js +26 -0
  764. package/dist/screen/common/index.d.ts +9 -0
  765. package/dist/screen/common/index.d.ts.map +1 -0
  766. package/dist/screen/common/index.js +7 -0
  767. package/dist/screen/common/screen.badge.d.ts +8 -0
  768. package/dist/screen/common/screen.badge.d.ts.map +1 -0
  769. package/dist/screen/common/screen.badge.js +2 -0
  770. package/dist/screen/common/screen.bottom-sheet.d.ts +62 -0
  771. package/dist/screen/common/screen.bottom-sheet.d.ts.map +1 -0
  772. package/dist/screen/common/screen.bottom-sheet.js +31 -0
  773. package/dist/screen/common/screen.callback-actions.d.ts +7 -0
  774. package/dist/screen/common/screen.callback-actions.d.ts.map +1 -0
  775. package/dist/screen/common/screen.callback-actions.js +19 -0
  776. package/dist/screen/common/screen.input-definition.d.ts +108 -0
  777. package/dist/screen/common/screen.input-definition.d.ts.map +1 -0
  778. package/dist/screen/common/screen.input-definition.js +109 -0
  779. package/dist/screen/common/screen.placeholder.d.ts +20 -0
  780. package/dist/screen/common/screen.placeholder.d.ts.map +1 -0
  781. package/dist/screen/common/screen.placeholder.js +54 -0
  782. package/dist/screen/common/screen.preview.actions.d.ts +47 -0
  783. package/dist/screen/common/screen.preview.actions.d.ts.map +1 -0
  784. package/dist/screen/common/screen.preview.actions.js +122 -0
  785. package/dist/screen/common/screen.preview.d.ts +40 -0
  786. package/dist/screen/common/screen.preview.d.ts.map +1 -0
  787. package/dist/screen/common/screen.preview.js +87 -0
  788. package/dist/screen/common/screen.state.d.ts +7 -0
  789. package/dist/screen/common/screen.state.d.ts.map +1 -0
  790. package/dist/screen/common/screen.state.js +2 -0
  791. package/dist/screen/common/screen.summary.d.ts +14 -0
  792. package/dist/screen/common/screen.summary.d.ts.map +1 -0
  793. package/dist/screen/common/screen.summary.js +22 -0
  794. package/dist/screen/index.d.ts +16 -0
  795. package/dist/screen/index.d.ts.map +1 -0
  796. package/dist/screen/index.js +16 -0
  797. package/dist/screen/screen.abstract.d.ts +105 -0
  798. package/dist/screen/screen.abstract.d.ts.map +1 -0
  799. package/dist/screen/screen.abstract.js +175 -0
  800. package/dist/screen/screen.calendar.d.ts +22 -0
  801. package/dist/screen/screen.calendar.d.ts.map +1 -0
  802. package/dist/screen/screen.calendar.js +32 -0
  803. package/dist/screen/screen.default.d.ts +65 -0
  804. package/dist/screen/screen.default.d.ts.map +1 -0
  805. package/dist/screen/screen.default.js +68 -0
  806. package/dist/screen/screen.document.d.ts +58 -0
  807. package/dist/screen/screen.document.d.ts.map +1 -0
  808. package/dist/screen/screen.document.js +72 -0
  809. package/dist/screen/screen.full-screen.d.ts +23 -0
  810. package/dist/screen/screen.full-screen.d.ts.map +1 -0
  811. package/dist/screen/screen.full-screen.js +18 -0
  812. package/dist/screen/screen.gallery.d.ts +15 -0
  813. package/dist/screen/screen.gallery.d.ts.map +1 -0
  814. package/dist/screen/screen.gallery.js +14 -0
  815. package/dist/screen/screen.grid.base.d.ts +18 -0
  816. package/dist/screen/screen.grid.base.d.ts.map +1 -0
  817. package/dist/screen/screen.grid.base.js +17 -0
  818. package/dist/screen/screen.grid.dynamic.d.ts +18 -0
  819. package/dist/screen/screen.grid.dynamic.d.ts.map +1 -0
  820. package/dist/screen/screen.grid.dynamic.js +26 -0
  821. package/dist/screen/screen.grid.static.d.ts +14 -0
  822. package/dist/screen/screen.grid.static.d.ts.map +1 -0
  823. package/dist/screen/screen.grid.static.js +12 -0
  824. package/dist/screen/screen.guards.d.ts +41 -0
  825. package/dist/screen/screen.guards.d.ts.map +1 -0
  826. package/dist/screen/screen.guards.js +35 -0
  827. package/dist/screen/screen.list.d.ts +79 -0
  828. package/dist/screen/screen.list.d.ts.map +1 -0
  829. package/dist/screen/screen.list.js +123 -0
  830. package/dist/screen/screen.sdk.d.ts +13 -0
  831. package/dist/screen/screen.sdk.d.ts.map +1 -0
  832. package/dist/screen/screen.sdk.js +9 -0
  833. package/dist/screen/screen.tabs.d.ts +27 -0
  834. package/dist/screen/screen.tabs.d.ts.map +1 -0
  835. package/dist/screen/screen.tabs.instance.d.ts +34 -0
  836. package/dist/screen/screen.tabs.instance.d.ts.map +1 -0
  837. package/dist/screen/screen.tabs.instance.js +79 -0
  838. package/dist/screen/screen.tabs.js +35 -0
  839. package/dist/screen/screen.wizard.d.ts +12 -0
  840. package/dist/screen/screen.wizard.d.ts.map +1 -0
  841. package/dist/screen/screen.wizard.instance.d.ts +20 -0
  842. package/dist/screen/screen.wizard.instance.d.ts.map +1 -0
  843. package/dist/screen/screen.wizard.instance.js +40 -0
  844. package/dist/screen/screen.wizard.js +23 -0
  845. package/dist/utils/check.d.ts +3 -0
  846. package/dist/utils/check.d.ts.map +1 -0
  847. package/dist/utils/check.js +7 -0
  848. package/dist/utils/convert.d.ts +2 -0
  849. package/dist/utils/convert.d.ts.map +1 -0
  850. package/dist/utils/convert.js +8 -0
  851. package/dist/utils/dedent.d.ts +2 -0
  852. package/dist/utils/dedent.d.ts.map +1 -0
  853. package/dist/utils/dedent.js +28 -0
  854. package/dist/utils/index.d.ts +6 -0
  855. package/dist/utils/index.d.ts.map +1 -0
  856. package/dist/utils/index.js +5 -0
  857. package/dist/utils/types.d.ts +2 -0
  858. package/dist/utils/types.d.ts.map +1 -0
  859. package/dist/utils/types.js +2 -0
  860. package/dist/utils/utils.d.ts +9 -0
  861. package/dist/utils/utils.d.ts.map +1 -0
  862. package/dist/utils/utils.js +49 -0
  863. package/dist/widget/index.d.ts +12 -0
  864. package/dist/widget/index.d.ts.map +1 -0
  865. package/dist/widget/index.js +12 -0
  866. package/dist/widget/jw.abstract.d.ts +27 -0
  867. package/dist/widget/jw.abstract.d.ts.map +1 -0
  868. package/dist/widget/jw.abstract.js +36 -0
  869. package/dist/widget/jw.actions.d.ts +17 -0
  870. package/dist/widget/jw.actions.d.ts.map +1 -0
  871. package/dist/widget/jw.actions.js +30 -0
  872. package/dist/widget/jw.avatar.d.ts +19 -0
  873. package/dist/widget/jw.avatar.d.ts.map +1 -0
  874. package/dist/widget/jw.avatar.js +23 -0
  875. package/dist/widget/jw.chart.d.ts +18 -0
  876. package/dist/widget/jw.chart.d.ts.map +1 -0
  877. package/dist/widget/jw.chart.js +23 -0
  878. package/dist/widget/jw.group.d.ts +28 -0
  879. package/dist/widget/jw.group.d.ts.map +1 -0
  880. package/dist/widget/jw.group.js +35 -0
  881. package/dist/widget/jw.image.d.ts +27 -0
  882. package/dist/widget/jw.image.d.ts.map +1 -0
  883. package/dist/widget/jw.image.js +54 -0
  884. package/dist/widget/jw.list.d.ts +44 -0
  885. package/dist/widget/jw.list.d.ts.map +1 -0
  886. package/dist/widget/jw.list.js +44 -0
  887. package/dist/widget/jw.location.d.ts +41 -0
  888. package/dist/widget/jw.location.d.ts.map +1 -0
  889. package/dist/widget/jw.location.js +54 -0
  890. package/dist/widget/jw.sdk.d.ts +2 -0
  891. package/dist/widget/jw.sdk.d.ts.map +1 -0
  892. package/dist/widget/jw.sdk.js +2 -0
  893. package/dist/widget/jw.status.condition.d.ts +20 -0
  894. package/dist/widget/jw.status.condition.d.ts.map +1 -0
  895. package/dist/widget/jw.status.condition.js +27 -0
  896. package/dist/widget/jw.status.d.ts +8 -0
  897. package/dist/widget/jw.status.d.ts.map +1 -0
  898. package/dist/widget/jw.status.js +11 -0
  899. package/dist/widget/jw.value.d.ts +24 -0
  900. package/dist/widget/jw.value.d.ts.map +1 -0
  901. package/dist/widget/jw.value.js +51 -0
  902. package/package.json +94 -0
@@ -0,0 +1,10 @@
1
+ export declare function matchesScopePattern(scope: string, pattern: string): boolean;
2
+ export declare function findBestMatchingScopeRule<TRule>(scope: string, rules: ReadonlyMap<string, TRule>): {
3
+ pattern: string;
4
+ rule: TRule;
5
+ } | null;
6
+ export declare function isDeepValidationRoot(root: string): boolean;
7
+ export declare function isContextPathAllowed(segments: string[]): boolean;
8
+ export declare function resolveBaseContextSegments(pathParts: string[]): string[];
9
+ export declare function isDeepAllowed(segments: string[]): boolean;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEvY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSx3QkFBZ0IsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FzQjNFO0FBU0Qsd0JBQWdCLHlCQUF5QixDQUFDLEtBQUssRUFDN0MsS0FBSyxFQUFFLE1BQU0sRUFDYixLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FDaEM7SUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQTtDQUFFLEdBQUcsSUFBSSxDQXFCekM7QUFtYUQsd0JBQWdCLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUUxRDtBQUtELHdCQUFnQixvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUdoRTtBQUtELHdCQUFnQiwwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBUXhFO0FBS0Qsd0JBQWdCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUt6RCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjdXJzaXZlIGFsbG93LWxpc3Qgc2NoZW1hIGZvciBjb250ZXh0IHBhdGggdmFsaWRhdGlvbi5cbiAqIC0gYHRydWVgIG1hcmtzIGFuIGFsbG93ZWQgbGVhZi5cbiAqIC0gb2JqZWN0IGtleXMgZGVmaW5lIGFsbG93ZWQgY2hpbGQgc2VnbWVudHMuXG4gKiAtIGAnKidgIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgc2VnbWVudC5cbiAqL1xudHlwZSBEZWVwU2NoZW1hID0gdHJ1ZSB8IHsgW2tleTogc3RyaW5nXTogRGVlcFNjaGVtYSB9XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjb25jcmV0ZSBzY29wZSBwYXRoIG1hdGNoZXMgYSBwYXR0ZXJuLlxuICogU3VwcG9ydHMgd2lsZGNhcmQgKGAqYCkgc2VnbWVudHMgYW5kIHByZWZpeCBtYXRjaGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNTY29wZVBhdHRlcm4oc2NvcGU6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNjb3BlUGFydHMgPSBzY29wZS5zcGxpdCgnLicpXG4gIGNvbnN0IHBhdHRlcm5QYXJ0cyA9IHBhdHRlcm4uc3BsaXQoJy4nKVxuXG4gIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoID4gc2NvcGVQYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVyblBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGF0dGVyblBhcnQgPSBwYXR0ZXJuUGFydHNbaV1cbiAgICBjb25zdCBzY29wZVBhcnQgPSBzY29wZVBhcnRzW2ldXG5cbiAgICBpZiAocGF0dGVyblBhcnQgPT09ICcqJykge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAocGF0dGVyblBhcnQgIT09IHNjb3BlUGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaGluZyBydWxlIGZvciBhIHNjb3BlLlxuICpcbiAqIFNwZWNpZmljaXR5IHJ1bGVzOlxuICogLSBsb25nZXIgcGF0dGVybiBkZXB0aCB3aW5zXG4gKiAtIGlmIGRlcHRoIHRpZXMsIGZld2VyIHdpbGRjYXJkcyB3aW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmVzdE1hdGNoaW5nU2NvcGVSdWxlPFRSdWxlPihcbiAgc2NvcGU6IHN0cmluZyxcbiAgcnVsZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgVFJ1bGU+LFxuKTogeyBwYXR0ZXJuOiBzdHJpbmc7IHJ1bGU6IFRSdWxlIH0gfCBudWxsIHtcbiAgbGV0IGJlc3RNYXRjaDogeyBwYXR0ZXJuOiBzdHJpbmc7IHJ1bGU6IFRSdWxlIH0gfCBudWxsID0gbnVsbFxuICBsZXQgYmVzdE1hdGNoTGVuZ3RoID0gLTFcbiAgbGV0IGJlc3RXaWxkY2FyZENvdW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG5cbiAgZm9yIChjb25zdCBbcGF0dGVybiwgcnVsZV0gb2YgcnVsZXMpIHtcbiAgICBpZiAobWF0Y2hlc1Njb3BlUGF0dGVybihzY29wZSwgcGF0dGVybikpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLnNwbGl0KCcuJykubGVuZ3RoXG4gICAgICBjb25zdCB3aWxkY2FyZENvdW50ID0gcGF0dGVybi5zcGxpdCgnLicpLmZpbHRlcigocCkgPT4gcCA9PT0gJyonKS5sZW5ndGhcbiAgICAgIGlmIChcbiAgICAgICAgcGF0dGVybkxlbmd0aCA+IGJlc3RNYXRjaExlbmd0aCB8fFxuICAgICAgICAocGF0dGVybkxlbmd0aCA9PT0gYmVzdE1hdGNoTGVuZ3RoICYmIHdpbGRjYXJkQ291bnQgPCBiZXN0V2lsZGNhcmRDb3VudClcbiAgICAgICkge1xuICAgICAgICBiZXN0TWF0Y2ggPSB7IHBhdHRlcm4sIHJ1bGUgfVxuICAgICAgICBiZXN0TWF0Y2hMZW5ndGggPSBwYXR0ZXJuTGVuZ3RoXG4gICAgICAgIGJlc3RXaWxkY2FyZENvdW50ID0gd2lsZGNhcmRDb3VudFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiZXN0TWF0Y2hcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBgc2VnbWVudHNgIGFnYWluc3QgYSBuZXN0ZWQgYWxsb3ctbGlzdCBzY2hlbWEuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTY2hlbWEoc2VnbWVudHM6IHN0cmluZ1tdLCBzY2hlbWE6IERlZXBTY2hlbWEpOiBib29sZWFuIHtcbiAgLy8gTm8gc2VnbWVudCBsZWZ0IHRvIG1hdGNoLlxuICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgLy8gYHRydWVgIG1hcmtzIGEgbGVhZiBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZC5cbiAgaWYgKHNjaGVtYSA9PT0gdHJ1ZSkgcmV0dXJuIGZhbHNlXG5cbiAgLy8gQ3VycmVudCBrZXkgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBsZXZlbC5cbiAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gc2VnbWVudHNcbiAgaWYgKCEoaGVhZCBpbiBzY2hlbWEpKSB7XG4gICAgLy8gU3VwcG9ydCB3aWxkY2FyZCBub2RlcyBmb3IgZHluYW1pYyBrZXlzLCBlLmcuIGFjdGlvbnMuPGlkPiwgcmVzcG9uc2UuaGVhZGVycy48bmFtZT4uXG4gICAgaWYgKCcqJyBpbiBzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHdpbGRjYXJkID0gc2NoZW1hWycqJ11cbiAgICAgIC8vIGAqIDogdHJ1ZWAgYWxsb3dzIGFueSByZW1haW5pbmcgcGF0aC5cbiAgICAgIGlmICh3aWxkY2FyZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgICAgIC8vIGAqIDogey4uLn1gIGNvbnRpbnVlcyB2YWxpZGF0aW9uIGFnYWluc3QgYSB3aWxkY2FyZCBzdWItc2NoZW1hLlxuICAgICAgaWYgKHR5cGVvZiB3aWxkY2FyZCA9PT0gJ29iamVjdCcpIHJldHVybiBtYXRjaGVzU2NoZW1hKHRhaWwsIHdpbGRjYXJkKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBzY2hlbWFbaGVhZF1cbiAgLy8gRXhhY3QgbWF0Y2ggZm9yIGxlYWYsIG9yIHdpbGRjYXJkLWVuYWJsZWQgb2JqZWN0IG5vZGVzLlxuICBpZiAodGFpbC5sZW5ndGggPT09IDApIHtcbiAgICBpZiAobm9kZSA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgICAvLyBBbGxvdyBvYmplY3Qgbm9kZXMgdG8gYmUgdGVybWluYWwgd2hlbiB0aGV5IGV4cGxpY2l0bHkgZXhwb3NlIHdpbGRjYXJkIGxlYWYgc3VwcG9ydC5cbiAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSByZXR1cm4gJyonIGluIG5vZGUgJiYgbm9kZVsnKiddID09PSB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gQ29udGludWUgaW50byBuZXN0ZWQgc2NoZW1hczsgd2lsZGNhcmQgbm9kZXMgY2FuIGFjY2VwdCBkeW5hbWljL2RlZXAgdGFpbHMuXG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAobWF0Y2hlc1NjaGVtYSh0YWlsLCBub2RlIGFzIERlZXBTY2hlbWEpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICgnKicgaW4gbm9kZSkge1xuICAgICAgY29uc3Qgd2lsZGNhcmQgPSBub2RlWycqJ11cbiAgICAgIC8vIGAqIDogdHJ1ZWAgbWVhbnMgYWxsIGRlZXBlciBkZXNjZW5kYW50cyBhcmUgYWxsb3dlZC5cbiAgICAgIGlmICh3aWxkY2FyZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgICAgIC8vIGAqIDogey4uLn1gIG1lYW5zIGRlZXBlciBkZXNjZW5kYW50cyBtdXN0IHNhdGlzZnkgd2lsZGNhcmQgc3ViLXNjaGVtYS5cbiAgICAgIGlmICh0eXBlb2Ygd2lsZGNhcmQgPT09ICdvYmplY3QnKSByZXR1cm4gbWF0Y2hlc1NjaGVtYSh0YWlsLCB3aWxkY2FyZClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gTm9uLW9iamVjdCBsZWFmIGNhbm5vdCBzYXRpc2Z5IHJlbWFpbmluZyB0YWlsIHNlZ21lbnRzLlxuICByZXR1cm4gZmFsc2Vcbn1cblxudHlwZSBSb290VmFsaWRhdG9yID0gKHNlZ21lbnRzOiBzdHJpbmdbXSkgPT4gYm9vbGVhblxudHlwZSBCYXNlRGVwdGggPSAxIHwgMlxuXG4vKipcbiAqIERlZmluZXMgaG93IGEgdG9wLWxldmVsIGBAY3R4Ljxyb290PmAgbmFtZXNwYWNlIGlzIHZhbGlkYXRlZC5cbiAqL1xuaW50ZXJmYWNlIFJvb3REZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIENhbm9uaWNhbCBkZXB0aCBmb3IgbGlnaHR3ZWlnaHQgYmFzZS1wYXRoIGV4dHJhY3Rpb24uXG4gICAqIGAxYCBrZWVwcyBgQGN0eC48cm9vdD5gLCBgMmAga2VlcHMgYEBjdHguPHJvb3Q+LjxjaGlsZD5gLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZURlcHRoOiBCYXNlRGVwdGhcbiAgLyoqXG4gICAqIFZhbGlkYXRvciB1c2VkIGJ5IGJhc2UgY29udGV4dC1wYXRoIGFsbG93LWxpc3QgY2hlY2tzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVZhbGlkYXRvcjogUm9vdFZhbGlkYXRvclxuICAvKipcbiAgICogT3B0aW9uYWwgc3RyaWN0IHZhbGlkYXRvciB1c2VkIGZvciBkZWVwLXBhdGggcG9saWN5IGNoZWNrcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZXBWYWxpZGF0b3I/OiBSb290VmFsaWRhdG9yXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvb3QgdmFsaWRhdG9yIGJhY2tlZCBieSBhIGBEZWVwU2NoZW1hYC5cbiAqIEl0IHZhbGlkYXRlcyBwYXRoIHNlZ21lbnRzIGFmdGVyIHRoZSByb290IHRva2VuIGFuZCBjYW4gb3B0aW9uYWxseVxuICogYWxsb3cgdGhlIGJhcmUgcm9vdCBpdHNlbGYgKGUuZy4gYEBjdHgudXNlcmApLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKFxuICBzY2hlbWE6IERlZXBTY2hlbWEsXG4gIG9wdGlvbnM/OiB7IGFsbG93Um9vdD86IGJvb2xlYW4gfSxcbik6IFJvb3RWYWxpZGF0b3Ige1xuICBjb25zdCBhbGxvd1Jvb3QgPSBvcHRpb25zPy5hbGxvd1Jvb3QgPT09IHRydWVcbiAgcmV0dXJuIChzZWdtZW50czogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgICBpZiAoYWxsb3dSb290ICYmIHNlZ21lbnRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gbWF0Y2hlc1NjaGVtYShzZWdtZW50cy5zbGljZSgxKSwgc2NoZW1hKVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvb3QgdmFsaWRhdG9yIHRoYXQgb25seSBhbGxvd3MgdGhlIHJvb3QgcGF0aCBpdHNlbGYuXG4gKiBFeGFtcGxlOiBgQGN0eC5lbnRpdHlgIGlzIGFsbG93ZWQsIGBAY3R4LmVudGl0eS5pZGAgaXMgcmVqZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4YWN0Um9vdFZhbGlkYXRvcigpOiBSb290VmFsaWRhdG9yIHtcbiAgcmV0dXJuIChzZWdtZW50czogc3RyaW5nW10pOiBib29sZWFuID0+IHNlZ21lbnRzLmxlbmd0aCA9PT0gMVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb290IHZhbGlkYXRvciB0aGF0IGFsbG93cyBhbnkgY2hpbGQgcGF0aCB1bmRlciB0aGUgcm9vdC5cbiAqIEV4YW1wbGU6IGBAY3R4LnN5c3RlbS4qYCAvIGBAY3R4LmRhdGFzb3VyY2VzLipgLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcihvcHRpb25zPzogeyBhbGxvd1Jvb3Q/OiBib29sZWFuIH0pOiBSb290VmFsaWRhdG9yIHtcbiAgcmV0dXJuIGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoeyAnKic6IHRydWUgfSwgb3B0aW9ucylcbn1cblxuLyoqIEBjdHguc3lzdGVtLiogKi9cbmNvbnN0IFNZU1RFTV9TQ0hFTUE6IERlZXBTY2hlbWEgPSB7XG4gIGFwcFZlcnNpb246IHRydWUsXG4gIGRldmljZVR5cGU6IHRydWUsXG4gIGlzTG9jYXRpb25TaGFyaW5nRW5hYmxlZDogdHJ1ZSxcbiAgaXNPZmZsaW5lOiB0cnVlLFxuICBpc09ubGluZTogdHJ1ZSxcbiAgaXNQb3J0cmFpdDogdHJ1ZSxcbiAgbG9jYWxlOiB0cnVlLFxuICB0aW1lem9uZToge1xuICAgIG5hbWU6IHRydWUsXG4gICAgb2Zmc2V0OiB0cnVlLFxuICB9LFxuICBsb2NhdGlvblBlcm1pc3Npb25zOiB7XG4gICAgZm9yZWdyb3VuZDoge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgaXNHcmFudGVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGdlb2xvY2F0aW9uOiB7XG4gICAgbW9ja2VkOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBjb29yZHM6IHtcbiAgICAgIGFjY3VyYWN5OiB0cnVlLFxuICAgICAgYWx0aXR1ZGU6IHRydWUsXG4gICAgICBhbHRpdHVkZUFjY3VyYWN5OiB0cnVlLFxuICAgICAgaGVhZGluZzogdHJ1ZSxcbiAgICAgIGxhdGl0dWRlOiB0cnVlLFxuICAgICAgbG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgc3BlZWQ6IHRydWUsXG4gICAgfSxcbiAgfSxcbiAgZ2VvY29kZXM6IHtcbiAgICAnKic6IHtcbiAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgIHJlc3VsdHM6IHRydWUsXG4gICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9LFxuICB9LFxufVxuXG4vKiogQGN0eC51c2VyLiogKi9cbmNvbnN0IFVTRVJfU0NIRU1BOiBEZWVwU2NoZW1hID0ge1xuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIGlkOiB0cnVlLFxuICBwaG9uZTogdHJ1ZSxcbiAgYXZhdGFyVXJsOiB0cnVlLFxuICBpc1ZlcmlmaWVkOiB0cnVlLFxufVxuXG4vKiogQGN0eC5vcmdhbml6YXRpb24uKiAqL1xuY29uc3QgT1JHQU5JWkFUSU9OX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgaWQ6IHRydWUsXG59XG5cbi8qKiBAY3R4LnNvbHV0aW9uLiogKi9cbmNvbnN0IFNPTFVUSU9OX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgaWQ6IHRydWUsXG4gIG9yZ2FuaXphdGlvbklkOiB0cnVlLFxuICBzaGFyZWRCeTogeyAnKic6IHRydWUgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBjdXN0b206IHsgJyonOiB0cnVlIH0sXG4gICAgZm9ybXM6IHsgJyonOiB0cnVlIH0sXG4gIH0sXG4gIHN0YXRlOiB7ICcqJzogdHJ1ZSB9LFxufVxuXG4vKiogQGN0eC5yZXNwb25zZS4qICovXG5jb25zdCBSRVNQT05TRV9TQ0hFTUE6IERlZXBTY2hlbWEgPSB7XG4gIHN0YXR1czogdHJ1ZSxcbiAgYm9keTogeyAnKic6IHRydWUgfSxcbiAgaGVhZGVyczogeyAnKic6IHsgJyonOiB0cnVlIH0gfSxcbiAgbWVzc2FnZTogdHJ1ZSxcbiAgaXRlbXM6IHRydWUsXG4gIGZhaWxlZEl0ZW1zOiB0cnVlLFxuICBlcnJvcnM6IHRydWUsXG4gIGVycm9yOiB0cnVlLFxuICByZXRyeWFibGU6IHRydWUsXG59XG5cbi8qKiBAY3R4LmFjdGlvbnMuKiAqL1xuY29uc3QgQUNUSU9OU19TQ0hFTUE6IERlZXBTY2hlbWEgPSB7XG4gICcqJzoge1xuICAgIHN0YXRlOiB7XG4gICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICByZXNwb25zZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB0cnVlLFxuICAgIH0sXG4gICAgb3V0cHV0czoge1xuICAgICAgJyonOiB7ICcqJzogdHJ1ZSB9LFxuICAgIH0sXG4gIH0sXG59XG5cbi8qKiBAY3R4Lmd1YXJkLiogKi9cbmNvbnN0IEdVQVJEX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgb3V0cHV0OiB7XG4gICAgJyonOiB7ICcqJzogdHJ1ZSB9LFxuICB9LFxufVxuXG4vKiogQGN0eC5lcnJvci4qICovXG5jb25zdCBFUlJPUl9TQ0hFTUE6IERlZXBTY2hlbWEgPSB7XG4gIG1lc3NhZ2U6IHRydWUsXG4gIHR5cGU6IHRydWUsXG4gIGNvZGU6IHRydWUsXG4gIGRldGFpbHM6IHRydWUsXG4gIHN0YWNrOiB0cnVlLFxufVxuXG5jb25zdCBST09UX0RFRklOSVRJT05TOiBSZWNvcmQ8c3RyaW5nLCBSb290RGVmaW5pdGlvbj4gPSB7XG4gIC8vIEV4YW1wbGU6ID1AY3R4LmFjdGlvbi5wYXJhbWV0ZXJzLmN1c3RvbWVySWRcbiAgYWN0aW9uOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoeyBwYXJhbWV0ZXJzOiB0cnVlIH0pLFxuICB9LFxuICAvLyBFeGFtcGxlOiA9QGN0eC5hY3Rpb25zLnN1Ym1pdC5vdXRwdXRzLnJlc3VsdFxuICBhY3Rpb25zOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihBQ1RJT05TX1NDSEVNQSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguY29tcG9uZW50LmlucHV0cy52YWx1ZVxuICBjb21wb25lbnQ6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7IGlucHV0czogdHJ1ZSwgJyonOiB0cnVlIH0pLFxuICB9LFxuICAvLyBFeGFtcGxlOiA9QGN0eC5jb21wb25lbnRzLmZvcm0uc3RhdGUudmFsdWVcbiAgY29tcG9uZW50czoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmN1cnJlbnQuaXRlbS5pZFxuICBjdXJyZW50OiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3Ioe1xuICAgICAgaXRlbTogdHJ1ZSxcbiAgICAgIGNvbHVtbjogdHJ1ZSxcbiAgICAgIGNlbGw6IHsgJyonOiB0cnVlIH0sXG4gICAgICBzdGF0ZTogeyAnKic6IHRydWUgfSxcbiAgICB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5kYXRhc291cmNlcy5jb250YWN0cy5pZFxuICBkYXRhc291cmNlczoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmNvbW1hbmRJZFxuICBjb21tYW5kSWQ6IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguY29ycmVsYXRpb25JZFxuICBjb3JyZWxhdGlvbklkOiB7XG4gICAgYmFzZURlcHRoOiAxLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZUV4YWN0Um9vdFZhbGlkYXRvcigpLFxuICAgIGRlZXBWYWxpZGF0b3I6IGNyZWF0ZUV4YWN0Um9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmVudGl0eVxuICBlbnRpdHk6IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguZXJyb3IubmFtZVxuICBlcnJvcjoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICAgIGRlZXBWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoRVJST1JfU0NIRU1BLCB7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5leHByZXNzaW9ucy5zb21lRXhwcmVzc2lvblxuICBleHByZXNzaW9uczoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICAvLyBBbGxvdyBib3RoOlxuICAgIC8vIC0gPUBjdHguZXhwcmVzc2lvbnNcbiAgICAvLyAtID1AY3R4LmV4cHJlc3Npb25zLnNvbWVFeHByZXNzaW9uXG4gICAgLy8gVGhpcyByb290IGlzIHVzZWQgYXMgYSBuYW1lc3BhY2UgYW5kIGFzIGEgZGlyZWN0IHJlZmVyZW5jZSBpbiBleHBlcnQgZm9ybSBmbG93cy5cbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcih7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5mdW5jdGlvbi5wYXJhbWV0ZXJzLmN1c3RvbWVySWRcbiAgZnVuY3Rpb246IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7IHBhcmFtZXRlcnM6IHRydWUgfSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguZ3VhcmQub3V0cHV0LmNhblByb2NlZWRcbiAgZ3VhcmQ6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKEdVQVJEX1NDSEVNQSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguaW5wdXRzXG4gIGlucHV0czoge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVFeGFjdFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5qaWcuaW5wdXRzLmlkXG4gIGppZzoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKHsgaW5wdXRzOiB0cnVlLCAnKic6IHRydWUgfSksXG4gIH0sXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmppZ3MubmV4dFN0ZXAub3V0cHV0cy52YWx1ZVxuICBqaWdzOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHgub3V0cHV0LnRvdGFsQ291bnRcbiAgb3V0cHV0OiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4Lm9yZ2FuaXphdGlvbi5pZFxuICBvcmdhbml6YXRpb246IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihPUkdBTklaQVRJT05fU0NIRU1BLCB7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5wYXJhbWV0ZXJzXG4gIHBhcmFtZXRlcnM6IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHgucXVlcmllcy5lcnJvcl9jaGVjay5oYXNFcnJvclxuICBxdWVyaWVzOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHgucmVjb3JkLmlkXG4gIHJlY29yZDoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcih7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvblxuICByZXF1ZXN0OiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICAgIGRlZXBWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3Ioe1xuICAgICAgbWV0aG9kOiB0cnVlLFxuICAgICAgdXJsOiB0cnVlLFxuICAgICAgaGVhZGVyczogeyAnKic6IHRydWUgfSxcbiAgICAgIGJvZHk6IHsgJyonOiB0cnVlIH0sXG4gICAgfSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHgucHJvdmlkZXIucmVzcG9uc2VcbiAgcHJvdmlkZXI6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5yZXNwb25zZS5ib2R5XG4gIHJlc3BvbnNlOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihSRVNQT05TRV9TQ0hFTUEsIHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnNjcmlwdHMuaGVscGVyUmVzdWx0XG4gIHNjcmlwdHM6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5zb2x1dGlvbi5zZXR0aW5ncy5jdXN0b20uQ3VzdG9tZXJOYW1lXG4gIHNvbHV0aW9uOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihTT0xVVElPTl9TQ0hFTUEpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnN5c3RlbS5sb2NhbGVcbiAgc3lzdGVtOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihTWVNURU1fU0NIRU1BKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC51c2VyLmVtYWlsXG4gIHVzZXI6IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihVU0VSX1NDSEVNQSwgeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSb290RGVmaW5pdGlvbj5cblxuY29uc3QgREVFUF9WQUxJREFUSU9OX1JPT1RTID0gbmV3IFNldChcbiAgT2JqZWN0LmVudHJpZXMoUk9PVF9ERUZJTklUSU9OUylcbiAgICAuZmlsdGVyKChbLCBkZWZpbml0aW9uXSkgPT4gZGVmaW5pdGlvbi5kZWVwVmFsaWRhdG9yICE9PSB1bmRlZmluZWQpXG4gICAgLm1hcCgoW3Jvb3RdKSA9PiByb290KSxcbilcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHJvb3QgdXNlcyBzdHJpY3QgZGVlcC1wYXRoIHZhbGlkYXRpb24gcG9saWN5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWVwVmFsaWRhdGlvblJvb3Qocm9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBERUVQX1ZBTElEQVRJT05fUk9PVFMuaGFzKHJvb3QpXG59XG5cbi8qKlxuICogRW5mb3JjZSBiYXNlIGNvbnRleHQtcGF0aCBhbGxvdy1saXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0UGF0aEFsbG93ZWQoc2VnbWVudHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSBST09UX0RFRklOSVRJT05TW3NlZ21lbnRzWzBdXSBhcyBSb290RGVmaW5pdGlvbiB8IHVuZGVmaW5lZFxuICByZXR1cm4gZGVmaW5pdGlvbiA/IGRlZmluaXRpb24uYmFzZVZhbGlkYXRvcihzZWdtZW50cykgOiBmYWxzZVxufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGNhbm9uaWNhbCBiYXNlIHBhdGggc2VnbWVudHMgdXNlZCBmb3IgbGlnaHR3ZWlnaHQgcGF0aCBleHRyYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhc2VDb250ZXh0U2VnbWVudHMocGF0aFBhcnRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgW3Jvb3QsIHNlY29uZF0gPSBwYXRoUGFydHNcbiAgaWYgKCFyb290KSByZXR1cm4gW11cblxuICBjb25zdCBkZWZpbml0aW9uID0gUk9PVF9ERUZJTklUSU9OU1tyb290XSBhcyBSb290RGVmaW5pdGlvbiB8IHVuZGVmaW5lZFxuICBpZiAoIWRlZmluaXRpb24pIHJldHVybiBbcm9vdF1cbiAgaWYgKGRlZmluaXRpb24uYmFzZURlcHRoID09PSAxIHx8ICFzZWNvbmQpIHJldHVybiBbcm9vdF1cbiAgcmV0dXJuIFtyb290LCBzZWNvbmRdXG59XG5cbi8qKlxuICogRW5mb3JjZSBkZWVwLXBhdGggcG9saWN5IGZvciBzdHJpY3QgY29udGV4dCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWVwQWxsb3dlZChzZWdtZW50czogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IFJPT1RfREVGSU5JVElPTlNbc2VnbWVudHNbMF1dIGFzIFJvb3REZWZpbml0aW9uIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRvciA9IGRlZmluaXRpb24/LmRlZXBWYWxpZGF0b3JcbiAgLy8gUm9vdHMgd2l0aG91dCBleHBsaWNpdCBwb2xpY3kgcmVtYWluIG9wZW4gKGUuZy4gQGN0eC5jdXN0b20pLlxuICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHNlZ21lbnRzKSA6IHRydWVcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/jsonata/context.ts"],"names":[],"mappings":"AAYA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAsB3E;AASD,wBAAgB,yBAAyB,CAAC,KAAK,EAC7C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAqBzC;AAmaD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAKD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAGhE;AAKD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE;AAKD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAKzD","sourcesContent":["/**\n * Recursive allow-list schema for context path validation.\n * - `true` marks an allowed leaf.\n * - object keys define allowed child segments.\n * - `'*'` can be used as a wildcard segment.\n */\ntype DeepSchema = true | { [key: string]: DeepSchema }\n\n/**\n * Checks whether a concrete scope path matches a pattern.\n * Supports wildcard (`*`) segments and prefix matching.\n */\nexport function matchesScopePattern(scope: string, pattern: string): boolean {\n const scopeParts = scope.split('.')\n const patternParts = pattern.split('.')\n\n if (patternParts.length > scopeParts.length) {\n return false\n }\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i]\n const scopePart = scopeParts[i]\n\n if (patternPart === '*') {\n continue\n }\n\n if (patternPart !== scopePart) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Finds the most specific matching rule for a scope.\n *\n * Specificity rules:\n * - longer pattern depth wins\n * - if depth ties, fewer wildcards wins\n */\nexport function findBestMatchingScopeRule<TRule>(\n scope: string,\n rules: ReadonlyMap<string, TRule>,\n): { pattern: string; rule: TRule } | null {\n let bestMatch: { pattern: string; rule: TRule } | null = null\n let bestMatchLength = -1\n let bestWildcardCount = Number.POSITIVE_INFINITY\n\n for (const [pattern, rule] of rules) {\n if (matchesScopePattern(scope, pattern)) {\n const patternLength = pattern.split('.').length\n const wildcardCount = pattern.split('.').filter((p) => p === '*').length\n if (\n patternLength > bestMatchLength ||\n (patternLength === bestMatchLength && wildcardCount < bestWildcardCount)\n ) {\n bestMatch = { pattern, rule }\n bestMatchLength = patternLength\n bestWildcardCount = wildcardCount\n }\n }\n }\n\n return bestMatch\n}\n\n/**\n * Validate `segments` against a nested allow-list schema.\n */\nfunction matchesSchema(segments: string[], schema: DeepSchema): boolean {\n // No segment left to match.\n if (segments.length === 0) return false\n // `true` marks a leaf and cannot be traversed.\n if (schema === true) return false\n\n // Current key is not allowed at this level.\n const [head, ...tail] = segments\n if (!(head in schema)) {\n // Support wildcard nodes for dynamic keys, e.g. actions.<id>, response.headers.<name>.\n if ('*' in schema) {\n const wildcard = schema['*']\n // `* : true` allows any remaining path.\n if (wildcard === true) return true\n // `* : {...}` continues validation against a wildcard sub-schema.\n if (typeof wildcard === 'object') return matchesSchema(tail, wildcard)\n }\n return false\n }\n\n const node = schema[head]\n // Exact match for leaf, or wildcard-enabled object nodes.\n if (tail.length === 0) {\n if (node === true) return true\n // Allow object nodes to be terminal when they explicitly expose wildcard leaf support.\n if (typeof node === 'object') return '*' in node && node['*'] === true\n return false\n }\n // Continue into nested schemas; wildcard nodes can accept dynamic/deep tails.\n if (typeof node === 'object') {\n if (matchesSchema(tail, node as DeepSchema)) return true\n if ('*' in node) {\n const wildcard = node['*']\n // `* : true` means all deeper descendants are allowed.\n if (wildcard === true) return true\n // `* : {...}` means deeper descendants must satisfy wildcard sub-schema.\n if (typeof wildcard === 'object') return matchesSchema(tail, wildcard)\n }\n return false\n }\n // Non-object leaf cannot satisfy remaining tail segments.\n return false\n}\n\ntype RootValidator = (segments: string[]) => boolean\ntype BaseDepth = 1 | 2\n\n/**\n * Defines how a top-level `@ctx.<root>` namespace is validated.\n */\ninterface RootDefinition {\n /**\n * Canonical depth for lightweight base-path extraction.\n * `1` keeps `@ctx.<root>`, `2` keeps `@ctx.<root>.<child>`.\n */\n readonly baseDepth: BaseDepth\n /**\n * Validator used by base context-path allow-list checks.\n */\n readonly baseValidator: RootValidator\n /**\n * Optional strict validator used for deep-path policy checks.\n */\n readonly deepValidator?: RootValidator\n}\n\n/**\n * Creates a root validator backed by a `DeepSchema`.\n * It validates path segments after the root token and can optionally\n * allow the bare root itself (e.g. `@ctx.user`).\n */\nfunction createSchemaRootValidator(\n schema: DeepSchema,\n options?: { allowRoot?: boolean },\n): RootValidator {\n const allowRoot = options?.allowRoot === true\n return (segments: string[]): boolean => {\n if (allowRoot && segments.length === 1) return true\n return matchesSchema(segments.slice(1), schema)\n }\n}\n\n/**\n * Creates a root validator that only allows the root path itself.\n * Example: `@ctx.entity` is allowed, `@ctx.entity.id` is rejected.\n */\nfunction createExactRootValidator(): RootValidator {\n return (segments: string[]): boolean => segments.length === 1\n}\n\n/**\n * Creates a root validator that allows any child path under the root.\n * Example: `@ctx.system.*` / `@ctx.datasources.*`.\n */\nfunction createWildRootValidator(options?: { allowRoot?: boolean }): RootValidator {\n return createSchemaRootValidator({ '*': true }, options)\n}\n\n/** @ctx.system.* */\nconst SYSTEM_SCHEMA: DeepSchema = {\n appVersion: true,\n deviceType: true,\n isLocationSharingEnabled: true,\n isOffline: true,\n isOnline: true,\n isPortrait: true,\n locale: true,\n timezone: {\n name: true,\n offset: true,\n },\n locationPermissions: {\n foreground: {\n status: true,\n isGranted: true,\n },\n },\n geolocation: {\n mocked: true,\n timestamp: true,\n coords: {\n accuracy: true,\n altitude: true,\n altitudeAccuracy: true,\n heading: true,\n latitude: true,\n longitude: true,\n speed: true,\n },\n },\n geocodes: {\n '*': {\n status: true,\n response: {\n results: true,\n status: true,\n },\n error: true,\n },\n },\n}\n\n/** @ctx.user.* */\nconst USER_SCHEMA: DeepSchema = {\n displayName: true,\n email: true,\n id: true,\n phone: true,\n avatarUrl: true,\n isVerified: true,\n}\n\n/** @ctx.organization.* */\nconst ORGANIZATION_SCHEMA: DeepSchema = {\n id: true,\n}\n\n/** @ctx.solution.* */\nconst SOLUTION_SCHEMA: DeepSchema = {\n name: true,\n id: true,\n organizationId: true,\n sharedBy: { '*': true },\n settings: {\n custom: { '*': true },\n forms: { '*': true },\n },\n state: { '*': true },\n}\n\n/** @ctx.response.* */\nconst RESPONSE_SCHEMA: DeepSchema = {\n status: true,\n body: { '*': true },\n headers: { '*': { '*': true } },\n message: true,\n items: true,\n failedItems: true,\n errors: true,\n error: true,\n retryable: true,\n}\n\n/** @ctx.actions.* */\nconst ACTIONS_SCHEMA: DeepSchema = {\n '*': {\n state: {\n isPending: true,\n response: true,\n value: true,\n },\n outputs: {\n '*': { '*': true },\n },\n },\n}\n\n/** @ctx.guard.* */\nconst GUARD_SCHEMA: DeepSchema = {\n output: {\n '*': { '*': true },\n },\n}\n\n/** @ctx.error.* */\nconst ERROR_SCHEMA: DeepSchema = {\n message: true,\n type: true,\n code: true,\n details: true,\n stack: true,\n}\n\nconst ROOT_DEFINITIONS: Record<string, RootDefinition> = {\n // Example: =@ctx.action.parameters.customerId\n action: {\n baseDepth: 2,\n baseValidator: createSchemaRootValidator({ parameters: true }),\n },\n // Example: =@ctx.actions.submit.outputs.result\n actions: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(ACTIONS_SCHEMA),\n },\n\n // Example: =@ctx.component.inputs.value\n component: {\n baseDepth: 2,\n baseValidator: createSchemaRootValidator({ inputs: true, '*': true }),\n },\n // Example: =@ctx.components.form.state.value\n components: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.current.item.id\n current: {\n baseDepth: 2,\n baseValidator: createSchemaRootValidator({\n item: true,\n column: true,\n cell: { '*': true },\n state: { '*': true },\n }),\n },\n\n // Example: =@ctx.datasources.contacts.id\n datasources: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.commandId\n commandId: {\n baseDepth: 1,\n baseValidator: createExactRootValidator(),\n deepValidator: createExactRootValidator(),\n },\n\n // Example: =@ctx.correlationId\n correlationId: {\n baseDepth: 1,\n baseValidator: createExactRootValidator(),\n deepValidator: createExactRootValidator(),\n },\n\n // Example: =@ctx.entity\n entity: {\n baseDepth: 1,\n baseValidator: createExactRootValidator(),\n },\n\n // Example: =@ctx.error.name\n error: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(ERROR_SCHEMA, { allowRoot: true }),\n },\n\n // Example: =@ctx.expressions.someExpression\n expressions: {\n baseDepth: 2,\n // Allow both:\n // - =@ctx.expressions\n // - =@ctx.expressions.someExpression\n // This root is used as a namespace and as a direct reference in expert form flows.\n baseValidator: createWildRootValidator({ allowRoot: true }),\n },\n\n // Example: =@ctx.function.parameters.customerId\n function: {\n baseDepth: 2,\n baseValidator: createSchemaRootValidator({ parameters: true }),\n },\n\n // Example: =@ctx.guard.output.canProceed\n guard: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(GUARD_SCHEMA),\n },\n\n // Example: =@ctx.inputs\n inputs: {\n baseDepth: 1,\n baseValidator: createExactRootValidator(),\n },\n\n // Example: =@ctx.jig.inputs.id\n jig: {\n baseDepth: 2,\n baseValidator: createSchemaRootValidator({ inputs: true, '*': true }),\n },\n // Example: =@ctx.jigs.nextStep.outputs.value\n jigs: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.output.totalCount\n output: {\n baseDepth: 2,\n baseValidator: createWildRootValidator({ allowRoot: true }),\n },\n\n // Example: =@ctx.organization.id\n organization: {\n baseDepth: 1,\n baseValidator: createWildRootValidator({ allowRoot: true }),\n deepValidator: createSchemaRootValidator(ORGANIZATION_SCHEMA, { allowRoot: true }),\n },\n\n // Example: =@ctx.parameters\n parameters: {\n baseDepth: 1,\n baseValidator: createExactRootValidator(),\n },\n\n // Example: =@ctx.queries.error_check.hasError\n queries: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.record.id\n record: {\n baseDepth: 2,\n baseValidator: createWildRootValidator({ allowRoot: true }),\n },\n\n // Example: =@ctx.request.headers.authorization\n request: {\n baseDepth: 2,\n baseValidator: createWildRootValidator({ allowRoot: true }),\n deepValidator: createSchemaRootValidator({\n method: true,\n url: true,\n headers: { '*': true },\n body: { '*': true },\n }),\n },\n\n // Example: =@ctx.provider.response\n provider: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.response.body\n response: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(RESPONSE_SCHEMA, { allowRoot: true }),\n },\n\n // Example: =@ctx.scripts.helperResult\n scripts: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n },\n\n // Example: =@ctx.solution.settings.custom.CustomerName\n solution: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(SOLUTION_SCHEMA),\n },\n\n // Example: =@ctx.system.locale\n system: {\n baseDepth: 2,\n baseValidator: createWildRootValidator(),\n deepValidator: createSchemaRootValidator(SYSTEM_SCHEMA),\n },\n\n // Example: =@ctx.user.email\n user: {\n baseDepth: 1,\n baseValidator: createWildRootValidator({ allowRoot: true }),\n deepValidator: createSchemaRootValidator(USER_SCHEMA, { allowRoot: true }),\n },\n} as const satisfies Record<string, RootDefinition>\n\nconst DEEP_VALIDATION_ROOTS = new Set(\n Object.entries(ROOT_DEFINITIONS)\n .filter(([, definition]) => definition.deepValidator !== undefined)\n .map(([root]) => root),\n)\n\n/**\n * Checks whether a root uses strict deep-path validation policy.\n */\nexport function isDeepValidationRoot(root: string): boolean {\n return DEEP_VALIDATION_ROOTS.has(root)\n}\n\n/**\n * Enforce base context-path allow-list.\n */\nexport function isContextPathAllowed(segments: string[]): boolean {\n const definition = ROOT_DEFINITIONS[segments[0]] as RootDefinition | undefined\n return definition ? definition.baseValidator(segments) : false\n}\n\n/**\n * Resolve the canonical base path segments used for lightweight path extraction.\n */\nexport function resolveBaseContextSegments(pathParts: string[]): string[] {\n const [root, second] = pathParts\n if (!root) return []\n\n const definition = ROOT_DEFINITIONS[root] as RootDefinition | undefined\n if (!definition) return [root]\n if (definition.baseDepth === 1 || !second) return [root]\n return [root, second]\n}\n\n/**\n * Enforce deep-path policy for strict context validation.\n */\nexport function isDeepAllowed(segments: string[]): boolean {\n const definition = ROOT_DEFINITIONS[segments[0]] as RootDefinition | undefined\n const validator = definition?.deepValidator\n // Roots without explicit policy remain open (e.g. @ctx.custom).\n return validator ? validator(segments) : true\n}\n"]}
@@ -0,0 +1,349 @@
1
+ export function matchesScopePattern(scope, pattern) {
2
+ const scopeParts = scope.split('.');
3
+ const patternParts = pattern.split('.');
4
+ if (patternParts.length > scopeParts.length) {
5
+ return false;
6
+ }
7
+ for (let i = 0; i < patternParts.length; i++) {
8
+ const patternPart = patternParts[i];
9
+ const scopePart = scopeParts[i];
10
+ if (patternPart === '*') {
11
+ continue;
12
+ }
13
+ if (patternPart !== scopePart) {
14
+ return false;
15
+ }
16
+ }
17
+ return true;
18
+ }
19
+ export function findBestMatchingScopeRule(scope, rules) {
20
+ let bestMatch = null;
21
+ let bestMatchLength = -1;
22
+ let bestWildcardCount = Number.POSITIVE_INFINITY;
23
+ for (const [pattern, rule] of rules) {
24
+ if (matchesScopePattern(scope, pattern)) {
25
+ const patternLength = pattern.split('.').length;
26
+ const wildcardCount = pattern.split('.').filter((p) => p === '*').length;
27
+ if (patternLength > bestMatchLength ||
28
+ (patternLength === bestMatchLength && wildcardCount < bestWildcardCount)) {
29
+ bestMatch = { pattern, rule };
30
+ bestMatchLength = patternLength;
31
+ bestWildcardCount = wildcardCount;
32
+ }
33
+ }
34
+ }
35
+ return bestMatch;
36
+ }
37
+ function matchesSchema(segments, schema) {
38
+ if (segments.length === 0)
39
+ return false;
40
+ if (schema === true)
41
+ return false;
42
+ const [head, ...tail] = segments;
43
+ if (!(head in schema)) {
44
+ if ('*' in schema) {
45
+ const wildcard = schema['*'];
46
+ if (wildcard === true)
47
+ return true;
48
+ if (typeof wildcard === 'object')
49
+ return matchesSchema(tail, wildcard);
50
+ }
51
+ return false;
52
+ }
53
+ const node = schema[head];
54
+ if (tail.length === 0) {
55
+ if (node === true)
56
+ return true;
57
+ if (typeof node === 'object')
58
+ return '*' in node && node['*'] === true;
59
+ return false;
60
+ }
61
+ if (typeof node === 'object') {
62
+ if (matchesSchema(tail, node))
63
+ return true;
64
+ if ('*' in node) {
65
+ const wildcard = node['*'];
66
+ if (wildcard === true)
67
+ return true;
68
+ if (typeof wildcard === 'object')
69
+ return matchesSchema(tail, wildcard);
70
+ }
71
+ return false;
72
+ }
73
+ return false;
74
+ }
75
+ function createSchemaRootValidator(schema, options) {
76
+ const allowRoot = options?.allowRoot === true;
77
+ return (segments) => {
78
+ if (allowRoot && segments.length === 1)
79
+ return true;
80
+ return matchesSchema(segments.slice(1), schema);
81
+ };
82
+ }
83
+ function createExactRootValidator() {
84
+ return (segments) => segments.length === 1;
85
+ }
86
+ function createWildRootValidator(options) {
87
+ return createSchemaRootValidator({ '*': true }, options);
88
+ }
89
+ const SYSTEM_SCHEMA = {
90
+ appVersion: true,
91
+ deviceType: true,
92
+ isLocationSharingEnabled: true,
93
+ isOffline: true,
94
+ isOnline: true,
95
+ isPortrait: true,
96
+ locale: true,
97
+ timezone: {
98
+ name: true,
99
+ offset: true,
100
+ },
101
+ locationPermissions: {
102
+ foreground: {
103
+ status: true,
104
+ isGranted: true,
105
+ },
106
+ },
107
+ geolocation: {
108
+ mocked: true,
109
+ timestamp: true,
110
+ coords: {
111
+ accuracy: true,
112
+ altitude: true,
113
+ altitudeAccuracy: true,
114
+ heading: true,
115
+ latitude: true,
116
+ longitude: true,
117
+ speed: true,
118
+ },
119
+ },
120
+ geocodes: {
121
+ '*': {
122
+ status: true,
123
+ response: {
124
+ results: true,
125
+ status: true,
126
+ },
127
+ error: true,
128
+ },
129
+ },
130
+ };
131
+ const USER_SCHEMA = {
132
+ displayName: true,
133
+ email: true,
134
+ id: true,
135
+ phone: true,
136
+ avatarUrl: true,
137
+ isVerified: true,
138
+ };
139
+ const ORGANIZATION_SCHEMA = {
140
+ id: true,
141
+ };
142
+ const SOLUTION_SCHEMA = {
143
+ name: true,
144
+ id: true,
145
+ organizationId: true,
146
+ sharedBy: { '*': true },
147
+ settings: {
148
+ custom: { '*': true },
149
+ forms: { '*': true },
150
+ },
151
+ state: { '*': true },
152
+ };
153
+ const RESPONSE_SCHEMA = {
154
+ status: true,
155
+ body: { '*': true },
156
+ headers: { '*': { '*': true } },
157
+ message: true,
158
+ items: true,
159
+ failedItems: true,
160
+ errors: true,
161
+ error: true,
162
+ retryable: true,
163
+ };
164
+ const ACTIONS_SCHEMA = {
165
+ '*': {
166
+ state: {
167
+ isPending: true,
168
+ response: true,
169
+ value: true,
170
+ },
171
+ outputs: {
172
+ '*': { '*': true },
173
+ },
174
+ },
175
+ };
176
+ const GUARD_SCHEMA = {
177
+ output: {
178
+ '*': { '*': true },
179
+ },
180
+ };
181
+ const ERROR_SCHEMA = {
182
+ message: true,
183
+ type: true,
184
+ code: true,
185
+ details: true,
186
+ stack: true,
187
+ };
188
+ const ROOT_DEFINITIONS = {
189
+ action: {
190
+ baseDepth: 2,
191
+ baseValidator: createSchemaRootValidator({ parameters: true }),
192
+ },
193
+ actions: {
194
+ baseDepth: 2,
195
+ baseValidator: createWildRootValidator(),
196
+ deepValidator: createSchemaRootValidator(ACTIONS_SCHEMA),
197
+ },
198
+ component: {
199
+ baseDepth: 2,
200
+ baseValidator: createSchemaRootValidator({ inputs: true, '*': true }),
201
+ },
202
+ components: {
203
+ baseDepth: 2,
204
+ baseValidator: createWildRootValidator(),
205
+ },
206
+ current: {
207
+ baseDepth: 2,
208
+ baseValidator: createSchemaRootValidator({
209
+ item: true,
210
+ column: true,
211
+ cell: { '*': true },
212
+ state: { '*': true },
213
+ }),
214
+ },
215
+ datasources: {
216
+ baseDepth: 2,
217
+ baseValidator: createWildRootValidator(),
218
+ },
219
+ commandId: {
220
+ baseDepth: 1,
221
+ baseValidator: createExactRootValidator(),
222
+ deepValidator: createExactRootValidator(),
223
+ },
224
+ correlationId: {
225
+ baseDepth: 1,
226
+ baseValidator: createExactRootValidator(),
227
+ deepValidator: createExactRootValidator(),
228
+ },
229
+ entity: {
230
+ baseDepth: 1,
231
+ baseValidator: createExactRootValidator(),
232
+ },
233
+ error: {
234
+ baseDepth: 2,
235
+ baseValidator: createWildRootValidator(),
236
+ deepValidator: createSchemaRootValidator(ERROR_SCHEMA, { allowRoot: true }),
237
+ },
238
+ expressions: {
239
+ baseDepth: 2,
240
+ baseValidator: createWildRootValidator({ allowRoot: true }),
241
+ },
242
+ function: {
243
+ baseDepth: 2,
244
+ baseValidator: createSchemaRootValidator({ parameters: true }),
245
+ },
246
+ guard: {
247
+ baseDepth: 2,
248
+ baseValidator: createWildRootValidator(),
249
+ deepValidator: createSchemaRootValidator(GUARD_SCHEMA),
250
+ },
251
+ inputs: {
252
+ baseDepth: 1,
253
+ baseValidator: createExactRootValidator(),
254
+ },
255
+ jig: {
256
+ baseDepth: 2,
257
+ baseValidator: createSchemaRootValidator({ inputs: true, '*': true }),
258
+ },
259
+ jigs: {
260
+ baseDepth: 2,
261
+ baseValidator: createWildRootValidator(),
262
+ },
263
+ output: {
264
+ baseDepth: 2,
265
+ baseValidator: createWildRootValidator({ allowRoot: true }),
266
+ },
267
+ organization: {
268
+ baseDepth: 1,
269
+ baseValidator: createWildRootValidator({ allowRoot: true }),
270
+ deepValidator: createSchemaRootValidator(ORGANIZATION_SCHEMA, { allowRoot: true }),
271
+ },
272
+ parameters: {
273
+ baseDepth: 1,
274
+ baseValidator: createExactRootValidator(),
275
+ },
276
+ queries: {
277
+ baseDepth: 2,
278
+ baseValidator: createWildRootValidator(),
279
+ },
280
+ record: {
281
+ baseDepth: 2,
282
+ baseValidator: createWildRootValidator({ allowRoot: true }),
283
+ },
284
+ request: {
285
+ baseDepth: 2,
286
+ baseValidator: createWildRootValidator({ allowRoot: true }),
287
+ deepValidator: createSchemaRootValidator({
288
+ method: true,
289
+ url: true,
290
+ headers: { '*': true },
291
+ body: { '*': true },
292
+ }),
293
+ },
294
+ provider: {
295
+ baseDepth: 2,
296
+ baseValidator: createWildRootValidator(),
297
+ },
298
+ response: {
299
+ baseDepth: 2,
300
+ baseValidator: createWildRootValidator(),
301
+ deepValidator: createSchemaRootValidator(RESPONSE_SCHEMA, { allowRoot: true }),
302
+ },
303
+ scripts: {
304
+ baseDepth: 2,
305
+ baseValidator: createWildRootValidator(),
306
+ },
307
+ solution: {
308
+ baseDepth: 2,
309
+ baseValidator: createWildRootValidator(),
310
+ deepValidator: createSchemaRootValidator(SOLUTION_SCHEMA),
311
+ },
312
+ system: {
313
+ baseDepth: 2,
314
+ baseValidator: createWildRootValidator(),
315
+ deepValidator: createSchemaRootValidator(SYSTEM_SCHEMA),
316
+ },
317
+ user: {
318
+ baseDepth: 1,
319
+ baseValidator: createWildRootValidator({ allowRoot: true }),
320
+ deepValidator: createSchemaRootValidator(USER_SCHEMA, { allowRoot: true }),
321
+ },
322
+ };
323
+ const DEEP_VALIDATION_ROOTS = new Set(Object.entries(ROOT_DEFINITIONS)
324
+ .filter(([, definition]) => definition.deepValidator !== undefined)
325
+ .map(([root]) => root));
326
+ export function isDeepValidationRoot(root) {
327
+ return DEEP_VALIDATION_ROOTS.has(root);
328
+ }
329
+ export function isContextPathAllowed(segments) {
330
+ const definition = ROOT_DEFINITIONS[segments[0]];
331
+ return definition ? definition.baseValidator(segments) : false;
332
+ }
333
+ export function resolveBaseContextSegments(pathParts) {
334
+ const [root, second] = pathParts;
335
+ if (!root)
336
+ return [];
337
+ const definition = ROOT_DEFINITIONS[root];
338
+ if (!definition)
339
+ return [root];
340
+ if (definition.baseDepth === 1 || !second)
341
+ return [root];
342
+ return [root, second];
343
+ }
344
+ export function isDeepAllowed(segments) {
345
+ const definition = ROOT_DEFINITIONS[segments[0]];
346
+ const validator = definition?.deepValidator;
347
+ return validator ? validator(segments) : true;
348
+ }
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29uYXRhL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQVc7SUFDM0UsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXZDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRS9CLElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQUEsQ0FDWjtBQVNELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsS0FBYSxFQUNiLEtBQWlDLEVBQ1E7SUFDekMsSUFBSSxTQUFTLEdBQTRDLElBQUksQ0FBQTtJQUM3RCxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN4QixJQUFJLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtJQUVoRCxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxD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LEVBQUUsYUFBYSxDQUFBO0lBRTNDLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUFBLENBQzlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWN1cnNpdmUgYWxsb3ctbGlzdCBzY2hlbWEgZm9yIGNvbnRleHQgcGF0aCB2YWxpZGF0aW9uLlxuICogLSBgdHJ1ZWAgbWFya3MgYW4gYWxsb3dlZCBsZWFmLlxuICogLSBvYmplY3Qga2V5cyBkZWZpbmUgYWxsb3dlZCBjaGlsZCBzZWdtZW50cy5cbiAqIC0gYCcqJ2AgY2FuIGJlIHVzZWQgYXMgYSB3aWxkY2FyZCBzZWdtZW50LlxuICovXG50eXBlIERlZXBTY2hlbWEgPSB0cnVlIHwgeyBba2V5OiBzdHJpbmddOiBEZWVwU2NoZW1hIH1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGNvbmNyZXRlIHNjb3BlIHBhdGggbWF0Y2hlcyBhIHBhdHRlcm4uXG4gKiBTdXBwb3J0cyB3aWxkY2FyZCAoYCpgKSBzZWdtZW50cyBhbmQgcHJlZml4IG1hdGNoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc1Njb3BlUGF0dGVybihzY29wZTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgc2NvcGVQYXJ0cyA9IHNjb3BlLnNwbGl0KCcuJylcbiAgY29uc3QgcGF0dGVyblBhcnRzID0gcGF0dGVybi5zcGxpdCgnLicpXG5cbiAgaWYgKHBhdHRlcm5QYXJ0cy5sZW5ndGggPiBzY29wZVBhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwYXR0ZXJuUGFydCA9IHBhdHRlcm5QYXJ0c1tpXVxuICAgIGNvbnN0IHNjb3BlUGFydCA9IHNjb3BlUGFydHNbaV1cblxuICAgIGlmIChwYXR0ZXJuUGFydCA9PT0gJyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuUGFydCAhPT0gc2NvcGVQYXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoaW5nIHJ1bGUgZm9yIGEgc2NvcGUuXG4gKlxuICogU3BlY2lmaWNpdHkgcnVsZXM6XG4gKiAtIGxvbmdlciBwYXR0ZXJuIGRlcHRoIHdpbnNcbiAqIC0gaWYgZGVwdGggdGllcywgZmV3ZXIgd2lsZGNhcmRzIHdpbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRCZXN0TWF0Y2hpbmdTY29wZVJ1bGU8VFJ1bGU+KFxuICBzY29wZTogc3RyaW5nLFxuICBydWxlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBUUnVsZT4sXG4pOiB7IHBhdHRlcm46IHN0cmluZzsgcnVsZTogVFJ1bGUgfSB8IG51bGwge1xuICBsZXQgYmVzdE1hdGNoOiB7IHBhdHRlcm46IHN0cmluZzsgcnVsZTogVFJ1bGUgfSB8IG51bGwgPSBudWxsXG4gIGxldCBiZXN0TWF0Y2hMZW5ndGggPSAtMVxuICBsZXQgYmVzdFdpbGRjYXJkQ291bnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBydWxlXSBvZiBydWxlcykge1xuICAgIGlmIChtYXRjaGVzU2NvcGVQYXR0ZXJuKHNjb3BlLCBwYXR0ZXJuKSkge1xuICAgICAgY29uc3QgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4uc3BsaXQoJy4nKS5sZW5ndGhcbiAgICAgIGNvbnN0IHdpbGRjYXJkQ291bnQgPSBwYXR0ZXJuLnNwbGl0KCcuJykuZmlsdGVyKChwKSA9PiBwID09PSAnKicpLmxlbmd0aFxuICAgICAgaWYgKFxuICAgICAgICBwYXR0ZXJuTGVuZ3RoID4gYmVzdE1hdGNoTGVuZ3RoIHx8XG4gICAgICAgIChwYXR0ZXJuTGVuZ3RoID09PSBiZXN0TWF0Y2hMZW5ndGggJiYgd2lsZGNhcmRDb3VudCA8IGJlc3RXaWxkY2FyZENvdW50KVxuICAgICAgKSB7XG4gICAgICAgIGJlc3RNYXRjaCA9IHsgcGF0dGVybiwgcnVsZSB9XG4gICAgICAgIGJlc3RNYXRjaExlbmd0aCA9IHBhdHRlcm5MZW5ndGhcbiAgICAgICAgYmVzdFdpbGRjYXJkQ291bnQgPSB3aWxkY2FyZENvdW50XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJlc3RNYXRjaFxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGBzZWdtZW50c2AgYWdhaW5zdCBhIG5lc3RlZCBhbGxvdy1saXN0IHNjaGVtYS5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1NjaGVtYShzZWdtZW50czogc3RyaW5nW10sIHNjaGVtYTogRGVlcFNjaGVtYSk6IGJvb2xlYW4ge1xuICAvLyBObyBzZWdtZW50IGxlZnQgdG8gbWF0Y2guXG4gIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuICAvLyBgdHJ1ZWAgbWFya3MgYSBsZWFmIGFuZCBjYW5ub3QgYmUgdHJhdmVyc2VkLlxuICBpZiAoc2NoZW1hID09PSB0cnVlKSByZXR1cm4gZmFsc2VcblxuICAvLyBDdXJyZW50IGtleSBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGxldmVsLlxuICBjb25zdCBbaGVhZCwgLi4udGFpbF0gPSBzZWdtZW50c1xuICBpZiAoIShoZWFkIGluIHNjaGVtYSkpIHtcbiAgICAvLyBTdXBwb3J0IHdpbGRjYXJkIG5vZGVzIGZvciBkeW5hbWljIGtleXMsIGUuZy4gYWN0aW9ucy48aWQ+LCByZXNwb25zZS5oZWFkZXJzLjxuYW1lPi5cbiAgICBpZiAoJyonIGluIHNjaGVtYSkge1xuICAgICAgY29uc3Qgd2lsZGNhcmQgPSBzY2hlbWFbJyonXVxuICAgICAgLy8gYCogOiB0cnVlYCBhbGxvd3MgYW55IHJlbWFpbmluZyBwYXRoLlxuICAgICAgaWYgKHdpbGRjYXJkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICAgICAgLy8gYCogOiB7Li4ufWAgY29udGludWVzIHZhbGlkYXRpb24gYWdhaW5zdCBhIHdpbGRjYXJkIHN1Yi1zY2hlbWEuXG4gICAgICBpZiAodHlwZW9mIHdpbGRjYXJkID09PSAnb2JqZWN0JykgcmV0dXJuIG1hdGNoZXNTY2hlbWEodGFpbCwgd2lsZGNhcmQpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3Qgbm9kZSA9IHNjaGVtYVtoZWFkXVxuICAvLyBFeGFjdCBtYXRjaCBmb3IgbGVhZiwgb3Igd2lsZGNhcmQtZW5hYmxlZCBvYmplY3Qgbm9kZXMuXG4gIGlmICh0YWlsLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChub2RlID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICAgIC8vIEFsbG93IG9iamVjdCBub2RlcyB0byBiZSB0ZXJtaW5hbCB3aGVuIHRoZXkgZXhwbGljaXRseSBleHBvc2Ugd2lsZGNhcmQgbGVhZiBzdXBwb3J0LlxuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHJldHVybiAnKicgaW4gbm9kZSAmJiBub2RlWycqJ10gPT09IHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBDb250aW51ZSBpbnRvIG5lc3RlZCBzY2hlbWFzOyB3aWxkY2FyZCBub2RlcyBjYW4gYWNjZXB0IGR5bmFtaWMvZGVlcCB0YWlscy5cbiAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChtYXRjaGVzU2NoZW1hKHRhaWwsIG5vZGUgYXMgRGVlcFNjaGVtYSkpIHJldHVybiB0cnVlXG4gICAgaWYgKCcqJyBpbiBub2RlKSB7XG4gICAgICBjb25zdCB3aWxkY2FyZCA9IG5vZGVbJyonXVxuICAgICAgLy8gYCogOiB0cnVlYCBtZWFucyBhbGwgZGVlcGVyIGRlc2NlbmRhbnRzIGFyZSBhbGxvd2VkLlxuICAgICAgaWYgKHdpbGRjYXJkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICAgICAgLy8gYCogOiB7Li4ufWAgbWVhbnMgZGVlcGVyIGRlc2NlbmRhbnRzIG11c3Qgc2F0aXNmeSB3aWxkY2FyZCBzdWItc2NoZW1hLlxuICAgICAgaWYgKHR5cGVvZiB3aWxkY2FyZCA9PT0gJ29iamVjdCcpIHJldHVybiBtYXRjaGVzU2NoZW1hKHRhaWwsIHdpbGRjYXJkKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBOb24tb2JqZWN0IGxlYWYgY2Fubm90IHNhdGlzZnkgcmVtYWluaW5nIHRhaWwgc2VnbWVudHMuXG4gIHJldHVybiBmYWxzZVxufVxuXG50eXBlIFJvb3RWYWxpZGF0b3IgPSAoc2VnbWVudHM6IHN0cmluZ1tdKSA9PiBib29sZWFuXG50eXBlIEJhc2VEZXB0aCA9IDEgfCAyXG5cbi8qKlxuICogRGVmaW5lcyBob3cgYSB0b3AtbGV2ZWwgYEBjdHguPHJvb3Q+YCBuYW1lc3BhY2UgaXMgdmFsaWRhdGVkLlxuICovXG5pbnRlcmZhY2UgUm9vdERlZmluaXRpb24ge1xuICAvKipcbiAgICogQ2Fub25pY2FsIGRlcHRoIGZvciBsaWdodHdlaWdodCBiYXNlLXBhdGggZXh0cmFjdGlvbi5cbiAgICogYDFgIGtlZXBzIGBAY3R4Ljxyb290PmAsIGAyYCBrZWVwcyBgQGN0eC48cm9vdD4uPGNoaWxkPmAuXG4gICAqL1xuICByZWFkb25seSBiYXNlRGVwdGg6IEJhc2VEZXB0aFxuICAvKipcbiAgICogVmFsaWRhdG9yIHVzZWQgYnkgYmFzZSBjb250ZXh0LXBhdGggYWxsb3ctbGlzdCBjaGVja3MuXG4gICAqL1xuICByZWFkb25seSBiYXNlVmFsaWRhdG9yOiBSb290VmFsaWRhdG9yXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJpY3QgdmFsaWRhdG9yIHVzZWQgZm9yIGRlZXAtcGF0aCBwb2xpY3kgY2hlY2tzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVlcFZhbGlkYXRvcj86IFJvb3RWYWxpZGF0b3Jcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9vdCB2YWxpZGF0b3IgYmFja2VkIGJ5IGEgYERlZXBTY2hlbWFgLlxuICogSXQgdmFsaWRhdGVzIHBhdGggc2VnbWVudHMgYWZ0ZXIgdGhlIHJvb3QgdG9rZW4gYW5kIGNhbiBvcHRpb25hbGx5XG4gKiBhbGxvdyB0aGUgYmFyZSByb290IGl0c2VsZiAoZS5nLiBgQGN0eC51c2VyYCkuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoXG4gIHNjaGVtYTogRGVlcFNjaGVtYSxcbiAgb3B0aW9ucz86IHsgYWxsb3dSb290PzogYm9vbGVhbiB9LFxuKTogUm9vdFZhbGlkYXRvciB7XG4gIGNvbnN0IGFsbG93Um9vdCA9IG9wdGlvbnM/LmFsbG93Um9vdCA9PT0gdHJ1ZVxuICByZXR1cm4gKHNlZ21lbnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChhbGxvd1Jvb3QgJiYgc2VnbWVudHMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBtYXRjaGVzU2NoZW1hKHNlZ21lbnRzLnNsaWNlKDEpLCBzY2hlbWEpXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9vdCB2YWxpZGF0b3IgdGhhdCBvbmx5IGFsbG93cyB0aGUgcm9vdCBwYXRoIGl0c2VsZi5cbiAqIEV4YW1wbGU6IGBAY3R4LmVudGl0eWAgaXMgYWxsb3dlZCwgYEBjdHguZW50aXR5LmlkYCBpcyByZWplY3RlZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCk6IFJvb3RWYWxpZGF0b3Ige1xuICByZXR1cm4gKHNlZ21lbnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4gc2VnbWVudHMubGVuZ3RoID09PSAxXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvb3QgdmFsaWRhdG9yIHRoYXQgYWxsb3dzIGFueSBjaGlsZCBwYXRoIHVuZGVyIHRoZSByb290LlxuICogRXhhbXBsZTogYEBjdHguc3lzdGVtLipgIC8gYEBjdHguZGF0YXNvdXJjZXMuKmAuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKG9wdGlvbnM/OiB7IGFsbG93Um9vdD86IGJvb2xlYW4gfSk6IFJvb3RWYWxpZGF0b3Ige1xuICByZXR1cm4gY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7ICcqJzogdHJ1ZSB9LCBvcHRpb25zKVxufVxuXG4vKiogQGN0eC5zeXN0ZW0uKiAqL1xuY29uc3QgU1lTVEVNX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgYXBwVmVyc2lvbjogdHJ1ZSxcbiAgZGV2aWNlVHlwZTogdHJ1ZSxcbiAgaXNMb2NhdGlvblNoYXJpbmdFbmFibGVkOiB0cnVlLFxuICBpc09mZmxpbmU6IHRydWUsXG4gIGlzT25saW5lOiB0cnVlLFxuICBpc1BvcnRyYWl0OiB0cnVlLFxuICBsb2NhbGU6IHRydWUsXG4gIHRpbWV6b25lOiB7XG4gICAgbmFtZTogdHJ1ZSxcbiAgICBvZmZzZXQ6IHRydWUsXG4gIH0sXG4gIGxvY2F0aW9uUGVybWlzc2lvbnM6IHtcbiAgICBmb3JlZ3JvdW5kOiB7XG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICBpc0dyYW50ZWQ6IHRydWUsXG4gICAgfSxcbiAgfSxcbiAgZ2VvbG9jYXRpb246IHtcbiAgICBtb2NrZWQ6IHRydWUsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIGNvb3Jkczoge1xuICAgICAgYWNjdXJhY3k6IHRydWUsXG4gICAgICBhbHRpdHVkZTogdHJ1ZSxcbiAgICAgIGFsdGl0dWRlQWNjdXJhY3k6IHRydWUsXG4gICAgICBoZWFkaW5nOiB0cnVlLFxuICAgICAgbGF0aXR1ZGU6IHRydWUsXG4gICAgICBsb25naXR1ZGU6IHRydWUsXG4gICAgICBzcGVlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBnZW9jb2Rlczoge1xuICAgICcqJzoge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgcmVzdWx0czogdHJ1ZSxcbiAgICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgIH0sXG4gIH0sXG59XG5cbi8qKiBAY3R4LnVzZXIuKiAqL1xuY29uc3QgVVNFUl9TQ0hFTUE6IERlZXBTY2hlbWEgPSB7XG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgaWQ6IHRydWUsXG4gIHBob25lOiB0cnVlLFxuICBhdmF0YXJVcmw6IHRydWUsXG4gIGlzVmVyaWZpZWQ6IHRydWUsXG59XG5cbi8qKiBAY3R4Lm9yZ2FuaXphdGlvbi4qICovXG5jb25zdCBPUkdBTklaQVRJT05fU0NIRU1BOiBEZWVwU2NoZW1hID0ge1xuICBpZDogdHJ1ZSxcbn1cblxuLyoqIEBjdHguc29sdXRpb24uKiAqL1xuY29uc3QgU09MVVRJT05fU0NIRU1BOiBEZWVwU2NoZW1hID0ge1xuICBuYW1lOiB0cnVlLFxuICBpZDogdHJ1ZSxcbiAgb3JnYW5pemF0aW9uSWQ6IHRydWUsXG4gIHNoYXJlZEJ5OiB7ICcqJzogdHJ1ZSB9LFxuICBzZXR0aW5nczoge1xuICAgIGN1c3RvbTogeyAnKic6IHRydWUgfSxcbiAgICBmb3JtczogeyAnKic6IHRydWUgfSxcbiAgfSxcbiAgc3RhdGU6IHsgJyonOiB0cnVlIH0sXG59XG5cbi8qKiBAY3R4LnJlc3BvbnNlLiogKi9cbmNvbnN0IFJFU1BPTlNFX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgc3RhdHVzOiB0cnVlLFxuICBib2R5OiB7ICcqJzogdHJ1ZSB9LFxuICBoZWFkZXJzOiB7ICcqJzogeyAnKic6IHRydWUgfSB9LFxuICBtZXNzYWdlOiB0cnVlLFxuICBpdGVtczogdHJ1ZSxcbiAgZmFpbGVkSXRlbXM6IHRydWUsXG4gIGVycm9yczogdHJ1ZSxcbiAgZXJyb3I6IHRydWUsXG4gIHJldHJ5YWJsZTogdHJ1ZSxcbn1cblxuLyoqIEBjdHguYWN0aW9ucy4qICovXG5jb25zdCBBQ1RJT05TX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgJyonOiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgIHJlc3BvbnNlOiB0cnVlLFxuICAgICAgdmFsdWU6IHRydWUsXG4gICAgfSxcbiAgICBvdXRwdXRzOiB7XG4gICAgICAnKic6IHsgJyonOiB0cnVlIH0sXG4gICAgfSxcbiAgfSxcbn1cblxuLyoqIEBjdHguZ3VhcmQuKiAqL1xuY29uc3QgR1VBUkRfU0NIRU1BOiBEZWVwU2NoZW1hID0ge1xuICBvdXRwdXQ6IHtcbiAgICAnKic6IHsgJyonOiB0cnVlIH0sXG4gIH0sXG59XG5cbi8qKiBAY3R4LmVycm9yLiogKi9cbmNvbnN0IEVSUk9SX1NDSEVNQTogRGVlcFNjaGVtYSA9IHtcbiAgbWVzc2FnZTogdHJ1ZSxcbiAgdHlwZTogdHJ1ZSxcbiAgY29kZTogdHJ1ZSxcbiAgZGV0YWlsczogdHJ1ZSxcbiAgc3RhY2s6IHRydWUsXG59XG5cbmNvbnN0IFJPT1RfREVGSU5JVElPTlM6IFJlY29yZDxzdHJpbmcsIFJvb3REZWZpbml0aW9uPiA9IHtcbiAgLy8gRXhhbXBsZTogPUBjdHguYWN0aW9uLnBhcmFtZXRlcnMuY3VzdG9tZXJJZFxuICBhY3Rpb246IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7IHBhcmFtZXRlcnM6IHRydWUgfSksXG4gIH0sXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmFjdGlvbnMuc3VibWl0Lm91dHB1dHMucmVzdWx0XG4gIGFjdGlvbnM6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKEFDVElPTlNfU0NIRU1BKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5jb21wb25lbnQuaW5wdXRzLnZhbHVlXG4gIGNvbXBvbmVudDoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKHsgaW5wdXRzOiB0cnVlLCAnKic6IHRydWUgfSksXG4gIH0sXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmNvbXBvbmVudHMuZm9ybS5zdGF0ZS52YWx1ZVxuICBjb21wb25lbnRzOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguY3VycmVudC5pdGVtLmlkXG4gIGN1cnJlbnQ6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7XG4gICAgICBpdGVtOiB0cnVlLFxuICAgICAgY29sdW1uOiB0cnVlLFxuICAgICAgY2VsbDogeyAnKic6IHRydWUgfSxcbiAgICAgIHN0YXRlOiB7ICcqJzogdHJ1ZSB9LFxuICAgIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmRhdGFzb3VyY2VzLmNvbnRhY3RzLmlkXG4gIGRhdGFzb3VyY2VzOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguY29tbWFuZElkXG4gIGNvbW1hbmRJZDoge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVFeGFjdFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVFeGFjdFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5jb3JyZWxhdGlvbklkXG4gIGNvcnJlbGF0aW9uSWQ6IHtcbiAgICBiYXNlRGVwdGg6IDEsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlRXhhY3RSb290VmFsaWRhdG9yKCksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguZW50aXR5XG4gIGVudGl0eToge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVFeGFjdFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5lcnJvci5uYW1lXG4gIGVycm9yOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKCksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcihFUlJPUl9TQ0hFTUEsIHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmV4cHJlc3Npb25zLnNvbWVFeHByZXNzaW9uXG4gIGV4cHJlc3Npb25zOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIC8vIEFsbG93IGJvdGg6XG4gICAgLy8gLSA9QGN0eC5leHByZXNzaW9uc1xuICAgIC8vIC0gPUBjdHguZXhwcmVzc2lvbnMuc29tZUV4cHJlc3Npb25cbiAgICAvLyBUaGlzIHJvb3QgaXMgdXNlZCBhcyBhIG5hbWVzcGFjZSBhbmQgYXMgYSBkaXJlY3QgcmVmZXJlbmNlIGluIGV4cGVydCBmb3JtIGZsb3dzLlxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmZ1bmN0aW9uLnBhcmFtZXRlcnMuY3VzdG9tZXJJZFxuICBmdW5jdGlvbjoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKHsgcGFyYW1ldGVyczogdHJ1ZSB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5ndWFyZC5vdXRwdXQuY2FuUHJvY2VlZFxuICBndWFyZDoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICAgIGRlZXBWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoR1VBUkRfU0NIRU1BKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5pbnB1dHNcbiAgaW5wdXRzOiB7XG4gICAgYmFzZURlcHRoOiAxLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZUV4YWN0Um9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LmppZy5pbnB1dHMuaWRcbiAgamlnOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVNjaGVtYVJvb3RWYWxpZGF0b3IoeyBpbnB1dHM6IHRydWUsICcqJzogdHJ1ZSB9KSxcbiAgfSxcbiAgLy8gRXhhbXBsZTogPUBjdHguamlncy5uZXh0U3RlcC5vdXRwdXRzLnZhbHVlXG4gIGppZ3M6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5vdXRwdXQudG90YWxDb3VudFxuICBvdXRwdXQ6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHgub3JnYW5pemF0aW9uLmlkXG4gIG9yZ2FuaXphdGlvbjoge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcih7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKE9SR0FOSVpBVElPTl9TQ0hFTUEsIHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnBhcmFtZXRlcnNcbiAgcGFyYW1ldGVyczoge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVFeGFjdFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5xdWVyaWVzLmVycm9yX2NoZWNrLmhhc0Vycm9yXG4gIHF1ZXJpZXM6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5yZWNvcmQuaWRcbiAgcmVjb3JkOiB7XG4gICAgYmFzZURlcHRoOiAyLFxuICAgIGJhc2VWYWxpZGF0b3I6IGNyZWF0ZVdpbGRSb290VmFsaWRhdG9yKHsgYWxsb3dSb290OiB0cnVlIH0pLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uXG4gIHJlcXVlc3Q6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gICAgZGVlcFZhbGlkYXRvcjogY3JlYXRlU2NoZW1hUm9vdFZhbGlkYXRvcih7XG4gICAgICBtZXRob2Q6IHRydWUsXG4gICAgICB1cmw6IHRydWUsXG4gICAgICBoZWFkZXJzOiB7ICcqJzogdHJ1ZSB9LFxuICAgICAgYm9keTogeyAnKic6IHRydWUgfSxcbiAgICB9KSxcbiAgfSxcblxuICAvLyBFeGFtcGxlOiA9QGN0eC5wcm92aWRlci5yZXNwb25zZVxuICBwcm92aWRlcjoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnJlc3BvbnNlLmJvZHlcbiAgcmVzcG9uc2U6IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKFJFU1BPTlNFX1NDSEVNQSwgeyBhbGxvd1Jvb3Q6IHRydWUgfSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguc2NyaXB0cy5oZWxwZXJSZXN1bHRcbiAgc2NyaXB0czoge1xuICAgIGJhc2VEZXB0aDogMixcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcigpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnNvbHV0aW9uLnNldHRpbmdzLmN1c3RvbS5DdXN0b21lck5hbWVcbiAgc29sdXRpb246IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKFNPTFVUSU9OX1NDSEVNQSksXG4gIH0sXG5cbiAgLy8gRXhhbXBsZTogPUBjdHguc3lzdGVtLmxvY2FsZVxuICBzeXN0ZW06IHtcbiAgICBiYXNlRGVwdGg6IDIsXG4gICAgYmFzZVZhbGlkYXRvcjogY3JlYXRlV2lsZFJvb3RWYWxpZGF0b3IoKSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKFNZU1RFTV9TQ0hFTUEpLFxuICB9LFxuXG4gIC8vIEV4YW1wbGU6ID1AY3R4LnVzZXIuZW1haWxcbiAgdXNlcjoge1xuICAgIGJhc2VEZXB0aDogMSxcbiAgICBiYXNlVmFsaWRhdG9yOiBjcmVhdGVXaWxkUm9vdFZhbGlkYXRvcih7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgICBkZWVwVmFsaWRhdG9yOiBjcmVhdGVTY2hlbWFSb290VmFsaWRhdG9yKFVTRVJfU0NIRU1BLCB7IGFsbG93Um9vdDogdHJ1ZSB9KSxcbiAgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIFJvb3REZWZpbml0aW9uPlxuXG5jb25zdCBERUVQX1ZBTElEQVRJT05fUk9PVFMgPSBuZXcgU2V0KFxuICBPYmplY3QuZW50cmllcyhST09UX0RFRklOSVRJT05TKVxuICAgIC5maWx0ZXIoKFssIGRlZmluaXRpb25dKSA9PiBkZWZpbml0aW9uLmRlZXBWYWxpZGF0b3IgIT09IHVuZGVmaW5lZClcbiAgICAubWFwKChbcm9vdF0pID0+IHJvb3QpLFxuKVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcm9vdCB1c2VzIHN0cmljdCBkZWVwLXBhdGggdmFsaWRhdGlvbiBwb2xpY3kuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZXBWYWxpZGF0aW9uUm9vdChyb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIERFRVBfVkFMSURBVElPTl9ST09UUy5oYXMocm9vdClcbn1cblxuLyoqXG4gKiBFbmZvcmNlIGJhc2UgY29udGV4dC1wYXRoIGFsbG93LWxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHRQYXRoQWxsb3dlZChzZWdtZW50czogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IFJPT1RfREVGSU5JVElPTlNbc2VnbWVudHNbMF1dIGFzIFJvb3REZWZpbml0aW9uIHwgdW5kZWZpbmVkXG4gIHJldHVybiBkZWZpbml0aW9uID8gZGVmaW5pdGlvbi5iYXNlVmFsaWRhdG9yKHNlZ21lbnRzKSA6IGZhbHNlXG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgY2Fub25pY2FsIGJhc2UgcGF0aCBzZWdtZW50cyB1c2VkIGZvciBsaWdodHdlaWdodCBwYXRoIGV4dHJhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmFzZUNvbnRleHRTZWdtZW50cyhwYXRoUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBbcm9vdCwgc2Vjb25kXSA9IHBhdGhQYXJ0c1xuICBpZiAoIXJvb3QpIHJldHVybiBbXVxuXG4gIGNvbnN0IGRlZmluaXRpb24gPSBST09UX0RFRklOSVRJT05TW3Jvb3RdIGFzIFJvb3REZWZpbml0aW9uIHwgdW5kZWZpbmVkXG4gIGlmICghZGVmaW5pdGlvbikgcmV0dXJuIFtyb290XVxuICBpZiAoZGVmaW5pdGlvbi5iYXNlRGVwdGggPT09IDEgfHwgIXNlY29uZCkgcmV0dXJuIFtyb290XVxuICByZXR1cm4gW3Jvb3QsIHNlY29uZF1cbn1cblxuLyoqXG4gKiBFbmZvcmNlIGRlZXAtcGF0aCBwb2xpY3kgZm9yIHN0cmljdCBjb250ZXh0IHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZXBBbGxvd2VkKHNlZ21lbnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBkZWZpbml0aW9uID0gUk9PVF9ERUZJTklUSU9OU1tzZWdtZW50c1swXV0gYXMgUm9vdERlZmluaXRpb24gfCB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdG9yID0gZGVmaW5pdGlvbj8uZGVlcFZhbGlkYXRvclxuICAvLyBSb290cyB3aXRob3V0IGV4cGxpY2l0IHBvbGljeSByZW1haW4gb3BlbiAoZS5nLiBAY3R4LmN1c3RvbSkuXG4gIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3Ioc2VnbWVudHMpIDogdHJ1ZVxufVxuIl19
@@ -0,0 +1,35 @@
1
+ import { type FullContextReference } from './ast.js';
2
+ export type { FullContextReference } from './ast.js';
3
+ export interface ParsedExpression {
4
+ readonly original: string;
5
+ readonly withoutPrefix: string;
6
+ readonly transformed: string;
7
+ readonly contextPaths: string[];
8
+ readonly isValidSyntax: boolean;
9
+ readonly syntaxError?: string;
10
+ }
11
+ export declare function parseExpression(expression: string): ParsedExpression;
12
+ export declare function extractContextPaths(expression: string): string[];
13
+ export declare function extractFullContextReferences(expression: string): FullContextReference[];
14
+ export declare function extractScopeReferences(expression: string): string[];
15
+ export declare function parseJsonataAst(expression: string): Record<string, unknown> | null;
16
+ export declare function validateContextPaths(contextPaths: string[]): {
17
+ isValid: boolean;
18
+ invalidPaths: string[];
19
+ };
20
+ export declare function transformForValidation(expression: string): string;
21
+ export declare function validateSyntax(transformedExpression: string): {
22
+ isValid: boolean;
23
+ error?: string;
24
+ };
25
+ export declare function validateJsonataExpression(expression: string, options?: {
26
+ enforceDeepValidation?: boolean;
27
+ allowContextFunctions?: boolean;
28
+ }): {
29
+ isValid: boolean;
30
+ contextPaths: string[];
31
+ invalidContextPaths?: string[];
32
+ syntaxError?: string;
33
+ invalidDeepContextPaths?: string[];
34
+ };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEvZXhwcmVzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBSUwsS0FBSyxvQkFBb0IsRUFDMUIsTUFBTSxVQUFVLENBQUE7QUF5QmpCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUtwRCxNQUFNLFdBQVcsZ0JBQWdCO0lBRS9CLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFBO0lBRXpCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFBO0lBRTlCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0lBRTVCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUE7SUFFL0IsUUFBUSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUE7SUFFL0IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUM5QjtBQXVCRCx3QkFBZ0IsZUFBZSxDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBaUNwRTtBQWlCRCx3QkFBZ0IsbUJBQW1CLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FtQmhFO0FBOENELHdCQUFnQiw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLG9CQUFvQixFQUFFLENBS3ZGO0FBNEpELHdCQUFnQixzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQWFuRTtBQU1ELHdCQUFnQixlQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FHbEY7QUFpQkQsd0JBQWdCLG9CQUFvQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRztJQUM1RCxPQUFPLEVBQUUsT0FBTyxDQUFBO0lBQ2hCLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQTtDQUN2QixDQWdCQTtBQXVCRCx3QkFBZ0Isc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBd0NqRTtBQW1JRCx3QkFBZ0IsY0FBYyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sR0FBRztJQUM3RCxPQUFPLEVBQUUsT0FBTyxDQUFBO0lBQ2hCLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUNmLENBcUJBO0FBeUJELHdCQUFnQix5QkFBeUIsQ0FDdkMsVUFBVSxFQUFFLE1BQU0sRUFDbEIsT0FBTyxDQUFDLEVBQUU7SUFBRSxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUFDLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxDQUFBO0NBQUUsR0FDN0U7SUFDRCxPQUFPLEVBQUUsT0FBTyxDQUFBO0lBQ2hCLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUN0QixtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFBO0lBQzlCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtJQUNwQix1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFBO0NBQ25DLENBeUVBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGpzb25hdGEgZnJvbSAnanNvbmF0YSdcbmltcG9ydCB7XG4gIGlzRGVlcFZhbGlkYXRpb25Sb290LFxuICBpc0NvbnRleHRQYXRoQWxsb3dlZCxcbiAgaXNEZWVwQWxsb3dlZCxcbiAgcmVzb2x2ZUJhc2VDb250ZXh0U2VnbWVudHMsXG59IGZyb20gJy4vY29udGV4dC5qcydcbmltcG9ydCB7XG4gIGV4dHJhY3RDb250ZXh0RnVuY3Rpb25SZWZlcmVuY2VzRnJvbUFzdE5vZGUsXG4gIGV4dHJhY3RDb250ZXh0UmVmZXJlbmNlc0Zyb21Bc3ROb2RlLFxuICBwYXJzZUFzdEZyb21UcmFuc2Zvcm1lZCxcbiAgdHlwZSBGdWxsQ29udGV4dFJlZmVyZW5jZSxcbn0gZnJvbSAnLi9hc3QuanMnXG5cbi8vIENSSVRJQ0FMKio6IERvIE5PVCBtb2RpZnkgdGhlc2UgcGF0dGVybnMgd2l0aG91dCBjb25zdWx0aW5nIHJ1bnRpbWUgcGFyc2VyIGNvZGUuXG4vLyBJZiBzb21ldGhpbmcgZmFpbHMsIGl0IGlzIGxpa2VseSB0aGF0IGNvZGUgaXMgd3JvbmcuIFVubGlrZWx5IHRvIGJlIHBhcnNlciBlcnJvci5cblxudHlwZSBDb250ZXh0UHJlZml4ID0gJ0AnIHwgJ0BjdHgnIHwgJ0Bjb250ZXh0JyB8ICckJCdcbmNvbnN0IENPTlRFWFRfUFJFRklYX01BVENIRVJTOiBSZWFkb25seUFycmF5PHsgcHJlZml4OiBDb250ZXh0UHJlZml4OyB0b2tlbjogc3RyaW5nIH0+ID0gW1xuICB7IHByZWZpeDogJyQkJywgdG9rZW46ICckJC4nIH0sXG4gIHsgcHJlZml4OiAnQGN0eCcsIHRva2VuOiAnQGN0eC4nIH0sXG4gIHsgcHJlZml4OiAnQGNvbnRleHQnLCB0b2tlbjogJ0Bjb250ZXh0LicgfSxcbiAgeyBwcmVmaXg6ICdAJywgdG9rZW46ICdALicgfSxcbl1cblxuZnVuY3Rpb24gbWF0Y2hDb250ZXh0UHJlZml4QXQoXG4gIGV4cHJlc3Npb246IHN0cmluZyxcbiAgaW5kZXg6IG51bWJlcixcbik6IHsgcHJlZml4OiBDb250ZXh0UHJlZml4OyBwYXRoU3RhcnQ6IG51bWJlciB9IHwgbnVsbCB7XG4gIGZvciAoY29uc3QgbWF0Y2hlciBvZiBDT05URVhUX1BSRUZJWF9NQVRDSEVSUykge1xuICAgIGlmIChleHByZXNzaW9uLnN0YXJ0c1dpdGgobWF0Y2hlci50b2tlbiwgaW5kZXgpKSB7XG4gICAgICByZXR1cm4geyBwcmVmaXg6IG1hdGNoZXIucHJlZml4LCBwYXRoU3RhcnQ6IGluZGV4ICsgbWF0Y2hlci50b2tlbi5sZW5ndGggfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgdHlwZSB7IEZ1bGxDb250ZXh0UmVmZXJlbmNlIH0gZnJvbSAnLi9hc3QuanMnXG5cbi8qKlxuICogUmVzdWx0IG9mIHBhcnNpbmcgYSBKaWd4IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRFeHByZXNzaW9uIHtcbiAgLyoqIE9yaWdpbmFsIGV4cHJlc3Npb24gKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWw6IHN0cmluZ1xuICAvKiogRXhwcmVzc2lvbiB3aXRoID0gcHJlZml4IHJlbW92ZWQgKi9cbiAgcmVhZG9ubHkgd2l0aG91dFByZWZpeDogc3RyaW5nXG4gIC8qKiBFeHByZXNzaW9uIHRyYW5zZm9ybWVkIGZvciBKU09OYXRhIHZhbGlkYXRpb24gKEAg4oaSICQkKSAqL1xuICByZWFkb25seSB0cmFuc2Zvcm1lZDogc3RyaW5nXG4gIC8qKiBBbGwgY29udGV4dCBwYXRocyBmb3VuZCBpbiBleHByZXNzaW9uIChAY3R4LiosIEBjb250ZXh0LiosIGV0Yy4pICovXG4gIHJlYWRvbmx5IGNvbnRleHRQYXRoczogc3RyaW5nW11cbiAgLyoqIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaGFzIHZhbGlkIHN5bnRheCAqL1xuICByZWFkb25seSBpc1ZhbGlkU3ludGF4OiBib29sZWFuXG4gIC8qKiBWYWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UgaWYgc3ludGF4IGlzIGludmFsaWQgKi9cbiAgcmVhZG9ubHkgc3ludGF4RXJyb3I/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhIEppZ3ggZXhwcmVzc2lvbiBzdHJ1Y3R1cmUgd2l0aG91dCBldmFsdWF0aW9uLlxuICpcbiAqIFRoaXMgcGFyc2VyIHZhbGlkYXRlcyBleHByZXNzaW9ucyBhZ2FpbnN0IHRoZSBhY3R1YWwgcnVudGltZSBwYXR0ZXJuc1xuICogYW5kIHVzZXMgSlNPTmF0YSBmb3Igc3ludGF4IHZhbGlkYXRpb24gYWZ0ZXIgdHJhbnNmb3JtaW5nIEppZ3gtc3BlY2lmaWNcbiAqIGNvbnRleHQgcmVmZXJlbmNlcyAoQGN0eCkgdG8gSlNPTmF0YSByb290IHJlZmVyZW5jZXMgKCQkKS5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBleHByZXNzaW9uIHRvIHBhcnNlICh3aXRoIG9yIHdpdGhvdXQgPSBwcmVmaXgpXG4gKiBAcmV0dXJucyBQYXJzZWQgZXhwcmVzc2lvbiByZXN1bHQgd2l0aCB2YWxpZGF0aW9uIHN0YXR1c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUV4cHJlc3Npb24oJz1AY3R4LmNvbXBvbmVudHMuZm9ybS5zdGF0ZS52YWx1ZScpXG4gKiAvLyByZXN1bHQuaXNWYWxpZFN5bnRheCA9PT0gdHJ1ZVxuICogLy8gcmVzdWx0LmNvbnRleHRQYXRocyA9PT0gWydAY3R4LmNvbXBvbmVudHMuZm9ybSddXG4gKlxuICogY29uc3QgaW52YWxpZCA9IHBhcnNlRXhwcmVzc2lvbignPUBjdHguaW52YWxpZC5zeW50YXguLmVycm9yJylcbiAqIC8vIGludmFsaWQuaXNWYWxpZFN5bnRheCA9PT0gZmFsc2VcbiAqIC8vIGludmFsaWQuc3ludGF4RXJyb3IgPT09ICdTeW50YXggZXJyb3IgbWVzc2FnZS4uLidcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFBhcnNlZEV4cHJlc3Npb24ge1xuICBjb25zdCBvcmlnaW5hbCA9IGV4cHJlc3Npb24udHJpbSgpXG5cbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHdpdGhvdXRQcmVmaXg6ICcnLFxuICAgICAgdHJhbnNmb3JtZWQ6ICcnLFxuICAgICAgY29udGV4dFBhdGhzOiBbXSxcbiAgICAgIGlzVmFsaWRTeW50YXg6IGZhbHNlLFxuICAgICAgc3ludGF4RXJyb3I6ICdFbXB0eSBleHByZXNzaW9uJyxcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgPSBwcmVmaXggaWYgcHJlc2VudFxuICBjb25zdCB3aXRob3V0UHJlZml4ID0gb3JpZ2luYWwuc3RhcnRzV2l0aCgnPScpID8gb3JpZ2luYWwuc3Vic3RyaW5nKDEpIDogb3JpZ2luYWxcblxuICBjb25zdCBjb250ZXh0UGF0aHMgPSBleHRyYWN0Q29udGV4dFBhdGhzKHdpdGhvdXRQcmVmaXgpXG5cbiAgLy8gVHJhbnNmb3JtIGZvciBKU09OYXRhIHZhbGlkYXRpb25cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1Gb3JWYWxpZGF0aW9uKHdpdGhvdXRQcmVmaXgpXG5cbiAgLy8gVmFsaWRhdGUgc3ludGF4IHVzaW5nIEpTT05hdGFcbiAgY29uc3Qgc3ludGF4VmFsaWRhdGlvbiA9IHZhbGlkYXRlU3ludGF4KHRyYW5zZm9ybWVkKVxuXG4gIHJldHVybiB7XG4gICAgb3JpZ2luYWwsXG4gICAgd2l0aG91dFByZWZpeCxcbiAgICB0cmFuc2Zvcm1lZCxcbiAgICBjb250ZXh0UGF0aHMsXG4gICAgaXNWYWxpZFN5bnRheDogc3ludGF4VmFsaWRhdGlvbi5pc1ZhbGlkLFxuICAgIHN5bnRheEVycm9yOiBzeW50YXhWYWxpZGF0aW9uLmVycm9yLFxuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYWxsIGNvbnRleHQgcGF0aHMgZnJvbSBhIEppZ3ggZXhwcmVzc2lvbi5cbiAqXG4gKiBGaW5kcyBwYXR0ZXJucyBsaWtlIEBjdHguKiwgQGNvbnRleHQuKiwgQC4qLCAkJC4qXG4gKiBCYXNlZCBvbiBydW50aW1lIHBhcnNlciByZWdleCBwYXR0ZXJucyBmb3IgY29udGV4dCBwYXRoIG1hdGNoaW5nXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHdpdGhvdXQgPSBwcmVmaXhcbiAqIEByZXR1cm5zIEFycmF5IG9mIGNvbnRleHQgcGF0aCB0b2tlbnMgZm91bmRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXh0cmFjdENvbnRleHRQYXRocygnQGN0eC5jb21wb25lbnRzLmZvcm0uc3RhdGUgKyBAY3R4LmppZy5zdGF0ZS52YWx1ZScpXG4gKiAvLyBSZXR1cm5zOiBbJ0BjdHguY29tcG9uZW50cy5mb3JtJywgJ0BjdHguamlnLnN0YXRlJ11cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENvbnRleHRQYXRocyhleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNjYW5uZWRSZWZzID0gcGFyc2VDb250ZXh0UmVmZXJlbmNlcyhleHByZXNzaW9uKVxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybUZvclZhbGlkYXRpb24oZXhwcmVzc2lvbilcbiAgY29uc3QgYXN0ID0gcGFyc2VBc3RGcm9tVHJhbnNmb3JtZWQodHJhbnNmb3JtZWQpXG4gIGlmIChhc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZXh0cmFjdENvbnRleHRQYXRoc1dpdGhTY2FubmVyKGV4cHJlc3Npb24pXG4gIH1cblxuICBjb25zdCBwYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgcmVmIG9mIGV4dHJhY3RDb250ZXh0UmVmZXJlbmNlc0Zyb21Bc3ROb2RlKGFzdCkpIHtcbiAgICBjb25zdCBjYW5vbmljYWxCYXNlID0gdG9CYXNlQ29udGV4dFBhdGgocmVmLnNlZ21lbnRzLCAnQGN0eCcpXG4gICAgaWYgKCFjYW5vbmljYWxCYXNlKSBjb250aW51ZVxuXG4gICAgY29uc3QgYmFzZVBhdGggPSBjYW5vbmljYWxCYXNlLnNsaWNlKCdAY3R4LicubGVuZ3RoKVxuICAgIGNvbnN0IG9yaWdpbmFsUHJlZml4ID0gZGV0ZWN0T3JpZ2luYWxQcmVmaXgoc2Nhbm5lZFJlZnMsIGJhc2VQYXRoKVxuICAgIHBhdGhzLmFkZChgJHtvcmlnaW5hbFByZWZpeH0uJHtiYXNlUGF0aH1gKVxuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20ocGF0aHMpLnNvcnQoKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0Q29udGV4dFBhdGhzV2l0aFNjYW5uZXIoZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgcmVmIG9mIHBhcnNlQ29udGV4dFJlZmVyZW5jZXMoZXhwcmVzc2lvbikpIHtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHRvQmFzZUNvbnRleHRQYXRoKHBhdGhUb1NlZ21lbnRzKHJlZi5wYXRoKSwgcmVmLnByZWZpeClcbiAgICBpZiAoYmFzZVBhdGgpIHtcbiAgICAgIHBhdGhzLmFkZChiYXNlUGF0aClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gQXJyYXkuZnJvbShwYXRocykuc29ydCgpXG59XG5cbmZ1bmN0aW9uIGRldGVjdE9yaWdpbmFsUHJlZml4KFxuICBzY2FubmVkUmVmczogcmVhZG9ubHkgUGFyc2VkQ29udGV4dFJlZmVyZW5jZVtdLFxuICBiYXNlUGF0aDogc3RyaW5nLFxuKTogJ0AnIHwgJ0BjdHgnIHwgJ0Bjb250ZXh0JyB8ICckJCcge1xuICBsZXQgc2VsZWN0ZWQ6IFBhcnNlZENvbnRleHRSZWZlcmVuY2UgfCBudWxsID0gbnVsbFxuICBsZXQgc2VsZWN0ZWRJbmRleCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuXG4gIGZvciAoY29uc3QgcmVmIG9mIHNjYW5uZWRSZWZzKSB7XG4gICAgY29uc3QgcmVmQmFzZSA9IHRvQmFzZUNvbnRleHRQYXRoKHBhdGhUb1NlZ21lbnRzKHJlZi5wYXRoKSwgcmVmLnByZWZpeClcbiAgICBpZiAocmVmQmFzZSAhPT0gYCR7cmVmLnByZWZpeH0uJHtiYXNlUGF0aH1gKSBjb250aW51ZVxuICAgIGlmIChyZWYuc3RhcnQgPCBzZWxlY3RlZEluZGV4KSB7XG4gICAgICBzZWxlY3RlZCA9IHJlZlxuICAgICAgc2VsZWN0ZWRJbmRleCA9IHJlZi5zdGFydFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZD8ucHJlZml4ID8/ICdAY3R4J1xufVxuXG5mdW5jdGlvbiB0b0Jhc2VDb250ZXh0UGF0aChzZWdtZW50czogc3RyaW5nW10sIHByZWZpeDogQ29udGV4dFByZWZpeCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBwYXRoUGFydHMgPSBzZWdtZW50cy5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQgIT09ICdAYnJhY2tldCcpXG4gIGlmIChwYXRoUGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbFxuICBjb25zdCBiYXNlID0gcmVzb2x2ZUJhc2VDb250ZXh0U2VnbWVudHMocGF0aFBhcnRzKVxuICByZXR1cm4gYCR7cHJlZml4fS4ke2Jhc2Uuam9pbignLicpfWBcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGZ1bGwgY29udGV4dCByZWZlcmVuY2VzIGZvciBkZWVwL3N0cnVjdHVyYWwgaW5zcGVjdGlvbi5cbiAqXG4gKiBVc2UgdGhpcyB3aGVuIHlvdSBuZWVkIGV4YWN0IHBhdGggZGVwdGggb3IgYnJhY2tldC1hd2FyZW5lc3MgZm9yIHZhbGlkYXRpb24uXG4gKiBVc2Uge0BsaW5rIGV4dHJhY3RDb250ZXh0UGF0aHN9IGZvciBsaWdodHdlaWdodCBiYXNlLXBhdGggdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGdWxsQ29udGV4dFJlZmVyZW5jZXMoZXhwcmVzc2lvbjogc3RyaW5nKTogRnVsbENvbnRleHRSZWZlcmVuY2VbXSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtRm9yVmFsaWRhdGlvbihleHByZXNzaW9uKVxuICBjb25zdCBhc3QgPSBwYXJzZUFzdEZyb21UcmFuc2Zvcm1lZCh0cmFuc2Zvcm1lZClcbiAgaWYgKGFzdCA9PT0gbnVsbCkgcmV0dXJuIFtdXG4gIHJldHVybiBleHRyYWN0Q29udGV4dFJlZmVyZW5jZXNGcm9tQXN0Tm9kZShhc3QpXG59XG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY29kZSA9IGNoLmNoYXJDb2RlQXQoMClcbiAgcmV0dXJuIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKVxufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0KGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY29kZSA9IGNoLmNoYXJDb2RlQXQoMClcbiAgY29uc3QgaXNBbHBoYSA9IChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKVxuICBjb25zdCBpc0RpZ2l0ID0gY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3XG4gIGNvbnN0IGlzVW5kZXJzY29yZSA9IGNvZGUgPT09IDk1XG4gIGNvbnN0IGlzSHlwaGVuID0gY29kZSA9PT0gNDVcbiAgcmV0dXJuIGlzQWxwaGEgfHwgaXNEaWdpdCB8fCBpc1VuZGVyc2NvcmUgfHwgaXNIeXBoZW5cbn1cblxuZnVuY3Rpb24gc2tpcEJyYWNrZXRDb250ZW50KGlucHV0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgaSA9IHN0YXJ0XG4gIGxldCBkZXB0aCA9IDBcbiAgbGV0IHF1b3RlOiAnXCInIHwgXCInXCIgfCBudWxsID0gbnVsbFxuXG4gIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgY29uc3QgY2ggPSBpbnB1dFtpXVxuICAgIGlmIChxdW90ZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgaSArPSAyXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICAgIHF1b3RlID0gbnVsbFxuICAgICAgfVxuICAgICAgaSsrXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgIHF1b3RlID0gY2hcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAnWycpIGRlcHRoKytcbiAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgZGVwdGgtLVxuICAgICAgaWYgKGRlcHRoID09PSAwKSByZXR1cm4gaSArIDFcbiAgICB9XG4gICAgaSsrXG4gIH1cbiAgcmV0dXJuIHN0YXJ0XG59XG5cbmludGVyZmFjZSBQYXJzZWRDb250ZXh0UmVmZXJlbmNlIHtcbiAgcmVhZG9ubHkgcHJlZml4OiBDb250ZXh0UHJlZml4XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZ1xuICByZWFkb25seSBzdGFydDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChpbnB1dDogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogeyBwYXRoOiBzdHJpbmc7IGVuZDogbnVtYmVyIH0gfCBudWxsIHtcbiAgaWYgKHN0YXJ0ID49IGlucHV0Lmxlbmd0aCB8fCAhaXNJZGVudGlmaWVyU3RhcnQoaW5wdXRbc3RhcnRdKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGggJiYgaXNJZGVudGlmaWVyUGFydChpbnB1dFtpXSkpIGkrK1xuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoICYmIGlucHV0W2ldID09PSAnWycpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBza2lwQnJhY2tldENvbnRlbnQoaW5wdXQsIGkpXG4gICAgICBpZiAobmV4dCA9PT0gaSkge1xuICAgICAgICByZXR1cm4geyBwYXRoOiBpbnB1dC5zbGljZShzdGFydCwgaSksIGVuZDogaSB9XG4gICAgICB9XG4gICAgICBpID0gbmV4dFxuICAgIH1cbiAgICBpZiAoaSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpXSA9PT0gJy4nKSB7XG4gICAgICBjb25zdCBuZXh0ID0gaSArIDFcbiAgICAgIGlmIChuZXh0IDwgaW5wdXQubGVuZ3RoICYmIGlzSWRlbnRpZmllclN0YXJ0KGlucHV0W25leHRdKSkge1xuICAgICAgICBpID0gbmV4dFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHJldHVybiB7IHBhdGg6IGlucHV0LnNsaWNlKHN0YXJ0LCBpKSwgZW5kOiBpIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDb250ZXh0UmVmZXJlbmNlcyhleHByZXNzaW9uOiBzdHJpbmcpOiBQYXJzZWRDb250ZXh0UmVmZXJlbmNlW10ge1xuICBjb25zdCByZWZzOiBQYXJzZWRDb250ZXh0UmVmZXJlbmNlW10gPSBbXVxuICBsZXQgaSA9IDBcbiAgbGV0IHF1b3RlOiAnXCInIHwgXCInXCIgfCBudWxsID0gbnVsbFxuXG4gIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IGV4cHJlc3Npb25baV1cbiAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGkgKz0gMlxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSBxdW90ZSkgcXVvdGUgPSBudWxsXG4gICAgICBpKytcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgIHF1b3RlID0gY2hcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoQ29udGV4dFByZWZpeEF0KGV4cHJlc3Npb24sIGkpXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICBpKytcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKGV4cHJlc3Npb24sIG1hdGNoLnBhdGhTdGFydClcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZWZzLnB1c2goeyBwcmVmaXg6IG1hdGNoLnByZWZpeCwgcGF0aDogcGFyc2VkLnBhdGgsIHN0YXJ0OiBpIH0pXG4gICAgICBpID0gcGFyc2VkLmVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaSsrXG4gIH1cblxuICByZXR1cm4gcmVmc1xufVxuXG5mdW5jdGlvbiBwYXRoVG9TZWdtZW50cyhwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXVxuICBsZXQgaSA9IDBcblxuICB3aGlsZSAoaSA8IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgaSsrXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAocGF0aFtpXSA9PT0gJ1snKSB7XG4gICAgICBjb25zdCBuZXh0ID0gc2tpcEJyYWNrZXRDb250ZW50KHBhdGgsIGkpXG4gICAgICBpZiAobmV4dCA9PT0gaSkgYnJlYWtcbiAgICAgIG91dC5wdXNoKCdAYnJhY2tldCcpXG4gICAgICBpID0gbmV4dFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKCFpc0lkZW50aWZpZXJTdGFydChwYXRoW2ldKSkge1xuICAgICAgaSsrXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IGlcbiAgICBpKytcbiAgICB3aGlsZSAoaSA8IHBhdGgubGVuZ3RoICYmIGlzSWRlbnRpZmllclBhcnQocGF0aFtpXSkpIGkrK1xuICAgIG91dC5wdXNoKHBhdGguc2xpY2Uoc3RhcnQsIGkpKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG4vKipcbiAqIEV4dHJhY3RzIGNhbm9uaWNhbCBgY3R4LipgIHNjb3BlIHJlZmVyZW5jZXMgZnJvbSBhbiBleHByZXNzaW9uLWxpa2Ugc3RyaW5nLlxuICogTm9ybWFsaXplcyBhY2NlcHRlZCBwcmVmaXhlcyAoYEBjdHhgLCBgQGNvbnRleHRgLCBgQC5jdHhgLCBgJCQuY3R4YCkgdG8gYGN0eC4qYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTY29wZVJlZmVyZW5jZXMoZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBzY29wZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIGZvciAoY29uc3QgcmVmIG9mIGV4dHJhY3RGdWxsQ29udGV4dFJlZmVyZW5jZXMoZXhwcmVzc2lvbikpIHtcbiAgICBpZiAocmVmLnNlZ21lbnRzLmxlbmd0aCA9PT0gMCkgY29udGludWVcbiAgICBpZiAocmVmLnNlZ21lbnRzWzBdID09PSAnY3R4JyAmJiByZWYuc2VnbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgc2NvcGVzLmFkZChgY3R4LiR7cmVmLnNlZ21lbnRzLnNsaWNlKDEpLmpvaW4oJy4nKX1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBzY29wZXMuYWRkKGBjdHguJHtyZWYuc2VnbWVudHMuam9pbignLicpfWApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oc2NvcGVzKVxufVxuXG4vKipcbiAqIFBhcnNlIGEgSmlneC9KU09OYXRhIGV4cHJlc3Npb24gaW50byBhbiBBU1QgdXNpbmcgdGhlIHNoYXJlZCBub3JtYWxpemF0aW9uIHJ1bGVzLlxuICogUmV0dXJucyBudWxsIHdoZW4gcGFyc2luZyBmYWlscyBpbiBib3RoIGRpcmVjdCBhbmQgd3JhcHBlZCBmb3Jtcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSnNvbmF0YUFzdChleHByZXNzaW9uOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwge1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybUZvclZhbGlkYXRpb24oZXhwcmVzc2lvbilcbiAgcmV0dXJuIHBhcnNlQXN0RnJvbVRyYW5zZm9ybWVkKHRyYW5zZm9ybWVkKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGV4dHJhY3RlZCBjb250ZXh0IHBhdGhzIG1hdGNoIHN1cHBvcnRlZCBwYXR0ZXJucy5cbiAqXG4gKiBDaGVja3MgZWFjaCBjb250ZXh0IHBhdGggYWdhaW5zdCB0aGUgd2hpdGVsaXN0IG9mIHZhbGlkIHBhdHRlcm5zXG4gKiBmcm9tIHRoZSBhY3R1YWwgcnVudGltZSBwYXJzZXIuXG4gKlxuICogQHBhcmFtIGNvbnRleHRQYXRocyAtIEFycmF5IG9mIGNvbnRleHQgcGF0aHMgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBhbnkgaW52YWxpZCBwYXRoc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB2YWxpZGF0ZUNvbnRleHRQYXRocyhbJ0BjdHguY29tcG9uZW50cy5mb3JtJywgJ0BjdHguaW52YWxpZC5wYXR0ZXJuJ10pXG4gKiAvLyBSZXR1cm5zOiB7IGlzVmFsaWQ6IGZhbHNlLCBpbnZhbGlkUGF0aHM6IFsnQGN0eC5pbnZhbGlkLnBhdHRlcm4nXSB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogc3RyaW5nW10pOiB7XG4gIGlzVmFsaWQ6IGJvb2xlYW5cbiAgaW52YWxpZFBhdGhzOiBzdHJpbmdbXVxufSB7XG4gIGNvbnN0IGludmFsaWRQYXRoczogc3RyaW5nW10gPSBbXVxuXG4gIGZvciAoY29uc3QgcGF0aCBvZiBjb250ZXh0UGF0aHMpIHtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHN0cmlwQ29udGV4dFByZWZpeChwYXRoKVxuICAgIGNvbnN0IGlzVmFsaWQgPSBpc0NvbnRleHRQYXRoQWxsb3dlZChwYXRoVG9TZWdtZW50cyhiYXNlUGF0aCkpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGludmFsaWRQYXRocy5wdXNoKHBhdGgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc1ZhbGlkOiBpbnZhbGlkUGF0aHMubGVuZ3RoID09PSAwLFxuICAgIGludmFsaWRQYXRocyxcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBKaWd4IGV4cHJlc3Npb24gdG8gSlNPTmF0YSBzeW50YXggZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQXBwbGllcyB0aGUgc2FtZSB0cmFuc2Zvcm1hdGlvbnMgYXMgdGhlIHJ1bnRpbWUgcGFyc2VyOlxuICogLSBAY3R4Liog4oaSICQkLipcbiAqIC0gQGNvbnRleHQuKiDihpIgJCQuKlxuICogLSBALiog4oaSICQkLipcbiAqIC0gV3JhcHMgaWRlbnRpZmllcnMgd2l0aCBoeXBoZW5zIGluIGJhY2t0aWNrcyBmb3IgSlNPTmF0YSBjb21wYXRpYmlsaXR5XG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHdpdGhvdXQgPSBwcmVmaXhcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gdHJhbnNmb3JtZWQgZm9yIEpTT05hdGEgcGFyc2luZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cmFuc2Zvcm1Gb3JWYWxpZGF0aW9uKCdAY3R4LmNvbXBvbmVudHMuZm9ybS5zdGF0ZS52YWx1ZScpXG4gKiAvLyBSZXR1cm5zOiAnJCQuY29tcG9uZW50cy5mb3JtLnN0YXRlLnZhbHVlJ1xuICpcbiAqIHRyYW5zZm9ybUZvclZhbGlkYXRpb24oJ0BjdHguamlncy5zdGVwLTEub3V0cHV0cy5pc1ZhbGlkJylcbiAqIC8vIFJldHVybnM6ICckJC5qaWdzLmBzdGVwLTFgLm91dHB1dHMuaXNWYWxpZCdcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRm9yVmFsaWRhdGlvbihleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgdHJhbnNmb3JtZWQgPSAnJ1xuICBsZXQgaSA9IDBcbiAgbGV0IHF1b3RlOiAnXCInIHwgXCInXCIgfCBudWxsID0gbnVsbFxuXG4gIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IGV4cHJlc3Npb25baV1cbiAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcbiAgICAgIHRyYW5zZm9ybWVkICs9IGNoXG4gICAgICBpZiAoY2ggPT09ICdcXFxcJyAmJiBpICsgMSA8IGV4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkICs9IGV4cHJlc3Npb25baSArIDFdXG4gICAgICAgIGkgKz0gMlxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICBxdW90ZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICBxdW90ZSA9IGNoXG4gICAgICB0cmFuc2Zvcm1lZCArPSBjaFxuICAgICAgaSsrXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hDb250ZXh0UHJlZml4QXQoZXhwcmVzc2lvbiwgaSlcbiAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgbWF0Y2gucHJlZml4ICE9PSAnJCQnKSB7XG4gICAgICB0cmFuc2Zvcm1lZCArPSAnJCQuJ1xuICAgICAgaSA9IG1hdGNoLnBhdGhTdGFydFxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1lZCArPSBjaFxuICAgIGkrK1xuICB9XG5cbiAgcmV0dXJuIHdyYXBIeXBoZW5hdGVkQ29udGV4dFBhdGhTZWdtZW50cyh0cmFuc2Zvcm1lZClcbn1cblxuZnVuY3Rpb24gd3JhcEh5cGhlbmF0ZWRDb250ZXh0UGF0aFNlZ21lbnRzKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJ1xuICBsZXQgaSA9IDBcbiAgbGV0IHF1b3RlOiAnXCInIHwgXCInXCIgfCBudWxsID0gbnVsbFxuICBsZXQgaW5CYWNrdGlja3MgPSBmYWxzZVxuICBsZXQgaW5Db250ZXh0UGF0aCA9IGZhbHNlXG4gIGxldCBicmFja2V0RGVwdGggPSAwXG5cbiAgd2hpbGUgKGkgPCBwYXRoLmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gcGF0aFtpXVxuICAgIGNvbnN0IG5leHRUaHJlZSA9IHBhdGguc2xpY2UoaSwgaSArIDMpXG5cbiAgICBpZiAoaW5CYWNrdGlja3MpIHtcbiAgICAgIG91dCArPSBjaFxuICAgICAgaWYgKGNoID09PSAnYCcpIGluQmFja3RpY2tzID0gZmFsc2VcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcbiAgICAgIG91dCArPSBjaFxuICAgICAgaWYgKGNoID09PSAnXFxcXCcgJiYgaSArIDEgPCBwYXRoLmxlbmd0aCkge1xuICAgICAgICBvdXQgKz0gcGF0aFtpICsgMV1cbiAgICAgICAgaSArPSAyXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IHF1b3RlKSBxdW90ZSA9IG51bGxcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICBxdW90ZSA9IGNoXG4gICAgICBvdXQgKz0gY2hcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAnYCcpIHtcbiAgICAgIGluQmFja3RpY2tzID0gdHJ1ZVxuICAgICAgb3V0ICs9IGNoXG4gICAgICBpKytcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKG5leHRUaHJlZSA9PT0gJyQkLicpIHtcbiAgICAgIGluQ29udGV4dFBhdGggPSB0cnVlXG4gICAgICBvdXQgKz0gJyQkLidcbiAgICAgIGkgKz0gM1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoaW5Db250ZXh0UGF0aCAmJiBjaCA9PT0gJ1snKSB7XG4gICAgICBicmFja2V0RGVwdGggKz0gMVxuICAgICAgb3V0ICs9IGNoXG4gICAgICBpKytcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChpbkNvbnRleHRQYXRoICYmIGNoID09PSAnXScpIHtcbiAgICAgIGJyYWNrZXREZXB0aCA9IE1hdGgubWF4KDAsIGJyYWNrZXREZXB0aCAtIDEpXG4gICAgICBvdXQgKz0gY2hcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpbkNvbnRleHRQYXRoICYmXG4gICAgICBicmFja2V0RGVwdGggPT09IDAgJiZcbiAgICAgICFpc0lkZW50aWZpZXJQYXJ0KGNoKSAmJlxuICAgICAgY2ggIT09ICcuJyAmJlxuICAgICAgY2ggIT09ICdbJyAmJlxuICAgICAgY2ggIT09ICddJ1xuICAgICkge1xuICAgICAgaW5Db250ZXh0UGF0aCA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgIG91dCArPSAnLidcbiAgICAgIGkrK1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBza2lwQnJhY2tldENvbnRlbnQocGF0aCwgaSlcbiAgICAgIGlmIChuZXh0ID09PSBpKSB7XG4gICAgICAgIG91dCArPSBwYXRoLnNsaWNlKGkpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBvdXQgKz0gcGF0aC5zbGljZShpLCBuZXh0KVxuICAgICAgaSA9IG5leHRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpXG4gICAgICBpKytcbiAgICAgIHdoaWxlIChpIDwgcGF0aC5sZW5ndGggJiYgaXNJZGVudGlmaWVyUGFydChwYXRoW2ldKSkgaSsrXG4gICAgICBjb25zdCB0b2tlbiA9IHBhdGguc2xpY2Uoc3RhcnQsIGkpXG4gICAgICBpZiAoaW5Db250ZXh0UGF0aCAmJiB0b2tlbi5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgIG91dCArPSBgXFxgJHt0b2tlbn1cXGBgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gdG9rZW5cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgb3V0ICs9IGNoXG4gICAgaSsrXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGV4cHJlc3Npb24gc3ludGF4IHVzaW5nIEpTT05hdGEgcGFyc2VyLlxuICpcbiAqIEF0dGVtcHRzIHRvIGNvbXBpbGUgdGhlIHRyYW5zZm9ybWVkIGV4cHJlc3Npb24gd2l0aCBKU09OYXRhLlxuICogSWYgY29tcGlsYXRpb24gZmFpbHMsIGV4dHJhY3RzIGVycm9yIG1lc3NhZ2UgZm9yIGRlYnVnZ2luZy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNmb3JtZWRFeHByZXNzaW9uIC0gRXhwcmVzc2lvbiBpbiBKU09OYXRhIHN5bnRheFxuICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHQgd2l0aCBlcnJvciBtZXNzYWdlIGlmIGludmFsaWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdmFsaWRhdGVTeW50YXgoJyQkLmNvbXBvbmVudHMuZm9ybS5zdGF0ZS52YWx1ZScpXG4gKiAvLyBSZXR1cm5zOiB7IGlzVmFsaWQ6IHRydWUgfVxuICpcbiAqIHZhbGlkYXRlU3ludGF4KCckJC5pbnZhbGlkLi5zeW50YXgnKVxuICogLy8gUmV0dXJuczogeyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTeW50YXggZXJyb3IgbWVzc2FnZScgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN5bnRheCh0cmFuc2Zvcm1lZEV4cHJlc3Npb246IHN0cmluZyk6IHtcbiAgaXNWYWxpZDogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xufSB7XG4gIGlmICghdHJhbnNmb3JtZWRFeHByZXNzaW9uLnRyaW0oKSkge1xuICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogJ0VtcHR5IGV4cHJlc3Npb24nIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQXR0ZW1wdCB0byBjb21waWxlIGV4cHJlc3Npb24gLSB0aHJvd3MgaWYgc3ludGF4IGlzIGludmFsaWRcbiAgICBqc29uYXRhKHRyYW5zZm9ybWVkRXhwcmVzc2lvbilcbiAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSBKU09OYXRhIGVycm9yIG9iamVjdFxuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnbWVzc2FnZScgaW4gZXJyb3JcbiAgICAgICAgPyAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuICAgICAgICA6IFN0cmluZyhlcnJvcilcblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiBgSlNPTmF0YSBzeW50YXggZXJyb3I6ICR7bWVzc2FnZX1gLFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNvbXBsZXRlIEppZ3ggZXhwcmVzc2lvbiBpbmNsdWRpbmcgY29udGV4dCBwYXRoIHZhbGlkYXRpb24uXG4gKlxuICogQ29tYmluZXMgc3ludGF4IHZhbGlkYXRpb24gd2l0aCBjb250ZXh0IHBhdGggdmFsaWRhdGlvbiB0byBwcm92aWRlXG4gKiBjb21wbGV0ZSBleHByZXNzaW9uIHZhbGlkYXRpb24gbWF0Y2hpbmcgdGhlIHJ1bnRpbWUgcGFyc2VyIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byB2YWxpZGF0ZSAod2l0aCBvciB3aXRob3V0ID0gcHJlZml4KVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0IHdpdGggZGV0YWlsZWQgZXJyb3IgaW5mb3JtYXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdmFsaWRhdGVKc29uYXRhRXhwcmVzc2lvbignPUBjdHguY29tcG9uZW50cy5mb3JtLnN0YXRlLnZhbHVlJylcbiAqIC8vIFJldHVybnM6IHsgaXNWYWxpZDogdHJ1ZSwgY29udGV4dFBhdGhzOiBbJ0BjdHguY29tcG9uZW50cy5mb3JtJ10gfVxuICpcbiAqIHZhbGlkYXRlSnNvbmF0YUV4cHJlc3Npb24oJz1AY3R4LmludmFsaWQucGF0dGVybiArIHN5bnRheC4uZXJyb3InKVxuICogLy8gUmV0dXJuczoge1xuICogLy8gICBpc1ZhbGlkOiBmYWxzZSxcbiAqIC8vICAgc3ludGF4RXJyb3I6ICdTeW50YXggZXJyb3IuLi4nLFxuICogLy8gICBpbnZhbGlkQ29udGV4dFBhdGhzOiBbJ0BjdHguaW52YWxpZC5wYXR0ZXJuJ11cbiAqIC8vIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVKc29uYXRhRXhwcmVzc2lvbihcbiAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICBvcHRpb25zPzogeyBlbmZvcmNlRGVlcFZhbGlkYXRpb24/OiBib29sZWFuOyBhbGxvd0NvbnRleHRGdW5jdGlvbnM/OiBib29sZWFuIH0sXG4pOiB7XG4gIGlzVmFsaWQ6IGJvb2xlYW5cbiAgY29udGV4dFBhdGhzOiBzdHJpbmdbXVxuICBpbnZhbGlkQ29udGV4dFBhdGhzPzogc3RyaW5nW11cbiAgc3ludGF4RXJyb3I/OiBzdHJpbmdcbiAgaW52YWxpZERlZXBDb250ZXh0UGF0aHM/OiBzdHJpbmdbXVxufSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKVxuXG4gIGlmICghcGFyc2VkLmlzVmFsaWRTeW50YXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBjb250ZXh0UGF0aHM6IHBhcnNlZC5jb250ZXh0UGF0aHMsXG4gICAgICBzeW50YXhFcnJvcjogcGFyc2VkLnN5bnRheEVycm9yLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbnRleHRWYWxpZGF0aW9uID0gdmFsaWRhdGVDb250ZXh0UGF0aHMocGFyc2VkLmNvbnRleHRQYXRocylcblxuICAvLyBEZWVwL3Byb3BlcnR5IHZhbGlkYXRpb24gaXMgQVNULWRyaXZlbiAoc2luZ2xlIHBhcnNlciBwYXRoKS5cbiAgY29uc3QgYXN0ID0gcGFyc2VBc3RGcm9tVHJhbnNmb3JtZWQocGFyc2VkLnRyYW5zZm9ybWVkKVxuICBpZiAoYXN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgY29udGV4dFBhdGhzOiBwYXJzZWQuY29udGV4dFBhdGhzLFxuICAgICAgc3ludGF4RXJyb3I6ICdKU09OYXRhIHN5bnRheCBlcnJvcjogVW5hYmxlIHRvIHBhcnNlIHRyYW5zZm9ybWVkIGV4cHJlc3Npb24nLFxuICAgIH1cbiAgfVxuICBjb25zdCBkZWVwUmVmcyA9IGV4dHJhY3RDb250ZXh0UmVmZXJlbmNlc0Zyb21Bc3ROb2RlKGFzdClcbiAgY29uc3QgZGVlcEludmFsaWQgPSBkZWVwUmVmc1xuICAgIC5maWx0ZXIoKHIpID0+IGlzRGVlcFZhbGlkYXRpb25Sb290KHIuc2VnbWVudHNbMF0pKVxuICAgIC5maWx0ZXIoKHIpID0+ICFpc0RlZXBBbGxvd2VkKHIuc2VnbWVudHMpKVxuICAgIC5tYXAoKHIpID0+IHIub3JpZ2luYWwpXG5cbiAgLy8gQWxsb3cgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGxpa2UgQGN0eC5nZXROZXh0VGFiKCkgYXMgdmFsaWQgcmVmZXJlbmNlc1xuICBjb25zdCBhbGxvd2VkRm5SZWZzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgY29uc3QgYWxsb3dDb250ZXh0RnVuY3Rpb25zID0gb3B0aW9ucz8uYWxsb3dDb250ZXh0RnVuY3Rpb25zID09PSB0cnVlXG4gIGlmIChhbGxvd0NvbnRleHRGdW5jdGlvbnMpIHtcbiAgICBjb25zdCBmblJlZnMgPSBleHRyYWN0Q29udGV4dEZ1bmN0aW9uUmVmZXJlbmNlc0Zyb21Bc3ROb2RlKGFzdClcbiAgICBmb3IgKGNvbnN0IGZuUmVmIG9mIGZuUmVmcykge1xuICAgICAgYWxsb3dlZEZuUmVmcy5hZGQoZm5SZWYpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRJbnZhbGlkQmFzZSA9IGNvbnRleHRWYWxpZGF0aW9uLmlzVmFsaWRcbiAgICA/IFtdXG4gICAgOiBjb250ZXh0VmFsaWRhdGlvbi5pbnZhbGlkUGF0aHMuZmlsdGVyKChwKSA9PiAhYWxsb3dlZEZuUmVmcy5oYXMocCkpXG4gIGxldCBmaWx0ZXJlZERlZXBJbnZhbGlkID0gZGVlcEludmFsaWQuZmlsdGVyKChwKSA9PiAhYWxsb3dlZEZuUmVmcy5oYXMocCkpXG4gIC8vIElmIGhlYWRlcnMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgWyAuLi4gXSwgZG9uJ3QgZmxhZyB0aGUgYmFzZSAnQC4uLnJlc3BvbnNlLmhlYWRlcnMnXG4gIGNvbnN0IGhhc0ltbWVkaWF0ZUhlYWRlcnNCcmFja2V0ID0gZGVlcFJlZnMuc29tZSgocikgPT4ge1xuICAgIGlmIChyLnNlZ21lbnRzLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiAoXG4gICAgICByLnNlZ21lbnRzWzBdID09PSAncmVzcG9uc2UnICYmIHIuc2VnbWVudHNbMV0gPT09ICdoZWFkZXJzJyAmJiByLnNlZ21lbnRzWzJdID09PSAnQGJyYWNrZXQnXG4gICAgKVxuICB9KVxuICBmaWx0ZXJlZERlZXBJbnZhbGlkID0gZmlsdGVyZWREZWVwSW52YWxpZC5maWx0ZXIoKHApID0+IHtcbiAgICBpZiAocCA9PT0gJ0AucmVzcG9uc2UuaGVhZGVycycpIHJldHVybiAhaGFzSW1tZWRpYXRlSGVhZGVyc0JyYWNrZXRcbiAgICBpZiAocCA9PT0gJ0BjdHgucmVzcG9uc2UuaGVhZGVycycpIHJldHVybiAhaGFzSW1tZWRpYXRlSGVhZGVyc0JyYWNrZXRcbiAgICBpZiAocCA9PT0gJ0Bjb250ZXh0LnJlc3BvbnNlLmhlYWRlcnMnKSByZXR1cm4gIWhhc0ltbWVkaWF0ZUhlYWRlcnNCcmFja2V0XG4gICAgcmV0dXJuIHRydWVcbiAgfSlcblxuICBjb25zdCBlbmZvcmNlRGVlcCA9IG9wdGlvbnM/LmVuZm9yY2VEZWVwVmFsaWRhdGlvbiAhPT0gZmFsc2VcbiAgaWYgKGVuZm9yY2VEZWVwKSB7XG4gICAgY29uc3QgYWxsSW52YWxpZCA9IFsuLi5maWx0ZXJlZEludmFsaWRCYXNlLCAuLi5maWx0ZXJlZERlZXBJbnZhbGlkXVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBhbGxJbnZhbGlkLmxlbmd0aCA9PT0gMCxcbiAgICAgIGNvbnRleHRQYXRoczogcGFyc2VkLmNvbnRleHRQYXRocyxcbiAgICAgIGludmFsaWRDb250ZXh0UGF0aHM6IGFsbEludmFsaWQubGVuZ3RoID8gYWxsSW52YWxpZCA6IHVuZGVmaW5lZCxcbiAgICAgIGludmFsaWREZWVwQ29udGV4dFBhdGhzOiBmaWx0ZXJlZERlZXBJbnZhbGlkLmxlbmd0aCA/IGZpbHRlcmVkRGVlcEludmFsaWQgOiB1bmRlZmluZWQsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc1ZhbGlkOiBjb250ZXh0VmFsaWRhdGlvbi5pc1ZhbGlkLFxuICAgIGNvbnRleHRQYXRoczogcGFyc2VkLmNvbnRleHRQYXRocyxcbiAgICBpbnZhbGlkQ29udGV4dFBhdGhzOiBmaWx0ZXJlZEludmFsaWRCYXNlLmxlbmd0aCA/IGZpbHRlcmVkSW52YWxpZEJhc2UgOiB1bmRlZmluZWQsXG4gICAgaW52YWxpZERlZXBDb250ZXh0UGF0aHM6IGZpbHRlcmVkRGVlcEludmFsaWQubGVuZ3RoID8gZmlsdGVyZWREZWVwSW52YWxpZCA6IHVuZGVmaW5lZCxcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpcENvbnRleHRQcmVmaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnQGN0eC4nKSkgcmV0dXJuIHBhdGguc2xpY2UoNSlcbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnQGNvbnRleHQuJykpIHJldHVybiBwYXRoLnNsaWNlKDkpXG4gIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ0AuJykpIHJldHVybiBwYXRoLnNsaWNlKDIpXG4gIGlmIChwYXRoLnN0YXJ0c1dpdGgoJyQkLicpKSByZXR1cm4gcGF0aC5zbGljZSgzKVxuICByZXR1cm4gcGF0aFxufVxuIl19