obsidian-dev-utils 36.0.0 → 36.2.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 (424) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/lib/cjs/AbortController.cjs +1 -1
  3. package/dist/lib/cjs/Array.cjs +1 -1
  4. package/dist/lib/cjs/Async.cjs +2 -2
  5. package/dist/lib/cjs/Async.d.cts +4 -4
  6. package/dist/lib/cjs/AsyncEvents.cjs +2 -2
  7. package/dist/lib/cjs/AsyncEvents.d.cts +4 -4
  8. package/dist/lib/cjs/Blob.cjs +1 -1
  9. package/dist/lib/cjs/CssClass.cjs +2 -2
  10. package/dist/lib/cjs/CssClass.d.cts +35 -35
  11. package/dist/lib/cjs/Debug.cjs +2 -2
  12. package/dist/lib/cjs/DebugController.cjs +1 -1
  13. package/dist/lib/cjs/Enum.cjs +1 -1
  14. package/dist/lib/cjs/Error.cjs +2 -2
  15. package/dist/lib/cjs/Error.d.cts +1 -1
  16. package/dist/lib/cjs/Function.cjs +1 -1
  17. package/dist/lib/cjs/HTMLElement.cjs +2 -2
  18. package/dist/lib/cjs/HTMLElement.d.cts +1 -1
  19. package/dist/lib/cjs/Library.cjs +3 -3
  20. package/dist/lib/cjs/Library.d.cts +3 -3
  21. package/dist/lib/cjs/ObjectUtils.cjs +2 -2
  22. package/dist/lib/cjs/ObjectUtils.d.cts +1 -1
  23. package/dist/lib/cjs/Path.cjs +2 -2
  24. package/dist/lib/cjs/Path.d.cts +2 -2
  25. package/dist/lib/cjs/RegExp.cjs +2 -2
  26. package/dist/lib/cjs/RegExp.d.cts +3 -3
  27. package/dist/lib/cjs/ScriptUtils/CliUtils.cjs +3 -3
  28. package/dist/lib/cjs/ScriptUtils/CliUtils.d.cts +1 -1
  29. package/dist/lib/cjs/ScriptUtils/CodeGenerator.cjs +1 -1
  30. package/dist/lib/cjs/ScriptUtils/ESLint/ESLint.cjs +1 -1
  31. package/dist/lib/cjs/ScriptUtils/ESLint/eslint.config.cjs +2 -2
  32. package/dist/lib/cjs/ScriptUtils/ESLint/eslint.config.d.cts +1 -1
  33. package/dist/lib/cjs/ScriptUtils/ESLint/index.cjs +1 -1
  34. package/dist/lib/cjs/ScriptUtils/Exec.cjs +2 -2
  35. package/dist/lib/cjs/ScriptUtils/Exec.d.cts +9 -9
  36. package/dist/lib/cjs/ScriptUtils/Fs.cjs +1 -1
  37. package/dist/lib/cjs/ScriptUtils/JSON.cjs +2 -2
  38. package/dist/lib/cjs/ScriptUtils/JSON.d.cts +1 -1
  39. package/dist/lib/cjs/ScriptUtils/NodeModules.cjs +1 -1
  40. package/dist/lib/cjs/ScriptUtils/Npm.cjs +2 -2
  41. package/dist/lib/cjs/ScriptUtils/Npm.d.cts +5 -5
  42. package/dist/lib/cjs/ScriptUtils/NpmPublish.cjs +1 -1
  43. package/dist/lib/cjs/ScriptUtils/NpmRun.cjs +1 -1
  44. package/dist/lib/cjs/ScriptUtils/ObsidianDevUtilsRepoPaths.cjs +2 -2
  45. package/dist/lib/cjs/ScriptUtils/ObsidianDevUtilsRepoPaths.d.cts +1 -1
  46. package/dist/lib/cjs/ScriptUtils/Root.cjs +1 -1
  47. package/dist/lib/cjs/ScriptUtils/build.cjs +1 -1
  48. package/dist/lib/cjs/ScriptUtils/cli.cjs +2 -2
  49. package/dist/lib/cjs/ScriptUtils/esbuild/Dependency.cjs +1 -1
  50. package/dist/lib/cjs/ScriptUtils/esbuild/ObsidianPluginBuilder.cjs +2 -2
  51. package/dist/lib/cjs/ScriptUtils/esbuild/ObsidianPluginBuilder.d.cts +4 -4
  52. package/dist/lib/cjs/ScriptUtils/esbuild/changeExtensionPlugin.cjs +1 -1
  53. package/dist/lib/cjs/ScriptUtils/esbuild/copyToObsidianPluginsFolderPlugin.cjs +1 -1
  54. package/dist/lib/cjs/ScriptUtils/esbuild/customEsbuildOptionsPlugin.cjs +1 -1
  55. package/dist/lib/cjs/ScriptUtils/esbuild/fixEsmPlugin.cjs +1 -1
  56. package/dist/lib/cjs/ScriptUtils/esbuild/fixSourceMapsPlugin.cjs +2 -2
  57. package/dist/lib/cjs/ScriptUtils/esbuild/fixSourceMapsPlugin.d.cts +1 -1
  58. package/dist/lib/cjs/ScriptUtils/esbuild/index.cjs +1 -1
  59. package/dist/lib/cjs/ScriptUtils/esbuild/preprocessPlugin.cjs +12 -6
  60. package/dist/lib/cjs/ScriptUtils/esbuild/preprocessPlugin.d.cts +0 -3
  61. package/dist/lib/cjs/ScriptUtils/esbuild/renameCssPlugin.cjs +1 -1
  62. package/dist/lib/cjs/ScriptUtils/esbuild/svelteWrapperPlugin.cjs +1 -1
  63. package/dist/lib/cjs/ScriptUtils/format.cjs +1 -1
  64. package/dist/lib/cjs/ScriptUtils/index.cjs +1 -1
  65. package/dist/lib/cjs/ScriptUtils/spellcheck.cjs +2 -2
  66. package/dist/lib/cjs/ScriptUtils/spellcheck.d.cts +1 -1
  67. package/dist/lib/cjs/ScriptUtils/version.cjs +2 -2
  68. package/dist/lib/cjs/ScriptUtils/version.d.cts +3 -8
  69. package/dist/lib/cjs/String.cjs +2 -2
  70. package/dist/lib/cjs/String.d.cts +5 -5
  71. package/dist/lib/cjs/Transformers/DateTransformer.cjs +3 -3
  72. package/dist/lib/cjs/Transformers/DateTransformer.d.cts +1 -1
  73. package/dist/lib/cjs/Transformers/DurationTransformer.cjs +4 -4
  74. package/dist/lib/cjs/Transformers/DurationTransformer.d.cts +2 -2
  75. package/dist/lib/cjs/Transformers/GroupTransformer.cjs +4 -4
  76. package/dist/lib/cjs/Transformers/GroupTransformer.d.cts +2 -2
  77. package/dist/lib/cjs/Transformers/MapTransformer.cjs +3 -3
  78. package/dist/lib/cjs/Transformers/MapTransformer.d.cts +1 -1
  79. package/dist/lib/cjs/Transformers/SetTransformer.cjs +3 -3
  80. package/dist/lib/cjs/Transformers/SetTransformer.d.cts +1 -1
  81. package/dist/lib/cjs/Transformers/SkipPrivatePropertyTransformer.cjs +3 -3
  82. package/dist/lib/cjs/Transformers/SkipPrivatePropertyTransformer.d.cts +1 -1
  83. package/dist/lib/cjs/Transformers/Transformer.cjs +2 -2
  84. package/dist/lib/cjs/Transformers/Transformer.d.cts +1 -1
  85. package/dist/lib/cjs/Transformers/TwoWayMapTransformer.cjs +1 -1
  86. package/dist/lib/cjs/Transformers/TypedTransformer.cjs +1 -1
  87. package/dist/lib/cjs/Transformers/index.cjs +1 -1
  88. package/dist/lib/cjs/TwoWayMap.cjs +1 -1
  89. package/dist/lib/cjs/Type.cjs +2 -2
  90. package/dist/lib/cjs/Type.d.cts +1 -1
  91. package/dist/lib/cjs/ValueProvider.cjs +2 -2
  92. package/dist/lib/cjs/ValueProvider.d.cts +1 -1
  93. package/dist/lib/cjs/codemirror/StateFieldSpec.cjs +2 -2
  94. package/dist/lib/cjs/codemirror/StateFieldSpec.d.cts +2 -2
  95. package/dist/lib/cjs/codemirror/index.cjs +1 -1
  96. package/dist/lib/cjs/index.cjs +1 -1
  97. package/dist/lib/cjs/obsidian/App.cjs +1 -1
  98. package/dist/lib/cjs/obsidian/AttachmentPath.cjs +1 -1
  99. package/dist/lib/cjs/obsidian/Backlink.cjs +2 -2
  100. package/dist/lib/cjs/obsidian/Backlink.d.cts +7 -7
  101. package/dist/lib/cjs/obsidian/Callout.cjs +2 -2
  102. package/dist/lib/cjs/obsidian/Callout.d.cts +6 -6
  103. package/dist/lib/cjs/obsidian/CodeBlockMarkdownInformation.cjs +2 -2
  104. package/dist/lib/cjs/obsidian/CodeBlockMarkdownInformation.d.cts +9 -9
  105. package/dist/lib/cjs/obsidian/Components/AsyncEventsComponent.cjs +1 -1
  106. package/dist/lib/cjs/obsidian/Components/SettingComponents/CheckboxComponent.cjs +4 -4
  107. package/dist/lib/cjs/obsidian/Components/SettingComponents/CheckboxComponent.d.cts +2 -2
  108. package/dist/lib/cjs/obsidian/Components/SettingComponents/CodeHighlighterComponent.cjs +3 -3
  109. package/dist/lib/cjs/obsidian/Components/SettingComponents/CodeHighlighterComponent.d.cts +1 -1
  110. package/dist/lib/cjs/obsidian/Components/SettingComponents/DateComponent.cjs +1 -1
  111. package/dist/lib/cjs/obsidian/Components/SettingComponents/DateTimeComponent.cjs +1 -1
  112. package/dist/lib/cjs/obsidian/Components/SettingComponents/EmailComponent.cjs +1 -1
  113. package/dist/lib/cjs/obsidian/Components/SettingComponents/FileComponent.cjs +1 -1
  114. package/dist/lib/cjs/obsidian/Components/SettingComponents/MonthComponent.cjs +2 -2
  115. package/dist/lib/cjs/obsidian/Components/SettingComponents/MonthComponent.d.cts +2 -2
  116. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleDropdownComponent.cjs +4 -4
  117. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleDropdownComponent.d.cts +2 -2
  118. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleEmailComponent.cjs +1 -1
  119. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleFileComponent.cjs +1 -1
  120. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleTextComponent.cjs +3 -3
  121. package/dist/lib/cjs/obsidian/Components/SettingComponents/MultipleTextComponent.d.cts +1 -1
  122. package/dist/lib/cjs/obsidian/Components/SettingComponents/NumberComponent.cjs +1 -1
  123. package/dist/lib/cjs/obsidian/Components/SettingComponents/PasswordComponent.cjs +1 -1
  124. package/dist/lib/cjs/obsidian/Components/SettingComponents/SettingComponentWrapper.cjs +1 -1
  125. package/dist/lib/cjs/obsidian/Components/SettingComponents/TelephoneComponent.cjs +1 -1
  126. package/dist/lib/cjs/obsidian/Components/SettingComponents/TextBasedComponent.cjs +1 -1
  127. package/dist/lib/cjs/obsidian/Components/SettingComponents/TimeComponent.cjs +1 -1
  128. package/dist/lib/cjs/obsidian/Components/SettingComponents/TriStateCheckboxComponent.cjs +4 -4
  129. package/dist/lib/cjs/obsidian/Components/SettingComponents/TriStateCheckboxComponent.d.cts +2 -2
  130. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedDropdownComponent.cjs +4 -4
  131. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedDropdownComponent.d.cts +2 -2
  132. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedMultipleDropdownComponent.cjs +4 -4
  133. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedMultipleDropdownComponent.d.cts +2 -2
  134. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedRangeTextComponent.cjs +1 -1
  135. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedTextComponent.cjs +4 -4
  136. package/dist/lib/cjs/obsidian/Components/SettingComponents/TypedTextComponent.d.cts +2 -2
  137. package/dist/lib/cjs/obsidian/Components/SettingComponents/UrlComponent.cjs +1 -1
  138. package/dist/lib/cjs/obsidian/Components/SettingComponents/ValidatorComponent.cjs +2 -2
  139. package/dist/lib/cjs/obsidian/Components/SettingComponents/ValidatorComponent.d.cts +1 -1
  140. package/dist/lib/cjs/obsidian/Components/SettingComponents/ValueComponentWithChangeTracking.cjs +1 -1
  141. package/dist/lib/cjs/obsidian/Components/SettingComponents/WeekComponent.cjs +2 -2
  142. package/dist/lib/cjs/obsidian/Components/SettingComponents/WeekComponent.d.cts +3 -3
  143. package/dist/lib/cjs/obsidian/Components/SettingComponents/index.cjs +1 -1
  144. package/dist/lib/cjs/obsidian/Components/index.cjs +1 -1
  145. package/dist/lib/cjs/obsidian/Dataview.cjs +3 -4
  146. package/dist/lib/cjs/obsidian/Dataview.d.cts +20 -20
  147. package/dist/lib/cjs/obsidian/DataviewLink.cjs +1 -1
  148. package/dist/lib/cjs/obsidian/FileChange.cjs +2 -2
  149. package/dist/lib/cjs/obsidian/FileChange.d.cts +4 -4
  150. package/dist/lib/cjs/obsidian/FileManager.cjs +1 -1
  151. package/dist/lib/cjs/obsidian/FileSystem.cjs +2 -2
  152. package/dist/lib/cjs/obsidian/FileSystem.d.cts +6 -6
  153. package/dist/lib/cjs/obsidian/Frontmatter.cjs +2 -2
  154. package/dist/lib/cjs/obsidian/Frontmatter.d.cts +7 -7
  155. package/dist/lib/cjs/obsidian/FrontmatterLinkCacheWithOffsets.cjs +2 -2
  156. package/dist/lib/cjs/obsidian/FrontmatterLinkCacheWithOffsets.d.cts +2 -2
  157. package/dist/lib/cjs/obsidian/Link.cjs +2 -2
  158. package/dist/lib/cjs/obsidian/Link.d.cts +50 -49
  159. package/dist/lib/cjs/obsidian/Logger.cjs +2 -2
  160. package/dist/lib/cjs/obsidian/Loop.cjs +2 -2
  161. package/dist/lib/cjs/obsidian/Loop.d.cts +13 -7
  162. package/dist/lib/cjs/obsidian/Markdown.cjs +1 -1
  163. package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.cjs +20 -9
  164. package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.d.cts +30 -17
  165. package/dist/lib/cjs/obsidian/MarkdownView.cjs +1 -1
  166. package/dist/lib/cjs/obsidian/MetadataCache.cjs +4 -16
  167. package/dist/lib/cjs/obsidian/Modals/Alert.cjs +2 -2
  168. package/dist/lib/cjs/obsidian/Modals/Alert.d.cts +6 -6
  169. package/dist/lib/cjs/obsidian/Modals/Confirm.cjs +2 -2
  170. package/dist/lib/cjs/obsidian/Modals/Confirm.d.cts +7 -7
  171. package/dist/lib/cjs/obsidian/Modals/ModalBase.cjs +2 -2
  172. package/dist/lib/cjs/obsidian/Modals/ModalBase.d.cts +3 -3
  173. package/dist/lib/cjs/obsidian/Modals/Prompt.cjs +2 -2
  174. package/dist/lib/cjs/obsidian/Modals/Prompt.d.cts +7 -7
  175. package/dist/lib/cjs/obsidian/Modals/SelectItem.cjs +2 -2
  176. package/dist/lib/cjs/obsidian/Modals/SelectItem.d.cts +7 -7
  177. package/dist/lib/cjs/obsidian/Modals/index.cjs +1 -1
  178. package/dist/lib/cjs/obsidian/MonkeyAround.cjs +2 -2
  179. package/dist/lib/cjs/obsidian/MonkeyAround.d.cts +3 -3
  180. package/dist/lib/cjs/obsidian/ObsidianSettings.cjs +1 -1
  181. package/dist/lib/cjs/obsidian/Pdf.cjs +1 -1
  182. package/dist/lib/cjs/obsidian/Plugin/ObsidianPluginRepoPaths.cjs +1 -1
  183. package/dist/lib/cjs/obsidian/Plugin/Plugin.cjs +1 -1
  184. package/dist/lib/cjs/obsidian/Plugin/PluginBase.cjs +1 -1
  185. package/dist/lib/cjs/obsidian/Plugin/PluginContext.cjs +1 -1
  186. package/dist/lib/cjs/obsidian/Plugin/PluginId.cjs +2 -2
  187. package/dist/lib/cjs/obsidian/Plugin/PluginId.d.cts +1 -1
  188. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsManagerBase.cjs +1 -1
  189. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.cjs +3 -3
  190. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.d.cts +6 -6
  191. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsWrapper.cjs +2 -2
  192. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsWrapper.d.cts +4 -4
  193. package/dist/lib/cjs/obsidian/Plugin/PluginTypesBase.cjs +2 -2
  194. package/dist/lib/cjs/obsidian/Plugin/PluginTypesBase.d.cts +6 -6
  195. package/dist/lib/cjs/obsidian/Plugin/index.cjs +1 -1
  196. package/dist/lib/cjs/obsidian/Queue.cjs +1 -1
  197. package/dist/lib/cjs/obsidian/React/AppContext.cjs +2 -2
  198. package/dist/lib/cjs/obsidian/React/AppContext.d.cts +2 -2
  199. package/dist/lib/cjs/obsidian/React/index.cjs +1 -1
  200. package/dist/lib/cjs/obsidian/Reference.cjs +2 -2
  201. package/dist/lib/cjs/obsidian/Reference.d.cts +8 -8
  202. package/dist/lib/cjs/obsidian/RenameDeleteHandler.cjs +2 -2
  203. package/dist/lib/cjs/obsidian/RenameDeleteHandler.d.cts +2 -2
  204. package/dist/lib/cjs/obsidian/ResourceUrl.cjs +1 -1
  205. package/dist/lib/cjs/obsidian/SettingEx.cjs +1 -1
  206. package/dist/lib/cjs/obsidian/Validation.cjs +2 -2
  207. package/dist/lib/cjs/obsidian/Validation.d.cts +1 -1
  208. package/dist/lib/cjs/obsidian/Vault.cjs +18 -4
  209. package/dist/lib/cjs/obsidian/Vault.d.cts +9 -1
  210. package/dist/lib/cjs/obsidian/VaultEx.cjs +1 -1
  211. package/dist/lib/cjs/obsidian/index.cjs +1 -1
  212. package/dist/lib/cjs/url.cjs +1 -1
  213. package/dist/lib/esm/AbortController.mjs +1 -1
  214. package/dist/lib/esm/Array.mjs +1 -1
  215. package/dist/lib/esm/Async.d.mts +4 -4
  216. package/dist/lib/esm/Async.mjs +2 -2
  217. package/dist/lib/esm/AsyncEvents.d.mts +4 -4
  218. package/dist/lib/esm/AsyncEvents.mjs +2 -2
  219. package/dist/lib/esm/Blob.mjs +1 -1
  220. package/dist/lib/esm/CssClass.d.mts +35 -35
  221. package/dist/lib/esm/CssClass.mjs +2 -2
  222. package/dist/lib/esm/Debug.mjs +2 -2
  223. package/dist/lib/esm/DebugController.mjs +1 -1
  224. package/dist/lib/esm/Enum.mjs +1 -1
  225. package/dist/lib/esm/Error.d.mts +1 -1
  226. package/dist/lib/esm/Error.mjs +2 -2
  227. package/dist/lib/esm/Function.mjs +1 -1
  228. package/dist/lib/esm/HTMLElement.d.mts +1 -1
  229. package/dist/lib/esm/HTMLElement.mjs +2 -2
  230. package/dist/lib/esm/Library.d.mts +3 -3
  231. package/dist/lib/esm/Library.mjs +3 -3
  232. package/dist/lib/esm/ObjectUtils.d.mts +1 -1
  233. package/dist/lib/esm/ObjectUtils.mjs +2 -2
  234. package/dist/lib/esm/Path.d.mts +2 -2
  235. package/dist/lib/esm/Path.mjs +2 -2
  236. package/dist/lib/esm/RegExp.d.mts +3 -3
  237. package/dist/lib/esm/RegExp.mjs +2 -2
  238. package/dist/lib/esm/ScriptUtils/CliUtils.d.mts +1 -1
  239. package/dist/lib/esm/ScriptUtils/CliUtils.mjs +3 -3
  240. package/dist/lib/esm/ScriptUtils/CodeGenerator.mjs +1 -1
  241. package/dist/lib/esm/ScriptUtils/ESLint/ESLint.mjs +1 -1
  242. package/dist/lib/esm/ScriptUtils/ESLint/eslint.config.d.mts +1 -1
  243. package/dist/lib/esm/ScriptUtils/ESLint/eslint.config.mjs +2 -2
  244. package/dist/lib/esm/ScriptUtils/ESLint/index.mjs +1 -1
  245. package/dist/lib/esm/ScriptUtils/Exec.d.mts +9 -9
  246. package/dist/lib/esm/ScriptUtils/Exec.mjs +2 -2
  247. package/dist/lib/esm/ScriptUtils/Fs.mjs +1 -1
  248. package/dist/lib/esm/ScriptUtils/JSON.d.mts +1 -1
  249. package/dist/lib/esm/ScriptUtils/JSON.mjs +2 -2
  250. package/dist/lib/esm/ScriptUtils/NodeModules.mjs +1 -1
  251. package/dist/lib/esm/ScriptUtils/Npm.d.mts +5 -5
  252. package/dist/lib/esm/ScriptUtils/Npm.mjs +2 -2
  253. package/dist/lib/esm/ScriptUtils/NpmPublish.mjs +1 -1
  254. package/dist/lib/esm/ScriptUtils/NpmRun.mjs +1 -1
  255. package/dist/lib/esm/ScriptUtils/ObsidianDevUtilsRepoPaths.d.mts +1 -1
  256. package/dist/lib/esm/ScriptUtils/ObsidianDevUtilsRepoPaths.mjs +2 -2
  257. package/dist/lib/esm/ScriptUtils/Root.mjs +1 -1
  258. package/dist/lib/esm/ScriptUtils/build.mjs +1 -1
  259. package/dist/lib/esm/ScriptUtils/cli.mjs +2 -2
  260. package/dist/lib/esm/ScriptUtils/esbuild/Dependency.mjs +1 -1
  261. package/dist/lib/esm/ScriptUtils/esbuild/ObsidianPluginBuilder.d.mts +4 -4
  262. package/dist/lib/esm/ScriptUtils/esbuild/ObsidianPluginBuilder.mjs +2 -2
  263. package/dist/lib/esm/ScriptUtils/esbuild/changeExtensionPlugin.mjs +1 -1
  264. package/dist/lib/esm/ScriptUtils/esbuild/copyToObsidianPluginsFolderPlugin.mjs +1 -1
  265. package/dist/lib/esm/ScriptUtils/esbuild/customEsbuildOptionsPlugin.mjs +1 -1
  266. package/dist/lib/esm/ScriptUtils/esbuild/fixEsmPlugin.mjs +1 -1
  267. package/dist/lib/esm/ScriptUtils/esbuild/fixSourceMapsPlugin.d.mts +1 -1
  268. package/dist/lib/esm/ScriptUtils/esbuild/fixSourceMapsPlugin.mjs +2 -2
  269. package/dist/lib/esm/ScriptUtils/esbuild/index.mjs +1 -1
  270. package/dist/lib/esm/ScriptUtils/esbuild/preprocessPlugin.d.mts +0 -3
  271. package/dist/lib/esm/ScriptUtils/esbuild/preprocessPlugin.mjs +12 -6
  272. package/dist/lib/esm/ScriptUtils/esbuild/renameCssPlugin.mjs +1 -1
  273. package/dist/lib/esm/ScriptUtils/esbuild/svelteWrapperPlugin.mjs +1 -1
  274. package/dist/lib/esm/ScriptUtils/format.mjs +1 -1
  275. package/dist/lib/esm/ScriptUtils/index.mjs +1 -1
  276. package/dist/lib/esm/ScriptUtils/spellcheck.d.mts +1 -1
  277. package/dist/lib/esm/ScriptUtils/spellcheck.mjs +2 -2
  278. package/dist/lib/esm/ScriptUtils/version.d.mts +3 -8
  279. package/dist/lib/esm/ScriptUtils/version.mjs +2 -2
  280. package/dist/lib/esm/String.d.mts +5 -5
  281. package/dist/lib/esm/String.mjs +2 -2
  282. package/dist/lib/esm/Transformers/DateTransformer.d.mts +1 -1
  283. package/dist/lib/esm/Transformers/DateTransformer.mjs +3 -3
  284. package/dist/lib/esm/Transformers/DurationTransformer.d.mts +2 -2
  285. package/dist/lib/esm/Transformers/DurationTransformer.mjs +4 -4
  286. package/dist/lib/esm/Transformers/GroupTransformer.d.mts +2 -2
  287. package/dist/lib/esm/Transformers/GroupTransformer.mjs +4 -4
  288. package/dist/lib/esm/Transformers/MapTransformer.d.mts +1 -1
  289. package/dist/lib/esm/Transformers/MapTransformer.mjs +3 -3
  290. package/dist/lib/esm/Transformers/SetTransformer.d.mts +1 -1
  291. package/dist/lib/esm/Transformers/SetTransformer.mjs +3 -3
  292. package/dist/lib/esm/Transformers/SkipPrivatePropertyTransformer.d.mts +1 -1
  293. package/dist/lib/esm/Transformers/SkipPrivatePropertyTransformer.mjs +3 -3
  294. package/dist/lib/esm/Transformers/Transformer.d.mts +1 -1
  295. package/dist/lib/esm/Transformers/Transformer.mjs +2 -2
  296. package/dist/lib/esm/Transformers/TwoWayMapTransformer.mjs +1 -1
  297. package/dist/lib/esm/Transformers/TypedTransformer.mjs +1 -1
  298. package/dist/lib/esm/Transformers/index.mjs +1 -1
  299. package/dist/lib/esm/TwoWayMap.mjs +1 -1
  300. package/dist/lib/esm/Type.d.mts +1 -1
  301. package/dist/lib/esm/Type.mjs +2 -2
  302. package/dist/lib/esm/ValueProvider.d.mts +1 -1
  303. package/dist/lib/esm/ValueProvider.mjs +2 -2
  304. package/dist/lib/esm/codemirror/StateFieldSpec.d.mts +2 -2
  305. package/dist/lib/esm/codemirror/StateFieldSpec.mjs +1 -1
  306. package/dist/lib/esm/codemirror/index.mjs +1 -1
  307. package/dist/lib/esm/index.mjs +1 -1
  308. package/dist/lib/esm/obsidian/App.mjs +1 -1
  309. package/dist/lib/esm/obsidian/AttachmentPath.mjs +1 -1
  310. package/dist/lib/esm/obsidian/Backlink.d.mts +7 -7
  311. package/dist/lib/esm/obsidian/Backlink.mjs +2 -2
  312. package/dist/lib/esm/obsidian/Callout.d.mts +6 -6
  313. package/dist/lib/esm/obsidian/Callout.mjs +2 -2
  314. package/dist/lib/esm/obsidian/CodeBlockMarkdownInformation.d.mts +9 -9
  315. package/dist/lib/esm/obsidian/CodeBlockMarkdownInformation.mjs +1 -1
  316. package/dist/lib/esm/obsidian/Components/AsyncEventsComponent.mjs +1 -1
  317. package/dist/lib/esm/obsidian/Components/SettingComponents/CheckboxComponent.d.mts +2 -2
  318. package/dist/lib/esm/obsidian/Components/SettingComponents/CheckboxComponent.mjs +4 -4
  319. package/dist/lib/esm/obsidian/Components/SettingComponents/CodeHighlighterComponent.d.mts +1 -1
  320. package/dist/lib/esm/obsidian/Components/SettingComponents/CodeHighlighterComponent.mjs +3 -3
  321. package/dist/lib/esm/obsidian/Components/SettingComponents/DateComponent.mjs +1 -1
  322. package/dist/lib/esm/obsidian/Components/SettingComponents/DateTimeComponent.mjs +1 -1
  323. package/dist/lib/esm/obsidian/Components/SettingComponents/EmailComponent.mjs +1 -1
  324. package/dist/lib/esm/obsidian/Components/SettingComponents/FileComponent.mjs +1 -1
  325. package/dist/lib/esm/obsidian/Components/SettingComponents/MonthComponent.d.mts +2 -2
  326. package/dist/lib/esm/obsidian/Components/SettingComponents/MonthComponent.mjs +2 -2
  327. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleDropdownComponent.d.mts +2 -2
  328. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleDropdownComponent.mjs +4 -4
  329. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleEmailComponent.mjs +1 -1
  330. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleFileComponent.mjs +1 -1
  331. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleTextComponent.d.mts +1 -1
  332. package/dist/lib/esm/obsidian/Components/SettingComponents/MultipleTextComponent.mjs +3 -3
  333. package/dist/lib/esm/obsidian/Components/SettingComponents/NumberComponent.mjs +1 -1
  334. package/dist/lib/esm/obsidian/Components/SettingComponents/PasswordComponent.mjs +1 -1
  335. package/dist/lib/esm/obsidian/Components/SettingComponents/SettingComponentWrapper.mjs +1 -1
  336. package/dist/lib/esm/obsidian/Components/SettingComponents/TelephoneComponent.mjs +1 -1
  337. package/dist/lib/esm/obsidian/Components/SettingComponents/TextBasedComponent.mjs +1 -1
  338. package/dist/lib/esm/obsidian/Components/SettingComponents/TimeComponent.mjs +1 -1
  339. package/dist/lib/esm/obsidian/Components/SettingComponents/TriStateCheckboxComponent.d.mts +2 -2
  340. package/dist/lib/esm/obsidian/Components/SettingComponents/TriStateCheckboxComponent.mjs +4 -4
  341. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedDropdownComponent.d.mts +2 -2
  342. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedDropdownComponent.mjs +4 -4
  343. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedMultipleDropdownComponent.d.mts +2 -2
  344. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedMultipleDropdownComponent.mjs +4 -4
  345. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedRangeTextComponent.mjs +1 -1
  346. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedTextComponent.d.mts +2 -2
  347. package/dist/lib/esm/obsidian/Components/SettingComponents/TypedTextComponent.mjs +4 -4
  348. package/dist/lib/esm/obsidian/Components/SettingComponents/UrlComponent.mjs +1 -1
  349. package/dist/lib/esm/obsidian/Components/SettingComponents/ValidatorComponent.d.mts +1 -1
  350. package/dist/lib/esm/obsidian/Components/SettingComponents/ValidatorComponent.mjs +2 -2
  351. package/dist/lib/esm/obsidian/Components/SettingComponents/ValueComponentWithChangeTracking.mjs +1 -1
  352. package/dist/lib/esm/obsidian/Components/SettingComponents/WeekComponent.d.mts +3 -3
  353. package/dist/lib/esm/obsidian/Components/SettingComponents/WeekComponent.mjs +2 -2
  354. package/dist/lib/esm/obsidian/Components/SettingComponents/index.mjs +1 -1
  355. package/dist/lib/esm/obsidian/Components/index.mjs +1 -1
  356. package/dist/lib/esm/obsidian/Dataview.d.mts +20 -20
  357. package/dist/lib/esm/obsidian/Dataview.mjs +3 -4
  358. package/dist/lib/esm/obsidian/DataviewLink.mjs +1 -1
  359. package/dist/lib/esm/obsidian/FileChange.d.mts +4 -4
  360. package/dist/lib/esm/obsidian/FileChange.mjs +2 -2
  361. package/dist/lib/esm/obsidian/FileManager.mjs +1 -1
  362. package/dist/lib/esm/obsidian/FileSystem.d.mts +6 -6
  363. package/dist/lib/esm/obsidian/FileSystem.mjs +2 -2
  364. package/dist/lib/esm/obsidian/Frontmatter.d.mts +7 -7
  365. package/dist/lib/esm/obsidian/Frontmatter.mjs +2 -2
  366. package/dist/lib/esm/obsidian/FrontmatterLinkCacheWithOffsets.d.mts +2 -2
  367. package/dist/lib/esm/obsidian/FrontmatterLinkCacheWithOffsets.mjs +2 -2
  368. package/dist/lib/esm/obsidian/Link.d.mts +50 -49
  369. package/dist/lib/esm/obsidian/Link.mjs +2 -2
  370. package/dist/lib/esm/obsidian/Logger.mjs +2 -2
  371. package/dist/lib/esm/obsidian/Loop.d.mts +13 -7
  372. package/dist/lib/esm/obsidian/Loop.mjs +2 -2
  373. package/dist/lib/esm/obsidian/Markdown.mjs +1 -1
  374. package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.d.mts +30 -17
  375. package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.mjs +24 -10
  376. package/dist/lib/esm/obsidian/MarkdownView.mjs +1 -1
  377. package/dist/lib/esm/obsidian/MetadataCache.mjs +8 -20
  378. package/dist/lib/esm/obsidian/Modals/Alert.d.mts +6 -6
  379. package/dist/lib/esm/obsidian/Modals/Alert.mjs +2 -2
  380. package/dist/lib/esm/obsidian/Modals/Confirm.d.mts +7 -7
  381. package/dist/lib/esm/obsidian/Modals/Confirm.mjs +2 -2
  382. package/dist/lib/esm/obsidian/Modals/ModalBase.d.mts +3 -3
  383. package/dist/lib/esm/obsidian/Modals/ModalBase.mjs +2 -2
  384. package/dist/lib/esm/obsidian/Modals/Prompt.d.mts +7 -7
  385. package/dist/lib/esm/obsidian/Modals/Prompt.mjs +2 -2
  386. package/dist/lib/esm/obsidian/Modals/SelectItem.d.mts +7 -7
  387. package/dist/lib/esm/obsidian/Modals/SelectItem.mjs +2 -2
  388. package/dist/lib/esm/obsidian/Modals/index.mjs +1 -1
  389. package/dist/lib/esm/obsidian/MonkeyAround.d.mts +3 -3
  390. package/dist/lib/esm/obsidian/MonkeyAround.mjs +2 -2
  391. package/dist/lib/esm/obsidian/ObsidianSettings.mjs +1 -1
  392. package/dist/lib/esm/obsidian/Pdf.mjs +1 -1
  393. package/dist/lib/esm/obsidian/Plugin/ObsidianPluginRepoPaths.mjs +1 -1
  394. package/dist/lib/esm/obsidian/Plugin/Plugin.mjs +1 -1
  395. package/dist/lib/esm/obsidian/Plugin/PluginBase.mjs +1 -1
  396. package/dist/lib/esm/obsidian/Plugin/PluginContext.mjs +1 -1
  397. package/dist/lib/esm/obsidian/Plugin/PluginId.d.mts +1 -1
  398. package/dist/lib/esm/obsidian/Plugin/PluginId.mjs +2 -2
  399. package/dist/lib/esm/obsidian/Plugin/PluginSettingsManagerBase.mjs +1 -1
  400. package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.d.mts +6 -6
  401. package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.mjs +3 -3
  402. package/dist/lib/esm/obsidian/Plugin/PluginSettingsWrapper.d.mts +4 -4
  403. package/dist/lib/esm/obsidian/Plugin/PluginSettingsWrapper.mjs +1 -1
  404. package/dist/lib/esm/obsidian/Plugin/PluginTypesBase.d.mts +6 -6
  405. package/dist/lib/esm/obsidian/Plugin/PluginTypesBase.mjs +1 -1
  406. package/dist/lib/esm/obsidian/Plugin/index.mjs +1 -1
  407. package/dist/lib/esm/obsidian/Queue.mjs +1 -1
  408. package/dist/lib/esm/obsidian/React/AppContext.d.mts +2 -2
  409. package/dist/lib/esm/obsidian/React/AppContext.mjs +2 -2
  410. package/dist/lib/esm/obsidian/React/index.mjs +1 -1
  411. package/dist/lib/esm/obsidian/Reference.d.mts +8 -8
  412. package/dist/lib/esm/obsidian/Reference.mjs +2 -2
  413. package/dist/lib/esm/obsidian/RenameDeleteHandler.d.mts +2 -2
  414. package/dist/lib/esm/obsidian/RenameDeleteHandler.mjs +2 -2
  415. package/dist/lib/esm/obsidian/ResourceUrl.mjs +1 -1
  416. package/dist/lib/esm/obsidian/SettingEx.mjs +1 -1
  417. package/dist/lib/esm/obsidian/Validation.d.mts +1 -1
  418. package/dist/lib/esm/obsidian/Validation.mjs +2 -2
  419. package/dist/lib/esm/obsidian/Vault.d.mts +9 -1
  420. package/dist/lib/esm/obsidian/Vault.mjs +21 -4
  421. package/dist/lib/esm/obsidian/VaultEx.mjs +1 -1
  422. package/dist/lib/esm/obsidian/index.mjs +1 -1
  423. package/dist/lib/esm/url.mjs +1 -1
  424. package/package.json +1 -1
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * This module provides utilities for handling and updating links within Obsidian vaults. It includes
5
5
  * functions to split paths, update links in files, and generate markdown links with various options.
6
- * The functions integrate with Obsidian's API to ensure that links are managed correctly within the vault.
7
6
  */
8
7
  import type { App, CachedMetadata, Reference, TFile } from 'obsidian';
9
8
  import type { Promisable } from 'type-fest';
@@ -11,23 +10,23 @@ import type { MaybeReturn } from '../Type.cjs';
11
10
  import type { PathOrFile } from './FileSystem.cjs';
12
11
  import type { ProcessOptions } from './Vault.cjs';
13
12
  /**
14
- * Options for converting a link.
13
+ * Options for {@link convertLink}.
15
14
  */
16
15
  export interface ConvertLinkOptions {
17
16
  /**
18
- * The Obsidian app instance.
17
+ * An Obsidian app instance.
19
18
  */
20
19
  app: App;
21
20
  /**
22
- * The reference for the link.
21
+ * A reference for the link.
23
22
  */
24
23
  link: Reference;
25
24
  /**
26
- * The source file containing the link.
25
+ * A source file containing the link.
27
26
  */
28
27
  newSourcePathOrFile: PathOrFile;
29
28
  /**
30
- * The old path of the link.
29
+ * An old path of the link.
31
30
  */
32
31
  oldSourcePathOrFile?: PathOrFile;
33
32
  /**
@@ -40,24 +39,26 @@ export interface ConvertLinkOptions {
40
39
  shouldUpdateFileNameAlias?: boolean;
41
40
  }
42
41
  /**
43
- * Wrapper for default options for generating markdown links.
42
+ * Wrapper for default options for {@link GenerateMarkdownLinkOptions}.
44
43
  */
45
44
  export interface GenerateMarkdownLinkDefaultOptionsWrapper {
46
45
  /**
47
- * The default options for generating markdown links.
46
+ * A default options for generating markdown links.
47
+ *
48
+ * @returns A default options for generating markdown links.
48
49
  */
49
- defaultOptionsFn: () => Partial<GenerateMarkdownLinkOptions>;
50
+ defaultOptionsFn(): Partial<GenerateMarkdownLinkOptions>;
50
51
  }
51
52
  /**
52
- * Options for generating a markdown link.
53
+ * Options for {@link generateMarkdownLink}.
53
54
  */
54
55
  export interface GenerateMarkdownLinkOptions {
55
56
  /**
56
- * The alias for the link.
57
+ * An alias for the link.
57
58
  */
58
59
  alias?: string;
59
60
  /**
60
- * The Obsidian app instance.
61
+ * An Obsidian app instance.
61
62
  */
62
63
  app: App;
63
64
  /**
@@ -77,7 +78,7 @@ export interface GenerateMarkdownLinkOptions {
77
78
  */
78
79
  isWikilink?: boolean;
79
80
  /**
80
- * The original link text. If provided, it will be used to infer the values of `isEmbed`, `isWikilink`, `useLeadingDot`, and `useAngleBrackets`.
81
+ * An original link text. If provided, it will be used to infer the values of `isEmbed`, `isWikilink`, `useLeadingDot`, and `useAngleBrackets`.
81
82
  * These inferred values will be overridden by corresponding settings if specified.
82
83
  */
83
84
  originalLink?: string;
@@ -98,32 +99,32 @@ export interface GenerateMarkdownLinkOptions {
98
99
  */
99
100
  shouldUseLeadingDot?: boolean;
100
101
  /**
101
- * The source path of the link.
102
+ * A source path of the link.
102
103
  */
103
104
  sourcePathOrFile: PathOrFile;
104
105
  /**
105
- * The subpath of the link.
106
+ * A subpath of the link.
106
107
  */
107
108
  subpath?: string;
108
109
  /**
109
- * The target path or file.
110
+ * A target path or file.
110
111
  */
111
112
  targetPathOrFile: PathOrFile;
112
113
  }
113
114
  /**
114
- * The result of parsing a link.
115
+ * A result of parsing a link.
115
116
  */
116
117
  export interface ParseLinkResult {
117
118
  /**
118
- * The alias of the link.
119
+ * An alias of the link.
119
120
  */
120
121
  alias?: string;
121
122
  /**
122
- * The encoded URL of the link.
123
+ * An encoded URL of the link.
123
124
  */
124
125
  encodedUrl?: string;
125
126
  /**
126
- * The end offset of the link in the original text.
127
+ * An end offset of the link in the original text.
127
128
  */
128
129
  endOffset: number;
129
130
  /**
@@ -143,32 +144,32 @@ export interface ParseLinkResult {
143
144
  */
144
145
  isWikilink: boolean;
145
146
  /**
146
- * The raw link text.
147
+ * A raw link text.
147
148
  */
148
149
  raw: string;
149
150
  /**
150
- * The start offset of the link in the original text.
151
+ * A start offset of the link in the original text.
151
152
  */
152
153
  startOffset: number;
153
154
  /**
154
- * The title of the link.
155
+ * A title of the link.
155
156
  */
156
157
  title?: string;
157
158
  /**
158
- * The URL of the link.
159
+ * An URL of the link.
159
160
  */
160
161
  url: string;
161
162
  }
162
163
  /**
163
- * Options for determining if the alias of a link should be reset.
164
+ * Options for {@link shouldResetAlias}.
164
165
  */
165
166
  export interface ShouldResetAliasOptions {
166
167
  /**
167
- * The Obsidian app instance.
168
+ * An Obsidian app instance.
168
169
  */
169
170
  app: App;
170
171
  /**
171
- * The display text of the link.
172
+ * A display text of the link.
172
173
  */
173
174
  displayText: string | undefined;
174
175
  /**
@@ -176,19 +177,19 @@ export interface ShouldResetAliasOptions {
176
177
  */
177
178
  isWikilink?: boolean;
178
179
  /**
179
- * The source path of the link.
180
+ * A source path of the link.
180
181
  */
181
182
  newSourcePathOrFile: PathOrFile;
182
183
  /**
183
- * The old source file containing the link.
184
+ * An old source file containing the link.
184
185
  */
185
186
  oldSourcePathOrFile?: PathOrFile;
186
187
  /**
187
- * The old target path of the link.
188
+ * An old target path of the link.
188
189
  */
189
190
  oldTargetPath: PathOrFile;
190
191
  /**
191
- * The target path or file.
192
+ * A target path or file.
192
193
  */
193
194
  targetPathOrFile: PathOrFile;
194
195
  }
@@ -197,40 +198,40 @@ export interface ShouldResetAliasOptions {
197
198
  */
198
199
  export interface SplitSubpathResult {
199
200
  /**
200
- * The link path.
201
+ * A link path.
201
202
  */
202
203
  linkPath: string;
203
204
  /**
204
- * The subpath.
205
+ * A subpath.
205
206
  */
206
207
  subpath: string;
207
208
  }
208
209
  /**
209
- * Options for updating a link.
210
+ * Options for {@link updateLink}.
210
211
  */
211
212
  export interface UpdateLinkOptions {
212
213
  /**
213
- * The Obsidian app instance.
214
+ * An Obsidian app instance.
214
215
  */
215
216
  app: App;
216
217
  /**
217
- * The reference for the link.
218
+ * A reference for the link.
218
219
  */
219
220
  link: Reference;
220
221
  /**
221
- * The source file containing the link.
222
+ * A source file containing the link.
222
223
  */
223
224
  newSourcePathOrFile: PathOrFile;
224
225
  /**
225
- * The file associated with the link.
226
+ * A file associated with the link.
226
227
  */
227
228
  newTargetPathOrFile: PathOrFile;
228
229
  /**
229
- * The old source file containing the link.
230
+ * An old source file containing the link.
230
231
  */
231
232
  oldSourcePathOrFile?: PathOrFile;
232
233
  /**
233
- * The old path of the file.
234
+ * An old path of the file.
234
235
  */
235
236
  oldTargetPathOrFile?: PathOrFile;
236
237
  /**
@@ -243,19 +244,19 @@ export interface UpdateLinkOptions {
243
244
  shouldUpdateFileNameAlias?: boolean;
244
245
  }
245
246
  /**
246
- * Options for updating links in a file.
247
+ * Options for {@link updateLinksInFile}.
247
248
  */
248
249
  export interface UpdateLinksInFileOptions extends ProcessOptions {
249
250
  /**
250
- * The obsidian app instance.
251
+ * An Obsidian app instance.
251
252
  */
252
253
  app: App;
253
254
  /**
254
- * The file to update the links in.
255
+ * A file to update the links in.
255
256
  */
256
257
  newSourcePathOrFile: PathOrFile;
257
258
  /**
258
- * The old path of the file.
259
+ * An old path of the file.
259
260
  */
260
261
  oldSourcePathOrFile?: PathOrFile;
261
262
  /**
@@ -272,23 +273,23 @@ export interface UpdateLinksInFileOptions extends ProcessOptions {
272
273
  shouldUpdateFileNameAlias?: boolean;
273
274
  }
274
275
  /**
275
- * The options for updating the links in a content string.
276
+ * Options for {@link updateLinksInContent}.
276
277
  */
277
278
  interface UpdateLinksInContentOptions {
278
279
  /**
279
- * The Obsidian application instance.
280
+ * An Obsidian app instance.
280
281
  */
281
282
  app: App;
282
283
  /**
283
- * The content to update the links in.
284
+ * A content to update the links in.
284
285
  */
285
286
  content: string;
286
287
  /**
287
- * The new source path or file.
288
+ * A new source path or file.
288
289
  */
289
290
  newSourcePathOrFile: PathOrFile;
290
291
  /**
291
- * The old source path or file.
292
+ * An old source path or file.
292
293
  */
293
294
  oldSourcePathOrFile?: PathOrFile;
294
295
  /**
@@ -3,7 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault(){return extractDefault},process(){const browserProcess={browser:true,cwd(){return"/"},env:{},platform:"android"};return browserProcess}};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
7
 
8
8
  "use strict";
9
9
  var __defProp = Object.defineProperty;
@@ -75,4 +75,4 @@ async function invokeAsyncAndLog(title, fn, abortSignal, stackTrace) {
75
75
  0 && (module.exports = {
76
76
  invokeAsyncAndLog
77
77
  });
78
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgbG9nZ2luZyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQgeyBnZXRTdGFja1RyYWNlIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuLyoqXG4gKiBJbnZva2VzIGEgZnVuY3Rpb24gYW5kIGxvZ3MgdGhlIHN0YXJ0LCBlbmQsIGFuZCBkdXJhdGlvbiBvZiB0aGUgaW52b2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIGxvZy5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlQXN5bmNBbmRMb2coXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGZuOiAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gIHN0YWNrVHJhY2U/OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBjb25zdCBpbnZva2VBc3luY0FuZExvZ0RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0xvZ2dlcjppbnZva2VBc3luY0FuZExvZycpO1xuICBjb25zdCB0aW1lc3RhbXBTdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBwcmludFdpdGhTdGFja1RyYWNlKGludm9rZUFzeW5jQW5kTG9nRGVidWdnZXIsIHN0YWNrVHJhY2UsIGAke3RpdGxlfTpzdGFydGAsIHtcbiAgICBmbixcbiAgICB0aW1lc3RhbXBTdGFydFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmbihhYm9ydFNpZ25hbCk7XG4gICAgY29uc3QgdGltZXN0YW1wRW5kID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSB0aW1lc3RhbXBFbmQgLSB0aW1lc3RhbXBTdGFydDtcbiAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgcHJpbnRXaXRoU3RhY2tUcmFjZShpbnZva2VBc3luY0FuZExvZ0RlYnVnZ2VyLCBzdGFja1RyYWNlLCBgJHt0aXRsZX06YWJvcnRlZGAsIHtcbiAgICAgICAgYWJvcnRSZWFzb246IGFib3J0U2lnbmFsLnJlYXNvbiBhcyB1bmtub3duLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgZm4sXG4gICAgICAgIHRpbWVzdGFtcEVuZCxcbiAgICAgICAgdGltZXN0YW1wU3RhcnRcbiAgICAgIH0pO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICB9XG4gICAgcHJpbnRXaXRoU3RhY2tUcmFjZShpbnZva2VBc3luY0FuZExvZ0RlYnVnZ2VyLCBzdGFja1RyYWNlLCBgJHt0aXRsZX06ZW5kYCwge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBmbixcbiAgICAgIHRpbWVzdGFtcEVuZCxcbiAgICAgIHRpbWVzdGFtcFN0YXJ0XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgdGltZXN0YW1wRW5kID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgcHJpbnRXaXRoU3RhY2tUcmFjZShpbnZva2VBc3luY0FuZExvZ0RlYnVnZ2VyLCBzdGFja1RyYWNlLCBgJHt0aXRsZX06ZXJyb3JgLCB7XG4gICAgICBkdXJhdGlvbjogdGltZXN0YW1wRW5kIC0gdGltZXN0YW1wU3RhcnQsXG4gICAgICBlcnJvcixcbiAgICAgIGZuLFxuICAgICAgdGltZXN0YW1wRW5kLFxuICAgICAgdGltZXN0YW1wU3RhcnRcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxtQkFHTztBQUNQLG1CQUE4QjtBQVM5QixlQUFzQixrQkFDcEIsT0FDQSxJQUNBLGFBQ0EsWUFDZTtBQUNmLGNBQVksZUFBZTtBQUMzQixRQUFNLGdDQUE0Qiw2QkFBZSwwQkFBMEI7QUFDM0UsUUFBTSxpQkFBaUIsWUFBWSxJQUFJO0FBQ3ZDLHFCQUFlLDRCQUFjLENBQUM7QUFDOUIsd0NBQW9CLDJCQUEyQixZQUFZLEdBQUcsS0FBSyxVQUFVO0FBQUEsSUFDM0U7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0QsTUFBSTtBQUNGLFVBQU0sR0FBRyxXQUFXO0FBQ3BCLFVBQU0sZUFBZSxZQUFZLElBQUk7QUFDckMsVUFBTSxXQUFXLGVBQWU7QUFDaEMsUUFBSSxZQUFZLFNBQVM7QUFDdkIsNENBQW9CLDJCQUEyQixZQUFZLEdBQUcsS0FBSyxZQUFZO0FBQUEsUUFDN0UsYUFBYSxZQUFZO0FBQUEsUUFDekI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxrQkFBWSxlQUFlO0FBQUEsSUFDN0I7QUFDQSwwQ0FBb0IsMkJBQTJCLFlBQVksR0FBRyxLQUFLLFFBQVE7QUFBQSxNQUN6RTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsU0FBUyxPQUFPO0FBQ2QsVUFBTSxlQUFlLFlBQVksSUFBSTtBQUNyQywwQ0FBb0IsMkJBQTJCLFlBQVksR0FBRyxLQUFLLFVBQVU7QUFBQSxNQUMzRSxVQUFVLGVBQWU7QUFBQSxNQUN6QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUNELFVBQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
78
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgbG9nZ2luZyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQgeyBnZXRTdGFja1RyYWNlIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEludm9rZXMgYSBmdW5jdGlvbiBhbmQgbG9ncyB0aGUgc3RhcnQsIGVuZCwgYW5kIGR1cmF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgbG9nLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZva2VBc3luY0FuZExvZyhcbiAgdGl0bGU6IHN0cmluZyxcbiAgZm46IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8dm9pZD4sXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgc3RhY2tUcmFjZT86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGNvbnN0IGludm9rZUFzeW5jQW5kTG9nRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignTG9nZ2VyOmludm9rZUFzeW5jQW5kTG9nJyk7XG4gIGNvbnN0IHRpbWVzdGFtcFN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHByaW50V2l0aFN0YWNrVHJhY2UoaW52b2tlQXN5bmNBbmRMb2dEZWJ1Z2dlciwgc3RhY2tUcmFjZSwgYCR7dGl0bGV9OnN0YXJ0YCwge1xuICAgIGZuLFxuICAgIHRpbWVzdGFtcFN0YXJ0XG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IGZuKGFib3J0U2lnbmFsKTtcbiAgICBjb25zdCB0aW1lc3RhbXBFbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWVzdGFtcEVuZCAtIHRpbWVzdGFtcFN0YXJ0O1xuICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBwcmludFdpdGhTdGFja1RyYWNlKGludm9rZUFzeW5jQW5kTG9nRGVidWdnZXIsIHN0YWNrVHJhY2UsIGAke3RpdGxlfTphYm9ydGVkYCwge1xuICAgICAgICBhYm9ydFJlYXNvbjogYWJvcnRTaWduYWwucmVhc29uIGFzIHVua25vd24sXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBmbixcbiAgICAgICAgdGltZXN0YW1wRW5kLFxuICAgICAgICB0aW1lc3RhbXBTdGFydFxuICAgICAgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIH1cbiAgICBwcmludFdpdGhTdGFja1RyYWNlKGludm9rZUFzeW5jQW5kTG9nRGVidWdnZXIsIHN0YWNrVHJhY2UsIGAke3RpdGxlfTplbmRgLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGZuLFxuICAgICAgdGltZXN0YW1wRW5kLFxuICAgICAgdGltZXN0YW1wU3RhcnRcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCB0aW1lc3RhbXBFbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBwcmludFdpdGhTdGFja1RyYWNlKGludm9rZUFzeW5jQW5kTG9nRGVidWdnZXIsIHN0YWNrVHJhY2UsIGAke3RpdGxlfTplcnJvcmAsIHtcbiAgICAgIGR1cmF0aW9uOiB0aW1lc3RhbXBFbmQgLSB0aW1lc3RhbXBTdGFydCxcbiAgICAgIGVycm9yLFxuICAgICAgZm4sXG4gICAgICB0aW1lc3RhbXBFbmQsXG4gICAgICB0aW1lc3RhbXBTdGFydFxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLG1CQUdPO0FBQ1AsbUJBQThCO0FBVTlCLGVBQXNCLGtCQUNwQixPQUNBLElBQ0EsYUFDQSxZQUNlO0FBQ2YsY0FBWSxlQUFlO0FBQzNCLFFBQU0sZ0NBQTRCLDZCQUFlLDBCQUEwQjtBQUMzRSxRQUFNLGlCQUFpQixZQUFZLElBQUk7QUFDdkMscUJBQWUsNEJBQWMsQ0FBQztBQUM5Qix3Q0FBb0IsMkJBQTJCLFlBQVksR0FBRyxLQUFLLFVBQVU7QUFBQSxJQUMzRTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDRCxNQUFJO0FBQ0YsVUFBTSxHQUFHLFdBQVc7QUFDcEIsVUFBTSxlQUFlLFlBQVksSUFBSTtBQUNyQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxRQUFJLFlBQVksU0FBUztBQUN2Qiw0Q0FBb0IsMkJBQTJCLFlBQVksR0FBRyxLQUFLLFlBQVk7QUFBQSxRQUM3RSxhQUFhLFlBQVk7QUFBQSxRQUN6QjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUNELGtCQUFZLGVBQWU7QUFBQSxJQUM3QjtBQUNBLDBDQUFvQiwyQkFBMkIsWUFBWSxHQUFHLEtBQUssUUFBUTtBQUFBLE1BQ3pFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxTQUFTLE9BQU87QUFDZCxVQUFNLGVBQWUsWUFBWSxJQUFJO0FBQ3JDLDBDQUFvQiwyQkFBMkIsWUFBWSxHQUFHLEtBQUssVUFBVTtBQUFBLE1BQzNFLFVBQVUsZUFBZTtBQUFBLE1BQ3pCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQ0QsVUFBTTtBQUFBLEVBQ1I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -3,7 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault(){return extractDefault},process(){const browserProcess={browser:true,cwd(){return"/"},env:{},platform:"android"};return browserProcess}};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
7
 
8
8
  "use strict";
9
9
  var __defProp = Object.defineProperty;
@@ -106,4 +106,4 @@ async function loop(options) {
106
106
  0 && (module.exports = {
107
107
  loop
108
108
  });
109
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi4vQWJvcnRDb250cm9sbGVyLnRzJztcbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsXG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZW1pdEFzeW5jRXJyb3JFdmVudCxcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBsb29wIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb3BPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGFib3J0IHNpZ25hbCB0byBjYW5jZWwgdGhlIGxvb3AuXG4gICAqL1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBub3RpY2UgbWVzc2FnZSBmb3IgZWFjaCBpdGVtLlxuICAgKi9cbiAgYnVpbGROb3RpY2VNZXNzYWdlKGl0ZW06IFQsIGl0ZXJhdGlvblN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGl0ZW1zIHRvIGxvb3Agb3Zlci5cbiAgICovXG4gIGl0ZW1zOiBUW107XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB0aW1lb3V0IGZvciB0aGUgbm90aWNlLlxuICAgKi9cbiAgbm90aWNlTWluVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgZWFjaCBpdGVtLlxuICAgKi9cbiAgcHJvY2Vzc0l0ZW0oaXRlbTogVCk6IFByb21pc2FibGU8dm9pZD47XG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHByb2dyZXNzQmFyVGl0bGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnRpbnVlIHRoZSBsb29wIG9uIGVycm9yLlxuICAgKi9cbiAgc2hvdWxkQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHNob3VsZFNob3dQcm9ncmVzc0Jhcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgdGhyZXNob2xkIGZvciB0aGUgVUkgdXBkYXRlLlxuICAgKi9cbiAgdWlVcGRhdGVUaHJlc2hvbGRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMb29wcyBvdmVyIGEgbGlzdCBvZiBpdGVtcyBhbmQgcHJvY2Vzc2VzIGVhY2ggaXRlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbG9vcC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvb3A8VD4ob3B0aW9uczogTG9vcE9wdGlvbnM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9PUFRJT05TOiBSZXF1aXJlZDxMb29wT3B0aW9uczxUPj4gPSB7XG4gICAgYWJvcnRTaWduYWw6IGFib3J0U2lnbmFsTmV2ZXIoKSxcbiAgICBidWlsZE5vdGljZU1lc3NhZ2UoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1aWxkTm90aWNlTWVzc2FnZSBpcyByZXF1aXJlZCcpO1xuICAgIH0sXG4gICAgaXRlbXM6IFtdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgbm90aWNlTWluVGltZW91dEluTWlsbGlzZWNvbmRzOiAyMDAwLFxuICAgIHByb2Nlc3NJdGVtOiBub29wLFxuICAgIHByb2dyZXNzQmFyVGl0bGU6ICcnLFxuICAgIHNob3VsZENvbnRpbnVlT25FcnJvcjogdHJ1ZSxcbiAgICBzaG91bGRTaG93UHJvZ3Jlc3NCYXI6IHRydWUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICB1aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzOiAxMDBcbiAgfTtcblxuICBjb25zdCBmdWxsT3B0aW9uczogUmVxdWlyZWQ8TG9vcE9wdGlvbnM8VD4+ID0ge1xuICAgIC4uLkRFRkFVTFRfT1BUSU9OUyxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG5cbiAgY29uc3QgaXRlbXMgPSBmdWxsT3B0aW9ucy5pdGVtcztcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgbGV0IG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBub3RpY2UgPSBuZXcgTm90aWNlKCcnLCAwKTtcbiAgfVxuICBjb25zdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZSA9IHNsZWVwKGZ1bGxPcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIGNvbnN0IHByb2dyZXNzQmFyRWwgPSBjcmVhdGVFbCgncHJvZ3Jlc3MnKTtcbiAgcHJvZ3Jlc3NCYXJFbC5tYXggPSBpdGVtcy5sZW5ndGg7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgZnJhZ21lbnQuY3JlYXRlRGl2KHsgdGV4dDogZnVsbE9wdGlvbnMucHJvZ3Jlc3NCYXJUaXRsZSB9KTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChwcm9ncmVzc0JhckVsKTtcbiAgICBub3RpY2U/LnNldE1lc3NhZ2UoZnJhZ21lbnQpO1xuICB9XG5cbiAgbGV0IGxhc3RVSVVwZGF0ZVRpbWVzdGFtcCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBub3RpY2U/LmhpZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlcmF0aW9uQ291bnQrKztcbiAgICBjb25zdCBpdGVyYXRpb25TdHIgPSBgIyAke1N0cmluZyhpdGVyYXRpb25Db3VudCl9IC8gJHtTdHJpbmcoaXRlbXMubGVuZ3RoKX1gO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmdWxsT3B0aW9ucy5idWlsZE5vdGljZU1lc3NhZ2UoaXRlbSwgaXRlcmF0aW9uU3RyKTtcbiAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFNob3dQcm9ncmVzc0Jhcikge1xuICAgICAgbm90aWNlPy5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBnZXRMaWJEZWJ1Z2dlcignTG9vcCcpKG1lc3NhZ2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAtIGxhc3RVSVVwZGF0ZVRpbWVzdGFtcCA+IGZ1bGxPcHRpb25zLnVpVXBkYXRlVGhyZXNob2xkSW5NaWxsaXNlY29uZHMpIHtcbiAgICAgICAgYXdhaXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTtcbiAgICAgICAgbGFzdFVJVXBkYXRlVGltZXN0YW1wID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmdWxsT3B0aW9ucy5wcm9jZXNzSXRlbShpdGVtKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBpdGVtJywgaXRlbSk7XG4gICAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZENvbnRpbnVlT25FcnJvcikge1xuICAgICAgICBub3RpY2U/LmhpZGUoKTtcbiAgICAgICAgdGhyb3cgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcignbG9vcCBmYWlsZWQnLCBzdGFja1RyYWNlLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGVtaXRBc3luY0Vycm9yRXZlbnQobmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcihBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsIHN0YWNrVHJhY2UsIGVycm9yKSk7XG4gICAgfVxuICAgIHByb2dyZXNzQmFyRWwudmFsdWUrKztcbiAgfVxuICBhd2FpdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZTtcbiAgbm90aWNlPy5oaWRlKCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUF1QjtBQUV2Qiw2QkFBaUM7QUFDakMsbUJBQTJDO0FBQzNDLG1CQUErQjtBQUMvQixtQkFLTztBQUNQLHNCQUFxQjtBQWlEckIsZUFBc0IsS0FBUSxTQUF3QztBQUNwRSxRQUFNLGtCQUE0QztBQUFBLElBQ2hELGlCQUFhLHlDQUFpQjtBQUFBLElBQzlCLHFCQUFxQjtBQUNuQixZQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxJQUNsRDtBQUFBLElBQ0EsT0FBTyxDQUFDO0FBQUE7QUFBQSxJQUVSLGdDQUFnQztBQUFBLElBQ2hDLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLHVCQUF1QjtBQUFBLElBQ3ZCLHVCQUF1QjtBQUFBO0FBQUEsSUFFdkIsaUNBQWlDO0FBQUEsRUFDbkM7QUFFQSxRQUFNLGNBQXdDO0FBQUEsSUFDNUMsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0w7QUFFQSxRQUFNLGlCQUFhLDRCQUFjLENBQUM7QUFFbEMsUUFBTSxRQUFRLFlBQVk7QUFDMUIsTUFBSSxpQkFBaUI7QUFDckIsTUFBSSxTQUF3QjtBQUM1QixNQUFJLFlBQVksdUJBQXVCO0FBQ3JDLGFBQVMsSUFBSSx1QkFBTyxJQUFJLENBQUM7QUFBQSxFQUMzQjtBQUNBLFFBQU0sMEJBQTBCLE1BQU0sWUFBWSw4QkFBOEI7QUFDaEYsUUFBTSxnQkFBZ0IsU0FBUyxVQUFVO0FBQ3pDLGdCQUFjLE1BQU0sTUFBTTtBQUMxQixNQUFJLFlBQVksdUJBQXVCO0FBQ3JDLFVBQU0sV0FBVyxlQUFlO0FBQ2hDLGFBQVMsVUFBVSxFQUFFLE1BQU0sWUFBWSxpQkFBaUIsQ0FBQztBQUN6RCxhQUFTLFlBQVksYUFBYTtBQUNsQyxZQUFRLFdBQVcsUUFBUTtBQUFBLEVBQzdCO0FBRUEsTUFBSSx3QkFBd0IsWUFBWSxJQUFJO0FBRTVDLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksWUFBWSxZQUFZLFNBQVM7QUFDbkMsY0FBUSxLQUFLO0FBQ2I7QUFBQSxJQUNGO0FBQ0E7QUFDQSxVQUFNLGVBQWUsS0FBSyxPQUFPLGNBQWMsQ0FBQyxNQUFNLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFDMUUsVUFBTSxVQUFVLFlBQVksbUJBQW1CLE1BQU0sWUFBWTtBQUNqRSxRQUFJLENBQUMsWUFBWSx1QkFBdUI7QUFDdEMsY0FBUSxXQUFXLE9BQU87QUFBQSxJQUM1QjtBQUNBLHFDQUFlLE1BQU0sRUFBRSxPQUFPO0FBRTlCLFFBQUk7QUFDRixVQUFJLFlBQVksSUFBSSxJQUFJLHdCQUF3QixZQUFZLGlDQUFpQztBQUMzRixrQkFBTSx5Q0FBMkI7QUFDakMsZ0NBQXdCLFlBQVksSUFBSTtBQUFBLE1BQzFDO0FBQ0EsWUFBTSxZQUFZLFlBQVksSUFBSTtBQUFBLElBQ3BDLFNBQVMsT0FBTztBQUNkLGNBQVEsTUFBTSx5QkFBeUIsSUFBSTtBQUMzQyxVQUFJLENBQUMsWUFBWSx1QkFBdUI7QUFDdEMsZ0JBQVEsS0FBSztBQUNiLGNBQU0sSUFBSSxtQ0FBc0IsZUFBZSxZQUFZLEtBQUs7QUFBQSxNQUNsRTtBQUVBLDRDQUFvQixJQUFJLG1DQUFzQiwwQ0FBNkIsWUFBWSxLQUFLLENBQUM7QUFBQSxJQUMvRjtBQUNBLGtCQUFjO0FBQUEsRUFDaEI7QUFDQSxRQUFNO0FBQ04sVUFBUSxLQUFLO0FBQ2Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
109
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi4vQWJvcnRDb250cm9sbGVyLnRzJztcbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsXG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZW1pdEFzeW5jRXJyb3JFdmVudCxcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsb29wfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29wT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBhYm9ydCBzaWduYWwgdG8gY2FuY2VsIHRoZSBsb29wLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQnVpbGQgYSBub3RpY2UgbWVzc2FnZSBmb3IgZWFjaCBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBjdXJyZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBpdGVyYXRpb25TdHIgLSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBub3RpY2UuXG4gICAqL1xuICBidWlsZE5vdGljZU1lc3NhZ2UoaXRlbTogVCwgaXRlcmF0aW9uU3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEl0ZW1zIHRvIGxvb3Agb3Zlci5cbiAgICovXG4gIGl0ZW1zOiBUW107XG5cbiAgLyoqXG4gICAqIEEgbWluaW11bSB0aW1lb3V0IGZvciB0aGUgbm90aWNlLlxuICAgKi9cbiAgbm90aWNlTWluVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBUaGUgY3VycmVudCBpdGVtLlxuICAgKi9cbiAgcHJvY2Vzc0l0ZW0oaXRlbTogVCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHByb2dyZXNzQmFyVGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udGludWUgdGhlIGxvb3Agb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRDb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSBwcm9ncmVzcyBiYXIuXG4gICAqL1xuICBzaG91bGRTaG93UHJvZ3Jlc3NCYXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHRocmVzaG9sZCBmb3IgdGhlIFVJIHVwZGF0ZS5cbiAgICovXG4gIHVpVXBkYXRlVGhyZXNob2xkSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTG9vcHMgb3ZlciBhIGxpc3Qgb2YgaXRlbXMgYW5kIHByb2Nlc3NlcyBlYWNoIGl0ZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb29wPFQ+KG9wdGlvbnM6IExvb3BPcHRpb25zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVxdWlyZWQ8TG9vcE9wdGlvbnM8VD4+ID0ge1xuICAgIGFib3J0U2lnbmFsOiBhYm9ydFNpZ25hbE5ldmVyKCksXG4gICAgYnVpbGROb3RpY2VNZXNzYWdlKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZE5vdGljZU1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9LFxuICAgIGl0ZW1zOiBbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIG5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kczogMjAwMCxcbiAgICBwcm9jZXNzSXRlbTogbm9vcCxcbiAgICBwcm9ncmVzc0JhclRpdGxlOiAnJyxcbiAgICBzaG91bGRDb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdWlVcGRhdGVUaHJlc2hvbGRJbk1pbGxpc2Vjb25kczogMTAwXG4gIH07XG5cbiAgY29uc3QgZnVsbE9wdGlvbnM6IFJlcXVpcmVkPExvb3BPcHRpb25zPFQ+PiA9IHtcbiAgICAuLi5ERUZBVUxUX09QVElPTlMsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBnZXRTdGFja1RyYWNlKDEpO1xuXG4gIGNvbnN0IGl0ZW1zID0gZnVsbE9wdGlvbnMuaXRlbXM7XG4gIGxldCBpdGVyYXRpb25Db3VudCA9IDA7XG4gIGxldCBub3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkU2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgbm90aWNlID0gbmV3IE5vdGljZSgnJywgMCk7XG4gIH1cbiAgY29uc3Qgbm90aWNlTWluVGltZW91dFByb21pc2UgPSBzbGVlcChmdWxsT3B0aW9ucy5ub3RpY2VNaW5UaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICBjb25zdCBwcm9ncmVzc0JhckVsID0gY3JlYXRlRWwoJ3Byb2dyZXNzJyk7XG4gIHByb2dyZXNzQmFyRWwubWF4ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkU2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICAgIGZyYWdtZW50LmNyZWF0ZURpdih7IHRleHQ6IGZ1bGxPcHRpb25zLnByb2dyZXNzQmFyVGl0bGUgfSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocHJvZ3Jlc3NCYXJFbCk7XG4gICAgbm90aWNlPy5zZXRNZXNzYWdlKGZyYWdtZW50KTtcbiAgfVxuXG4gIGxldCBsYXN0VUlVcGRhdGVUaW1lc3RhbXAgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgbm90aWNlPy5oaWRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gICAgY29uc3QgaXRlcmF0aW9uU3RyID0gYCMgJHtTdHJpbmcoaXRlcmF0aW9uQ291bnQpfSAvICR7U3RyaW5nKGl0ZW1zLmxlbmd0aCl9YDtcbiAgICBjb25zdCBtZXNzYWdlID0gZnVsbE9wdGlvbnMuYnVpbGROb3RpY2VNZXNzYWdlKGl0ZW0sIGl0ZXJhdGlvblN0cik7XG4gICAgaWYgKCFmdWxsT3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICAgIG5vdGljZT8uc2V0TWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG4gICAgZ2V0TGliRGVidWdnZXIoJ0xvb3AnKShtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBsYXN0VUlVcGRhdGVUaW1lc3RhbXAgPiBmdWxsT3B0aW9ucy51aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGF3YWl0IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jKCk7XG4gICAgICAgIGxhc3RVSVVwZGF0ZVRpbWVzdGFtcCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnVsbE9wdGlvbnMucHJvY2Vzc0l0ZW0oaXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaXRlbScsIGl0ZW0pO1xuICAgICAgaWYgKCFmdWxsT3B0aW9ucy5zaG91bGRDb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgbm90aWNlPy5oaWRlKCk7XG4gICAgICAgIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoJ2xvb3AgZmFpbGVkJywgc3RhY2tUcmFjZSwgZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBlbWl0QXN5bmNFcnJvckV2ZW50KG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFLCBzdGFja1RyYWNlLCBlcnJvcikpO1xuICAgIH1cbiAgICBwcm9ncmVzc0JhckVsLnZhbHVlKys7XG4gIH1cbiAgYXdhaXQgbm90aWNlTWluVGltZW91dFByb21pc2U7XG4gIG5vdGljZT8uaGlkZSgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxzQkFBdUI7QUFFdkIsNkJBQWlDO0FBQ2pDLG1CQUEyQztBQUMzQyxtQkFBK0I7QUFDL0IsbUJBS087QUFDUCxzQkFBcUI7QUErRHJCLGVBQXNCLEtBQVEsU0FBd0M7QUFDcEUsUUFBTSxrQkFBNEM7QUFBQSxJQUNoRCxpQkFBYSx5Q0FBaUI7QUFBQSxJQUM5QixxQkFBcUI7QUFDbkIsWUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQUEsSUFDbEQ7QUFBQSxJQUNBLE9BQU8sQ0FBQztBQUFBO0FBQUEsSUFFUixnQ0FBZ0M7QUFBQSxJQUNoQyxhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQix1QkFBdUI7QUFBQSxJQUN2Qix1QkFBdUI7QUFBQTtBQUFBLElBRXZCLGlDQUFpQztBQUFBLEVBQ25DO0FBRUEsUUFBTSxjQUF3QztBQUFBLElBQzVDLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMO0FBRUEsUUFBTSxpQkFBYSw0QkFBYyxDQUFDO0FBRWxDLFFBQU0sUUFBUSxZQUFZO0FBQzFCLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUksU0FBd0I7QUFDNUIsTUFBSSxZQUFZLHVCQUF1QjtBQUNyQyxhQUFTLElBQUksdUJBQU8sSUFBSSxDQUFDO0FBQUEsRUFDM0I7QUFDQSxRQUFNLDBCQUEwQixNQUFNLFlBQVksOEJBQThCO0FBQ2hGLFFBQU0sZ0JBQWdCLFNBQVMsVUFBVTtBQUN6QyxnQkFBYyxNQUFNLE1BQU07QUFDMUIsTUFBSSxZQUFZLHVCQUF1QjtBQUNyQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxhQUFTLFVBQVUsRUFBRSxNQUFNLFlBQVksaUJBQWlCLENBQUM7QUFDekQsYUFBUyxZQUFZLGFBQWE7QUFDbEMsWUFBUSxXQUFXLFFBQVE7QUFBQSxFQUM3QjtBQUVBLE1BQUksd0JBQXdCLFlBQVksSUFBSTtBQUU1QyxhQUFXLFFBQVEsT0FBTztBQUN4QixRQUFJLFlBQVksWUFBWSxTQUFTO0FBQ25DLGNBQVEsS0FBSztBQUNiO0FBQUEsSUFDRjtBQUNBO0FBQ0EsVUFBTSxlQUFlLEtBQUssT0FBTyxjQUFjLENBQUMsTUFBTSxPQUFPLE1BQU0sTUFBTSxDQUFDO0FBQzFFLFVBQU0sVUFBVSxZQUFZLG1CQUFtQixNQUFNLFlBQVk7QUFDakUsUUFBSSxDQUFDLFlBQVksdUJBQXVCO0FBQ3RDLGNBQVEsV0FBVyxPQUFPO0FBQUEsSUFDNUI7QUFDQSxxQ0FBZSxNQUFNLEVBQUUsT0FBTztBQUU5QixRQUFJO0FBQ0YsVUFBSSxZQUFZLElBQUksSUFBSSx3QkFBd0IsWUFBWSxpQ0FBaUM7QUFDM0Ysa0JBQU0seUNBQTJCO0FBQ2pDLGdDQUF3QixZQUFZLElBQUk7QUFBQSxNQUMxQztBQUNBLFlBQU0sWUFBWSxZQUFZLElBQUk7QUFBQSxJQUNwQyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0seUJBQXlCLElBQUk7QUFDM0MsVUFBSSxDQUFDLFlBQVksdUJBQXVCO0FBQ3RDLGdCQUFRLEtBQUs7QUFDYixjQUFNLElBQUksbUNBQXNCLGVBQWUsWUFBWSxLQUFLO0FBQUEsTUFDbEU7QUFFQSw0Q0FBb0IsSUFBSSxtQ0FBc0IsMENBQTZCLFlBQVksS0FBSyxDQUFDO0FBQUEsSUFDL0Y7QUFDQSxrQkFBYztBQUFBLEVBQ2hCO0FBQ0EsUUFBTTtBQUNOLFVBQVEsS0FBSztBQUNmOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { Promisable } from 'type-fest';
7
7
  /**
8
- * Options for the loop function.
8
+ * Options for {@link loop}.
9
9
  */
10
10
  export interface LoopOptions<T> {
11
11
  /**
@@ -13,23 +13,29 @@ export interface LoopOptions<T> {
13
13
  */
14
14
  abortSignal?: AbortSignal;
15
15
  /**
16
- * The function to build the notice message for each item.
16
+ * Build a notice message for each item.
17
+ *
18
+ * @param item - The current item.
19
+ * @param iterationStr - A string representing the current iteration.
20
+ * @returns A string to display in the notice.
17
21
  */
18
22
  buildNoticeMessage(item: T, iterationStr: string): string;
19
23
  /**
20
- * The items to loop over.
24
+ * Items to loop over.
21
25
  */
22
26
  items: T[];
23
27
  /**
24
- * The minimum timeout for the notice.
28
+ * A minimum timeout for the notice.
25
29
  */
26
30
  noticeMinTimeoutInMilliseconds?: number;
27
31
  /**
28
- * The function to process each item.
32
+ * Process each item.
33
+ *
34
+ * @param item - The current item.
29
35
  */
30
36
  processItem(item: T): Promisable<void>;
31
37
  /**
32
- * The title of the progress bar.
38
+ * A title of the progress bar.
33
39
  */
34
40
  progressBarTitle?: string;
35
41
  /**
@@ -41,7 +47,7 @@ export interface LoopOptions<T> {
41
47
  */
42
48
  shouldShowProgressBar?: boolean;
43
49
  /**
44
- * The threshold for the UI update.
50
+ * A threshold for the UI update.
45
51
  */
46
52
  uiUpdateThresholdInMilliseconds?: number;
47
53
  }
@@ -3,7 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault(){return extractDefault},process(){const browserProcess={browser:true,cwd(){return"/"},env:{},platform:"android"};return browserProcess}};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
7
 
8
8
  "use strict";
9
9
  var __defProp = Object.defineProperty;
@@ -3,7 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault(){return extractDefault},process(){const browserProcess={browser:true,cwd(){return"/"},env:{},platform:"android"};return browserProcess}};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
7
 
8
8
  "use strict";
9
9
  var __defProp = Object.defineProperty;
@@ -42,7 +42,13 @@ async function getCodeBlockMarkdownInfo(options) {
42
42
  if (!sourceFile) {
43
43
  throw new Error(`Source file ${ctx.sourcePath} not found.`);
44
44
  }
45
- const content = options.noteContent ?? await app.vault.cachedRead(sourceFile);
45
+ let content;
46
+ if (options.noteContent) {
47
+ content = options.noteContent;
48
+ } else {
49
+ await (0, import_Vault.saveNote)(app, sourceFile);
50
+ content = await app.vault.read(sourceFile);
51
+ }
46
52
  const approximateSectionInfo = ctx.getSectionInfo(el) ?? {
47
53
  lineEnd: content.split("\n").length - 1,
48
54
  lineStart: 0,
@@ -139,18 +145,23 @@ async function replaceCodeBlock(options) {
139
145
  oldCodeBlock = (0, import_String.unindent)(oldCodeBlock, markdownInfo.linePrefix);
140
146
  }
141
147
  let newCodeBlock = await (0, import_ValueProvider.resolveValue)(codeBlockProvider, abortSignal, oldCodeBlock);
142
- if (newCodeBlock && options.shouldPreserveLinePrefix) {
148
+ if ((newCodeBlock || options.shouldKeepGapWhenEmpty) && options.shouldPreserveLinePrefix) {
143
149
  newCodeBlock = (0, import_String.indent)(newCodeBlock, markdownInfo.linePrefix);
144
150
  }
145
151
  const textBeforeCodeBlock = content.slice(0, markdownInfo.positionInNote.start.offset);
146
152
  const textAfterCodeBlock = content.slice(markdownInfo.positionInNote.end.offset);
147
- return `${appendNewLine(textBeforeCodeBlock)}${appendNewLine(newCodeBlock)}${textAfterCodeBlock}`;
153
+ if (newCodeBlock || options.shouldKeepGapWhenEmpty) {
154
+ return `${textBeforeCodeBlock}${newCodeBlock}${textAfterCodeBlock}`;
155
+ }
156
+ if (!textBeforeCodeBlock && !textAfterCodeBlock) {
157
+ return "";
158
+ }
159
+ if (textBeforeCodeBlock) {
160
+ return `${textBeforeCodeBlock.slice(0, -1)}${textAfterCodeBlock}`;
161
+ }
162
+ return `${textBeforeCodeBlock}${textAfterCodeBlock.slice(1)}`;
148
163
  });
149
164
  }
150
- function appendNewLine(text) {
151
- return text === "" ? "" : `${text}
152
- `;
153
- }
154
165
  function createMarkdownInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines, textLineOffsets, linesBeforeSectionCount) {
155
166
  const linePrefix = match.groups?.["LinePrefix"] ?? "";
156
167
  const codeBlockStartDelimiter = match.groups?.["CodeBlockStartDelimiter"] ?? "";
@@ -228,4 +239,4 @@ function isSuitableCodeBlock(match, language, source, isInCallout) {
228
239
  removeCodeBlock,
229
240
  replaceCodeBlock
230
241
  });
231
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIH0gZnJvbSAnLi9Db2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9BYm9ydENvbnRyb2xsZXIudHMnO1xuaW1wb3J0IHtcbiAgaGFzU2luZ2xlT2NjdXJyZW5jZSxcbiAgaW5kZW50LFxuICB1bmluZGVudFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgZ2V0dGluZyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBvYmplY3QuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQgb2JqZWN0LlxuICAgKi9cbiAgY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIG5vdGVDb250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgaW5zZXJ0aW5nIHRleHQgYWZ0ZXIgYSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBsaW5lcyB0byBvZmZzZXQgdGhlIGluc2VydGlvbiBieS4gRGVmYXVsdCBpcyBgMGAuXG4gICAqL1xuICBsaW5lT2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXNlcnZlIHRoZSBsaW5lIHByZWZpeCBvZiB0aGUgY29kZSBibG9jay4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gaW5zZXJ0IGFmdGVyIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIHJlcGxhY2luZyBhIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIHByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIG5ldyBjb2RlIGJsb2NrLlxuICAgKi9cbiAgY29kZUJsb2NrUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8c3RyaW5nLCBbc3RyaW5nXT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGxpbmUgcHJlZml4IG9mIHRoZSBjb2RlIGJsb2NrLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY29kZSBibG9jayBpbiBhIE1hcmtkb3duIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIGJsb2NrIGluIHRoZSBNYXJrZG93biBzZWN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvKG9wdGlvbnM6IEdldENvZGVCbG9ja1NlY3Rpb25JbmZvT3B0aW9ucyk6IFByb21pc2U8Q29kZUJsb2NrTWFya2Rvd25JbmZvcm1hdGlvbiB8IG51bGw+IHtcbiAgY29uc3QgeyBhcHAsIGN0eCwgZWwsIHNvdXJjZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzb3VyY2VGaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoY3R4LnNvdXJjZVBhdGgpO1xuICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBmaWxlICR7Y3R4LnNvdXJjZVBhdGh9IG5vdCBmb3VuZC5gKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy5ub3RlQ29udGVudCA/PyBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChzb3VyY2VGaWxlKTtcblxuICBjb25zdCBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvID0gY3R4LmdldFNlY3Rpb25JbmZvKGVsKSA/PyB7XG4gICAgbGluZUVuZDogY29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMSxcbiAgICBsaW5lU3RhcnQ6IDAsXG4gICAgdGV4dDogY29udGVudFxuICB9O1xuXG4gIGlmICghaGFzU2luZ2xlT2NjdXJyZW5jZShjb250ZW50LCBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLnRleHQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWN0aW9uT2Zmc2V0ID0gY29udGVudC5pbmRleE9mKGFwcHJveGltYXRlU2VjdGlvbkluZm8udGV4dCk7XG4gIGNvbnN0IGxpbmVzQmVmb3JlU2VjdGlvbkNvdW50ID0gY29udGVudC5zbGljZSgwLCBzZWN0aW9uT2Zmc2V0KS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcblxuICBjb25zdCBpc0luQ2FsbG91dCA9ICEhZWwucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjYWxsb3V0LWNvbnRlbnQnKTtcblxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlRnJvbUVsZW1lbnQoZWwpO1xuICBjb25zdCBzb3VyY2VMaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgY29uc3QgdGV4dExpbmVzID0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgdGV4dExpbmVPZmZzZXRzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgdGV4dExpbmVPZmZzZXRzLnNldChsaW5lc0JlZm9yZVNlY3Rpb25Db3VudCwgc2VjdGlvbk9mZnNldCk7XG5cbiAgbGV0IGxhc3RUZXh0TGluZU9mZnNldCA9IHNlY3Rpb25PZmZzZXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dExpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGV4dExpbmUgPSB0ZXh0TGluZXNbaV07XG4gICAgY29uc3QgbGluZSA9IHRleHRMaW5lID8/ICcnO1xuICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBsYXN0VGV4dExpbmVPZmZzZXQgKyBsaW5lLmxlbmd0aCArIDE7XG4gICAgdGV4dExpbmVPZmZzZXRzLnNldChsaW5lc0JlZm9yZVNlY3Rpb25Db3VudCArIGkgKyAxLCBsaW5lT2Zmc2V0KTtcbiAgICBsYXN0VGV4dExpbmVPZmZzZXQgPSBsaW5lT2Zmc2V0O1xuICB9XG5cbiAgY29uc3QgcG90ZW50aWFsQ29kZUJsb2NrVGV4dExpbmVzID0gdGV4dExpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+XG4gICAgYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lU3RhcnQgPD0gaW5kZXggJiYgaW5kZXggPD0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lRW5kID8gbGluZSA6ICcnXG4gICk7XG4gIGNvbnN0IHBvdGVudGlhbENvZGVCbG9ja1RleHQgPSBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0TGluZXMuam9pbignXFxuJyk7XG5cbiAgY29uc3QgUkVHX0VYUCA9XG4gICAgLyg/PD1efFxcbikoPzxMaW5lUHJlZml4PiB7MCwzfSg/Oj4gezEsM30pKikoPzxDb2RlQmxvY2tTdGFydERlbGltaXRlcj4oPzxDb2RlQmxvY2tTdGFydERlbGltaXRlckNoYXI+W2B+XSkoPzpcXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPnsyLH0pKSg/PENvZGVCbG9ja0xhbmd1YWdlPlxcUyopKD86WyBcXHRdKD88Q29kZUJsb2NrQXJncz4uKj8pKT8oPzpcXG4oPzxDb2RlQmxvY2tDb250ZW50Pig/Olxcbj9cXGs8TGluZVByZWZpeD4uKikrPykpP1xcblxcazxMaW5lUHJlZml4Pig/PENvZGVCbG9ja0VuZERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXI+XFxrPENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj4qKVsgXFx0XSooPz1cXG58JCkvZztcblxuICBsZXQgbWFya2Rvd25JbmZvOiBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0Lm1hdGNoQWxsKFJFR19FWFApKSB7XG4gICAgaWYgKCFpc1N1aXRhYmxlQ29kZUJsb2NrKG1hdGNoLCBsYW5ndWFnZSwgc291cmNlLCBpc0luQ2FsbG91dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChtYXJrZG93bkluZm8pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG1hcmtkb3duSW5mbyA9IGNyZWF0ZU1hcmtkb3duSW5mb0Zyb21NYXRjaChwb3RlbnRpYWxDb2RlQmxvY2tUZXh0LCBtYXRjaCwgYXBwcm94aW1hdGVTZWN0aW9uSW5mbywgc291cmNlTGluZXMsIHRleHRMaW5lT2Zmc2V0cywgbGluZXNCZWZvcmVTZWN0aW9uQ291bnQpO1xuICB9XG5cbiAgaWYgKCFtYXJrZG93bkluZm8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBtYXJrZG93bkluZm87XG59XG5cbi8qKlxuICogSW5zZXJ0cyB0ZXh0IGFmdGVyIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc2VydEFmdGVyQ29kZUJsb2NrKG9wdGlvbnM6IEluc2VydENvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGN0eCwgbGluZU9mZnNldCA9IDAsIHRleHQgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCBhc3luYyAoX2Fib3J0U2lnbmFsLCBjb250ZW50KSA9PiB7XG4gICAgY29uc3QgbWFya2Rvd25JbmZvID0gYXdhaXQgZ2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBub3RlQ29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIGlmICghbWFya2Rvd25JbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB1bmlxdWVseSBpZGVudGlmeSB0aGUgY29kZSBibG9jay4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnNlcnRMaW5lSW5kZXggPSBtYXJrZG93bkluZm8ucG9zaXRpb25Jbk5vdGUuZW5kLmxpbmUgKyBsaW5lT2Zmc2V0ICsgMTtcbiAgICByZXR1cm4gaW5zZXJ0VGV4dChjb250ZW50LCBpbnNlcnRMaW5lSW5kZXgsIHRleHQsIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KTtcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyB0ZXh0IGJlZm9yZSB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnNlcnRCZWZvcmVDb2RlQmxvY2sob3B0aW9uczogSW5zZXJ0Q29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBsaW5lT2Zmc2V0ID0gMCwgdGV4dCB9ID0gb3B0aW9ucztcblxuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIGFzeW5jIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBjb25zdCBtYXJrZG93bkluZm8gPSBhd2FpdCBnZXRDb2RlQmxvY2tNYXJrZG93bkluZm8oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5vdGVDb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgaWYgKCFtYXJrZG93bkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb2RlIGJsb2NrLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc2VydExpbmVJbmRleCA9IG1hcmtkb3duSW5mby5wb3NpdGlvbkluTm90ZS5zdGFydC5saW5lIC0gbGluZU9mZnNldDtcbiAgICByZXR1cm4gaW5zZXJ0VGV4dChjb250ZW50LCBpbnNlcnRMaW5lSW5kZXgsIHRleHQsIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVDb2RlQmxvY2sob3B0aW9uczogR2V0Q29kZUJsb2NrU2VjdGlvbkluZm9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlcGxhY2VDb2RlQmxvY2soe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29kZUJsb2NrUHJvdmlkZXI6ICcnXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDb2RlQmxvY2sob3B0aW9uczogUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGNvZGVCbG9ja1Byb3ZpZGVyLCBjdHggfSA9IG9wdGlvbnM7XG4gIG9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCBhc3luYyAoYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBhYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGFib3J0U2lnbmFsLCBvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGNvbnN0IG1hcmtkb3duSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja01hcmtkb3duSW5mbyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbm90ZUNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICBpZiAoIW1hcmtkb3duSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvZGUgYmxvY2suJyk7XG4gICAgfVxuXG4gICAgbGV0IG9sZENvZGVCbG9jayA9IGNvbnRlbnQuc2xpY2UobWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLnN0YXJ0Lm9mZnNldCwgbWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLmVuZC5vZmZzZXQpO1xuICAgIGlmIChvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgb2xkQ29kZUJsb2NrID0gdW5pbmRlbnQob2xkQ29kZUJsb2NrLCBtYXJrZG93bkluZm8ubGluZVByZWZpeCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gICAgaWYgKG5ld0NvZGVCbG9jayAmJiBvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgbmV3Q29kZUJsb2NrID0gaW5kZW50KG5ld0NvZGVCbG9jaywgbWFya2Rvd25JbmZvLmxpbmVQcmVmaXgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRCZWZvcmVDb2RlQmxvY2sgPSBjb250ZW50LnNsaWNlKDAsIG1hcmtkb3duSW5mby5wb3NpdGlvbkluTm90ZS5zdGFydC5vZmZzZXQpO1xuICAgIGNvbnN0IHRleHRBZnRlckNvZGVCbG9jayA9IGNvbnRlbnQuc2xpY2UobWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLmVuZC5vZmZzZXQpO1xuXG4gICAgcmV0dXJuIGAke2FwcGVuZE5ld0xpbmUodGV4dEJlZm9yZUNvZGVCbG9jayl9JHthcHBlbmROZXdMaW5lKG5ld0NvZGVCbG9jayl9JHt0ZXh0QWZ0ZXJDb2RlQmxvY2t9YDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZE5ld0xpbmUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQgPT09ICcnID8gJycgOiBgJHt0ZXh0fVxcbmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcmtkb3duSW5mb0Zyb21NYXRjaChcbiAgcG90ZW50aWFsQ29kZUJsb2NrVGV4dDogc3RyaW5nLFxuICBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSxcbiAgYXBwcm94aW1hdGVTZWN0aW9uSW5mbzogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24sXG4gIHNvdXJjZUxpbmVzOiBzdHJpbmdbXSxcbiAgdGV4dExpbmVPZmZzZXRzOiBNYXA8bnVtYmVyLCBudW1iZXI+LFxuICBsaW5lc0JlZm9yZVNlY3Rpb25Db3VudDogbnVtYmVyXG4pOiBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHtcbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyJ10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja0VuZERlbGltaXRlciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tFbmREZWxpbWl0ZXInXSA/PyAnJztcbiAgY29uc3QgY29kZUJsb2NrQXJnc1N0ciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tBcmdzJ10gPz8gJyc7XG4gIGNvbnN0IGxhbmd1YWdlID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0xhbmd1YWdlJ10gPz8gJyc7XG5cbiAgY29uc3QgcHJldmlvdXNUZXh0ID0gcG90ZW50aWFsQ29kZUJsb2NrVGV4dC5zbGljZSgwLCBtYXRjaC5pbmRleCk7XG4gIGNvbnN0IHByZXZpb3VzVGV4dExpbmVzQ291bnQgPSBwcmV2aW91c1RleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDE7XG5cbiAgY29uc3Qgc3RhcnRMaW5lID0gbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgKyBwcmV2aW91c1RleHRMaW5lc0NvdW50O1xuICBjb25zdCBlbmRMaW5lID0gc3RhcnRMaW5lICsgc291cmNlTGluZXMubGVuZ3RoICsgMTtcblxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGNvZGVCbG9ja0FyZ3NTdHIuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgZW5kRGVsaW1pdGVyOiBjb2RlQmxvY2tFbmREZWxpbWl0ZXIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbGluZVByZWZpeCxcbiAgICBwb3NpdGlvbkluTm90ZToge1xuICAgICAgZW5kOiB7XG4gICAgICAgIGNvbDogKHRleHRMaW5lT2Zmc2V0cy5nZXQoZW5kTGluZSArIDEpID8/IDApIC0gKHRleHRMaW5lT2Zmc2V0cy5nZXQoZW5kTGluZSkgPz8gMCkgLSAxLFxuICAgICAgICBsaW5lOiBlbmRMaW5lLFxuICAgICAgICBvZmZzZXQ6ICh0ZXh0TGluZU9mZnNldHMuZ2V0KGVuZExpbmUgKyAxKSA/PyAwKSAtIDFcbiAgICAgIH0sXG4gICAgICBzdGFydDoge1xuICAgICAgICBjb2w6IDAsXG4gICAgICAgIGxpbmU6IHN0YXJ0TGluZSxcbiAgICAgICAgb2Zmc2V0OiB0ZXh0TGluZU9mZnNldHMuZ2V0KHN0YXJ0TGluZSkgPz8gMFxuICAgICAgfVxuICAgIH0sXG4gICAgcmF3QXJnc1N0cjogY29kZUJsb2NrQXJnc1N0cixcbiAgICBzZWN0aW9uSW5mbzoge1xuICAgICAgbGluZUVuZDogcHJldmlvdXNUZXh0TGluZXNDb3VudCArIHNvdXJjZUxpbmVzLmxlbmd0aCArIDEsXG4gICAgICBsaW5lU3RhcnQ6IHByZXZpb3VzVGV4dExpbmVzQ291bnQsXG4gICAgICB0ZXh0OiBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLnRleHRcbiAgICB9LFxuICAgIHN0YXJ0RGVsaW1pdGVyOiBjb2RlQmxvY2tTdGFydERlbGltaXRlclxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMYW5ndWFnZUZyb21FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IEJMT0NLX0xBTkdVQUdFX1BSRUZJWCA9ICdibG9jay1sYW5ndWFnZS0nO1xuICByZXR1cm4gQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QpLmZpbmQoKGNscykgPT4gY2xzLnN0YXJ0c1dpdGgoQkxPQ0tfTEFOR1VBR0VfUFJFRklYKSk/LnNsaWNlKEJMT0NLX0xBTkdVQUdFX1BSRUZJWC5sZW5ndGgpID8/ICcnO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5zZXJ0TGluZUluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG5ld0xpbmVzID0gbGluZXMuc2xpY2UoKTtcbiAgY29uc3QgdGV4dExpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgaWYgKGluc2VydExpbmVJbmRleCA8IDApIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSAwO1xuICB9XG4gIGlmIChpbnNlcnRMaW5lSW5kZXggPiBsaW5lcy5sZW5ndGgpIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSBsaW5lcy5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBQUkVGSVhfTElORV9SRUdfRVhQID0gL14gezAsM30oPzo+IHsxLDN9KSovZztcbiAgY29uc3QgbWF0Y2ggPSAobGluZXNbaW5zZXJ0TGluZUluZGV4XSA/PyAnJykubWF0Y2goUFJFRklYX0xJTkVfUkVHX0VYUCk7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBtYXRjaD8uWzBdID8/ICcnO1xuICBuZXdMaW5lcy5zcGxpY2UoaW5zZXJ0TGluZUluZGV4LCAwLCAuLi4oc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4ID8gdGV4dExpbmVzLm1hcCgobGluZSkgPT4gaW5kZW50KGxpbmUsIGxpbmVQcmVmaXgpKSA6IHRleHRMaW5lcykpO1xuICByZXR1cm4gbmV3TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzU3VpdGFibGVDb2RlQmxvY2soXG4gIG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LFxuICBsYW5ndWFnZTogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgaXNJbkNhbGxvdXQ6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuICBjb25zdCBjb2RlQmxvY2tMYW5ndWFnZSA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tMYW5ndWFnZSddID8/ICcnO1xuICBpZiAoY29kZUJsb2NrTGFuZ3VhZ2UgIT09IGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG5cbiAgaWYgKGlzSW5DYWxsb3V0ICYmICFsaW5lUHJlZml4LmluY2x1ZGVzKCc+ICcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZUJsb2NrQ29udGVudCA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tDb250ZW50J10gPz8gJyc7XG4gIGNvbnN0IGNsZWFuQ29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja0NvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBjbGVhbkNvZGVCbG9ja0NvbnRlbnQgPT09IHNvdXJjZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQSw2QkFBK0I7QUFDL0Isb0JBSU87QUFDUCwyQkFBNkI7QUFDN0IsbUJBQXdCO0FBOEV4QixlQUFzQix5QkFBeUIsU0FBdUY7QUFDcEksUUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLE9BQU8sSUFBSTtBQUVqQyxRQUFNLGFBQWEsSUFBSSxNQUFNLGNBQWMsSUFBSSxVQUFVO0FBQ3pELE1BQUksQ0FBQyxZQUFZO0FBQ2YsVUFBTSxJQUFJLE1BQU0sZUFBZSxJQUFJLFVBQVUsYUFBYTtBQUFBLEVBQzVEO0FBQ0EsUUFBTSxVQUFVLFFBQVEsZUFBZSxNQUFNLElBQUksTUFBTSxXQUFXLFVBQVU7QUFFNUUsUUFBTSx5QkFBeUIsSUFBSSxlQUFlLEVBQUUsS0FBSztBQUFBLElBQ3ZELFNBQVMsUUFBUSxNQUFNLElBQUksRUFBRSxTQUFTO0FBQUEsSUFDdEMsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLEVBQ1I7QUFFQSxNQUFJLEtBQUMsbUNBQW9CLFNBQVMsdUJBQXVCLElBQUksR0FBRztBQUM5RCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZ0JBQWdCLFFBQVEsUUFBUSx1QkFBdUIsSUFBSTtBQUNqRSxRQUFNLDBCQUEwQixRQUFRLE1BQU0sR0FBRyxhQUFhLEVBQUUsTUFBTSxJQUFJLEVBQUUsU0FBUztBQUVyRixRQUFNLGNBQWMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxVQUFVLFNBQVMsaUJBQWlCO0FBRTVFLFFBQU0sV0FBVyx1QkFBdUIsRUFBRTtBQUMxQyxRQUFNLGNBQWMsT0FBTyxN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
242
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIH0gZnJvbSAnLi9Db2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9BYm9ydENvbnRyb2xsZXIudHMnO1xuaW1wb3J0IHtcbiAgaGFzU2luZ2xlT2NjdXJyZW5jZSxcbiAgaW5kZW50LFxuICB1bmluZGVudFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBwcm9jZXNzLFxuICBzYXZlTm90ZVxufSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZ2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb2RlQmxvY2tNYXJrZG93bkluZm9PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0fSBvYmplY3QuXG4gICAqL1xuICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIEhUTUxFbGVtZW50fSByZXByZXNlbnRpbmcgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEEgY29udGVudCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIG5vdGVDb250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNvdXJjZSBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBpbnNlcnRBZnRlckNvZGVCbG9ja30gLyB7QGxpbmsgaW5zZXJ0QmVmb3JlQ29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRDb2RlQmxvY2tPcHRpb25zIGV4dGVuZHMgR2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIG51bWJlciBvZiBsaW5lcyB0byBvZmZzZXQgdGhlIGluc2VydGlvbiBieS4gRGVmYXVsdCBpcyBgMGAuXG4gICAqL1xuICBsaW5lT2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXNlcnZlIHRoZSBsaW5lIHByZWZpeCBvZiB0aGUgY29kZSBibG9jay4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSB0ZXh0IHRvIGluc2VydCBhZnRlciB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVtb3ZlQ29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVDb2RlQmxvY2tPcHRpb25zIGV4dGVuZHMgR2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGtlZXAgdGhlIGdhcCB3aGVuIHRoZSBuZXcgY29kZSBibG9jayBpcyBlbXB0eS4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkS2VlcEdhcFdoZW5FbXB0eT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlcGxhY2VDb2RlQmxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VDb2RlQmxvY2tPcHRpb25zIGV4dGVuZHMgR2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgbmV3IGNvZGUgYmxvY2suXG4gICAqL1xuICBjb2RlQmxvY2tQcm92aWRlcjogVmFsdWVQcm92aWRlcjxzdHJpbmcsIFtzdHJpbmddPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBrZWVwIHRoZSBnYXAgd2hlbiB0aGUgbmV3IGNvZGUgYmxvY2sgaXMgZW1wdHkuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICovXG4gIHNob3VsZEtlZXBHYXBXaGVuRW1wdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXNlcnZlIHRoZSBsaW5lIHByZWZpeCBvZiB0aGUgY29kZSBibG9jay4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvZGUgYmxvY2sgaW4gYSBNYXJrZG93biBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSBibG9jayBpbiB0aGUgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvZGVCbG9ja01hcmtkb3duSW5mbyhvcHRpb25zOiBHZXRDb2RlQmxvY2tNYXJrZG93bkluZm9PcHRpb25zKTogUHJvbWlzZTxDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHwgbnVsbD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBlbCwgc291cmNlIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChjdHguc291cmNlUGF0aCk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGZpbGUgJHtjdHguc291cmNlUGF0aH0gbm90IGZvdW5kLmApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnQ6IHN0cmluZztcbiAgaWYgKG9wdGlvbnMubm90ZUNvbnRlbnQpIHtcbiAgICBjb250ZW50ID0gb3B0aW9ucy5ub3RlQ29udGVudDtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBzYXZlTm90ZShhcHAsIHNvdXJjZUZpbGUpO1xuICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChzb3VyY2VGaWxlKTtcbiAgfVxuXG4gIGNvbnN0IGFwcHJveGltYXRlU2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpID8/IHtcbiAgICBsaW5lRW5kOiBjb250ZW50LnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgIGxpbmVTdGFydDogMCxcbiAgICB0ZXh0OiBjb250ZW50XG4gIH07XG5cbiAgaWYgKCFoYXNTaW5nbGVPY2N1cnJlbmNlKGNvbnRlbnQsIGFwcHJveGltYXRlU2VjdGlvbkluZm8udGV4dCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlY3Rpb25PZmZzZXQgPSBjb250ZW50LmluZGV4T2YoYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0KTtcbiAgY29uc3QgbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgPSBjb250ZW50LnNsaWNlKDAsIHNlY3Rpb25PZmZzZXQpLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuXG4gIGNvbnN0IGlzSW5DYWxsb3V0ID0gISFlbC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ2NhbGxvdXQtY29udGVudCcpO1xuXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2VGcm9tRWxlbWVudChlbCk7XG4gIGNvbnN0IHNvdXJjZUxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKTtcblxuICBjb25zdCB0ZXh0TGluZXMgPSBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLnRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0ZXh0TGluZU9mZnNldHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICB0ZXh0TGluZU9mZnNldHMuc2V0KGxpbmVzQmVmb3JlU2VjdGlvbkNvdW50LCBzZWN0aW9uT2Zmc2V0KTtcblxuICBsZXQgbGFzdFRleHRMaW5lT2Zmc2V0ID0gc2VjdGlvbk9mZnNldDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0TGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0ZXh0TGluZSA9IHRleHRMaW5lc1tpXTtcbiAgICBjb25zdCBsaW5lID0gdGV4dExpbmUgPz8gJyc7XG4gICAgY29uc3QgbGluZU9mZnNldCA9IGxhc3RUZXh0TGluZU9mZnNldCArIGxpbmUubGVuZ3RoICsgMTtcbiAgICB0ZXh0TGluZU9mZnNldHMuc2V0KGxpbmVzQmVmb3JlU2VjdGlvbkNvdW50ICsgaSArIDEsIGxpbmVPZmZzZXQpO1xuICAgIGxhc3RUZXh0TGluZU9mZnNldCA9IGxpbmVPZmZzZXQ7XG4gIH1cblxuICBjb25zdCBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0TGluZXMgPSB0ZXh0TGluZXMubWFwKChsaW5lLCBpbmRleCkgPT5cbiAgICBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLmxpbmVTdGFydCA8PSBpbmRleCAmJiBpbmRleCA8PSBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLmxpbmVFbmQgPyBsaW5lIDogJydcbiAgKTtcbiAgY29uc3QgcG90ZW50aWFsQ29kZUJsb2NrVGV4dCA9IHBvdGVudGlhbENvZGVCbG9ja1RleHRMaW5lcy5qb2luKCdcXG4nKTtcblxuICBjb25zdCBSRUdfRVhQID1cbiAgICAvKD88PV58XFxuKSg/PExpbmVQcmVmaXg+IHswLDN9KD86PiB7MSwzfSkqKSg/PENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyPig/PENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj5bYH5dKSg/OlxcazxDb2RlQmxvY2tTdGFydERlbGltaXRlckNoYXI+ezIsfSkpKD88Q29kZUJsb2NrTGFuZ3VhZ2U+XFxTKikoPzpbIFxcdF0oPzxDb2RlQmxvY2tBcmdzPi4qPykpPyg/Olxcbig/PENvZGVCbG9ja0NvbnRlbnQ+KD86XFxuP1xcazxMaW5lUHJlZml4Pi4qKSs/KSk/XFxuXFxrPExpbmVQcmVmaXg+KD88Q29kZUJsb2NrRW5kRGVsaW1pdGVyPlxcazxDb2RlQmxvY2tTdGFydERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPiopWyBcXHRdKig/PVxcbnwkKS9nO1xuXG4gIGxldCBtYXJrZG93bkluZm86IENvZGVCbG9ja01hcmtkb3duSW5mb3JtYXRpb24gfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHBvdGVudGlhbENvZGVCbG9ja1RleHQubWF0Y2hBbGwoUkVHX0VYUCkpIHtcbiAgICBpZiAoIWlzU3VpdGFibGVDb2RlQmxvY2sobWF0Y2gsIGxhbmd1YWdlLCBzb3VyY2UsIGlzSW5DYWxsb3V0KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duSW5mbykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbWFya2Rvd25JbmZvID0gY3JlYXRlTWFya2Rvd25JbmZvRnJvbU1hdGNoKHBvdGVudGlhbENvZGVCbG9ja1RleHQsIG1hdGNoLCBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLCBzb3VyY2VMaW5lcywgdGV4dExpbmVPZmZzZXRzLCBsaW5lc0JlZm9yZVNlY3Rpb25Db3VudCk7XG4gIH1cblxuICBpZiAoIW1hcmtkb3duSW5mbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG1hcmtkb3duSW5mbztcbn1cblxuLyoqXG4gKiBJbnNlcnRzIHRleHQgYWZ0ZXIgdGhlIGNvZGUgYmxvY2suXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0QWZ0ZXJDb2RlQmxvY2sob3B0aW9uczogSW5zZXJ0Q29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBsaW5lT2Zmc2V0ID0gMCwgdGV4dCB9ID0gb3B0aW9ucztcblxuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIGFzeW5jIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBjb25zdCBtYXJrZG93bkluZm8gPSBhd2FpdCBnZXRDb2RlQmxvY2tNYXJrZG93bkluZm8oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5vdGVDb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgaWYgKCFtYXJrZG93bkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb2RlIGJsb2NrLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc2VydExpbmVJbmRleCA9IG1hcmtkb3duSW5mby5wb3NpdGlvbkluTm90ZS5lbmQubGluZSArIGxpbmVPZmZzZXQgKyAxO1xuICAgIHJldHVybiBpbnNlcnRUZXh0KGNvbnRlbnQsIGluc2VydExpbmVJbmRleCwgdGV4dCwgb3B0aW9ucy5zaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIHRleHQgYmVmb3JlIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc2VydEJlZm9yZUNvZGVCbG9jayhvcHRpb25zOiBJbnNlcnRDb2RlQmxvY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBjdHgsIGxpbmVPZmZzZXQgPSAwLCB0ZXh0IH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBjdHguc291cmNlUGF0aCwgYXN5bmMgKF9hYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGNvbnN0IG1hcmtkb3duSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja01hcmtkb3duSW5mbyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbm90ZUNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICBpZiAoIW1hcmtkb3duSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvZGUgYmxvY2suJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zZXJ0TGluZUluZGV4ID0gbWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLnN0YXJ0LmxpbmUgLSBsaW5lT2Zmc2V0O1xuICAgIHJldHVybiBpbnNlcnRUZXh0KGNvbnRlbnQsIGluc2VydExpbmVJbmRleCwgdGV4dCwgb3B0aW9ucy5zaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUNvZGVCbG9jayhvcHRpb25zOiBSZW1vdmVDb2RlQmxvY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlcGxhY2VDb2RlQmxvY2soe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29kZUJsb2NrUHJvdmlkZXI6ICcnXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDb2RlQmxvY2sob3B0aW9uczogUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGNvZGVCbG9ja1Byb3ZpZGVyLCBjdHggfSA9IG9wdGlvbnM7XG4gIG9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCBhc3luYyAoYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBhYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGFib3J0U2lnbmFsLCBvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGNvbnN0IG1hcmtkb3duSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja01hcmtkb3duSW5mbyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbm90ZUNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICBpZiAoIW1hcmtkb3duSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvZGUgYmxvY2suJyk7XG4gICAgfVxuXG4gICAgbGV0IG9sZENvZGVCbG9jayA9IGNvbnRlbnQuc2xpY2UobWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLnN0YXJ0Lm9mZnNldCwgbWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLmVuZC5vZmZzZXQpO1xuICAgIGlmIChvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgb2xkQ29kZUJsb2NrID0gdW5pbmRlbnQob2xkQ29kZUJsb2NrLCBtYXJrZG93bkluZm8ubGluZVByZWZpeCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gICAgaWYgKChuZXdDb2RlQmxvY2sgfHwgb3B0aW9ucy5zaG91bGRLZWVwR2FwV2hlbkVtcHR5KSAmJiBvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgbmV3Q29kZUJsb2NrID0gaW5kZW50KG5ld0NvZGVCbG9jaywgbWFya2Rvd25JbmZvLmxpbmVQcmVmaXgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRCZWZvcmVDb2RlQmxvY2sgPSBjb250ZW50LnNsaWNlKDAsIG1hcmtkb3duSW5mby5wb3NpdGlvbkluTm90ZS5zdGFydC5vZmZzZXQpO1xuICAgIGNvbnN0IHRleHRBZnRlckNvZGVCbG9jayA9IGNvbnRlbnQuc2xpY2UobWFya2Rvd25JbmZvLnBvc2l0aW9uSW5Ob3RlLmVuZC5vZmZzZXQpO1xuXG4gICAgaWYgKG5ld0NvZGVCbG9jayB8fCBvcHRpb25zLnNob3VsZEtlZXBHYXBXaGVuRW1wdHkpIHtcbiAgICAgIHJldHVybiBgJHt0ZXh0QmVmb3JlQ29kZUJsb2NrfSR7bmV3Q29kZUJsb2NrfSR7dGV4dEFmdGVyQ29kZUJsb2NrfWA7XG4gICAgfVxuXG4gICAgaWYgKCF0ZXh0QmVmb3JlQ29kZUJsb2NrICYmICF0ZXh0QWZ0ZXJDb2RlQmxvY2spIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGV4dEJlZm9yZUNvZGVCbG9jaykge1xuICAgICAgcmV0dXJuIGAke3RleHRCZWZvcmVDb2RlQmxvY2suc2xpY2UoMCwgLTEpfSR7dGV4dEFmdGVyQ29kZUJsb2NrfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3RleHRCZWZvcmVDb2RlQmxvY2t9JHt0ZXh0QWZ0ZXJDb2RlQmxvY2suc2xpY2UoMSl9YDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcmtkb3duSW5mb0Zyb21NYXRjaChcbiAgcG90ZW50aWFsQ29kZUJsb2NrVGV4dDogc3RyaW5nLFxuICBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSxcbiAgYXBwcm94aW1hdGVTZWN0aW9uSW5mbzogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24sXG4gIHNvdXJjZUxpbmVzOiBzdHJpbmdbXSxcbiAgdGV4dExpbmVPZmZzZXRzOiBNYXA8bnVtYmVyLCBudW1iZXI+LFxuICBsaW5lc0JlZm9yZVNlY3Rpb25Db3VudDogbnVtYmVyXG4pOiBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHtcbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyJ10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja0VuZERlbGltaXRlciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tFbmREZWxpbWl0ZXInXSA/PyAnJztcbiAgY29uc3QgY29kZUJsb2NrQXJnc1N0ciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tBcmdzJ10gPz8gJyc7XG4gIGNvbnN0IGxhbmd1YWdlID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0xhbmd1YWdlJ10gPz8gJyc7XG5cbiAgY29uc3QgcHJldmlvdXNUZXh0ID0gcG90ZW50aWFsQ29kZUJsb2NrVGV4dC5zbGljZSgwLCBtYXRjaC5pbmRleCk7XG4gIGNvbnN0IHByZXZpb3VzVGV4dExpbmVzQ291bnQgPSBwcmV2aW91c1RleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDE7XG5cbiAgY29uc3Qgc3RhcnRMaW5lID0gbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgKyBwcmV2aW91c1RleHRMaW5lc0NvdW50O1xuICBjb25zdCBlbmRMaW5lID0gc3RhcnRMaW5lICsgc291cmNlTGluZXMubGVuZ3RoICsgMTtcblxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGNvZGVCbG9ja0FyZ3NTdHIuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgZW5kRGVsaW1pdGVyOiBjb2RlQmxvY2tFbmREZWxpbWl0ZXIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbGluZVByZWZpeCxcbiAgICBwb3NpdGlvbkluTm90ZToge1xuICAgICAgZW5kOiB7XG4gICAgICAgIGNvbDogKHRleHRMaW5lT2Zmc2V0cy5nZXQoZW5kTGluZSArIDEpID8/IDApIC0gKHRleHRMaW5lT2Zmc2V0cy5nZXQoZW5kTGluZSkgPz8gMCkgLSAxLFxuICAgICAgICBsaW5lOiBlbmRMaW5lLFxuICAgICAgICBvZmZzZXQ6ICh0ZXh0TGluZU9mZnNldHMuZ2V0KGVuZExpbmUgKyAxKSA/PyAwKSAtIDFcbiAgICAgIH0sXG4gICAgICBzdGFydDoge1xuICAgICAgICBjb2w6IDAsXG4gICAgICAgIGxpbmU6IHN0YXJ0TGluZSxcbiAgICAgICAgb2Zmc2V0OiB0ZXh0TGluZU9mZnNldHMuZ2V0KHN0YXJ0TGluZSkgPz8gMFxuICAgICAgfVxuICAgIH0sXG4gICAgcmF3QXJnc1N0cjogY29kZUJsb2NrQXJnc1N0cixcbiAgICBzZWN0aW9uSW5mbzoge1xuICAgICAgbGluZUVuZDogcHJldmlvdXNUZXh0TGluZXNDb3VudCArIHNvdXJjZUxpbmVzLmxlbmd0aCArIDEsXG4gICAgICBsaW5lU3RhcnQ6IHByZXZpb3VzVGV4dExpbmVzQ291bnQsXG4gICAgICB0ZXh0OiBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLnRleHRcbiAgICB9LFxuICAgIHN0YXJ0RGVsaW1pdGVyOiBjb2RlQmxvY2tTdGFydERlbGltaXRlclxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMYW5ndWFnZUZyb21FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IEJMT0NLX0xBTkdVQUdFX1BSRUZJWCA9ICdibG9jay1sYW5ndWFnZS0nO1xuICByZXR1cm4gQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QpLmZpbmQoKGNscykgPT4gY2xzLnN0YXJ0c1dpdGgoQkxPQ0tfTEFOR1VBR0VfUFJFRklYKSk/LnNsaWNlKEJMT0NLX0xBTkdVQUdFX1BSRUZJWC5sZW5ndGgpID8/ICcnO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5zZXJ0TGluZUluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG5ld0xpbmVzID0gbGluZXMuc2xpY2UoKTtcbiAgY29uc3QgdGV4dExpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgaWYgKGluc2VydExpbmVJbmRleCA8IDApIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSAwO1xuICB9XG4gIGlmIChpbnNlcnRMaW5lSW5kZXggPiBsaW5lcy5sZW5ndGgpIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSBsaW5lcy5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBQUkVGSVhfTElORV9SRUdfRVhQID0gL14gezAsM30oPzo+IHsxLDN9KSovZztcbiAgY29uc3QgbWF0Y2ggPSAobGluZXNbaW5zZXJ0TGluZUluZGV4XSA/PyAnJykubWF0Y2goUFJFRklYX0xJTkVfUkVHX0VYUCk7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBtYXRjaD8uWzBdID8/ICcnO1xuICBuZXdMaW5lcy5zcGxpY2UoaW5zZXJ0TGluZUluZGV4LCAwLCAuLi4oc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4ID8gdGV4dExpbmVzLm1hcCgobGluZSkgPT4gaW5kZW50KGxpbmUsIGxpbmVQcmVmaXgpKSA6IHRleHRMaW5lcykpO1xuICByZXR1cm4gbmV3TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzU3VpdGFibGVDb2RlQmxvY2soXG4gIG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LFxuICBsYW5ndWFnZTogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgaXNJbkNhbGxvdXQ6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuICBjb25zdCBjb2RlQmxvY2tMYW5ndWFnZSA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tMYW5ndWFnZSddID8/ICcnO1xuICBpZiAoY29kZUJsb2NrTGFuZ3VhZ2UgIT09IGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG5cbiAgaWYgKGlzSW5DYWxsb3V0ICYmICFsaW5lUHJlZml4LmluY2x1ZGVzKCc+ICcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZUJsb2NrQ29udGVudCA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tDb250ZW50J10gPz8gJyc7XG4gIGNvbnN0IGNsZWFuQ29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja0NvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBjbGVhbkNvZGVCbG9ja0NvbnRlbnQgPT09IHNvdXJjZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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