@wallfree-dev/angular-core 0.0.59-beta.1

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 (623) hide show
  1. package/README.md +60 -0
  2. package/esm2022/lib/airgap-angular-core.module.mjs +63 -0
  3. package/esm2022/lib/base/base.component.mjs +38 -0
  4. package/esm2022/lib/base/base.facade.mjs +37 -0
  5. package/esm2022/lib/capacitor-plugins/definitions.mjs +15 -0
  6. package/esm2022/lib/capacitor-plugins/injection-tokens.mjs +11 -0
  7. package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.mjs +67 -0
  8. package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.mjs +247 -0
  9. package/esm2022/lib/components/account-item/account-item.component.mjs +30 -0
  10. package/esm2022/lib/components/account-selection/account-selection.component.mjs +61 -0
  11. package/esm2022/lib/components/components.module.mjs +97 -0
  12. package/esm2022/lib/components/currency-symbol/currency-symbol.component.mjs +45 -0
  13. package/esm2022/lib/components/currency-symbol/currency-symbol.facade.mjs +8 -0
  14. package/esm2022/lib/components/currency-symbol/currency-symbol.types.mjs +2 -0
  15. package/esm2022/lib/components/from-to/from-to.component.mjs +100 -0
  16. package/esm2022/lib/components/iac-qr/iac-qr.component.mjs +192 -0
  17. package/esm2022/lib/components/identicon/identicon.component.mjs +51 -0
  18. package/esm2022/lib/components/isolated-modules-badges/isolated-modules-badges.component.mjs +16 -0
  19. package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.component.mjs +43 -0
  20. package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.facade.mjs +7 -0
  21. package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.component.mjs +50 -0
  22. package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
  23. package/esm2022/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.mjs +12 -0
  24. package/esm2022/lib/components/network-badge/network-badge.component.mjs +19 -0
  25. package/esm2022/lib/components/qr/qr.component.mjs +36 -0
  26. package/esm2022/lib/components/qr-settings/qr-settings.component.mjs +30 -0
  27. package/esm2022/lib/components/titled-address/titled-address.component.mjs +31 -0
  28. package/esm2022/lib/components/titled-text/titled-text.component.mjs +28 -0
  29. package/esm2022/lib/config/app-config.mjs +3 -0
  30. package/esm2022/lib/pages/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
  31. package/esm2022/lib/pipes/amount-converter/amount-converter.pipe.mjs +82 -0
  32. package/esm2022/lib/pipes/fee-converter/fee-converter.pipe.mjs +36 -0
  33. package/esm2022/lib/pipes/pipes.module.mjs +19 -0
  34. package/esm2022/lib/pipes/wallet-filter/wallet-filter.pipe.mjs +36 -0
  35. package/esm2022/lib/protocol/adapter/protocol-v0-adapter.mjs +880 -0
  36. package/esm2022/lib/protocol/isolated/base-isolated.mjs +27 -0
  37. package/esm2022/lib/protocol/isolated/block-explorer-isolated.mjs +32 -0
  38. package/esm2022/lib/protocol/isolated/protocol-offline-isolated.mjs +37 -0
  39. package/esm2022/lib/protocol/isolated/protocol-online-isolated.mjs +52 -0
  40. package/esm2022/lib/protocol/isolated/v3-serializer-companion-isolated.mjs +35 -0
  41. package/esm2022/lib/services/address/address.service.mjs +78 -0
  42. package/esm2022/lib/services/clipboard/clipboard.service.mjs +48 -0
  43. package/esm2022/lib/services/deeplink/deeplink.service.mjs +73 -0
  44. package/esm2022/lib/services/environment/base-environment.service.mjs +6 -0
  45. package/esm2022/lib/services/filesystem/filesystem.service.mjs +291 -0
  46. package/esm2022/lib/services/iac/base.iac.service.mjs +155 -0
  47. package/esm2022/lib/services/iac/message-handler-single.mjs +48 -0
  48. package/esm2022/lib/services/iac/message-handler.mjs +22 -0
  49. package/esm2022/lib/services/iac/qr-generator.mjs +17 -0
  50. package/esm2022/lib/services/image/fetcher/image-direct.fetcher.mjs +16 -0
  51. package/esm2022/lib/services/image/fetcher/image-proxy.fetcher.mjs +45 -0
  52. package/esm2022/lib/services/image/image.service.mjs +39 -0
  53. package/esm2022/lib/services/key-pair/key-pair.service.mjs +57 -0
  54. package/esm2022/lib/services/language/language.service.mjs +47 -0
  55. package/esm2022/lib/services/modules/base-modules.service.mjs +157 -0
  56. package/esm2022/lib/services/modules/controller/base-modules.controller.mjs +2 -0
  57. package/esm2022/lib/services/modules/controller/integral/integral-modules.controller.mjs +91 -0
  58. package/esm2022/lib/services/modules/controller/isolated/isolated-modules.controller.mjs +190 -0
  59. package/esm2022/lib/services/modules/controller/modules.controller.mjs +85 -0
  60. package/esm2022/lib/services/permissions/permissions.service.mjs +140 -0
  61. package/esm2022/lib/services/protocol/defaults.mjs +55 -0
  62. package/esm2022/lib/services/protocol/protocol.service.mjs +230 -0
  63. package/esm2022/lib/services/protocol/store/base-protocol-store.service.mjs +63 -0
  64. package/esm2022/lib/services/protocol/store/main/main-protocol-store.service.mjs +91 -0
  65. package/esm2022/lib/services/protocol/store/sub/sub-protocol-store.service.mjs +174 -0
  66. package/esm2022/lib/services/qr/qr-generators/bc-ur-generator.mjs +127 -0
  67. package/esm2022/lib/services/qr/qr-generators/metamask-generator.mjs +117 -0
  68. package/esm2022/lib/services/qr/qr-generators/output-descriptor-generator.mjs +49 -0
  69. package/esm2022/lib/services/qr/qr-generators/serializer-v2-generator.mjs +30 -0
  70. package/esm2022/lib/services/qr/qr-generators/serializer-v3-generator.mjs +45 -0
  71. package/esm2022/lib/services/qr/qr-generators/xpub-generator.mjs +38 -0
  72. package/esm2022/lib/services/qr/qr-handler/serializer-v2-handler.mjs +114 -0
  73. package/esm2022/lib/services/qr/qr-handler/serializer-v3-handler.mjs +274 -0
  74. package/esm2022/lib/services/qr-scanner/qr-scanner.service.mjs +61 -0
  75. package/esm2022/lib/services/serializer/serializer.service.mjs +181 -0
  76. package/esm2022/lib/services/storage/base.storage.mjs +30 -0
  77. package/esm2022/lib/services/storage/storage.service.mjs +33 -0
  78. package/esm2022/lib/services/token/token.service.mjs +52 -0
  79. package/esm2022/lib/services/transaction/transaction.service.mjs +67 -0
  80. package/esm2022/lib/services/ui-event/ui-event.service.mjs +198 -0
  81. package/esm2022/lib/services/ui-event-elements/ui-event-elements.service.mjs +122 -0
  82. package/esm2022/lib/services/uri/uri.service.mjs +51 -0
  83. package/esm2022/lib/translation/AirGapTranslateLoader.mjs +26 -0
  84. package/esm2022/lib/types/Either.mjs +2 -0
  85. package/esm2022/lib/types/ExternalAliasResolver.mjs +2 -0
  86. package/esm2022/lib/types/RuntimeMode.mjs +6 -0
  87. package/esm2022/lib/types/SupportedLanguage.mjs +2 -0
  88. package/esm2022/lib/types/Token.mjs +2 -0
  89. package/esm2022/lib/types/isolated-modules/IsolatedModule.mjs +2 -0
  90. package/esm2022/lib/types/isolated-modules/IsolatedModuleManifest.mjs +2 -0
  91. package/esm2022/lib/types/isolated-modules/IsolatedModuleMetadata.mjs +2 -0
  92. package/esm2022/lib/types/ui/UIAction.mjs +6 -0
  93. package/esm2022/lib/types/ui/UIResource.mjs +8 -0
  94. package/esm2022/lib/utils/ExposedPromise.mjs +103 -0
  95. package/esm2022/lib/utils/airgap-transaction.mjs +23 -0
  96. package/esm2022/lib/utils/array.mjs +32 -0
  97. package/esm2022/lib/utils/modules/isolated/isolated-modules-metadata.mjs +10 -0
  98. package/esm2022/lib/utils/modules/load-protocol.mjs +19 -0
  99. package/esm2022/lib/utils/not-initialized.mjs +7 -0
  100. package/esm2022/lib/utils/protocol/delegation.mjs +33 -0
  101. package/esm2022/lib/utils/protocol/protocol-identifier.mjs +4 -0
  102. package/esm2022/lib/utils/protocol/protocol-network-identifier.mjs +18 -0
  103. package/esm2022/lib/utils/protocol/protocol-options.mjs +114 -0
  104. package/esm2022/lib/utils/protocol/protocol-v0-adapter.mjs +390 -0
  105. package/esm2022/lib/utils/utils.mjs +80 -0
  106. package/esm2022/lib/utils/worker.mjs +28 -0
  107. package/esm2022/public-api.mjs +102 -0
  108. package/esm2022/wallfree-dev-angular-core.mjs +5 -0
  109. package/fesm2022/wallfree-dev-angular-core.mjs +6933 -0
  110. package/fesm2022/wallfree-dev-angular-core.mjs.map +1 -0
  111. package/index.d.ts +6 -0
  112. package/lib/airgap-angular-core.module.d.ts +25 -0
  113. package/lib/airgap-angular-core.module.d.ts.map +1 -0
  114. package/lib/base/base.component.d.ts +18 -0
  115. package/lib/base/base.component.d.ts.map +1 -0
  116. package/lib/base/base.facade.d.ts +16 -0
  117. package/lib/base/base.facade.d.ts.map +1 -0
  118. package/lib/capacitor-plugins/definitions.d.ts +122 -0
  119. package/lib/capacitor-plugins/definitions.d.ts.map +1 -0
  120. package/lib/capacitor-plugins/injection-tokens.d.ts +18 -0
  121. package/lib/capacitor-plugins/injection-tokens.d.ts.map +1 -0
  122. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts +20 -0
  123. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts.map +1 -0
  124. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts +38 -0
  125. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts.map +1 -0
  126. package/lib/components/account-item/account-item.component.d.ts +15 -0
  127. package/lib/components/account-item/account-item.component.d.ts.map +1 -0
  128. package/lib/components/account-selection/account-selection.component.d.ts +23 -0
  129. package/lib/components/account-selection/account-selection.component.d.ts.map +1 -0
  130. package/lib/components/components.module.d.ts +28 -0
  131. package/lib/components/components.module.d.ts.map +1 -0
  132. package/lib/components/currency-symbol/currency-symbol.component.d.ts +20 -0
  133. package/lib/components/currency-symbol/currency-symbol.component.d.ts.map +1 -0
  134. package/lib/components/currency-symbol/currency-symbol.facade.d.ts +16 -0
  135. package/lib/components/currency-symbol/currency-symbol.facade.d.ts.map +1 -0
  136. package/lib/components/currency-symbol/currency-symbol.types.d.ts +35 -0
  137. package/lib/components/currency-symbol/currency-symbol.types.d.ts.map +1 -0
  138. package/lib/components/from-to/from-to.component.d.ts +33 -0
  139. package/lib/components/from-to/from-to.component.d.ts.map +1 -0
  140. package/lib/components/iac-qr/iac-qr.component.d.ts +45 -0
  141. package/lib/components/iac-qr/iac-qr.component.d.ts.map +1 -0
  142. package/lib/components/identicon/identicon.component.d.ts +14 -0
  143. package/lib/components/identicon/identicon.component.d.ts.map +1 -0
  144. package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts +8 -0
  145. package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts.map +1 -0
  146. package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts +17 -0
  147. package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts.map +1 -0
  148. package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts +17 -0
  149. package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts.map +1 -0
  150. package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts +20 -0
  151. package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts.map +1 -0
  152. package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts +15 -0
  153. package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
  154. package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts +6 -0
  155. package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts.map +1 -0
  156. package/lib/components/network-badge/network-badge.component.d.ts +9 -0
  157. package/lib/components/network-badge/network-badge.component.d.ts.map +1 -0
  158. package/lib/components/qr/qr.component.d.ts +16 -0
  159. package/lib/components/qr/qr.component.d.ts.map +1 -0
  160. package/lib/components/qr-settings/qr-settings.component.d.ts +12 -0
  161. package/lib/components/qr-settings/qr-settings.component.d.ts.map +1 -0
  162. package/lib/components/titled-address/titled-address.component.d.ts +13 -0
  163. package/lib/components/titled-address/titled-address.component.d.ts.map +1 -0
  164. package/lib/components/titled-text/titled-text.component.d.ts +11 -0
  165. package/lib/components/titled-text/titled-text.component.d.ts.map +1 -0
  166. package/lib/config/app-config.d.ts +15 -0
  167. package/lib/config/app-config.d.ts.map +1 -0
  168. package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts +16 -0
  169. package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
  170. package/lib/pipes/amount-converter/amount-converter.pipe.d.ts +29 -0
  171. package/lib/pipes/amount-converter/amount-converter.pipe.d.ts.map +1 -0
  172. package/lib/pipes/fee-converter/fee-converter.pipe.d.ts +20 -0
  173. package/lib/pipes/fee-converter/fee-converter.pipe.d.ts.map +1 -0
  174. package/lib/pipes/pipes.module.d.ts +10 -0
  175. package/lib/pipes/pipes.module.d.ts.map +1 -0
  176. package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts +15 -0
  177. package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts.map +1 -0
  178. package/lib/protocol/adapter/protocol-v0-adapter.d.ts +231 -0
  179. package/lib/protocol/adapter/protocol-v0-adapter.d.ts.map +1 -0
  180. package/lib/protocol/isolated/base-isolated.d.ts +11 -0
  181. package/lib/protocol/isolated/base-isolated.d.ts.map +1 -0
  182. package/lib/protocol/isolated/block-explorer-isolated.d.ts +14 -0
  183. package/lib/protocol/isolated/block-explorer-isolated.d.ts.map +1 -0
  184. package/lib/protocol/isolated/protocol-offline-isolated.d.ts +17 -0
  185. package/lib/protocol/isolated/protocol-offline-isolated.d.ts.map +1 -0
  186. package/lib/protocol/isolated/protocol-online-isolated.d.ts +21 -0
  187. package/lib/protocol/isolated/protocol-online-isolated.d.ts.map +1 -0
  188. package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts +17 -0
  189. package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts.map +1 -0
  190. package/lib/services/address/address.service.d.ts +26 -0
  191. package/lib/services/address/address.service.d.ts.map +1 -0
  192. package/lib/services/clipboard/clipboard.service.d.ts +14 -0
  193. package/lib/services/clipboard/clipboard.service.d.ts.map +1 -0
  194. package/lib/services/deeplink/deeplink.service.d.ts +18 -0
  195. package/lib/services/deeplink/deeplink.service.d.ts.map +1 -0
  196. package/lib/services/environment/base-environment.service.d.ts +6 -0
  197. package/lib/services/environment/base-environment.service.d.ts.map +1 -0
  198. package/lib/services/filesystem/filesystem.service.d.ts +42 -0
  199. package/lib/services/filesystem/filesystem.service.d.ts.map +1 -0
  200. package/lib/services/iac/base.iac.service.d.ts +41 -0
  201. package/lib/services/iac/base.iac.service.d.ts.map +1 -0
  202. package/lib/services/iac/message-handler-single.d.ts +20 -0
  203. package/lib/services/iac/message-handler-single.d.ts.map +1 -0
  204. package/lib/services/iac/message-handler.d.ts +34 -0
  205. package/lib/services/iac/message-handler.d.ts.map +1 -0
  206. package/lib/services/iac/qr-generator.d.ts +13 -0
  207. package/lib/services/iac/qr-generator.d.ts.map +1 -0
  208. package/lib/services/image/fetcher/image-direct.fetcher.d.ts +9 -0
  209. package/lib/services/image/fetcher/image-direct.fetcher.d.ts.map +1 -0
  210. package/lib/services/image/fetcher/image-proxy.fetcher.d.ts +9 -0
  211. package/lib/services/image/fetcher/image-proxy.fetcher.d.ts.map +1 -0
  212. package/lib/services/image/image.service.d.ts +20 -0
  213. package/lib/services/image/image.service.d.ts.map +1 -0
  214. package/lib/services/key-pair/key-pair.service.d.ts +14 -0
  215. package/lib/services/key-pair/key-pair.service.d.ts.map +1 -0
  216. package/lib/services/language/language.service.d.ts +21 -0
  217. package/lib/services/language/language.service.d.ts.map +1 -0
  218. package/lib/services/modules/base-modules.service.d.ts +34 -0
  219. package/lib/services/modules/base-modules.service.d.ts.map +1 -0
  220. package/lib/services/modules/controller/base-modules.controller.d.ts +19 -0
  221. package/lib/services/modules/controller/base-modules.controller.d.ts.map +1 -0
  222. package/lib/services/modules/controller/integral/integral-modules.controller.d.ts +22 -0
  223. package/lib/services/modules/controller/integral/integral-modules.controller.d.ts.map +1 -0
  224. package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts +32 -0
  225. package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts.map +1 -0
  226. package/lib/services/modules/controller/modules.controller.d.ts +27 -0
  227. package/lib/services/modules/controller/modules.controller.d.ts.map +1 -0
  228. package/lib/services/permissions/permissions.service.d.ts +39 -0
  229. package/lib/services/permissions/permissions.service.d.ts.map +1 -0
  230. package/lib/services/protocol/defaults.d.ts +6 -0
  231. package/lib/services/protocol/defaults.d.ts.map +1 -0
  232. package/lib/services/protocol/protocol.service.d.ts +47 -0
  233. package/lib/services/protocol/protocol.service.d.ts.map +1 -0
  234. package/lib/services/protocol/store/base-protocol-store.service.d.ts +36 -0
  235. package/lib/services/protocol/store/base-protocol-store.service.d.ts.map +1 -0
  236. package/lib/services/protocol/store/main/main-protocol-store.service.d.ts +21 -0
  237. package/lib/services/protocol/store/main/main-protocol-store.service.d.ts.map +1 -0
  238. package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts +31 -0
  239. package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts.map +1 -0
  240. package/lib/services/qr/qr-generators/bc-ur-generator.d.ts +16 -0
  241. package/lib/services/qr/qr-generators/bc-ur-generator.d.ts.map +1 -0
  242. package/lib/services/qr/qr-generators/metamask-generator.d.ts +16 -0
  243. package/lib/services/qr/qr-generators/metamask-generator.d.ts.map +1 -0
  244. package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts +13 -0
  245. package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts.map +1 -0
  246. package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts +13 -0
  247. package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts.map +1 -0
  248. package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts +12 -0
  249. package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts.map +1 -0
  250. package/lib/services/qr/qr-generators/xpub-generator.d.ts +12 -0
  251. package/lib/services/qr/qr-generators/xpub-generator.d.ts.map +1 -0
  252. package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts +20 -0
  253. package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts.map +1 -0
  254. package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts +23 -0
  255. package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts.map +1 -0
  256. package/lib/services/qr-scanner/qr-scanner.service.d.ts +23 -0
  257. package/lib/services/qr-scanner/qr-scanner.service.d.ts.map +1 -0
  258. package/lib/services/serializer/serializer.service.d.ts +34 -0
  259. package/lib/services/serializer/serializer.service.d.ts.map +1 -0
  260. package/lib/services/storage/base.storage.d.ts +15 -0
  261. package/lib/services/storage/base.storage.d.ts.map +1 -0
  262. package/lib/services/storage/storage.service.d.ts +28 -0
  263. package/lib/services/storage/storage.service.d.ts.map +1 -0
  264. package/lib/services/token/token.service.d.ts +11 -0
  265. package/lib/services/token/token.service.d.ts.map +1 -0
  266. package/lib/services/transaction/transaction.service.d.ts +21 -0
  267. package/lib/services/transaction/transaction.service.d.ts.map +1 -0
  268. package/lib/services/ui-event/ui-event.service.d.ts +58 -0
  269. package/lib/services/ui-event/ui-event.service.d.ts.map +1 -0
  270. package/lib/services/ui-event-elements/ui-event-elements.service.d.ts +16 -0
  271. package/lib/services/ui-event-elements/ui-event-elements.service.d.ts.map +1 -0
  272. package/lib/services/uri/uri.service.d.ts +15 -0
  273. package/lib/services/uri/uri.service.d.ts.map +1 -0
  274. package/lib/translation/AirGapTranslateLoader.d.ts +15 -0
  275. package/lib/translation/AirGapTranslateLoader.d.ts.map +1 -0
  276. package/lib/types/Either.d.ts +2 -0
  277. package/lib/types/Either.d.ts.map +1 -0
  278. package/lib/types/ExternalAliasResolver.d.ts +6 -0
  279. package/lib/types/ExternalAliasResolver.d.ts.map +1 -0
  280. package/lib/types/RuntimeMode.d.ts +5 -0
  281. package/lib/types/RuntimeMode.d.ts.map +1 -0
  282. package/lib/types/SupportedLanguage.d.ts +2 -0
  283. package/lib/types/SupportedLanguage.d.ts.map +1 -0
  284. package/lib/types/Token.d.ts +9 -0
  285. package/lib/types/Token.d.ts.map +1 -0
  286. package/lib/types/isolated-modules/IsolatedModule.d.ts +28 -0
  287. package/lib/types/isolated-modules/IsolatedModule.d.ts.map +1 -0
  288. package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts +24 -0
  289. package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts.map +1 -0
  290. package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts +21 -0
  291. package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts.map +1 -0
  292. package/lib/types/ui/UIAction.d.ts +10 -0
  293. package/lib/types/ui/UIAction.d.ts.map +1 -0
  294. package/lib/types/ui/UIResource.d.ts +11 -0
  295. package/lib/types/ui/UIResource.d.ts.map +1 -0
  296. package/lib/utils/ExposedPromise.d.ts +40 -0
  297. package/lib/utils/ExposedPromise.d.ts.map +1 -0
  298. package/lib/utils/airgap-transaction.d.ts +4 -0
  299. package/lib/utils/airgap-transaction.d.ts.map +1 -0
  300. package/lib/utils/array.d.ts +6 -0
  301. package/lib/utils/array.d.ts.map +1 -0
  302. package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts +3 -0
  303. package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts.map +1 -0
  304. package/lib/utils/modules/load-protocol.d.ts +4 -0
  305. package/lib/utils/modules/load-protocol.d.ts.map +1 -0
  306. package/lib/utils/not-initialized.d.ts +2 -0
  307. package/lib/utils/not-initialized.d.ts.map +1 -0
  308. package/lib/utils/protocol/delegation.d.ts +6 -0
  309. package/lib/utils/protocol/delegation.d.ts.map +1 -0
  310. package/lib/utils/protocol/protocol-identifier.d.ts +3 -0
  311. package/lib/utils/protocol/protocol-identifier.d.ts.map +1 -0
  312. package/lib/utils/protocol/protocol-network-identifier.d.ts +8 -0
  313. package/lib/utils/protocol/protocol-network-identifier.d.ts.map +1 -0
  314. package/lib/utils/protocol/protocol-options.d.ts +6 -0
  315. package/lib/utils/protocol/protocol-options.d.ts.map +1 -0
  316. package/lib/utils/protocol/protocol-v0-adapter.d.ts +75 -0
  317. package/lib/utils/protocol/protocol-v0-adapter.d.ts.map +1 -0
  318. package/lib/utils/utils.d.ts +9 -0
  319. package/lib/utils/utils.d.ts.map +1 -0
  320. package/lib/utils/worker.d.ts +11 -0
  321. package/lib/utils/worker.d.ts.map +1 -0
  322. package/package.json +88 -0
  323. package/public-api.d.ts +87 -0
  324. package/public-api.d.ts.map +1 -0
  325. package/src/assets/i18n-common/de.json +112 -0
  326. package/src/assets/i18n-common/en.json +112 -0
  327. package/src/assets/i18n-common/es.json +112 -0
  328. package/src/assets/i18n-common/fr.json +112 -0
  329. package/src/assets/i18n-common/pt_BR.json +112 -0
  330. package/src/assets/i18n-common/ru.json +112 -0
  331. package/src/assets/i18n-common/zh_CN.json +112 -0
  332. package/src/assets/img/identicon_placeholder.png +0 -0
  333. package/src/assets/native/isolated_modules/isolated-modules.js-engine-android.js +34 -0
  334. package/src/assets/native/isolated_modules/isolated-modules.script.js +304 -0
  335. package/src/assets/symbols/abt.svg +1 -0
  336. package/src/assets/symbols/adx.svg +1 -0
  337. package/src/assets/symbols/ae.svg +17 -0
  338. package/src/assets/symbols/agi.svg +1 -0
  339. package/src/assets/symbols/aion.svg +1 -0
  340. package/src/assets/symbols/amb.svg +1 -0
  341. package/src/assets/symbols/ampl.svg +7 -0
  342. package/src/assets/symbols/ant.svg +1 -0
  343. package/src/assets/symbols/aoa.svg +7 -0
  344. package/src/assets/symbols/appc.svg +1 -0
  345. package/src/assets/symbols/aqua.svg +5 -0
  346. package/src/assets/symbols/arn.svg +1 -0
  347. package/src/assets/symbols/ary.svg +1 -0
  348. package/src/assets/symbols/ast.svg +1 -0
  349. package/src/assets/symbols/astr.png +0 -0
  350. package/src/assets/symbols/atm.svg +1 -0
  351. package/src/assets/symbols/atom.svg +1 -0
  352. package/src/assets/symbols/auto.svg +1 -0
  353. package/src/assets/symbols/bal.svg +7 -0
  354. package/src/assets/symbols/band.svg +7 -0
  355. package/src/assets/symbols/bat.svg +1 -0
  356. package/src/assets/symbols/bcbc.svg +1 -0
  357. package/src/assets/symbols/bcpt.svg +1 -0
  358. package/src/assets/symbols/bix.svg +1 -0
  359. package/src/assets/symbols/blz.svg +1 -0
  360. package/src/assets/symbols/bnb.svg +1 -0
  361. package/src/assets/symbols/bnt.svg +1 -0
  362. package/src/assets/symbols/bnty.svg +1 -0
  363. package/src/assets/symbols/bpt.svg +1 -0
  364. package/src/assets/symbols/brc.svg +7 -0
  365. package/src/assets/symbols/brd.svg +1 -0
  366. package/src/assets/symbols/btc.svg +1 -0
  367. package/src/assets/symbols/btctz.png +0 -0
  368. package/src/assets/symbols/btm.svg +1 -0
  369. package/src/assets/symbols/busd.svg +7 -0
  370. package/src/assets/symbols/bytom.svg +7 -0
  371. package/src/assets/symbols/cacu.svg +1 -0
  372. package/src/assets/symbols/cdt.svg +1 -0
  373. package/src/assets/symbols/cel.svg +7 -0
  374. package/src/assets/symbols/cennz.svg +7 -0
  375. package/src/assets/symbols/cfx.svg +1 -0
  376. package/src/assets/symbols/chsb.svg +7 -0
  377. package/src/assets/symbols/chz.svg +7 -0
  378. package/src/assets/symbols/ckbtc.png +0 -0
  379. package/src/assets/symbols/cmt.svg +1 -0
  380. package/src/assets/symbols/cnd.svg +1 -0
  381. package/src/assets/symbols/cob.svg +1 -0
  382. package/src/assets/symbols/comp.svg +7 -0
  383. package/src/assets/symbols/coreum.png +0 -0
  384. package/src/assets/symbols/cred.svg +1 -0
  385. package/src/assets/symbols/cro.svg +7 -0
  386. package/src/assets/symbols/crpt.svg +1 -0
  387. package/src/assets/symbols/crv.svg +7 -0
  388. package/src/assets/symbols/cs.svg +1 -0
  389. package/src/assets/symbols/ctez.svg +1 -0
  390. package/src/assets/symbols/ctr.svg +1 -0
  391. package/src/assets/symbols/ctxc.svg +1 -0
  392. package/src/assets/symbols/cusdc.svg +7 -0
  393. package/src/assets/symbols/cvc.svg +1 -0
  394. package/src/assets/symbols/cvt.svg +7 -0
  395. package/src/assets/symbols/czrx.svg +7 -0
  396. package/src/assets/symbols/dai.svg +7 -0
  397. package/src/assets/symbols/dat.svg +1 -0
  398. package/src/assets/symbols/data.svg +1 -0
  399. package/src/assets/symbols/dcn.svg +1 -0
  400. package/src/assets/symbols/deez.svg +1 -0
  401. package/src/assets/symbols/dent.svg +1 -0
  402. package/src/assets/symbols/dew.svg +1 -0
  403. package/src/assets/symbols/dgd.svg +1 -0
  404. package/src/assets/symbols/dia.svg +7 -0
  405. package/src/assets/symbols/divx.svg +7 -0
  406. package/src/assets/symbols/dlt.svg +1 -0
  407. package/src/assets/symbols/dnt.svg +1 -0
  408. package/src/assets/symbols/dock.svg +1 -0
  409. package/src/assets/symbols/doga.png +0 -0
  410. package/src/assets/symbols/dot.svg +14 -0
  411. package/src/assets/symbols/drgn.svg +1 -0
  412. package/src/assets/symbols/drop.svg +1 -0
  413. package/src/assets/symbols/dth.svg +1 -0
  414. package/src/assets/symbols/dtr.svg +1 -0
  415. package/src/assets/symbols/dx.svg +7 -0
  416. package/src/assets/symbols/edg.svg +1 -0
  417. package/src/assets/symbols/edo.svg +1 -0
  418. package/src/assets/symbols/elf.svg +1 -0
  419. package/src/assets/symbols/elix.svg +1 -0
  420. package/src/assets/symbols/eng.svg +1 -0
  421. package/src/assets/symbols/enj.svg +1 -0
  422. package/src/assets/symbols/entrp.svg +1 -0
  423. package/src/assets/symbols/eos.svg +1 -0
  424. package/src/assets/symbols/eth.svg +1 -0
  425. package/src/assets/symbols/ethtz.png +0 -0
  426. package/src/assets/symbols/eurc.svg +8 -0
  427. package/src/assets/symbols/evx.svg +1 -0
  428. package/src/assets/symbols/fet.svg +7 -0
  429. package/src/assets/symbols/frax.svg +26 -0
  430. package/src/assets/symbols/fsn.svg +1 -0
  431. package/src/assets/symbols/ftc.svg +1 -0
  432. package/src/assets/symbols/ftm.svg +7 -0
  433. package/src/assets/symbols/fuel.svg +1 -0
  434. package/src/assets/symbols/fun.svg +1 -0
  435. package/src/assets/symbols/gbx.svg +1 -0
  436. package/src/assets/symbols/generic-coin.svg +1 -0
  437. package/src/assets/symbols/glmr.svg +1 -0
  438. package/src/assets/symbols/gno.svg +1 -0
  439. package/src/assets/symbols/gnt.svg +1 -0
  440. package/src/assets/symbols/grs.svg +1 -0
  441. package/src/assets/symbols/gsc.svg +1 -0
  442. package/src/assets/symbols/gto.svg +1 -0
  443. package/src/assets/symbols/gup.svg +1 -0
  444. package/src/assets/symbols/gusd.svg +1 -0
  445. package/src/assets/symbols/gvt.svg +1 -0
  446. package/src/assets/symbols/gzr.svg +1 -0
  447. package/src/assets/symbols/hedg.svg +7 -0
  448. package/src/assets/symbols/hodl.svg +1 -0
  449. package/src/assets/symbols/hot.svg +7 -0
  450. package/src/assets/symbols/hpb.svg +1 -0
  451. package/src/assets/symbols/ht.svg +1 -0
  452. package/src/assets/symbols/husd.svg +7 -0
  453. package/src/assets/symbols/icn.svg +1 -0
  454. package/src/assets/symbols/icp.svg +16 -0
  455. package/src/assets/symbols/icx.svg +1 -0
  456. package/src/assets/symbols/inb.svg +7 -0
  457. package/src/assets/symbols/ino.svg +7 -0
  458. package/src/assets/symbols/ins.svg +1 -0
  459. package/src/assets/symbols/iost.svg +1 -0
  460. package/src/assets/symbols/iotx.svg +1 -0
  461. package/src/assets/symbols/itc.svg +1 -0
  462. package/src/assets/symbols/jnt.svg +1 -0
  463. package/src/assets/symbols/kcs.svg +7 -0
  464. package/src/assets/symbols/kin.svg +1 -0
  465. package/src/assets/symbols/knc.svg +1 -0
  466. package/src/assets/symbols/ksm.svg +1 -0
  467. package/src/assets/symbols/kusd.svg +1 -0
  468. package/src/assets/symbols/ldo.svg +97 -0
  469. package/src/assets/symbols/lend.svg +1 -0
  470. package/src/assets/symbols/leo.svg +7 -0
  471. package/src/assets/symbols/link.svg +7 -0
  472. package/src/assets/symbols/loom.svg +1 -0
  473. package/src/assets/symbols/lpt.svg +1 -0
  474. package/src/assets/symbols/lrc.svg +1 -0
  475. package/src/assets/symbols/lun.svg +1 -0
  476. package/src/assets/symbols/mana.svg +1 -0
  477. package/src/assets/symbols/matic.svg +7 -0
  478. package/src/assets/symbols/mcap.svg +1 -0
  479. package/src/assets/symbols/mco.svg +1 -0
  480. package/src/assets/symbols/mda.svg +1 -0
  481. package/src/assets/symbols/mds.svg +1 -0
  482. package/src/assets/symbols/mkr.svg +1 -0
  483. package/src/assets/symbols/mln.svg +7 -0
  484. package/src/assets/symbols/mnw.svg +1 -0
  485. package/src/assets/symbols/mod.svg +1 -0
  486. package/src/assets/symbols/movr.svg +10 -0
  487. package/src/assets/symbols/mth.svg +1 -0
  488. package/src/assets/symbols/mtl.svg +1 -0
  489. package/src/assets/symbols/mxc.svg +7 -0
  490. package/src/assets/symbols/nas.svg +1 -0
  491. package/src/assets/symbols/ncash.svg +1 -0
  492. package/src/assets/symbols/neu.svg +1 -0
  493. package/src/assets/symbols/nexo.svg +1 -0
  494. package/src/assets/symbols/ngc.svg +1 -0
  495. package/src/assets/symbols/nio.svg +1 -0
  496. package/src/assets/symbols/nmr.svg +7 -0
  497. package/src/assets/symbols/noah.svg +7 -0
  498. package/src/assets/symbols/npxs.svg +1 -0
  499. package/src/assets/symbols/nuls.svg +1 -0
  500. package/src/assets/symbols/nxm.svg +7 -0
  501. package/src/assets/symbols/oax.svg +1 -0
  502. package/src/assets/symbols/ocean.svg +7 -0
  503. package/src/assets/symbols/okb.svg +7 -0
  504. package/src/assets/symbols/omg.svg +1 -0
  505. package/src/assets/symbols/ong.svg +1 -0
  506. package/src/assets/symbols/op.svg +21 -0
  507. package/src/assets/symbols/ost.svg +1 -0
  508. package/src/assets/symbols/pax.svg +1 -0
  509. package/src/assets/symbols/paxg.svg +7 -0
  510. package/src/assets/symbols/pay.svg +1 -0
  511. package/src/assets/symbols/plenty.svg +1 -0
  512. package/src/assets/symbols/plr.svg +1 -0
  513. package/src/assets/symbols/pnk.svg +7 -0
  514. package/src/assets/symbols/poe.svg +1 -0
  515. package/src/assets/symbols/poly.svg +1 -0
  516. package/src/assets/symbols/powr.svg +1 -0
  517. package/src/assets/symbols/ppp.svg +1 -0
  518. package/src/assets/symbols/ppt.svg +1 -0
  519. package/src/assets/symbols/prl.svg +1 -0
  520. package/src/assets/symbols/qash.svg +1 -0
  521. package/src/assets/symbols/qnt.svg +7 -0
  522. package/src/assets/symbols/qrl.svg +1 -0
  523. package/src/assets/symbols/qsp.svg +1 -0
  524. package/src/assets/symbols/qtum.svg +1 -0
  525. package/src/assets/symbols/quipu.png +0 -0
  526. package/src/assets/symbols/r.svg +1 -0
  527. package/src/assets/symbols/rcn.svg +1 -0
  528. package/src/assets/symbols/rdn.svg +1 -0
  529. package/src/assets/symbols/ren.svg +7 -0
  530. package/src/assets/symbols/rep.svg +1 -0
  531. package/src/assets/symbols/repv2.svg +7 -0
  532. package/src/assets/symbols/req.svg +1 -0
  533. package/src/assets/symbols/rev.svg +7 -0
  534. package/src/assets/symbols/rhoc.svg +1 -0
  535. package/src/assets/symbols/rlc.svg +1 -0
  536. package/src/assets/symbols/rsr.svg +7 -0
  537. package/src/assets/symbols/sai.svg +7 -0
  538. package/src/assets/symbols/salt.svg +1 -0
  539. package/src/assets/symbols/san.svg +1 -0
  540. package/src/assets/symbols/sdn.svg +1 -0
  541. package/src/assets/symbols/shx.svg +32 -0
  542. package/src/assets/symbols/sirs.svg +1 -0
  543. package/src/assets/symbols/smart.svg +1 -0
  544. package/src/assets/symbols/sngls.svg +1 -0
  545. package/src/assets/symbols/snm.svg +1 -0
  546. package/src/assets/symbols/snt.svg +1 -0
  547. package/src/assets/symbols/snx.svg +7 -0
  548. package/src/assets/symbols/soc.svg +1 -0
  549. package/src/assets/symbols/sol.svg +1 -0
  550. package/src/assets/symbols/spank.svg +1 -0
  551. package/src/assets/symbols/sphtx.svg +1 -0
  552. package/src/assets/symbols/srm.svg +7 -0
  553. package/src/assets/symbols/srn.svg +1 -0
  554. package/src/assets/symbols/stake.svg +7 -0
  555. package/src/assets/symbols/stellar.png +0 -0
  556. package/src/assets/symbols/storj.svg +1 -0
  557. package/src/assets/symbols/storm.svg +1 -0
  558. package/src/assets/symbols/stq.svg +1 -0
  559. package/src/assets/symbols/stxtz.svg +18 -0
  560. package/src/assets/symbols/sub.svg +1 -0
  561. package/src/assets/symbols/sushi.svg +7 -0
  562. package/src/assets/symbols/sxp.svg +7 -0
  563. package/src/assets/symbols/sxtz.svg +6 -0
  564. package/src/assets/symbols/taas.svg +1 -0
  565. package/src/assets/symbols/tau.svg +1 -0
  566. package/src/assets/symbols/tbx.svg +1 -0
  567. package/src/assets/symbols/tel.svg +1 -0
  568. package/src/assets/symbols/ten.svg +1 -0
  569. package/src/assets/symbols/theta.svg +1 -0
  570. package/src/assets/symbols/tix.svg +1 -0
  571. package/src/assets/symbols/tkn.svg +1 -0
  572. package/src/assets/symbols/tnt.svg +1 -0
  573. package/src/assets/symbols/tomo.svg +1 -0
  574. package/src/assets/symbols/trac.svg +7 -0
  575. package/src/assets/symbols/trb.svg +7 -0
  576. package/src/assets/symbols/trx.svg +1 -0
  577. package/src/assets/symbols/tusd.svg +1 -0
  578. package/src/assets/symbols/tzbtc.svg +1 -0
  579. package/src/assets/symbols/ubt.svg +7 -0
  580. package/src/assets/symbols/ubtc.svg +1 -0
  581. package/src/assets/symbols/udefi.svg +1 -0
  582. package/src/assets/symbols/uma.svg +7 -0
  583. package/src/assets/symbols/usdc.svg +1 -0
  584. package/src/assets/symbols/usdt.png +0 -0
  585. package/src/assets/symbols/usdt.svg +1 -0
  586. package/src/assets/symbols/usdtz.svg +17 -0
  587. package/src/assets/symbols/ust.svg +1 -0
  588. package/src/assets/symbols/utk.svg +1 -0
  589. package/src/assets/symbols/uusd.svg +1 -0
  590. package/src/assets/symbols/uxtz.svg +1 -0
  591. package/src/assets/symbols/velo.svg +5 -0
  592. package/src/assets/symbols/ven.svg +7 -0
  593. package/src/assets/symbols/veri.svg +1 -0
  594. package/src/assets/symbols/verse.svg +1 -0
  595. package/src/assets/symbols/vest.svg +7 -0
  596. package/src/assets/symbols/vib.svg +1 -0
  597. package/src/assets/symbols/vibe.svg +1 -0
  598. package/src/assets/symbols/wabi.svg +1 -0
  599. package/src/assets/symbols/wax.svg +1 -0
  600. package/src/assets/symbols/wbtc.svg +7 -0
  601. package/src/assets/symbols/weth.svg +18 -0
  602. package/src/assets/symbols/wic.svg +7 -0
  603. package/src/assets/symbols/wings.svg +1 -0
  604. package/src/assets/symbols/wnxm.svg +7 -0
  605. package/src/assets/symbols/wpr.svg +1 -0
  606. package/src/assets/symbols/wrap.png +0 -0
  607. package/src/assets/symbols/wtc.svg +1 -0
  608. package/src/assets/symbols/wusdc.png +0 -0
  609. package/src/assets/symbols/xchf.svg +1 -0
  610. package/src/assets/symbols/xdce.svg +7 -0
  611. package/src/assets/symbols/xin.svg +7 -0
  612. package/src/assets/symbols/xpa.svg +1 -0
  613. package/src/assets/symbols/xpl.svg +1 -0
  614. package/src/assets/symbols/xtz.svg +5 -0
  615. package/src/assets/symbols/yfi.svg +7 -0
  616. package/src/assets/symbols/you.svg +1 -0
  617. package/src/assets/symbols/yoyow.svg +1 -0
  618. package/src/assets/symbols/ytez.svg +1 -0
  619. package/src/assets/symbols/zb.svg +7 -0
  620. package/src/assets/symbols/zil.svg +1 -0
  621. package/src/assets/symbols/zrx.svg +1 -0
  622. package/src/assets/workers/airgap-coin-lib.js +119 -0
  623. package/wallfree-dev-angular-core.d.ts.map +1 -0
@@ -0,0 +1,390 @@
1
+ /* eslint-disable max-lines */
2
+ import { AeternityModule, createAeternityProtocol } from '@wallfree-dev/aeternity';
3
+ import { AstarModule, createAstarProtocol, createShidenProtocol } from '@wallfree-dev/astar';
4
+ import { ProtocolNetwork as ProtocolNetworkV0, NetworkType as ProtocolNetworkTypeV0 } from '@wallfree-dev/coinlib-core';
5
+ import { createERC20Token as createEthereumERC20Token, createEthereumProtocol, EthereumModule } from '@wallfree-dev/ethereum';
6
+ import { isOnlineProtocol, newAmount } from '@wallfree-dev/module-kit';
7
+ import { BitcoinModule, createBitcoinProtocol, createBitcoinSegwitProtocol } from '@wallfree-dev/bitcoin';
8
+ import { CoreumModule, createCoreumProtocol } from '@wallfree-dev/coreum';
9
+ import { CosmosModule, createCosmosProtocol } from '@wallfree-dev/cosmos';
10
+ import { createGroestlcoinProtocol, GroestlcoinModule } from '@wallfree-dev/groestlcoin';
11
+ import { createICPProtocol, ICPModule } from '@wallfree-dev/icp';
12
+ import { createMoonbaseProtocol, createMoonbeamProtocol, createMoonriverProtocol, MoonbeamModule } from '@wallfree-dev/moonbeam';
13
+ import { createERC20Token as createOptimismERC20Token, createOptimismProtocol, OptimismModule } from '@wallfree-dev/optimism';
14
+ import { createKusamaProtocol, createPolkadotProtocol, PolkadotModule } from '@wallfree-dev/polkadot';
15
+ import { createSolanaProtocol, SolanaModule } from '@wallfree-dev/solana';
16
+ import { createBTCTezProtocol, createCTezProtocol, createDogamiProtocol, createETHTezProtocol, createKolibriUSDProtocol, createPlentyProtocol, createQuipuswapProtocol, createSiriusProtocol, createStakerProtocol, createTetherUSDProtocol, createTezosFA1p2Protocol, createTezosFA2Protocol, createTezosKtProtocol, createTezosProtocol, createTezosShieldedTezProtocol, createTzBTCProtocol, createUBTCProtocol, createUDEFIProtocol, createUSDTezProtocol, createUUSDProtocol, createWrappedTezosProtocol, createWrapProtocol, createYouProtocol, TezosModule } from '@wallfree-dev/tezos';
17
+ import BigNumber from '@wallfree-dev/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber';
18
+ import { AirGapTransactionStatus as AirGapTransactionStatusV0, AirGapTransactionWarningType } from '@wallfree-dev/coinlib-core/interfaces/IAirGapTransaction';
19
+ import { isHex } from '@wallfree-dev/coinlib-core/utils/hex';
20
+ import { createICoinProtocolAdapter, createICoinSubProtocolAdapter, ProtocolBlockExplorerAdapter, ProtocolNetworkAdapter } from '../../protocol/adapter/protocol-v0-adapter';
21
+ // Network
22
+ export function convertNetworkTypeV0ToV1(type) {
23
+ return type === ProtocolNetworkTypeV0.MAINNET ? 'mainnet' : type === ProtocolNetworkTypeV0.TESTNET ? 'testnet' : 'custom';
24
+ }
25
+ export function convertNetworkTypeV1ToV0(type) {
26
+ return type === 'mainnet'
27
+ ? ProtocolNetworkTypeV0.MAINNET
28
+ : type === 'testnet'
29
+ ? ProtocolNetworkTypeV0.TESTNET
30
+ : ProtocolNetworkTypeV0.CUSTOM;
31
+ }
32
+ export function convertNetworkV0ToV1(network) {
33
+ return {
34
+ name: network.name,
35
+ type: convertNetworkTypeV0ToV1(network.type),
36
+ rpcUrl: network.rpcUrl,
37
+ blockExplorerUrl: network.blockExplorer.blockExplorer,
38
+ ...(typeof network.extras === 'object' ? network.extras : {})
39
+ };
40
+ }
41
+ export function convertNetworkV1ToV0(network, blockExplorer) {
42
+ const { name, type, rpcUrl, ...rest } = network;
43
+ const blockExplorerV0 = new ProtocolBlockExplorerAdapter(blockExplorer, network.blockExplorerUrl);
44
+ return new ProtocolNetworkAdapter(name, convertNetworkTypeV1ToV0(type), rpcUrl, blockExplorerV0, rest);
45
+ }
46
+ // Protocol
47
+ async function createAdapterSupplementsFromIdentifierAndNetwork(module, identifier, network) {
48
+ const [blockExplorer, v3SerializerCompanion] = await Promise.all([
49
+ module.createBlockExplorer(identifier, network),
50
+ module.createV3SerializerCompanion()
51
+ ]);
52
+ return [blockExplorer, v3SerializerCompanion];
53
+ }
54
+ async function createAdapterSupplementsFromProtocol(protocol, module) {
55
+ const [metadata, network] = await Promise.all([
56
+ protocol.getMetadata(),
57
+ isOnlineProtocol(protocol) ? protocol.getNetwork() : Promise.resolve(undefined)
58
+ ]);
59
+ return createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
60
+ }
61
+ export async function createV0Protocol(protocol, module, type = 'full') {
62
+ const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromProtocol(protocol, module);
63
+ return createICoinProtocolAdapter(protocol, blockExplorer, v3SerializerCompanion, { type });
64
+ }
65
+ export async function createV0SubProtocol(protocol, module, type = 'full') {
66
+ const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromProtocol(protocol, module);
67
+ return createICoinSubProtocolAdapter(protocol, blockExplorer, v3SerializerCompanion, { type });
68
+ }
69
+ export async function createV0ERC20Token(erc20Token, protocol, module, type = 'full') {
70
+ const [metadata, network] = await Promise.all([
71
+ protocol.getMetadata(),
72
+ isOnlineProtocol(erc20Token) ? erc20Token.getNetwork() : Promise.resolve(undefined)
73
+ ]);
74
+ const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
75
+ return createICoinSubProtocolAdapter(erc20Token, blockExplorer, v3SerializerCompanion, { type });
76
+ }
77
+ export async function createV0AeternityProtocol(...args) {
78
+ const protocol = createAeternityProtocol(...args);
79
+ const module = new AeternityModule();
80
+ return createV0Protocol(protocol, module);
81
+ }
82
+ export async function createV0AstarProtocol(...args) {
83
+ const protocol = createAstarProtocol(...args);
84
+ const module = new AstarModule();
85
+ return createV0Protocol(protocol, module);
86
+ }
87
+ export async function createV0ShidenProtocol(...args) {
88
+ const protocol = createShidenProtocol(...args);
89
+ const module = new AstarModule();
90
+ return createV0Protocol(protocol, module);
91
+ }
92
+ export async function createV0BitcoinProtocol(...args) {
93
+ const protocol = createBitcoinProtocol(...args);
94
+ const module = new BitcoinModule();
95
+ return createV0Protocol(protocol, module);
96
+ }
97
+ export async function createV0BitcoinSegwitProtocol(...args) {
98
+ const protocol = createBitcoinSegwitProtocol(...args);
99
+ const module = new BitcoinModule();
100
+ return createV0Protocol(protocol, module);
101
+ }
102
+ export async function createV0CoreumProtocol(...args) {
103
+ const protocol = createCoreumProtocol(...args);
104
+ const module = new CoreumModule();
105
+ return createV0Protocol(protocol, module);
106
+ }
107
+ export async function createV0CosmosProtocol(...args) {
108
+ const protocol = createCosmosProtocol(...args);
109
+ const module = new CosmosModule();
110
+ return createV0Protocol(protocol, module);
111
+ }
112
+ export async function createV0EthereumProtocol(...args) {
113
+ const protocol = createEthereumProtocol(...args);
114
+ const module = new EthereumModule();
115
+ return createV0Protocol(protocol, module);
116
+ }
117
+ export async function createV0EthereumERC20Token(...args) {
118
+ const erc20Token = createEthereumERC20Token(...args);
119
+ const ethereumProtocol = createEthereumProtocol(args[1]);
120
+ const module = new EthereumModule();
121
+ return createV0ERC20Token(erc20Token, ethereumProtocol, module);
122
+ }
123
+ export async function createV0GroestlcoinProtocol(...args) {
124
+ const protocol = createGroestlcoinProtocol(...args);
125
+ const module = new GroestlcoinModule();
126
+ return createV0Protocol(protocol, module);
127
+ }
128
+ export async function createV0ICPProtocol(...args) {
129
+ const protocol = createICPProtocol(...args);
130
+ const module = new ICPModule();
131
+ return createV0Protocol(protocol, module);
132
+ }
133
+ export async function createV0MoonbeamProtocol(...args) {
134
+ const protocol = createMoonbeamProtocol(...args);
135
+ const module = new MoonbeamModule();
136
+ return createV0Protocol(protocol, module);
137
+ }
138
+ export async function createV0MoonriverProtocol(...args) {
139
+ const protocol = createMoonriverProtocol(...args);
140
+ const module = new MoonbeamModule();
141
+ return createV0Protocol(protocol, module);
142
+ }
143
+ export async function createV0MoonbaseProtocol(...args) {
144
+ const protocol = createMoonbaseProtocol(...args);
145
+ const module = new MoonbeamModule();
146
+ return createV0Protocol(protocol, module);
147
+ }
148
+ export async function createV0OptimismProtocol(...args) {
149
+ const protocol = createOptimismProtocol(...args);
150
+ const module = new OptimismModule();
151
+ return createV0Protocol(protocol, module);
152
+ }
153
+ export async function createV0OptimismERC20Token(...args) {
154
+ const erc20Token = createOptimismERC20Token(...args);
155
+ const optimismProtocol = createOptimismProtocol(args[1]);
156
+ const module = new OptimismModule();
157
+ return createV0ERC20Token(erc20Token, optimismProtocol, module);
158
+ }
159
+ export async function createV0PolkadotProtocol(...args) {
160
+ const protocol = createPolkadotProtocol(...args);
161
+ const module = new PolkadotModule();
162
+ return createV0Protocol(protocol, module);
163
+ }
164
+ export async function createV0KusamaProtocol(...args) {
165
+ const protocol = createKusamaProtocol(...args);
166
+ const module = new PolkadotModule();
167
+ return createV0Protocol(protocol, module);
168
+ }
169
+ export async function createV0SolanaProtocol(...args) {
170
+ const protocol = createSolanaProtocol(...args);
171
+ const module = new SolanaModule();
172
+ return createV0Protocol(protocol, module);
173
+ }
174
+ export async function createV0TezosProtocol(...args) {
175
+ const protocol = createTezosProtocol(...args);
176
+ const module = new TezosModule();
177
+ return createV0Protocol(protocol, module);
178
+ }
179
+ export async function createV0TezosShieldedTezProtocol(...args) {
180
+ const protocol = createTezosShieldedTezProtocol(...args);
181
+ const module = new TezosModule();
182
+ return createV0Protocol(protocol, module);
183
+ }
184
+ export async function createV0TezosKtProtocol(...args) {
185
+ const protocol = createTezosKtProtocol(...args);
186
+ const module = new TezosModule();
187
+ return createV0SubProtocol(protocol, module);
188
+ }
189
+ async function createV0TezosFAProtocol(faProtocol, tezosNetwork, type = 'full') {
190
+ const tezosProtocol = createTezosProtocol({ network: tezosNetwork });
191
+ const module = new TezosModule();
192
+ const [metadata, network] = await Promise.all([
193
+ tezosProtocol.getMetadata(),
194
+ isOnlineProtocol(faProtocol) ? faProtocol.getNetwork() : Promise.resolve(undefined)
195
+ ]);
196
+ const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
197
+ return createICoinSubProtocolAdapter(faProtocol, blockExplorer, v3SerializerCompanion, { type });
198
+ }
199
+ export async function createV0TezosFA1p2Protocol(...args) {
200
+ const fa1p2Protocol = createTezosFA1p2Protocol(...args);
201
+ return createV0TezosFAProtocol(fa1p2Protocol, args[0].network);
202
+ }
203
+ export async function createV0TezosFA2Protocol(...args) {
204
+ const fa2Protocol = createTezosFA2Protocol(...args);
205
+ return createV0TezosFAProtocol(fa2Protocol, args[0].network);
206
+ }
207
+ export async function createV0TezosBTCTezProtocol(...args) {
208
+ const protocol = createBTCTezProtocol(...args);
209
+ const module = new TezosModule();
210
+ return createV0SubProtocol(protocol, module);
211
+ }
212
+ export async function createV0TezosCTezProtocol(...args) {
213
+ const protocol = createCTezProtocol(...args);
214
+ const module = new TezosModule();
215
+ return createV0SubProtocol(protocol, module);
216
+ }
217
+ export async function createV0TezosDogamiProtocol(...args) {
218
+ const protocol = createDogamiProtocol(...args);
219
+ const module = new TezosModule();
220
+ return createV0SubProtocol(protocol, module);
221
+ }
222
+ export async function createV0TezosETHTezProtocol(...args) {
223
+ const protocol = createETHTezProtocol(...args);
224
+ const module = new TezosModule();
225
+ return createV0SubProtocol(protocol, module);
226
+ }
227
+ export async function createV0TezosKolibriUSDProtocol(...args) {
228
+ const protocol = createKolibriUSDProtocol(...args);
229
+ const module = new TezosModule();
230
+ return createV0SubProtocol(protocol, module);
231
+ }
232
+ export async function createV0TezosPlentyProtocol(...args) {
233
+ const protocol = createPlentyProtocol(...args);
234
+ const module = new TezosModule();
235
+ return createV0SubProtocol(protocol, module);
236
+ }
237
+ export async function createV0TezosQuipuswapProtocol(...args) {
238
+ const protocol = createQuipuswapProtocol(...args);
239
+ const module = new TezosModule();
240
+ return createV0SubProtocol(protocol, module);
241
+ }
242
+ export async function createV0TezosSiriusProtocol(...args) {
243
+ const protocol = createSiriusProtocol(...args);
244
+ const module = new TezosModule();
245
+ return createV0SubProtocol(protocol, module);
246
+ }
247
+ export async function createV0TezosStakerProtocol(...args) {
248
+ const protocol = createStakerProtocol(...args);
249
+ const module = new TezosModule();
250
+ return createV0SubProtocol(protocol, module);
251
+ }
252
+ export async function createV0TezosTetherUSDProtocol(...args) {
253
+ const protocol = createTetherUSDProtocol(...args);
254
+ const module = new TezosModule();
255
+ return createV0SubProtocol(protocol, module);
256
+ }
257
+ export async function createV0TezosTzBTCProtocol(...args) {
258
+ const protocol = createTzBTCProtocol(...args);
259
+ const module = new TezosModule();
260
+ return createV0SubProtocol(protocol, module);
261
+ }
262
+ export async function createV0TezosUBTCProtocol(...args) {
263
+ const protocol = createUBTCProtocol(...args);
264
+ const module = new TezosModule();
265
+ return createV0SubProtocol(protocol, module);
266
+ }
267
+ export async function createV0TezosUDEFIProtocol(...args) {
268
+ const protocol = createUDEFIProtocol(...args);
269
+ const module = new TezosModule();
270
+ return createV0SubProtocol(protocol, module);
271
+ }
272
+ export async function createV0TezosUSDTezProtocol(...args) {
273
+ const protocol = createUSDTezProtocol(...args);
274
+ const module = new TezosModule();
275
+ return createV0SubProtocol(protocol, module);
276
+ }
277
+ export async function createV0TezosUUSDProtocol(...args) {
278
+ const protocol = createUUSDProtocol(...args);
279
+ const module = new TezosModule();
280
+ return createV0SubProtocol(protocol, module);
281
+ }
282
+ export async function createV0TezosWrappedProtocol(...args) {
283
+ const protocol = createWrappedTezosProtocol(...args);
284
+ const module = new TezosModule();
285
+ return createV0SubProtocol(protocol, module);
286
+ }
287
+ export async function createV0TezosWrapProtocol(...args) {
288
+ const protocol = createWrapProtocol(...args);
289
+ const module = new TezosModule();
290
+ return createV0SubProtocol(protocol, module);
291
+ }
292
+ export async function createV0TezosYouProtocol(...args) {
293
+ const protocol = createYouProtocol(...args);
294
+ const module = new TezosModule();
295
+ return createV0SubProtocol(protocol, module);
296
+ }
297
+ // Transaction
298
+ export function convertTransactionStatusV1ToV0(status) {
299
+ return status.type === 'applied'
300
+ ? AirGapTransactionStatusV0.APPLIED
301
+ : status.type === 'failed'
302
+ ? AirGapTransactionStatusV0.FAILED
303
+ : undefined;
304
+ }
305
+ function convertUIActionsV1ToV0(actions) {
306
+ return actions.map((action) => ({
307
+ text: action.text.value,
308
+ link: ''
309
+ }));
310
+ }
311
+ function convertUIAlertsV1ToV0(alerts) {
312
+ return alerts.map((alert) => ({
313
+ type: alert.type === 'success'
314
+ ? AirGapTransactionWarningType.SUCCESS
315
+ : alert.type === 'info'
316
+ ? AirGapTransactionWarningType.NOTE
317
+ : alert.type === 'warning'
318
+ ? AirGapTransactionWarningType.WARNING
319
+ : AirGapTransactionWarningType.ERROR,
320
+ title: alert.title.value,
321
+ description: alert.description.value,
322
+ icon: alert.icon,
323
+ actions: alert.actions ? convertUIActionsV1ToV0(alert.actions) : undefined
324
+ }));
325
+ }
326
+ // eslint-disable-next-line no-redeclare
327
+ export async function convertTransactionDetailsV1ToV0(txs, protocolOrMetadata, networkOrUndefined) {
328
+ const protocolMetadata = isOnlineProtocol(protocolOrMetadata)
329
+ ? await protocolOrMetadata.getMetadata()
330
+ : protocolOrMetadata;
331
+ const networkV0 = isOnlineProtocol(protocolOrMetadata)
332
+ ? convertNetworkV1ToV0(await protocolOrMetadata.getNetwork())
333
+ : networkOrUndefined instanceof ProtocolNetworkV0
334
+ ? networkOrUndefined
335
+ : convertNetworkV1ToV0(networkOrUndefined);
336
+ const units = protocolMetadata.units;
337
+ const feeUnits = protocolMetadata.fee?.units ?? units;
338
+ return txs.map((tx) => {
339
+ return {
340
+ from: tx.from,
341
+ to: tx.to,
342
+ isInbound: tx.isInbound,
343
+ amount: newAmount(tx.amount).blockchain(units).value,
344
+ fee: newAmount(tx.fee).blockchain(feeUnits).value,
345
+ timestamp: tx.timestamp,
346
+ changeAddressInfo: tx.changeAddressInfo,
347
+ displayFromTo: tx.displayFromTo,
348
+ protocolIdentifier: protocolMetadata.identifier,
349
+ network: networkV0,
350
+ data: typeof tx.arbitraryData === 'string' ? tx.arbitraryData : tx.arbitraryData?.[1],
351
+ hash: tx.status?.hash,
352
+ blockHeight: tx.status?.block,
353
+ status: tx.status ? convertTransactionStatusV1ToV0(tx.status) : undefined,
354
+ warnings: tx.uiAlerts ? convertUIAlertsV1ToV0(tx.uiAlerts) : undefined,
355
+ extra: {
356
+ ...tx.extra,
357
+ type: tx.type
358
+ },
359
+ transactionDetails: tx.json
360
+ };
361
+ });
362
+ }
363
+ // FeeDefaults
364
+ export function convertFeeDefaultsV0ToV1(feeDefaults, decimals) {
365
+ return {
366
+ low: newAmount(new BigNumber(feeDefaults.low).shiftedBy(decimals), 'blockchain'),
367
+ medium: newAmount(new BigNumber(feeDefaults.medium).shiftedBy(decimals), 'blockchain'),
368
+ high: newAmount(new BigNumber(feeDefaults.high).shiftedBy(decimals), 'blockchain')
369
+ };
370
+ }
371
+ export function convertFeeDefaultsV1ToV0(feeDefaults, protocolMetadata) {
372
+ const feeUnits = protocolMetadata.fee?.units ?? protocolMetadata.units;
373
+ const feeUnit = protocolMetadata.fee?.mainUnit ?? protocolMetadata.mainUnit;
374
+ return {
375
+ low: new BigNumber(newAmount(feeDefaults.low).convert(feeUnit, feeUnits).value).toFixed(),
376
+ medium: new BigNumber(newAmount(feeDefaults.medium).convert(feeUnit, feeUnits).value).toFixed(),
377
+ high: new BigNumber(newAmount(feeDefaults.high).convert(feeUnit, feeUnits).value).toFixed()
378
+ };
379
+ }
380
+ // Bytes
381
+ export function getBytesFormatV1FromV0(bytes) {
382
+ return isHex(bytes) ? 'hex' : 'encoded';
383
+ }
384
+ export function getSecretKeyType(secretKey) {
385
+ return secretKey.startsWith('xprv') ? 'xpriv' : 'priv';
386
+ }
387
+ export function getPublicKeyType(publicKey) {
388
+ return publicKey.startsWith('xpub') ? 'xpub' : 'pub';
389
+ }
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wtdjAtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvcHJvdG9jb2wvcHJvdG9jb2wtdjAtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBcUIsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNyRyxPQUFPLEVBQUUsV0FBVyxFQUFpQixtQkFBbUIsRUFBRSxvQkFBb0IsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzSCxPQUFPLEVBQ0wsZUFBZSxJQUFJLGlCQUFpQixFQUNwQyxXQUFXLElBQUkscUJBQXFCLEVBS3JDLE1BQU0sNEJBQTRCLENBQUE7QUFDbkMsT0FBTyxFQUNMLGdCQUFnQixJQUFJLHdCQUF3QixFQUM1QyxzQkFBc0IsRUFFdEIsY0FBYyxFQUVmLE1BQU0sd0JBQXdCLENBQUE7QUFDL0IsT0FBTyxFQWNMLGdCQUFnQixFQUNoQixTQUFTLEVBVVYsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUEwQyxxQkFBcUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2pKLE9BQU8sRUFBRSxZQUFZLEVBQWtCLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sMkJBQTJCLENBQUE7QUFDN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQzdFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUV2QixjQUFjLEVBR2YsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVB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QUFBO0FBQ0gsQ0FBQztBQUVELFFBQVE7QUFFUixNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYTtJQUNsRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFpQjtJQUNoRCxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG5pbXBvcnQgeyBBZXRlcm5pdHlNb2R1bGUsIEFldGVybml0eVByb3RvY29sLCBjcmVhdGVBZXRlcm5pdHlQcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYWV0ZXJuaXR5J1xuaW1wb3J0IHsgQXN0YXJNb2R1bGUsIEFzdGFyUHJvdG9jb2wsIGNyZWF0ZUFzdGFyUHJvdG9jb2wsIGNyZWF0ZVNoaWRlblByb3RvY29sLCBTaGlkZW5Qcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYXN0YXInXG5pbXBvcnQge1xuICBQcm90b2NvbE5ldHdvcmsgYXMgUHJvdG9jb2xOZXR3b3JrVjAsXG4gIE5ldHdvcmtUeXBlIGFzIFByb3RvY29sTmV0d29ya1R5cGVWMCxcbiAgUHJvdG9jb2xCbG9ja0V4cGxvcmVyIGFzIFByb3RvY29sQmxvY2tFeHBsb3JlclYwLFxuICBGZWVEZWZhdWx0cyBhcyBGZWVEZWZhdWx0c1YwLFxuICBJQWlyR2FwVHJhbnNhY3Rpb24gYXMgQWlyR2FwVHJhbnNhY3Rpb25WMCxcbiAgUHJvdG9jb2xTeW1ib2xzXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRVJDMjBUb2tlbiBhcyBjcmVhdGVFdGhlcmV1bUVSQzIwVG9rZW4sXG4gIGNyZWF0ZUV0aGVyZXVtUHJvdG9jb2wsXG4gIEVSQzIwVG9rZW4gYXMgRXRoZXJldW1FUkMyMFRva2VuLFxuICBFdGhlcmV1bU1vZHVsZSxcbiAgRXRoZXJldW1Qcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L2V0aGVyZXVtJ1xuaW1wb3J0IHtcbiAgQWlyR2FwQW55UHJvdG9jb2wsXG4gIEFpckdhcEJsb2NrRXhwbG9yZXIgYXMgUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsXG4gIEFpckdhcE1vZHVsZSxcbiAgQWlyR2FwT25saW5lUHJvdG9jb2wsXG4gIEFpckdhcFRyYW5zYWN0aW9uIGFzIEFpckdhcFRyYW5zYWN0aW9uVjEsXG4gIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzIGFzIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjEsXG4gIEFpckdhcFVJQWN0aW9uIGFzIEFpckdhcFVJQWN0aW9uVjEsXG4gIEFpckdhcFVJQWxlcnQgYXMgQWlyR2FwVUlBbGVydFYxLFxuICBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gIEJ5dGVzU3RyaW5nRm9ybWF0LFxuICBFeHRlbmRlZFB1YmxpY0tleSxcbiAgRXh0ZW5kZWRTZWNyZXRLZXksXG4gIEZlZURlZmF1bHRzIGFzIEZlZURlZmF1bHRzVjEsXG4gIGlzT25saW5lUHJvdG9jb2wsXG4gIG5ld0Ftb3VudCxcbiAgUHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICBQcm90b2NvbE1ldGFkYXRhLFxuICBQcm90b2NvbE5ldHdvcmsgYXMgUHJvdG9jb2xOZXR3b3JrVjEsXG4gIFByb3RvY29sTmV0d29ya1R5cGUgYXMgUHJvdG9jb2xOZXR3b3JrVHlwZVYxLFxuICBQcm90b2NvbFVuaXRzTWV0YWRhdGEsXG4gIFB1YmxpY0tleSxcbiAgUmVjdXJzaXZlUGFydGlhbCxcbiAgU2VjcmV0S2V5LFxuICBTdWJQcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L21vZHVsZS1raXQnXG5pbXBvcnQgeyBCaXRjb2luTW9kdWxlLCBCaXRjb2luUHJvdG9jb2wsIEJpdGNvaW5TZWd3aXRQcm90b2NvbCwgY3JlYXRlQml0Y29pblByb3RvY29sLCBjcmVhdGVCaXRjb2luU2Vnd2l0UHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2JpdGNvaW4nXG5pbXBvcnQgeyBDb3JldW1Nb2R1bGUsIENvcmV1bVByb3RvY29sLCBjcmVhdGVDb3JldW1Qcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29yZXVtJ1xuaW1wb3J0IHsgQ29zbW9zTW9kdWxlLCBDb3Ntb3NQcm90b2NvbCwgY3JlYXRlQ29zbW9zUHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2Nvc21vcydcbmltcG9ydCB7IGNyZWF0ZUdyb2VzdGxjb2luUHJvdG9jb2wsIEdyb2VzdGxjb2luTW9kdWxlLCBHcm9lc3RsY29pblByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9ncm9lc3RsY29pbidcbmltcG9ydCB7IGNyZWF0ZUlDUFByb3RvY29sLCBJQ1BNb2R1bGUsIElDUFByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9pY3AnXG5pbXBvcnQge1xuICBjcmVhdGVNb29uYmFzZVByb3RvY29sLFxuICBjcmVhdGVNb29uYmVhbVByb3RvY29sLFxuICBjcmVhdGVNb29ucml2ZXJQcm90b2NvbCxcbiAgTW9vbmJhc2VQcm90b2NvbCxcbiAgTW9vbmJlYW1Nb2R1bGUsXG4gIE1vb25iZWFtUHJvdG9jb2wsXG4gIE1vb25yaXZlclByb3RvY29sXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvbW9vbmJlYW0nXG5pbXBvcnQge1xuICBjcmVhdGVFUkMyMFRva2VuIGFzIGNyZWF0ZU9wdGltaXNtRVJDMjBUb2tlbixcbiAgY3JlYXRlT3B0aW1pc21Qcm90b2NvbCxcbiAgRVJDMjBUb2tlbiBhcyBPcHRpbWlzbUVSQzIwVG9rZW4sXG4gIE9wdGltaXNtTW9kdWxlLFxuICBPcHRpbWlzbVByb3RvY29sXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvb3B0aW1pc20nXG5pbXBvcnQgeyBjcmVhdGVLdXNhbWFQcm90b2NvbCwgY3JlYXRlUG9sa2Fkb3RQcm90b2NvbCwgS3VzYW1hUHJvdG9jb2wsIFBvbGthZG90TW9kdWxlLCBQb2xrYWRvdFByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9wb2xrYWRvdCdcbmltcG9ydCB7IGNyZWF0ZVNvbGFuYVByb3RvY29sLCBTb2xhbmFNb2R1bGUsIFNvbGFuYVByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9zb2xhbmEnXG5pbXBvcnQge1xuICBCVENUZXpQcm90b2NvbCxcbiAgY3JlYXRlQlRDVGV6UHJvdG9jb2wsXG4gIGNyZWF0ZUNUZXpQcm90b2NvbCxcbiAgY3JlYXRlRG9nYW1pUHJvdG9jb2wsXG4gIGNyZWF0ZUVUSFRlelByb3RvY29sLFxuICBjcmVhdGVLb2xpYnJpVVNEUHJvdG9jb2wsXG4gIGNyZWF0ZVBsZW50eVByb3RvY29sLFxuICBjcmVhdGVRdWlwdXN3YXBQcm90b2NvbCxcbiAgY3JlYXRlU2lyaXVzUHJvdG9jb2wsXG4gIGNyZWF0ZVN0YWtlclByb3RvY29sLFxuICBjcmVhdGVUZXRoZXJVU0RQcm90b2NvbCxcbiAgY3JlYXRlVGV6b3NGQTFwMlByb3RvY29sLFxuICBjcmVhdGVUZXpvc0ZBMlByb3RvY29sLFxuICBjcmVhdGVUZXpvc0t0UHJvdG9jb2wsXG4gIGNyZWF0ZVRlem9zUHJvdG9jb2wsXG4gIGNyZWF0ZVRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCxcbiAgY3JlYXRlVHpCVENQcm90b2NvbCxcbiAgY3JlYXRlVUJUQ1Byb3RvY29sLFxuICBjcmVhdGVVREVGSVByb3RvY29sLFxuICBjcmVhdGVVU0RUZXpQcm90b2NvbCxcbiAgY3JlYXRlVVVTRFByb3RvY29sLFxuICBjcmVhdGVXcmFwcGVkVGV6b3NQcm90b2NvbCxcbiAgY3JlYXRlV3JhcFByb3RvY29sLFxuICBjcmVhdGVZb3VQcm90b2NvbCxcbiAgQ1RlelByb3RvY29sLFxuICBEb2dhbWlQcm90b2NvbCxcbiAgRVRIVGV6UHJvdG9jb2wsXG4gIEtvbGlicmlVU0RQcm90b2NvbCxcbiAgUGxlbnR5UHJvdG9jb2wsXG4gIFF1aXB1c3dhcFByb3RvY29sLFxuICBTaXJpdXNQcm90b2NvbCxcbiAgU3Rha2VyUHJvdG9jb2wsXG4gIFRldGhlclVTRFByb3RvY29sLFxuICBUZXpvc0ZBMXAyUHJvdG9jb2wsXG4gIFRlem9zRkEyUHJvdG9jb2wsXG4gIFRlem9zRkFQcm90b2NvbCxcbiAgVGV6b3NLdFByb3RvY29sLFxuICBUZXpvc01vZHVsZSxcbiAgVGV6b3NQcm90b2NvbCxcbiAgVGV6b3NQcm90b2NvbE5ldHdvcmssXG4gIFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCxcbiAgVHpCVENQcm90b2NvbCxcbiAgVUJUQ1Byb3RvY29sLFxuICBVREVGSVByb3RvY29sLFxuICBVU0RUZXpQcm90b2NvbCxcbiAgVVVTRFByb3RvY29sLFxuICBXcmFwcGVkVGV6b3NQcm90b2NvbCxcbiAgV3JhcFByb3RvY29sLFxuICBZb3VQcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L3Rlem9zJ1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZS9kZXBlbmRlbmNpZXMvc3JjL2JpZ251bWJlci5qcy05LjAuMC9iaWdudW1iZXInXG5cbmltcG9ydCB7XG4gIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzIGFzIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAsXG4gIEFpckdhcFRyYW5zYWN0aW9uV2FybmluZyBhcyBBaXJHYXBVSUFsZXJ0VjAsXG4gIEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGVcbn0gZnJvbSAnQHdhbGxmcmVlLWRldi9jb2lubGliLWNvcmUvaW50ZXJmYWNlcy9JQWlyR2FwVHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBpc0hleCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlL3V0aWxzL2hleCdcblxuaW1wb3J0IHtcbiAgY3JlYXRlSUNvaW5Qcm90b2NvbEFkYXB0ZXIsXG4gIGNyZWF0ZUlDb2luU3ViUHJvdG9jb2xBZGFwdGVyLFxuICBJQ29pblByb3RvY29sQWRhcHRlcixcbiAgSUNvaW5TdWJQcm90b2NvbEFkYXB0ZXIsXG4gIFByb3RvY29sQmxvY2tFeHBsb3JlckFkYXB0ZXIsXG4gIFByb3RvY29sTmV0d29ya0FkYXB0ZXJcbn0gZnJvbSAnLi4vLi4vcHJvdG9jb2wvYWRhcHRlci9wcm90b2NvbC12MC1hZGFwdGVyJ1xuXG4vLyBOZXR3b3JrXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TmV0d29ya1R5cGVWMFRvVjEodHlwZTogUHJvdG9jb2xOZXR3b3JrVHlwZVYwKTogUHJvdG9jb2xOZXR3b3JrVHlwZVYxIHtcbiAgcmV0dXJuIHR5cGUgPT09IFByb3RvY29sTmV0d29ya1R5cGVWMC5NQUlOTkVUID8gJ21haW5uZXQnIDogdHlwZSA9PT0gUHJvdG9jb2xOZXR3b3JrVHlwZVYwLlRFU1RORVQgPyAndGVzdG5ldCcgOiAnY3VzdG9tJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE5ldHdvcmtUeXBlVjFUb1YwKHR5cGU6IFByb3RvY29sTmV0d29ya1R5cGVWMSk6IFByb3RvY29sTmV0d29ya1R5cGVWMCB7XG4gIHJldHVybiB0eXBlID09PSAnbWFpbm5ldCdcbiAgICA/IFByb3RvY29sTmV0d29ya1R5cGVWMC5NQUlOTkVUXG4gICAgOiB0eXBlID09PSAndGVzdG5ldCdcbiAgICA/IFByb3RvY29sTmV0d29ya1R5cGVWMC5URVNUTkVUXG4gICAgOiBQcm90b2NvbE5ldHdvcmtUeXBlVjAuQ1VTVE9NXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TmV0d29ya1YwVG9WMShuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmtWMCk6IFByb3RvY29sTmV0d29ya1YxIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuZXR3b3JrLm5hbWUsXG4gICAgdHlwZTogY29udmVydE5ldHdvcmtUeXBlVjBUb1YxKG5ldHdvcmsudHlwZSksXG4gICAgcnBjVXJsOiBuZXR3b3JrLnJwY1VybCxcbiAgICBibG9ja0V4cGxvcmVyVXJsOiBuZXR3b3JrLmJsb2NrRXhwbG9yZXIuYmxvY2tFeHBsb3JlcixcbiAgICAuLi4odHlwZW9mIG5ldHdvcmsuZXh0cmFzID09PSAnb2JqZWN0JyA/IG5ldHdvcmsuZXh0cmFzIDoge30pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnROZXR3b3JrVjFUb1YwKG5ldHdvcms6IFByb3RvY29sTmV0d29ya1YxLCBibG9ja0V4cGxvcmVyPzogUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEpOiBQcm90b2NvbE5ldHdvcmtWMCB7XG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgcnBjVXJsLCAuLi5yZXN0IH0gPSBuZXR3b3JrXG4gIGNvbnN0IGJsb2NrRXhwbG9yZXJWMDogUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjAgPSBuZXcgUHJvdG9jb2xCbG9ja0V4cGxvcmVyQWRhcHRlcihibG9ja0V4cGxvcmVyLCBuZXR3b3JrLmJsb2NrRXhwbG9yZXJVcmwpXG5cbiAgcmV0dXJuIG5ldyBQcm90b2NvbE5ldHdvcmtBZGFwdGVyKG5hbWUsIGNvbnZlcnROZXR3b3JrVHlwZVYxVG9WMCh0eXBlKSwgcnBjVXJsLCBibG9ja0V4cGxvcmVyVjAsIHJlc3QpXG59XG5cbi8vIFByb3RvY29sXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21JZGVudGlmaWVyQW5kTmV0d29yayhcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgbmV0d29yazogUHJvdG9jb2xOZXR3b3JrVjEgfCB1bmRlZmluZWRcbik6IFByb21pc2U8W1Byb3RvY29sQmxvY2tFeHBsb3JlclYxLCBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb25dPiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIG1vZHVsZS5jcmVhdGVCbG9ja0V4cGxvcmVyKGlkZW50aWZpZXIsIG5ldHdvcmspLFxuICAgIG1vZHVsZS5jcmVhdGVWM1NlcmlhbGl6ZXJDb21wYW5pb24oKVxuICBdKVxuXG4gIHJldHVybiBbYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uXVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyU3VwcGxlbWVudHNGcm9tUHJvdG9jb2w8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sPihcbiAgcHJvdG9jb2w6IFQsXG4gIG1vZHVsZTogQWlyR2FwTW9kdWxlXG4pOiBQcm9taXNlPFtQcm90b2NvbEJsb2NrRXhwbG9yZXJWMSwgQWlyR2FwVjNTZXJpYWxpemVyQ29tcGFuaW9uXT4ge1xuICBjb25zdCBbbWV0YWRhdGEsIG5ldHdvcmtdOiBbUHJvdG9jb2xNZXRhZGF0YSwgUHJvdG9jb2xOZXR3b3JrVjEgfCB1bmRlZmluZWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHByb3RvY29sLmdldE1ldGFkYXRhKCksXG4gICAgaXNPbmxpbmVQcm90b2NvbChwcm90b2NvbCkgPyBwcm90b2NvbC5nZXROZXR3b3JrKCkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICBdKVxuXG4gIHJldHVybiBjcmVhdGVBZGFwdGVyU3VwcGxlbWVudHNGcm9tSWRlbnRpZmllckFuZE5ldHdvcmsobW9kdWxlLCBtZXRhZGF0YS5pZGVudGlmaWVyLCBuZXR3b3JrKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBQcm90b2NvbDxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2w+KFxuICBwcm90b2NvbDogVCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dOiBbUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsIEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbl0gPVxuICAgIGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21Qcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblByb3RvY29sQWRhcHRlcihwcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwU3ViUHJvdG9jb2w8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sICYgU3ViUHJvdG9jb2w+KFxuICBwcm90b2NvbDogVCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dOiBbUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsIEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbl0gPVxuICAgIGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21Qcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcihwcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwRVJDMjBUb2tlbjxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD4oXG4gIGVyYzIwVG9rZW46IFQsXG4gIHByb3RvY29sOiBBaXJHYXBBbnlQcm90b2NvbCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFttZXRhZGF0YSwgbmV0d29ya106IFtQcm90b2NvbE1ldGFkYXRhLCBQcm90b2NvbE5ldHdvcmtWMSB8IHVuZGVmaW5lZF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJvdG9jb2wuZ2V0TWV0YWRhdGEoKSxcbiAgICBpc09ubGluZVByb3RvY29sKGVyYzIwVG9rZW4pID8gZXJjMjBUb2tlbi5nZXROZXR3b3JrKCkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICBdKVxuXG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dID0gYXdhaXQgY3JlYXRlQWRhcHRlclN1cHBsZW1lbnRzRnJvbUlkZW50aWZpZXJBbmROZXR3b3JrKFxuICAgIG1vZHVsZSxcbiAgICBtZXRhZGF0YS5pZGVudGlmaWVyLFxuICAgIG5ldHdvcmtcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcihlcmMyMFRva2VuLCBibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb24sIHsgdHlwZSB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBBZXRlcm5pdHlQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQWV0ZXJuaXR5UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPEFldGVybml0eVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQWV0ZXJuaXR5UHJvdG9jb2wgPSBjcmVhdGVBZXRlcm5pdHlQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFldGVybml0eU1vZHVsZSA9IG5ldyBBZXRlcm5pdHlNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMEFzdGFyUHJvdG9jb2woLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQXN0YXJQcm90b2NvbD4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPEFzdGFyUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBBc3RhclByb3RvY29sID0gY3JlYXRlQXN0YXJQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFzdGFyTW9kdWxlID0gbmV3IEFzdGFyTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBTaGlkZW5Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU2hpZGVuUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFNoaWRlblByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogU2hpZGVuUHJvdG9jb2wgPSBjcmVhdGVTaGlkZW5Qcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFzdGFyTW9kdWxlID0gbmV3IEFzdGFyTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBCaXRjb2luUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJpdGNvaW5Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Qml0Y29pblByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQml0Y29pblByb3RvY29sID0gY3JlYXRlQml0Y29pblByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQml0Y29pbk1vZHVsZSA9IG5ldyBCaXRjb2luTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBCaXRjb2luU2Vnd2l0UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJpdGNvaW5TZWd3aXRQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Qml0Y29pblNlZ3dpdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQml0Y29pblNlZ3dpdFByb3RvY29sID0gY3JlYXRlQml0Y29pblNlZ3dpdFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQml0Y29pbk1vZHVsZSA9IG5ldyBCaXRjb2luTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBDb3JldW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQ29yZXVtUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPENvcmV1bVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQ29yZXVtUHJvdG9jb2wgPSBjcmVhdGVDb3JldW1Qcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IENvcmV1bU1vZHVsZSA9IG5ldyBDb3JldW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMENvc21vc1Byb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVDb3Ntb3NQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Q29zbW9zUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBDb3Ntb3NQcm90b2NvbCA9IGNyZWF0ZUNvc21vc1Byb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQ29zbW9zTW9kdWxlID0gbmV3IENvc21vc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwRXRoZXJldW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRXRoZXJldW1Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8RXRoZXJldW1Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEV0aGVyZXVtUHJvdG9jb2wgPSBjcmVhdGVFdGhlcmV1bVByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogRXRoZXJldW1Nb2R1bGUgPSBuZXcgRXRoZXJldW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMEV0aGVyZXVtRVJDMjBUb2tlbihcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRXRoZXJldW1FUkMyMFRva2VuPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxFdGhlcmV1bUVSQzIwVG9rZW4+PiB7XG4gIGNvbnN0IGVyYzIwVG9rZW46IEV0aGVyZXVtRVJDMjBUb2tlbiA9IGNyZWF0ZUV0aGVyZXVtRVJDMjBUb2tlbiguLi5hcmdzKVxuICBjb25zdCBldGhlcmV1bVByb3RvY29sOiBFdGhlcmV1bVByb3RvY29sID0gY3JlYXRlRXRoZXJldW1Qcm90b2NvbChhcmdzWzFdKVxuICBjb25zdCBtb2R1bGU6IEV0aGVyZXVtTW9kdWxlID0gbmV3IEV0aGVyZXVtTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBFUkMyMFRva2VuKGVyYzIwVG9rZW4sIGV0aGVyZXVtUHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwR3JvZXN0bGNvaW5Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlR3JvZXN0bGNvaW5Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8R3JvZXN0bGNvaW5Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEdyb2VzdGxjb2luUHJvdG9jb2wgPSBjcmVhdGVHcm9lc3RsY29pblByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogR3JvZXN0bGNvaW5Nb2R1bGUgPSBuZXcgR3JvZXN0bGNvaW5Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMElDUFByb3RvY29sKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUlDUFByb3RvY29sPik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8SUNQUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBJQ1BQcm90b2NvbCA9IGNyZWF0ZUlDUFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogSUNQTW9kdWxlID0gbmV3IElDUE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwTW9vbmJlYW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlTW9vbmJlYW1Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8TW9vbmJlYW1Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IE1vb25iZWFtUHJvdG9jb2wgPSBjcmVhdGVNb29uYmVhbVByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogTW9vbmJlYW1Nb2R1bGUgPSBuZXcgTW9vbmJlYW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWME1vb25yaXZlclByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVNb29ucml2ZXJQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8TW9vbnJpdmVyUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBNb29ucml2ZXJQcm90b2NvbCA9IGNyZWF0ZU1vb25yaXZlclByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogTW9vbmJlYW1Nb2R1bGUgPSBuZXcgTW9vbmJlYW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWME1vb25iYXNlUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZU1vb25iYXNlUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPE1vb25iYXNlUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBNb29uYmFzZVByb3RvY29sID0gY3JlYXRlTW9vbmJhc2VQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IE1vb25iZWFtTW9kdWxlID0gbmV3IE1vb25iZWFtTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBPcHRpbWlzbVByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVPcHRpbWlzbVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxPcHRpbWlzbVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogT3B0aW1pc21Qcm90b2NvbCA9IGNyZWF0ZU9wdGltaXNtUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBPcHRpbWlzbU1vZHVsZSA9IG5ldyBPcHRpbWlzbU1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwT3B0aW1pc21FUkMyMFRva2VuKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVPcHRpbWlzbUVSQzIwVG9rZW4+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPE9wdGltaXNtRVJDMjBUb2tlbj4+IHtcbiAgY29uc3QgZXJjMjBUb2tlbjogT3B0aW1pc21FUkMyMFRva2VuID0gY3JlYXRlT3B0aW1pc21FUkMyMFRva2VuKC4uLmFyZ3MpXG4gIGNvbnN0IG9wdGltaXNtUHJvdG9jb2w6IE9wdGltaXNtUHJvdG9jb2wgPSBjcmVhdGVPcHRpbWlzbVByb3RvY29sKGFyZ3NbMV0pXG4gIGNvbnN0IG1vZHVsZTogT3B0aW1pc21Nb2R1bGUgPSBuZXcgT3B0aW1pc21Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMEVSQzIwVG9rZW4oZXJjMjBUb2tlbiwgb3B0aW1pc21Qcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBQb2xrYWRvdFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVQb2xrYWRvdFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxQb2xrYWRvdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogUG9sa2Fkb3RQcm90b2NvbCA9IGNyZWF0ZVBvbGthZG90UHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBQb2xrYWRvdE1vZHVsZSA9IG5ldyBQb2xrYWRvdE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwS3VzYW1hUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUt1c2FtYVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxLdXNhbWFQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEt1c2FtYVByb3RvY29sID0gY3JlYXRlS3VzYW1hUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBQb2xrYWRvdE1vZHVsZSA9IG5ldyBQb2xrYWRvdE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwU29sYW5hUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVNvbGFuYVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxTb2xhbmFQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFNvbGFuYVByb3RvY29sID0gY3JlYXRlU29sYW5hUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBhbnkgPSBuZXcgU29sYW5hTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1Byb3RvY29sKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVRlem9zUHJvdG9jb2w+KTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxUZXpvc1Byb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogVGV6b3NQcm90b2NvbCA9IGNyZWF0ZVRlem9zUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NTaGllbGRlZFRlelByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXpvc1NoaWVsZGVkVGV6UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCA9IGNyZWF0ZVRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc0t0UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVRlem9zS3RQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV6b3NLdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogVGV6b3NLdFByb3RvY29sID0gY3JlYXRlVGV6b3NLdFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sPFQgZXh0ZW5kcyBUZXpvc0ZBUHJvdG9jb2w+KFxuICBmYVByb3RvY29sOiBULFxuICB0ZXpvc05ldHdvcms/OiBSZWN1cnNpdmVQYXJ0aWFsPFRlem9zUHJvdG9jb2xOZXR3b3JrPixcbiAgdHlwZTogUHJvdG9jb2xDb25maWd1cmF0aW9uWyd0eXBlJ10gPSAnZnVsbCdcbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VD4+IHtcbiAgY29uc3QgdGV6b3NQcm90b2NvbDogVGV6b3NQcm90b2NvbCA9IGNyZWF0ZVRlem9zUHJvdG9jb2woeyBuZXR3b3JrOiB0ZXpvc05ldHdvcmsgfSlcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgY29uc3QgW21ldGFkYXRhLCBuZXR3b3JrXTogW1Byb3RvY29sTWV0YWRhdGEsIFByb3RvY29sTmV0d29ya1YxIHwgdW5kZWZpbmVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICB0ZXpvc1Byb3RvY29sLmdldE1ldGFkYXRhKCksXG4gICAgaXNPbmxpbmVQcm90b2NvbChmYVByb3RvY29sKSA/IGZhUHJvdG9jb2wuZ2V0TmV0d29yaygpIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgXSlcblxuICBjb25zdCBbYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uXSA9IGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21JZGVudGlmaWVyQW5kTmV0d29yayhcbiAgICBtb2R1bGUsXG4gICAgbWV0YWRhdGEuaWRlbnRpZmllcixcbiAgICBuZXR3b3JrXG4gIClcblxuICByZXR1cm4gY3JlYXRlSUNvaW5TdWJQcm90b2NvbEFkYXB0ZXIoZmFQcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQTFwMlByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXpvc0ZBMXAyUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFRlem9zRkExcDJQcm90b2NvbD4+IHtcbiAgY29uc3QgZmExcDJQcm90b2NvbDogVGV6b3NGQTFwMlByb3RvY29sID0gY3JlYXRlVGV6b3NGQTFwMlByb3RvY29sKC4uLmFyZ3MpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sKGZhMXAyUHJvdG9jb2wsIGFyZ3NbMF0ubmV0d29yaylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQTJQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlVGV6b3NGQTJQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV6b3NGQTJQcm90b2NvbD4+IHtcbiAgY29uc3QgZmEyUHJvdG9jb2w6IFRlem9zRkEyUHJvdG9jb2wgPSBjcmVhdGVUZXpvc0ZBMlByb3RvY29sKC4uLmFyZ3MpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sKGZhMlByb3RvY29sLCBhcmdzWzBdLm5ldHdvcmspXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zQlRDVGV6UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJUQ1RlelByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxCVENUZXpQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEJUQ1RlelByb3RvY29sID0gY3JlYXRlQlRDVGV6UHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NDVGV6UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUNUZXpQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8Q1RlelByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQ1RlelByb3RvY29sID0gY3JlYXRlQ1RlelByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zRG9nYW1pUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZURvZ2FtaVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxEb2dhbWlQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IERvZ2FtaVByb3RvY29sID0gY3JlYXRlRG9nYW1pUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NFVEhUZXpQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRVRIVGV6UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPEVUSFRlelByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogRVRIVGV6UHJvdG9jb2wgPSBjcmVhdGVFVEhUZXpQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc0tvbGlicmlVU0RQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlS29saWJyaVVTRFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxLb2xpYnJpVVNEUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBLb2xpYnJpVVNEUHJvdG9jb2wgPSBjcmVhdGVLb2xpYnJpVVNEUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NQbGVudHlQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlUGxlbnR5UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFBsZW50eVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogUGxlbnR5UHJvdG9jb2wgPSBjcmVhdGVQbGVudHlQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1F1aXB1c3dhcFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVRdWlwdXN3YXBQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8UXVpcHVzd2FwUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBRdWlwdXN3YXBQcm90b2NvbCA9IGNyZWF0ZVF1aXB1c3dhcFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zU2lyaXVzUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVNpcml1c1Byb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxTaXJpdXNQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFNpcml1c1Byb3RvY29sID0gY3JlYXRlU2lyaXVzUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NTdGFrZXJQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU3Rha2VyUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFN0YWtlclByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogU3Rha2VyUHJvdG9jb2wgPSBjcmVhdGVTdGFrZXJQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1RldGhlclVTRFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXRoZXJVU0RQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV0aGVyVVNEUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBUZXRoZXJVU0RQcm90b2NvbCA9IGNyZWF0ZVRldGhlclVTRFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVHpCVENQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlVHpCVENQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VHpCVENQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFR6QlRDUHJvdG9jb2wgPSBjcmVhdGVUekJUQ1Byb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVUJUQ1Byb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVQlRDUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVCVENQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFVCVENQcm90b2NvbCA9IGNyZWF0ZVVCVENQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1VERUZJUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVVERUZJUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVERUZJUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBVREVGSVByb3RvY29sID0gY3JlYXRlVURFRklQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1VTRFRlelByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVU0RUZXpQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VVNEVGV6UHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBVU0RUZXpQcm90b2NvbCA9IGNyZWF0ZVVTRFRlelByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVVVTRFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVVVNEUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVVU0RQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFVVU0RQcm90b2NvbCA9IGNyZWF0ZVVVU0RQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1dyYXBwZWRQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlV3JhcHBlZFRlem9zUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFdyYXBwZWRUZXpvc1Byb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogV3JhcHBlZFRlem9zUHJvdG9jb2wgPSBjcmVhdGVXcmFwcGVkVGV6b3NQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1dyYXBQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlV3JhcFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxXcmFwUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBXcmFwUHJvdG9jb2wgPSBjcmVhdGVXcmFwUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NZb3VQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlWW91UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFlvdVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogWW91UHJvdG9jb2wgPSBjcmVhdGVZb3VQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG4vLyBUcmFuc2FjdGlvblxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uU3RhdHVzVjFUb1YwKHN0YXR1czogQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXNWMSk6IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAge1xuICByZXR1cm4gc3RhdHVzLnR5cGUgPT09ICdhcHBsaWVkJ1xuICAgID8gQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXNWMC5BUFBMSUVEXG4gICAgOiBzdGF0dXMudHlwZSA9PT0gJ2ZhaWxlZCdcbiAgICA/IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAuRkFJTEVEXG4gICAgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY29udmVydFVJQWN0aW9uc1YxVG9WMChhY3Rpb25zOiBBaXJHYXBVSUFjdGlvblYxW10pOiBBaXJHYXBVSUFsZXJ0VjBbJ2FjdGlvbnMnXSB7XG4gIHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uOiBBaXJHYXBVSUFjdGlvblYxKSA9PiAoe1xuICAgIHRleHQ6IGFjdGlvbi50ZXh0LnZhbHVlLFxuICAgIGxpbms6ICcnXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0VUlBbGVydHNWMVRvVjAoYWxlcnRzOiBBaXJHYXBVSUFsZXJ0VjFbXSk6IEFpckdhcFVJQWxlcnRWMFtdIHtcbiAgcmV0dXJuIGFsZXJ0cy5tYXAoKGFsZXJ0OiBBaXJHYXBVSUFsZXJ0VjEpID0+ICh7XG4gICAgdHlwZTpcbiAgICAgIGFsZXJ0LnR5cGUgPT09ICdzdWNjZXNzJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuU1VDQ0VTU1xuICAgICAgICA6IGFsZXJ0LnR5cGUgPT09ICdpbmZvJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuTk9URVxuICAgICAgICA6IGFsZXJ0LnR5cGUgPT09ICd3YXJuaW5nJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuV0FSTklOR1xuICAgICAgICA6IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuRVJST1IsXG4gICAgdGl0bGU6IGFsZXJ0LnRpdGxlLnZhbHVlLFxuICAgIGRlc2NyaXB0aW9uOiBhbGVydC5kZXNjcmlwdGlvbi52YWx1ZSxcbiAgICBpY29uOiBhbGVydC5pY29uLFxuICAgIGFjdGlvbnM6IGFsZXJ0LmFjdGlvbnMgPyBjb252ZXJ0VUlBY3Rpb25zVjFUb1YwKGFsZXJ0LmFjdGlvbnMpIDogdW5kZWZpbmVkXG4gIH0pKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMChcbiAgdHhzOiBBaXJHYXBUcmFuc2FjdGlvblYxW10sXG4gIHByb3RvY29sOiBBaXJHYXBPbmxpbmVQcm90b2NvbFxuKTogUHJvbWlzZTxBaXJHYXBUcmFuc2FjdGlvblYwW10+XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMChcbiAgdHhzOiBBaXJHYXBUcmFuc2FjdGlvblYxW10sXG4gIG1ldGFkYXRhOiBQcm90b2NvbE1ldGFkYXRhLFxuICBuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmtWMSB8IFByb3RvY29sTmV0d29ya1YwXG4pOiBQcm9taXNlPEFpckdhcFRyYW5zYWN0aW9uVjBbXT5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKFxuICB0eHM6IEFpckdhcFRyYW5zYWN0aW9uVjFbXSxcbiAgcHJvdG9jb2xPck1ldGFkYXRhOiBBaXJHYXBPbmxpbmVQcm90b2NvbCB8IFByb3RvY29sTWV0YWRhdGEsXG4gIG5ldHdvcmtPclVuZGVmaW5lZD86IFByb3RvY29sTmV0d29ya1YxIHwgUHJvdG9jb2xOZXR3b3JrVjBcbik6IFByb21pc2U8QWlyR2FwVHJhbnNhY3Rpb25WMFtdPiB7XG4gIGNvbnN0IHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEgPSBpc09ubGluZVByb3RvY29sKHByb3RvY29sT3JNZXRhZGF0YSlcbiAgICA/IGF3YWl0IHByb3RvY29sT3JNZXRhZGF0YS5nZXRNZXRhZGF0YSgpXG4gICAgOiBwcm90b2NvbE9yTWV0YWRhdGFcblxuICBjb25zdCBuZXR3b3JrVjA6IFByb3RvY29sTmV0d29ya1YwID0gaXNPbmxpbmVQcm90b2NvbChwcm90b2NvbE9yTWV0YWRhdGEpXG4gICAgPyBjb252ZXJ0TmV0d29ya1YxVG9WMChhd2FpdCBwcm90b2NvbE9yTWV0YWRhdGEuZ2V0TmV0d29yaygpKVxuICAgIDogbmV0d29ya09yVW5kZWZpbmVkIGluc3RhbmNlb2YgUHJvdG9jb2xOZXR3b3JrVjBcbiAgICA/IG5ldHdvcmtPclVuZGVmaW5lZFxuICAgIDogY29udmVydE5ldHdvcmtWMVRvVjAobmV0d29ya09yVW5kZWZpbmVkKVxuXG4gIGNvbnN0IHVuaXRzOiBQcm90b2NvbFVuaXRzTWV0YWRhdGEgPSBwcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gIGNvbnN0IGZlZVVuaXRzOiBQcm90b2NvbFVuaXRzTWV0YWRhdGEgPSBwcm90b2NvbE1ldGFkYXRhLmZlZT8udW5pdHMgPz8gdW5pdHNcblxuICByZXR1cm4gdHhzLm1hcCgodHg6IEFpckdhcFRyYW5zYWN0aW9uVjEpOiBBaXJHYXBUcmFuc2FjdGlvblYwID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogdHguZnJvbSxcbiAgICAgIHRvOiB0eC50byxcbiAgICAgIGlzSW5ib3VuZDogdHguaXNJbmJvdW5kLFxuXG4gICAgICBhbW91bnQ6IG5ld0Ftb3VudCh0eC5hbW91bnQpLmJsb2NrY2hhaW4odW5pdHMpLnZhbHVlLFxuICAgICAgZmVlOiBuZXdBbW91bnQodHguZmVlKS5ibG9ja2NoYWluKGZlZVVuaXRzKS52YWx1ZSxcblxuICAgICAgdGltZXN0YW1wOiB0eC50aW1lc3RhbXAsXG4gICAgICBjaGFuZ2VBZGRyZXNzSW5mbzogdHguY2hhbmdlQWRkcmVzc0luZm8sXG4gICAgICBkaXNwbGF5RnJvbVRvOiB0eC5kaXNwbGF5RnJvbVRvLFxuXG4gICAgICBwcm90b2NvbElkZW50aWZpZXI6IHByb3RvY29sTWV0YWRhdGEuaWRlbnRpZmllciBhcyBQcm90b2NvbFN5bWJvbHMsXG4gICAgICBuZXR3b3JrOiBuZXR3b3JrVjAsXG5cbiAgICAgIGRhdGE6IHR5cGVvZiB0eC5hcmJpdHJhcnlEYXRhID09PSAnc3RyaW5nJyA/IHR4LmFyYml0cmFyeURhdGEgOiB0eC5hcmJpdHJhcnlEYXRhPy5bMV0sXG5cbiAgICAgIGhhc2g6IHR4LnN0YXR1cz8uaGFzaCxcbiAgICAgIGJsb2NrSGVpZ2h0OiB0eC5zdGF0dXM/LmJsb2NrLFxuICAgICAgc3RhdHVzOiB0eC5zdGF0dXMgPyBjb252ZXJ0VHJhbnNhY3Rpb25TdGF0dXNWMVRvVjAodHguc3RhdHVzKSA6IHVuZGVmaW5lZCxcblxuICAgICAgd2FybmluZ3M6IHR4LnVpQWxlcnRzID8gY29udmVydFVJQWxlcnRzVjFUb1YwKHR4LnVpQWxlcnRzKSA6IHVuZGVmaW5lZCxcblxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgLi4udHguZXh0cmEsXG4gICAgICAgIHR5cGU6IHR4LnR5cGVcbiAgICAgIH0sXG4gICAgICB0cmFuc2FjdGlvbkRldGFpbHM6IHR4Lmpzb25cbiAgICB9XG4gIH0pXG59XG5cbi8vIEZlZURlZmF1bHRzXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RmVlRGVmYXVsdHNWMFRvVjE8X0ZlZVVuaXRzIGV4dGVuZHMgc3RyaW5nPihmZWVEZWZhdWx0czogRmVlRGVmYXVsdHNWMCwgZGVjaW1hbHM6IG51bWJlcik6IEZlZURlZmF1bHRzVjE8X0ZlZVVuaXRzPiB7XG4gIHJldHVybiB7XG4gICAgbG93OiBuZXdBbW91bnQobmV3IEJpZ051bWJlcihmZWVEZWZhdWx0cy5sb3cpLnNoaWZ0ZWRCeShkZWNpbWFscyksICdibG9ja2NoYWluJyksXG4gICAgbWVkaXVtOiBuZXdBbW91bnQobmV3IEJpZ051bWJlcihmZWVEZWZhdWx0cy5tZWRpdW0pLnNoaWZ0ZWRCeShkZWNpbWFscyksICdibG9ja2NoYWluJyksXG4gICAgaGlnaDogbmV3QW1vdW50KG5ldyBCaWdOdW1iZXIoZmVlRGVmYXVsdHMuaGlnaCkuc2hpZnRlZEJ5KGRlY2ltYWxzKSwgJ2Jsb2NrY2hhaW4nKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAoZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzVjEsIHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEpOiBGZWVEZWZhdWx0c1YwIHtcbiAgY29uc3QgZmVlVW5pdHM6IFByb3RvY29sVW5pdHNNZXRhZGF0YSA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy51bml0cyA/PyBwcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gIGNvbnN0IGZlZVVuaXQ6IHN0cmluZyA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy5tYWluVW5pdCA/PyBwcm90b2NvbE1ldGFkYXRhLm1haW5Vbml0XG5cbiAgcmV0dXJuIHtcbiAgICBsb3c6IG5ldyBCaWdOdW1iZXIobmV3QW1vdW50KGZlZURlZmF1bHRzLmxvdykuY29udmVydChmZWVVbml0LCBmZWVVbml0cykudmFsdWUpLnRvRml4ZWQoKSxcbiAgICBtZWRpdW06IG5ldyBCaWdOdW1iZXIobmV3QW1vdW50KGZlZURlZmF1bHRzLm1lZGl1bSkuY29udmVydChmZWVVbml0LCBmZWVVbml0cykudmFsdWUpLnRvRml4ZWQoKSxcbiAgICBoaWdoOiBuZXcgQmlnTnVtYmVyKG5ld0Ftb3VudChmZWVEZWZhdWx0cy5oaWdoKS5jb252ZXJ0KGZlZVVuaXQsIGZlZVVuaXRzKS52YWx1ZSkudG9GaXhlZCgpXG4gIH1cbn1cblxuLy8gQnl0ZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoYnl0ZXM6IHN0cmluZyk6IEJ5dGVzU3RyaW5nRm9ybWF0IHtcbiAgcmV0dXJuIGlzSGV4KGJ5dGVzKSA/ICdoZXgnIDogJ2VuY29kZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNyZXRLZXlUeXBlKHNlY3JldEtleTogc3RyaW5nKTogU2VjcmV0S2V5Wyd0eXBlJ10gfCBFeHRlbmRlZFNlY3JldEtleVsndHlwZSddIHtcbiAgcmV0dXJuIHNlY3JldEtleS5zdGFydHNXaXRoKCd4cHJ2JykgPyAneHByaXYnIDogJ3ByaXYnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdWJsaWNLZXlUeXBlKHB1YmxpY0tleTogc3RyaW5nKTogUHVibGljS2V5Wyd0eXBlJ10gfCBFeHRlbmRlZFB1YmxpY0tleVsndHlwZSddIHtcbiAgcmV0dXJuIHB1YmxpY0tleS5zdGFydHNXaXRoKCd4cHViJykgPyAneHB1YicgOiAncHViJ1xufVxuIl19
@@ -0,0 +1,80 @@
1
+ // TODO: Split up into individual files
2
+ // https://stackoverflow.com/a/8472700/4790610
3
+ export function generateGUID() {
4
+ // tslint:disable
5
+ if (typeof window.crypto !== 'undefined' && typeof window.crypto.getRandomValues !== 'undefined') {
6
+ // If we have a cryptographically secure PRNG, use that
7
+ // https://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript
8
+ const buf = new Uint16Array(8);
9
+ window.crypto.getRandomValues(buf);
10
+ const S4 = function (num) {
11
+ let ret = num.toString(16);
12
+ while (ret.length < 4) {
13
+ ret = `0${ret}`;
14
+ }
15
+ return ret;
16
+ };
17
+ return `${S4(buf[0]) + S4(buf[1])}-${S4(buf[2])}-${S4(buf[3])}-${S4(buf[4])}-${S4(buf[5])}${S4(buf[6])}${S4(buf[7])}`;
18
+ }
19
+ else {
20
+ // Otherwise, just use Math.random
21
+ // https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
22
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
23
+ // eslint-disable-next-line no-bitwise
24
+ const r = (Math.random() * 16) | 0;
25
+ // eslint-disable-next-line no-bitwise
26
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
27
+ return v.toString(16);
28
+ });
29
+ }
30
+ // tslint:enable
31
+ }
32
+ export async function to(promise, errorExt) {
33
+ return promise
34
+ .then((data) => [null, data])
35
+ .catch((rejectionError) => {
36
+ if (errorExt) {
37
+ Object.assign(rejectionError, errorExt);
38
+ }
39
+ return [rejectionError, undefined];
40
+ });
41
+ }
42
+ function readParameterFromUrl(url, parameter) {
43
+ try {
44
+ const parsedUrl = new URL(url);
45
+ return parsedUrl.searchParams.get(parameter) || '';
46
+ }
47
+ catch (error) {
48
+ return url;
49
+ }
50
+ }
51
+ export function parseIACUrl(url, parameter) {
52
+ let parseResult;
53
+ if (Array.isArray(url)) {
54
+ parseResult = url.map((chunk) => readParameterFromUrl(chunk, parameter));
55
+ }
56
+ else {
57
+ try {
58
+ parseResult = readParameterFromUrl(url, parameter).split(',');
59
+ }
60
+ catch (error) {
61
+ parseResult = url.split(',');
62
+ }
63
+ }
64
+ // In case one of the elements contains a chunked string, we have to flatten it.
65
+ parseResult = parseResult.reduce((pv, cv) => [...pv, ...cv.split(',')], []);
66
+ return parseResult.filter((el) => el !== '');
67
+ }
68
+ export function serializedDataToUrlString(data, host, parameter = 'd') {
69
+ return `${host}?${parameter}=${data}`;
70
+ }
71
+ export function toBoolean(value) {
72
+ // All falsy and truthy values can be converted to a real boolean by using a double negative (!!)
73
+ return Boolean(value);
74
+ }
75
+ export function assertNever(name, arg) {
76
+ throw new Error(`${name} ${arg}`);
77
+ }
78
+ export const TEMP_BTC_REQUEST_IDS = 'TEMP-BTC-REQUEST-IDS';
79
+ export const TEMP_MM_REQUEST_IDS = 'TEMP-MM-REQUEST-IDS';
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUV2Qyw4Q0FBOEM7QUFDOUMsTUFBTSxVQUFVLFlBQVk7SUFDMUIsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2pHLHVEQUF1RDtRQUN2RCw2RkFBNkY7UUFDN0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEMsTUFBTSxFQUFFLEdBQUcsVUFBVSxHQUFXO1lBQzlCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNqQixDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUE7UUFFRCxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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O0lBQzNGLE9BQU8sR0FBRyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWM7SUFDdEMsaUdBQWlHO0lBQ2pHLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxHQUFVO0lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUE7QUFDMUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBTcGxpdCB1cCBpbnRvIGluZGl2aWR1YWwgZmlsZXNcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NzI3MDAvNDc5MDYxMFxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR1VJRCgpOiBzdHJpbmcge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICBpZiAodHlwZW9mIHdpbmRvdy5jcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIFBSTkcsIHVzZSB0aGF0XG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjkwNjkxNi9jb2xsaXNpb25zLXdoZW4tZ2VuZXJhdGluZy11dWlkcy1pbi1qYXZhc2NyaXB0XG4gICAgY29uc3QgYnVmID0gbmV3IFVpbnQxNkFycmF5KDgpXG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmKVxuICAgIGNvbnN0IFM0ID0gZnVuY3Rpb24gKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgIGxldCByZXQgPSBudW0udG9TdHJpbmcoMTYpXG4gICAgICB3aGlsZSAocmV0Lmxlbmd0aCA8IDQpIHtcbiAgICAgICAgcmV0ID0gYDAke3JldH1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7UzQoYnVmWzBdKSArIFM0KGJ1ZlsxXSl9LSR7UzQoYnVmWzJdKX0tJHtTNChidWZbM10pfS0ke1M0KGJ1Zls0XSl9LSR7UzQoYnVmWzVdKX0ke1M0KGJ1Zls2XSl9JHtTNChidWZbN10pfWBcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIGp1c3QgdXNlIE1hdGgucmFuZG9tXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIzIzIxMTc1MjNcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OFxuXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgICB9KVxuICB9XG4gIC8vIHRzbGludDplbmFibGVcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvPFQsIFUgPSBFcnJvcj4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZXJyb3JFeHQ/OiB1bmtub3duKTogUHJvbWlzZTxbVSB8IG51bGwsIFQgfCB1bmRlZmluZWRdPiB7XG4gIHJldHVybiBwcm9taXNlXG4gICAgLnRoZW48W251bGwsIFRdPigoZGF0YTogVCkgPT4gW251bGwsIGRhdGFdKVxuICAgIC5jYXRjaDxbVSwgdW5kZWZpbmVkXT4oKHJlamVjdGlvbkVycm9yOiBVKSA9PiB7XG4gICAgICBpZiAoZXJyb3JFeHQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZWplY3Rpb25FcnJvciwgZXJyb3JFeHQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbcmVqZWN0aW9uRXJyb3IsIHVuZGVmaW5lZF1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZWFkUGFyYW1ldGVyRnJvbVVybCh1cmw6IHN0cmluZywgcGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZFVybDogVVJMID0gbmV3IFVSTCh1cmwpXG5cbiAgICByZXR1cm4gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcy5nZXQocGFyYW1ldGVyKSB8fCAnJ1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB1cmxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJQUNVcmwodXJsOiBzdHJpbmcgfCBzdHJpbmdbXSwgcGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGxldCBwYXJzZVJlc3VsdDogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkge1xuICAgIHBhcnNlUmVzdWx0ID0gdXJsLm1hcCgoY2h1bms6IHN0cmluZykgPT4gcmVhZFBhcmFtZXRlckZyb21VcmwoY2h1bmssIHBhcmFtZXRlcikpXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlUmVzdWx0ID0gcmVhZFBhcmFtZXRlckZyb21VcmwodXJsLCBwYXJhbWV0ZXIpLnNwbGl0KCcsJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcGFyc2VSZXN1bHQgPSB1cmwuc3BsaXQoJywnKVxuICAgIH1cbiAgfVxuXG4gIC8vIEluIGNhc2Ugb25lIG9mIHRoZSBlbGVtZW50cyBjb250YWlucyBhIGNodW5rZWQgc3RyaW5nLCB3ZSBoYXZlIHRvIGZsYXR0ZW4gaXQuXG4gIHBhcnNlUmVzdWx0ID0gcGFyc2VSZXN1bHQucmVkdWNlKChwdjogc3RyaW5nW10sIGN2OiBzdHJpbmcpID0+IFsuLi5wdiwgLi4uY3Yuc3BsaXQoJywnKV0sIFtdKVxuXG4gIHJldHVybiBwYXJzZVJlc3VsdC5maWx0ZXIoKGVsOiBzdHJpbmcpID0+IGVsICE9PSAnJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZWREYXRhVG9VcmxTdHJpbmcoZGF0YTogc3RyaW5nLCBob3N0OiBzdHJpbmcsIHBhcmFtZXRlcjogc3RyaW5nID0gJ2QnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2hvc3R9PyR7cGFyYW1ldGVyfT0ke2RhdGF9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIC8vIEFsbCBmYWxzeSBhbmQgdHJ1dGh5IHZhbHVlcyBjYW4gYmUgY29udmVydGVkIHRvIGEgcmVhbCBib29sZWFuIGJ5IHVzaW5nIGEgZG91YmxlIG5lZ2F0aXZlICghISlcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROZXZlcihuYW1lOiBzdHJpbmcsIGFyZzogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSAke2FyZ31gKVxufVxuXG5leHBvcnQgY29uc3QgVEVNUF9CVENfUkVRVUVTVF9JRFMgPSAnVEVNUC1CVEMtUkVRVUVTVC1JRFMnXG5leHBvcnQgY29uc3QgVEVNUF9NTV9SRVFVRVNUX0lEUyA9ICdURU1QLU1NLVJFUVVFU1QtSURTJ1xuIl19