@logixjs/sandbox 0.0.1 → 0.0.2

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 (248) hide show
  1. package/LICENSE +201 -0
  2. package/package.json +3 -1
  3. package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
  4. package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
  5. package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
  6. package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
  7. package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
  8. package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
  9. package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
  10. package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
  11. package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
  12. package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
  13. package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
  14. package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
  15. package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
  16. package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
  17. package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
  18. package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
  19. package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
  20. package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
  21. package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
  22. package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
  23. package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
  24. package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
  25. package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
  26. package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
  27. package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
  28. package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
  29. package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
  30. package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
  31. package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
  32. package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
  33. package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
  34. package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
  35. package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
  36. package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
  37. package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
  38. package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
  39. package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
  40. package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
  41. package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
  42. package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
  43. package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
  44. package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
  45. package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
  46. package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
  47. package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
  48. package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
  49. package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
  50. package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
  51. package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
  52. package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
  53. package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
  54. package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
  55. package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
  56. package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
  57. package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
  58. package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
  59. package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
  60. package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
  61. package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
  62. package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
  63. package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
  64. package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
  65. package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
  66. package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
  67. package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
  68. package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
  69. package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
  70. package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
  71. package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
  72. package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
  73. package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
  74. package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
  75. package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
  76. package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
  77. package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
  78. package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
  79. package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
  80. package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
  81. package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
  82. package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
  83. package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
  84. package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
  85. package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
  86. package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
  87. package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
  88. package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
  89. package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
  90. package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
  91. package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
  92. package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
  93. package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
  94. package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
  95. package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
  96. package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
  97. package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
  98. package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
  99. package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
  100. package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
  101. package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
  102. package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
  103. package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
  104. package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
  105. package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
  106. package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
  107. package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
  108. package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
  109. package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
  110. package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
  111. package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
  112. package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
  113. package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
  114. package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
  115. package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
  116. package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
  117. package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
  118. package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
  119. package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
  120. package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
  121. package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
  122. package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
  123. package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
  124. package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
  125. package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
  126. package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
  127. package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
  128. package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
  129. package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
  130. package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
  131. package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
  132. package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
  133. package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
  134. package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
  135. package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
  136. package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
  137. package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
  138. package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
  139. package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
  140. package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
  141. package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
  142. package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
  143. package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
  144. package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
  145. package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
  146. package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
  147. package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
  148. package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
  149. package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
  150. package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
  151. package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
  152. package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
  153. package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
  154. package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
  155. package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
  156. package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
  157. package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
  158. package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
  159. package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
  160. package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
  161. package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
  162. package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
  163. package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
  164. package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
  165. package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
  166. package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
  167. package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
  168. package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
  169. package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
  170. package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
  171. package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
  172. package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
  173. package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
  174. package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
  175. package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
  176. package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
  177. package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
  178. package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
  179. package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
  180. package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
  181. package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
  182. package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
  183. package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
  184. package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
  185. package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
  186. package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
  187. package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
  188. package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
  189. package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
  190. package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
  191. package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
  192. package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
  193. package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
  194. package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
  195. package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
  196. package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
  197. package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
  198. package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
  199. package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
  200. package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
  201. package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
  202. package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
  203. package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
  204. package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
  205. package/public/sandbox/logix-core/Bound.js +14 -14
  206. package/public/sandbox/logix-core/Debug.js +12 -10
  207. package/public/sandbox/logix-core/EffectOp.js +3 -4
  208. package/public/sandbox/logix-core/Env.js +5 -2
  209. package/public/sandbox/logix-core/ExternalStore.js +239 -0
  210. package/public/sandbox/logix-core/Flow.js +7 -8
  211. package/public/sandbox/logix-core/Kernel.js +7 -4
  212. package/public/sandbox/logix-core/Link.js +33 -25
  213. package/public/sandbox/logix-core/Middleware.js +13 -11
  214. package/public/sandbox/logix-core/Module.js +93 -30
  215. package/public/sandbox/logix-core/ModuleTag.js +28 -25
  216. package/public/sandbox/logix-core/Observability.js +21 -19
  217. package/public/sandbox/logix-core/Process.js +27 -22
  218. package/public/sandbox/logix-core/ReadQuery.js +7 -11
  219. package/public/sandbox/logix-core/Reflection.js +173 -53
  220. package/public/sandbox/logix-core/Resource.js +6 -3
  221. package/public/sandbox/logix-core/Root.js +7 -3
  222. package/public/sandbox/logix-core/Runtime.js +54 -40
  223. package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
  224. package/public/sandbox/logix-core/StateTrait.js +17 -14
  225. package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
  226. package/public/sandbox/logix-core/Workflow.js +332 -0
  227. package/public/sandbox/logix-core.js +11133 -6622
  228. package/public/sandbox/logix-core.manifest.json +4 -2
  229. package/public/sandbox/worker.js +3 -3
  230. package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
  231. package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
  232. package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
  233. package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
  234. package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
  235. package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
  236. package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
  237. package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
  238. package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
  239. package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
  240. package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
  241. package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
  242. package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
  243. package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
  244. package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
  245. package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
  246. package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
  247. package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
  248. package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
@@ -7,8 +7,11 @@ import {
7
7
  keyHash,
8
8
  layer,
9
9
  make
10
- } from "../chunks/chunk-CEGSWZ5S.js";
11
- import "../chunks/chunk-CZRI7MHA.js";
10
+ } from "../chunks/chunk-EZTMVCJF.js";
11
+ import "../chunks/chunk-YMVMZA3U.js";
12
+ import "../chunks/chunk-UJGVDFZN.js";
13
+ import "../chunks/chunk-SH7TP5CJ.js";
14
+ import "../chunks/chunk-SI5OKFFY.js";
12
15
 
13
16
  // ../logix-core/src/Resource.ts
14
17
  var keyHash2 = keyHash;
@@ -24,4 +27,4 @@ export {
24
27
  layer2 as layer,
25
28
  make2 as make
26
29
  };
27
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUmVzb3VyY2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIFJlc291cmNlIG1vZHVsZTogcHVibGljIGZhY2FkZSAoQGxvZ2l4anMvY29yZS9SZXNvdXJjZSkuXG4vLyBOb3RlOiBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiBgc3JjL2ludGVybmFsL3Jlc291cmNlLnRzYCB0byBhdm9pZCBpbnRlcm5hbCBpbXBvcnRpbmcgcm9vdCBzdWJtb2R1bGVzLlxuXG5pbXBvcnQgdHlwZSAqIGFzIEludGVybmFsIGZyb20gJy4vaW50ZXJuYWwvcmVzb3VyY2UuanMnXG5pbXBvcnQgKiBhcyBJbXBsIGZyb20gJy4vaW50ZXJuYWwvcmVzb3VyY2UuanMnXG5cbmV4cG9ydCB0eXBlIFJlc291cmNlU3BlYzxLZXksIE91dCwgRXJyLCBFbnY+ID0gSW50ZXJuYWwuUmVzb3VyY2VTcGVjPEtleSwgT3V0LCBFcnIsIEVudj5cbmV4cG9ydCB0eXBlIEFueVJlc291cmNlU3BlYyA9IEludGVybmFsLkFueVJlc291cmNlU3BlY1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VTdGF0dXMgPSBJbnRlcm5hbC5SZXNvdXJjZVN0YXR1c1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VTbmFwc2hvdDxEYXRhID0gdW5rbm93biwgRXJyID0gdW5rbm93bj4gPSBJbnRlcm5hbC5SZXNvdXJjZVNuYXBzaG90PERhdGEsIEVycj5cbmV4cG9ydCB0eXBlIFJlc291cmNlUmVnaXN0cnkgPSBJbnRlcm5hbC5SZXNvdXJjZVJlZ2lzdHJ5XG5leHBvcnQgdHlwZSBTcGVjPEtleSwgT3V0LCBFcnIsIEVudj4gPSBJbnRlcm5hbC5TcGVjPEtleSwgT3V0LCBFcnIsIEVudj5cblxuZXhwb3J0IGNvbnN0IGtleUhhc2ggPSBJbXBsLmtleUhhc2hcbmV4cG9ydCBjb25zdCBTbmFwc2hvdCA9IEltcGwuU25hcHNob3RcbmV4cG9ydCBjb25zdCBpbnRlcm5hbCA9IEltcGwuaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBtYWtlID0gSW1wbC5tYWtlXG5leHBvcnQgY29uc3QgbGF5ZXIgPSBJbXBsLmxheWVyXG5cbmV4cG9ydCB7IFJlc291cmNlUmVnaXN0cnlUYWcgfSBmcm9tICcuL2ludGVybmFsL3Jlc291cmNlLmpzJ1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7OztBQWFPLElBQU1BLFdBQWU7QUFDckIsSUFBTUMsWUFBZ0I7QUFDdEIsSUFBTUMsWUFBZ0I7QUFDdEIsSUFBTUMsUUFBWTtBQUNsQixJQUFNQyxTQUFhOyIsCiAgIm5hbWVzIjogWyJrZXlIYXNoIiwgIlNuYXBzaG90IiwgImludGVybmFsIiwgIm1ha2UiLCAibGF5ZXIiXQp9Cg==
30
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUmVzb3VyY2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIFJlc291cmNlIG1vZHVsZTogcHVibGljIGZhY2FkZSAoQGxvZ2l4anMvY29yZS9SZXNvdXJjZSkuXG4vLyBOb3RlOiBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiBgc3JjL2ludGVybmFsL3Jlc291cmNlLnRzYCB0byBhdm9pZCBpbnRlcm5hbCBpbXBvcnRpbmcgcm9vdCBzdWJtb2R1bGVzLlxuXG5pbXBvcnQgdHlwZSAqIGFzIEludGVybmFsIGZyb20gJy4vaW50ZXJuYWwvcmVzb3VyY2UuanMnXG5pbXBvcnQgKiBhcyBJbXBsIGZyb20gJy4vaW50ZXJuYWwvcmVzb3VyY2UuanMnXG5cbmV4cG9ydCB0eXBlIFJlc291cmNlU3BlYzxLZXksIE91dCwgRXJyLCBFbnY+ID0gSW50ZXJuYWwuUmVzb3VyY2VTcGVjPEtleSwgT3V0LCBFcnIsIEVudj5cbmV4cG9ydCB0eXBlIEFueVJlc291cmNlU3BlYyA9IEludGVybmFsLkFueVJlc291cmNlU3BlY1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VTdGF0dXMgPSBJbnRlcm5hbC5SZXNvdXJjZVN0YXR1c1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VTbmFwc2hvdDxEYXRhID0gdW5rbm93biwgRXJyID0gdW5rbm93bj4gPSBJbnRlcm5hbC5SZXNvdXJjZVNuYXBzaG90PERhdGEsIEVycj5cbmV4cG9ydCB0eXBlIFJlc291cmNlUmVnaXN0cnkgPSBJbnRlcm5hbC5SZXNvdXJjZVJlZ2lzdHJ5XG5leHBvcnQgdHlwZSBTcGVjPEtleSwgT3V0LCBFcnIsIEVudj4gPSBJbnRlcm5hbC5TcGVjPEtleSwgT3V0LCBFcnIsIEVudj5cblxuZXhwb3J0IGNvbnN0IGtleUhhc2ggPSBJbXBsLmtleUhhc2hcbmV4cG9ydCBjb25zdCBTbmFwc2hvdCA9IEltcGwuU25hcHNob3RcbmV4cG9ydCBjb25zdCBpbnRlcm5hbCA9IEltcGwuaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBtYWtlID0gSW1wbC5tYWtlXG5leHBvcnQgY29uc3QgbGF5ZXIgPSBJbXBsLmxheWVyXG5cbmV4cG9ydCB7IFJlc291cmNlUmVnaXN0cnlUYWcgfSBmcm9tICcuL2ludGVybmFsL3Jlc291cmNlLmpzJ1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7OztBQWFPLElBQU1BLFdBQWU7QUFDckIsSUFBTUMsWUFBZ0I7QUFDdEIsSUFBTUMsWUFBZ0I7QUFDdEIsSUFBTUMsUUFBWTtBQUNsQixJQUFNQyxTQUFhOyIsCiAgIm5hbWVzIjogWyJrZXlIYXNoIiwgIlNuYXBzaG90IiwgImludGVybmFsIiwgIm1ha2UiLCAibGF5ZXIiXQp9Cg==
@@ -3,8 +3,12 @@
3
3
  import {
4
4
  layerFromContext,
5
5
  resolve
6
- } from "../chunks/chunk-RJQ4PG2F.js";
7
- import "../chunks/chunk-CZRI7MHA.js";
6
+ } from "../chunks/chunk-NWCJJZNQ.js";
7
+ import "../chunks/chunk-UBMUY7WO.js";
8
+ import "../chunks/chunk-YMVMZA3U.js";
9
+ import "../chunks/chunk-UJGVDFZN.js";
10
+ import "../chunks/chunk-SH7TP5CJ.js";
11
+ import "../chunks/chunk-SI5OKFFY.js";
8
12
 
9
13
  // ../logix-core/src/Root.ts
10
14
  var resolve2 = resolve;
@@ -13,4 +17,4 @@ export {
13
17
  layerFromContext2 as layerFromContext,
14
18
  resolve2 as resolve
15
19
  };
16
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUm9vdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgKiBhcyBJbnRlcm5hbCBmcm9tICcuL2ludGVybmFsL3Jvb3QuanMnXG5pbXBvcnQgKiBhcyBJbXBsIGZyb20gJy4vaW50ZXJuYWwvcm9vdC5qcydcblxuZXhwb3J0IHR5cGUgUm9vdFJlc29sdmVFbnRyeXBvaW50ID0gSW50ZXJuYWwuUm9vdFJlc29sdmVFbnRyeXBvaW50XG5leHBvcnQgdHlwZSBSb290UmVzb2x2ZU9wdGlvbnMgPSBJbnRlcm5hbC5Sb290UmVzb2x2ZU9wdGlvbnNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmUgPSBJbXBsLnJlc29sdmVcbmV4cG9ydCBjb25zdCBsYXllckZyb21Db250ZXh0ID0gSW1wbC5sYXllckZyb21Db250ZXh0XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7QUFNTyxJQUFNQSxXQUFlO0FBQ3JCLElBQU1DLG9CQUF3QjsiLAogICJuYW1lcyI6IFsicmVzb2x2ZSIsICJsYXllckZyb21Db250ZXh0Il0KfQo=
20
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUm9vdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgKiBhcyBJbnRlcm5hbCBmcm9tICcuL2ludGVybmFsL3Jvb3QuanMnXG5pbXBvcnQgKiBhcyBJbXBsIGZyb20gJy4vaW50ZXJuYWwvcm9vdC5qcydcblxuZXhwb3J0IHR5cGUgUm9vdFJlc29sdmVFbnRyeXBvaW50ID0gSW50ZXJuYWwuUm9vdFJlc29sdmVFbnRyeXBvaW50XG5leHBvcnQgdHlwZSBSb290UmVzb2x2ZU9wdGlvbnMgPSBJbnRlcm5hbC5Sb290UmVzb2x2ZU9wdGlvbnNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmUgPSBJbXBsLnJlc29sdmVcbmV4cG9ydCBjb25zdCBsYXllckZyb21Db250ZXh0ID0gSW1wbC5sYXllckZyb21Db250ZXh0XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7O0FBTU8sSUFBTUEsV0FBZTtBQUNyQixJQUFNQyxvQkFBd0I7IiwKICAibmFtZXMiOiBbInJlc29sdmUiLCAibGF5ZXJGcm9tQ29udGV4dCJdCn0K
@@ -2,21 +2,7 @@
2
2
 
3
3
  import {
4
4
  layer as layer2
5
- } from "../chunks/chunk-NQW73ACJ.js";
6
- import {
7
- withDebug
8
- } from "../chunks/chunk-X72PZOFA.js";
9
- import {
10
- getRuntimeByModuleAndInstance,
11
- normalizeBoolean,
12
- normalizeNonNegativeNumber,
13
- normalizePositiveInt,
14
- normalizePositiveNumber
15
- } from "../chunks/chunk-PQ652ULI.js";
16
- import "../chunks/chunk-MPUSOFJ3.js";
17
- import "../chunks/chunk-HFV5GJPK.js";
18
- import "../chunks/chunk-CEGSWZ5S.js";
19
- import "../chunks/chunk-ZUBABAAO.js";
5
+ } from "../chunks/chunk-PMXBOYQI.js";
20
6
  import {
21
7
  BootError,
22
8
  DisposeError,
@@ -27,52 +13,70 @@ import {
27
13
  makeApp,
28
14
  makeProgramRunnerKernel,
29
15
  provide
30
- } from "../chunks/chunk-EJDFUZ4B.js";
31
- import "../chunks/chunk-4LRLOTMA.js";
32
- import "../chunks/chunk-HNEDTEGQ.js";
16
+ } from "../chunks/chunk-BUVHG3NJ.js";
17
+ import {
18
+ withDebug
19
+ } from "../chunks/chunk-K2MQ66O7.js";
20
+ import {
21
+ getRuntimeByModuleAndInstance,
22
+ normalizeBoolean,
23
+ normalizeNonNegativeNumber,
24
+ normalizePositiveInt,
25
+ normalizePositiveNumber
26
+ } from "../chunks/chunk-KTFZSXOW.js";
27
+ import "../chunks/chunk-FQRUTYAD.js";
28
+ import "../chunks/chunk-C2MYMMO4.js";
29
+ import "../chunks/chunk-BJOWSSEL.js";
30
+ import "../chunks/chunk-KDJR27JV.js";
31
+ import "../chunks/chunk-EZTMVCJF.js";
32
+ import "../chunks/chunk-6TUOP63Q.js";
33
+ import "../chunks/chunk-L4PNO2H6.js";
33
34
  import {
34
35
  make
35
- } from "../chunks/chunk-JIXTOQXJ.js";
36
+ } from "../chunks/chunk-RIWOEI3T.js";
36
37
  import "../chunks/chunk-KE2H62D6.js";
37
- import {
38
- inSyncTransactionFiber,
39
- isInSyncTransaction
40
- } from "../chunks/chunk-WFV5PPWJ.js";
41
38
  import "../chunks/chunk-CTSYKMM6.js";
42
- import "../chunks/chunk-RJQ4PG2F.js";
39
+ import "../chunks/chunk-NWCJJZNQ.js";
40
+ import "../chunks/chunk-UBMUY7WO.js";
43
41
  import "../chunks/chunk-GFOF7NCX.js";
44
42
  import "../chunks/chunk-DOBF6YTQ.js";
45
43
  import {
46
44
  devtoolsHubLayer,
47
45
  layer,
48
46
  runtimeLabel
49
- } from "../chunks/chunk-S4EXG3OS.js";
50
- import "../chunks/chunk-A6JFUNQQ.js";
51
- import "../chunks/chunk-ON2LY6HJ.js";
47
+ } from "../chunks/chunk-RBB6SHW2.js";
48
+ import "../chunks/chunk-74C5VW7Z.js";
49
+ import "../chunks/chunk-4MY35XR3.js";
52
50
  import "../chunks/chunk-2LZ43SWS.js";
53
- import "../chunks/chunk-IP63FME6.js";
51
+ import "../chunks/chunk-X2Z5VYG3.js";
52
+ import "../chunks/chunk-ASVMK364.js";
54
53
  import {
55
54
  getRuntimeInternals
56
- } from "../chunks/chunk-UCFEP3BH.js";
57
- import "../chunks/chunk-PTSJJANP.js";
55
+ } from "../chunks/chunk-7GPAF2UK.js";
56
+ import "../chunks/chunk-EYNDQLSB.js";
58
57
  import {
59
58
  ConcurrencyPolicyOverridesTag,
60
59
  ConcurrencyPolicyTag,
61
60
  StateTransactionConfigTag,
62
61
  StateTransactionOverridesTag,
63
- isDevEnv
64
- } from "../chunks/chunk-CZRI7MHA.js";
65
- import "../chunks/chunk-VLYP4WUS.js";
66
- import "../chunks/chunk-UMVN3AWO.js";
67
- import "../chunks/chunk-UKYAF3NL.js";
68
- import "../chunks/chunk-S46P7MC6.js";
62
+ enterRuntimeBatch,
63
+ exitRuntimeBatch,
64
+ inSyncTransactionFiber,
65
+ isDevEnv,
66
+ isInSyncTransaction
67
+ } from "../chunks/chunk-YMVMZA3U.js";
68
+ import "../chunks/chunk-NMGFJZ4I.js";
69
+ import "../chunks/chunk-UJGVDFZN.js";
70
+ import "../chunks/chunk-2XVE7F26.js";
69
71
  import {
70
72
  runSessionLayer
71
- } from "../chunks/chunk-3LX3KIQQ.js";
72
- import "../chunks/chunk-BWSNPKO5.js";
73
+ } from "../chunks/chunk-W365QUZ5.js";
74
+ import "../chunks/chunk-SH7TP5CJ.js";
73
75
  import {
74
76
  EffectOpMiddlewareTag
75
- } from "../chunks/chunk-TOQ6SJ6O.js";
77
+ } from "../chunks/chunk-SI5OKFFY.js";
78
+ import "../chunks/chunk-LWI7BXFN.js";
79
+ import "../chunks/chunk-DT7YIIWE.js";
76
80
 
77
81
  // ../logix-core/src/Runtime.ts
78
82
  import { Effect as Effect2, Layer, Option as Option2 } from "../effect.js";
@@ -749,6 +753,7 @@ var make2 = (root, options) => {
749
753
  modules: [provide(rootImpl.module, rootImpl.layer)],
750
754
  processes: rootImpl.processes ?? [],
751
755
  onError: options?.onError,
756
+ hostScheduler: options?.hostScheduler,
752
757
  stateTransaction: options?.stateTransaction,
753
758
  concurrencyPolicy: options?.concurrencyPolicy,
754
759
  readQueryStrictGate
@@ -756,6 +761,14 @@ var make2 = (root, options) => {
756
761
  const app = makeApp(appConfig);
757
762
  return app.makeRuntime();
758
763
  };
764
+ var batch = (fn) => {
765
+ enterRuntimeBatch();
766
+ try {
767
+ return fn();
768
+ } finally {
769
+ exitRuntimeBatch();
770
+ }
771
+ };
759
772
  var openProgram2 = (root, options) => openProgram(
760
773
  (rootImpl, runtimeOptions) => make2(rootImpl, runtimeOptions),
761
774
  resolveRootImpl(root),
@@ -834,6 +847,7 @@ export {
834
847
  DisposeTimeoutError,
835
848
  MainError,
836
849
  applyTransactionSnapshot,
850
+ batch,
837
851
  concurrencyPolicyOverridesLayer,
838
852
  make2 as make,
839
853
  openProgram2 as openProgram,
@@ -842,4 +856,4 @@ export {
842
856
  setTraitConvergeOverride,
843
857
  stateTransactionOverridesLayer
844
858
  };
845
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUnVudGltZS50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvY29uZmlnVmFsaWRhdGlvbi50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvcnVubmVyL1Byb2dyYW1SdW5uZXIudHMiLCAiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL3J1bm5lci9Qcm9ncmFtUnVubmVyLmV4aXRDb2RlLnRzIiwgIi4uLy4uLy4uLy4uL2xvZ2l4LWNvcmUvc3JjL2ludGVybmFsL3J1bnRpbWUvY29yZS9ydW5uZXIvUHJvZ3JhbVJ1bm5lci5vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBFZmZlY3QsIExheWVyLCBNYW5hZ2VkUnVudGltZSwgT3B0aW9uLCBTY29wZSB9IGZyb20gJ2VmZmVjdCdcbmltcG9ydCB0eXBlIHsgQW55TW9kdWxlU2hhcGUsIE1vZHVsZUltcGwgfSBmcm9tICcuL2ludGVybmFsL21vZHVsZS5qcydcbmltcG9ydCB0eXBlIHsgQW55TW9kdWxlIH0gZnJvbSAnLi9Nb2R1bGUuanMnXG5pbXBvcnQgKiBhcyBBcHBSdW50aW1lSW1wbCBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvQXBwUnVudGltZS5qcydcbmltcG9ydCAqIGFzIE1vZHVsZVJ1bnRpbWUgZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL01vZHVsZVJ1bnRpbWUuanMnXG5pbXBvcnQgKiBhcyBEZWJ1ZyBmcm9tICcuL0RlYnVnLmpzJ1xuaW1wb3J0IHR5cGUgKiBhcyBFZmZlY3RPcCBmcm9tICcuL0VmZmVjdE9wLmpzJ1xuaW1wb3J0ICogYXMgRWZmZWN0T3BDb3JlIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL0VmZmVjdE9wQ29yZS5qcydcbmltcG9ydCAqIGFzIFJ1blNlc3Npb24gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmlsaXR5L3J1blNlc3Npb24uanMnXG5pbXBvcnQgdHlwZSB7IFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uIGFzIFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uQ29yZSB9IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL1JlYWRRdWVyeS5qcydcbmltcG9ydCB7XG4gIENvbmN1cnJlbmN5UG9saWN5VGFnLFxuICBDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlc1RhZyxcbiAgdHlwZSBSZWFkUXVlcnlTdHJpY3RHYXRlUnVudGltZUNvbmZpZyxcbiAgU3RhdGVUcmFuc2FjdGlvbkNvbmZpZ1RhZyxcbiAgU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlc1RhZyxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeSxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlcyxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeVBhdGNoLFxuICB0eXBlIFN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXMsXG4gIHR5cGUgU3RhdGVUcmFuc2FjdGlvbkluc3RydW1lbnRhdGlvbixcbiAgdHlwZSBTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlcyxcbiAgdHlwZSBUcmFpdENvbnZlcmdlVGltZVNsaWNpbmdQYXRjaCxcbiAgdHlwZSBUeG5MYW5lc1BhdGNoLFxufSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9lbnYuanMnXG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlIGZyb20gJy4vTWlkZGxld2FyZS5qcydcbmltcG9ydCB7IGdldFJ1bnRpbWVJbnRlcm5hbHMgfSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9ydW50aW1lSW50ZXJuYWxzQWNjZXNzb3IuanMnXG5pbXBvcnQgKiBhcyBTY29wZVJlZ2lzdHJ5IGZyb20gJy4vU2NvcGVSZWdpc3RyeS5qcydcbmltcG9ydCB7XG4gIHdhcm5JbnZhbGlkQ29uY3VycmVuY3lQb2xpY3lEZXZPbmx5LFxuICB3YXJuSW52YWxpZENvbmN1cnJlbmN5UG9saWN5UGF0Y2hEZXZPbmx5LFxuICB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXNEZXZPbmx5LFxuICB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25SdW50aW1lQ29uZmlnRGV2T25seSxcbiAgd2FybkludmFsaWRTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlc0Rldk9ubHksXG59IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL2NvbmZpZ1ZhbGlkYXRpb24uanMnXG5pbXBvcnQgKiBhcyBQcm9ncmFtUnVubmVyIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9Qcm9ncmFtUnVubmVyLmpzJ1xuaW1wb3J0IHR5cGUgeyBQcm9ncmFtUnVuQ29udGV4dCB9IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9Qcm9ncmFtUnVubmVyLmNvbnRleHQuanMnXG5cbmV4cG9ydCB0eXBlIHsgUHJvZ3JhbVJ1bkNvbnRleHQgfSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvUHJvZ3JhbVJ1bm5lci5jb250ZXh0LmpzJ1xuZXhwb3J0IHtcbiAgQm9vdEVycm9yLFxuICBEaXNwb3NlRXJyb3IsXG4gIERpc3Bvc2VUaW1lb3V0RXJyb3IsXG4gIE1haW5FcnJvcixcbiAgdHlwZSBQcm9ncmFtSWRlbnRpdHksXG4gIHR5cGUgUHJvZ3JhbVJ1bm5lckVycm9yVGFnLFxufSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvUHJvZ3JhbVJ1bm5lci5lcnJvcnMuanMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblByb2dyYW1PcHRpb25zIGV4dGVuZHMgUnVudGltZU9wdGlvbnMge1xuICByZWFkb25seSBjbG9zZVNjb3BlVGltZW91dD86IG51bWJlclxuICByZWFkb25seSBoYW5kbGVTaWduYWxzPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1blByb2dyYW1PcHRpb25zPEFyZ3MgPSB1bmtub3duPiBleHRlbmRzIE9wZW5Qcm9ncmFtT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFyZ3M/OiBBcmdzXG4gIHJlYWRvbmx5IGV4aXRDb2RlPzogYm9vbGVhblxuICByZWFkb25seSByZXBvcnRFcnJvcj86IGJvb2xlYW5cbn1cblxuY29uc3QgcmVzb2x2ZVJvb3RJbXBsID0gPFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGU+KFxuICByb290OiBNb2R1bGVJbXBsPGFueSwgU2gsIGFueT4gfCBBbnlNb2R1bGUsXG4pOiBNb2R1bGVJbXBsPGFueSwgU2gsIGFueT4gPT5cbiAgKChyb290IGFzIGFueSk/Ll90YWcgPT09ICdNb2R1bGVJbXBsJ1xuICAgID8gKHJvb3QgYXMgTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+KVxuICAgIDogKChyb290IGFzIGFueSk/LmltcGwgYXMgTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+KSkgc2F0aXNmaWVzIE1vZHVsZUltcGw8YW55LCBTaCwgYW55PlxuXG4vKipcbiAqIFJ1bnRpbWUtbGV2ZWwgU3RhdGVUcmFuc2FjdGlvbiBkZWZhdWx0cy5cbiAqXG4gKiBBcHBsaWVkIGFzIHRoZSBgcnVudGltZV9kZWZhdWx0YCBiYXNlbGluZTsgbW9kdWxlcyBhbmQgcHJvdmlkZXJzIG1heSBvdmVycmlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RhdGVUcmFuc2FjdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBpbnN0cnVtZW50YXRpb24/OiBTdGF0ZVRyYW5zYWN0aW9uSW5zdHJ1bWVudGF0aW9uXG4gIHJlYWRvbmx5IHRyYWl0Q29udmVyZ2VCdWRnZXRNcz86IG51bWJlclxuICByZWFkb25seSB0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcz86IG51bWJlclxuICByZWFkb25seSB0cmFpdENvbnZlcmdlTW9kZT86ICdhdXRvJyB8ICdmdWxsJyB8ICdkaXJ0eSdcbiAgcmVhZG9ubHkgdHJhaXRDb252ZXJnZVRpbWVTbGljaW5nPzogVHJhaXRDb252ZXJnZVRpbWVTbGljaW5nUGF0Y2hcbiAgLyoqIFR4biBsYW5lcyBjb25maWd1cmF0aW9uIGF0IHRoZSBgcnVudGltZV9kZWZhdWx0YCBiYXNlbGluZSAoZW5hYmxlZCBieSBkZWZhdWx0KS4gKi9cbiAgcmVhZG9ubHkgdHhuTGFuZXM/OiBUeG5MYW5lc1BhdGNoXG4gIHJlYWRvbmx5IHRyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU3RhdGVUcmFuc2FjdGlvblRyYWl0Q29udmVyZ2VPdmVycmlkZXM+PlxuICAvKiogVHhuIGxhbmVzIG92ZXJyaWRlcyBhdCB0aGUgYHJ1bnRpbWVfbW9kdWxlYCBsYXllci4gKi9cbiAgcmVhZG9ubHkgdHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgVHhuTGFuZXNQYXRjaD4+XG59XG5cbmV4cG9ydCB0eXBlIFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uID0gUmVhZFF1ZXJ5RmFsbGJhY2tSZWFzb25Db3JlXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVJlYWRRdWVyeVN0cmljdEdhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0cmljdCBnYXRlIG1vZGUgZm9yIFJlYWRRdWVyeSBmYWxsYmFja3MuXG4gICAqXG4gICAqIC0gYG9mZmA6IGRpc2FibGVkIChkZWZhdWx0KS5cbiAgICogLSBgd2FybmA6IGFsbG93IGJ1dCBlbWl0IHN0cnVjdHVyZWQgZGlhZ25vc3RpY3MuXG4gICAqIC0gYGVycm9yYDogZmFpbCBvbiBmb3JiaWRkZW4gZmFsbGJhY2tzIChDSS9wZXJmIGdhdGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86ICdvZmYnIHwgJ3dhcm4nIHwgJ2Vycm9yJ1xuICAvKipcbiAgICogU2VsZWN0b3JzIHRoYXQgbXVzdCBzdGF5IG9uIHRoZSBzdGF0aWMgbGFuZSAoa2V5ZWQgYnkgc2VsZWN0b3JJZCkuXG4gICAqXG4gICAqIFdoZW4gdW5kZWZpbmVkLCB0aGUgaW1wbGVtZW50YXRpb24gZGVjaWRlcyB0aGUgZ2F0ZSBjb3ZlcmFnZSAodHlwaWNhbGx5IGBhbGxgKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVTdGF0aWM/OiB7XG4gICAgcmVhZG9ubHkgc2VsZWN0b3JJZHM/OiBSZWFkb25seUFycmF5PHN0cmluZz5cbiAgICByZWFkb25seSBtb2R1bGVzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gIH1cbiAgLyoqXG4gICAqIEZpbmUtZ3JhaW5lZCBraWxsIHN3aXRjaDogZGVueSBzcGVjaWZpYyBmYWxsYmFjayByZWFzb25zIChlLmcuIGB1bnN0YWJsZVNlbGVjdG9ySWRgKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlbnlGYWxsYmFja1JlYXNvbnM/OiBSZWFkb25seUFycmF5PFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVSZWFkUXVlcnlPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3RyaWN0R2F0ZT86IFJ1bnRpbWVSZWFkUXVlcnlTdHJpY3RHYXRlT3B0aW9uc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVPcHRpb25zIHtcbiAgcmVhZG9ubHkgbGF5ZXI/OiBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj5cbiAgcmVhZG9ubHkgb25FcnJvcj86IChjYXVzZTogaW1wb3J0KCdlZmZlY3QnKS5DYXVzZS5DYXVzZTx1bmtub3duPikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkPlxuICAvKipcbiAgICogT3B0aW9uYWwgcnVudGltZSBsYWJlbCAoZS5nLiBgQXBwRGVtb1J1bnRpbWVgKSBmb3IgRGVidWcgLyBEZXZUb29scyBncm91cGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nXG4gIC8qKlxuICAgKiBPcHRpb25hbCBEZWJ1ZyBjb25zb2xlIG91dHB1dCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiAtIGB0cnVlYDogZW5hYmxlIGBEZWJ1Zy5sYXllcigpYCAoYXV0byBtb2RlKS5cbiAgICogLSBgRGVidWcuRGVidWdMYXllck9wdGlvbnNgOiBmb3J3YXJkZWQgdG8gYERlYnVnLmxheWVyKG9wdGlvbnMpYC5cbiAgICpcbiAgICogQWR2YW5jZWQ6IGZvciBmdWxsIGNvbnRyb2wsIG9taXQgdGhpcyBvcHRpb24gYW5kIHByb3ZpZGUgeW91ciBvd24gRGVidWcgbGF5ZXJzIHZpYSBgb3B0aW9ucy5sYXllcmAuXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IHRydWUgfCBEZWJ1Zy5EZWJ1Z0xheWVyT3B0aW9uc1xuICByZWFkb25seSBtaWRkbGV3YXJlPzogRWZmZWN0T3AuTWlkZGxld2FyZVN0YWNrXG4gIC8qKlxuICAgKiBFbmFibGUgRGV2dG9vbHMgKGV4cGxpY2l0IG92ZXJyaWRlKS5cbiAgICpcbiAgICogLSBgdHJ1ZWA6IHVzZSBkZWZhdWx0IGBEZXZ0b29sc1J1bnRpbWVPcHRpb25zYC5cbiAgICogLSBgRGV2dG9vbHNSdW50aW1lT3B0aW9uc2A6IGN1c3RvbWl6ZSBodWIgYnVmZmVyIHNpemUsIERlYnVnT2JzZXJ2ZXIgZmlsdGVycywgZXRjLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2dG9vbHM/OiB0cnVlIHwgRGV2dG9vbHNSdW50aW1lT3B0aW9uc1xuICAvKipcbiAgICogUnVudGltZS1sZXZlbCBTdGF0ZVRyYW5zYWN0aW9uIGRlZmF1bHRzLlxuICAgKlxuICAgKiBXaGVuIG5vdCBwcm92aWRlZCwgbW9kdWxlcyBmYWxsIGJhY2sgdG8gTk9ERV9FTlYtYmFzZWQgZGVmYXVsdHM7IG1vZHVsZXMgbWF5IG92ZXJyaWRlIHZpYVxuICAgKiBgTW9kdWxlRGVmLmltcGxlbWVudCh7IHN0YXRlVHJhbnNhY3Rpb24gfSlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVUcmFuc2FjdGlvbj86IFJ1bnRpbWVTdGF0ZVRyYW5zYWN0aW9uT3B0aW9uc1xuICAvKipcbiAgICogUnVudGltZS1sZXZlbCBjb25jdXJyZW5jeSBjb250cm9sIHBsYW5lLlxuICAgKlxuICAgKiBDb252ZXJnZXMgdW5ib3VuZGVkIGNvbmN1cnJlbmN5IGludG8gYm91bmRlZCAoZGVmYXVsdCAxNiksIHdpdGggbW9kdWxlL3Byb3ZpZGVyIG92ZXJyaWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5UG9saWN5PzogQ29uY3VycmVuY3lQb2xpY3lcbiAgLyoqXG4gICAqIFJlYWRRdWVyeSBnb3Zlcm5hbmNlIChlLmcuIHN0cmljdCBnYXRlIHBvbGljaWVzKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRRdWVyeT86IFJ1bnRpbWVSZWFkUXVlcnlPcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2dG9vbHNSdW50aW1lT3B0aW9ucyB7XG4gIC8qKiBIdWIgcmluZyBidWZmZXIgY2FwYWNpdHkgKGV2ZW50cykuIERlZmF1bHQ6IDUwMC4gKi9cbiAgcmVhZG9ubHkgYnVmZmVyU2l6ZT86IG51bWJlclxuICAvKipcbiAgICogRGlhZ25vc3RpY3MgbGV2ZWwgZm9yIGV4cG9ydGFibGUgRGV2dG9vbHMgZXZlbnRzLlxuICAgKlxuICAgKiBGb3J3YXJkZWQgdG8gYERlYnVnLmRldnRvb2xzSHViTGF5ZXIoeyBkaWFnbm9zdGljc0xldmVsIH0pYC5cbiAgICogRGVmYXVsdDogYFwibGlnaHRcImAuXG4gICAqL1xuICByZWFkb25seSBkaWFnbm9zdGljc0xldmVsPzogRGVidWcuRGlhZ25vc3RpY3NMZXZlbFxuICAvKipcbiAgICogVHJhaXQgY29udmVyZ2UgZGlhZ25vc3RpY3Mgc2FtcGxpbmcgY29uZmlnLlxuICAgKlxuICAgKiBGb3J3YXJkZWQgdG8gYERlYnVnLmRldnRvb2xzSHViTGF5ZXIoeyB0cmFpdENvbnZlcmdlRGlhZ25vc3RpY3NTYW1wbGluZyB9KWAuXG4gICAqL1xuICByZWFkb25seSB0cmFpdENvbnZlcmdlRGlhZ25vc3RpY3NTYW1wbGluZz86IERlYnVnLlRyYWl0Q29udmVyZ2VEaWFnbm9zdGljc1NhbXBsaW5nQ29uZmlnXG4gIC8qKiBEZWJ1Z09ic2VydmVyIGNvbmZpZyBmb3IgYHRyYWNlOmVmZmVjdG9wYDsgdW5kZWZpbmVkIG1lYW5zIGZ1bGwgb2JzZXJ2YXRpb24uICovXG4gIHJlYWRvbmx5IG9ic2VydmVyPzogTWlkZGxld2FyZS5EZWJ1Z09ic2VydmVyQ29uZmlnIHwgZmFsc2VcbiAgLyoqIFJlc2VydmVkOiBSZWFjdCByZW5kZXIgc2FtcGxpbmcgLyB0aHJvdHRsaW5nIGNvbmZpZyAoY29uc3VtZWQgYnkgYEBsb2dpeGpzL3JlYWN0YCkuICovXG4gIHJlYWRvbmx5IHNhbXBsaW5nPzoge1xuICAgIHJlYWRvbmx5IHJlYWN0UmVuZGVyU2FtcGxlUmF0ZT86IG51bWJlclxuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGFuIGFwcGxpY2F0aW9uIHJ1bnRpbWUgZnJvbSBhIHJvb3QgbW9kdWxlLlxuICpcbiAqIC0gVXNlcyB0aGUgcm9vdCBtb2R1bGUgKyBsYXllciBhcyB0aGUgY29tcG9zaXRpb24gcm9vdC5cbiAqIC0gRm9ya3Mgcm9vdCBwcm9jZXNzZXMgd2l0aGluIHRoZSBydW50aW1lIFNjb3BlLlxuICogLSBFeHBvc2VzIGEgTWFuYWdlZFJ1bnRpbWU7IHRoZSBmdWxsIEVudiBpcyBwcm92aWRlZCBieSBgcm9vdC5sYXllciArIG9wdGlvbnMubGF5ZXJgLlxuICovXG5leHBvcnQgY29uc3QgbWFrZSA9IChcbiAgcm9vdDogTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+IHwgQW55TW9kdWxlLFxuICBvcHRpb25zPzogUnVudGltZU9wdGlvbnMsXG4pOiBNYW5hZ2VkUnVudGltZS5NYW5hZ2VkUnVudGltZTxhbnksIG5ldmVyPiA9PiB7XG4gIGNvbnN0IHJvb3RJbXBsID0gcmVzb2x2ZVJvb3RJbXBsKHJvb3QpXG5cbiAgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeURldk9ubHkob3B0aW9ucz8uY29uY3VycmVuY3lQb2xpY3ksICdSdW50aW1lLm1ha2Ugb3B0aW9ucy5jb25jdXJyZW5jeVBvbGljeScpXG4gIHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvblJ1bnRpbWVDb25maWdEZXZPbmx5KG9wdGlvbnM/LnN0YXRlVHJhbnNhY3Rpb24sICdSdW50aW1lLm1ha2Ugb3B0aW9ucy5zdGF0ZVRyYW5zYWN0aW9uJylcblxuICBjb25zdCBkZWJ1Z0xheWVyID1cbiAgICBvcHRpb25zPy5kZWJ1ZyA9PT0gdHJ1ZVxuICAgICAgPyAoRGVidWcubGF5ZXIoKSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgICA6IG9wdGlvbnM/LmRlYnVnXG4gICAgICAgID8gKERlYnVnLmxheWVyKG9wdGlvbnMuZGVidWcpIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPilcbiAgICAgICAgOiAoTGF5ZXIuZW1wdHkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuXG4gIC8vIEJhc2UgRW52OiBmdWxseSBkZWZpbmVkIGJ5IGNhbGxlci1wcm92aWRlZCBMYXllcnMgKGUuZy4gQ29uZmlnIC8gcGxhdGZvcm0gc2VydmljZXMpLlxuICAvLyBEZWJ1ZyBzaW5rcyBjYW4gYmUgZW5hYmxlZCB2aWEgb3B0aW9ucy5kZWJ1Zywgb3IgbWFudWFsbHkgY29tcG9zZWQgdmlhIG9wdGlvbnMubGF5ZXIuXG4gIGNvbnN0IHVzZXJMYXllciA9IChvcHRpb25zPy5sYXllciA/PyBMYXllci5lbXB0eSkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+XG4gIGNvbnN0IHVzZXJXaXRoRGVidWcgPSBvcHRpb25zPy5kZWJ1ZyA/IChMYXllci5tZXJnZUFsbCh1c2VyTGF5ZXIsIGRlYnVnTGF5ZXIpIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPikgOiB1c2VyTGF5ZXJcblxuICBsZXQgbWlkZGxld2FyZVN0YWNrOiBFZmZlY3RPcC5NaWRkbGV3YXJlU3RhY2sgPSBvcHRpb25zPy5taWRkbGV3YXJlID8/IFtdXG5cbiAgLy8gV2hlbiBkZXZ0b29scyBpcyBleHBsaWNpdGx5IGVuYWJsZWQ6XG4gIC8vIDEpIEFwcGVuZCBEZWJ1Z09ic2VydmVyIChgdHJhY2U6ZWZmZWN0b3BgKS5cbiAgLy8gMikgTW91bnQgdGhlIERldnRvb2xzSHViIHNpbmsgaW4gYXBwTGF5ZXIgKHByb2Nlc3MtbGV2ZWwgZXZlbnQgYWdncmVnYXRpb24pLlxuICBjb25zdCBkZXZ0b29sc09wdGlvbnM6IERldnRvb2xzUnVudGltZU9wdGlvbnMgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5kZXZ0b29scyA9PT0gdHJ1ZSA/IHt9IDogb3B0aW9ucz8uZGV2dG9vbHNcblxuICBpZiAob3B0aW9ucz8uZGV2dG9vbHMpIHtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IGRldnRvb2xzT3B0aW9ucz8ub2JzZXJ2ZXIgPT09IGZhbHNlID8gZmFsc2UgOiBkZXZ0b29sc09wdGlvbnM/Lm9ic2VydmVyXG4gICAgbWlkZGxld2FyZVN0YWNrID0gTWlkZGxld2FyZS53aXRoRGVidWcobWlkZGxld2FyZVN0YWNrLCB7XG4gICAgICBsb2dnZXI6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyQ29uZmlnLFxuICAgIH0pXG4gIH1cblxuICAvLyBPcHRpb25hbDogaW5qZWN0IHRoZSBFZmZlY3RPcCBNaWRkbGV3YXJlU3RhY2sgc2VydmljZSBmb3IgdGhpcyBSdW50aW1lLFxuICAvLyBzbyBydW50aW1lIGNvZGUgKGUuZy4gU3RhdGVUcmFpdC5pbnN0YWxsKSBjYW4gcmVzb2x2ZSB0aGUgdW5pZmllZCBFZmZlY3RPcCBidXMgY29uZmlndXJhdGlvbiBmcm9tIEVudi5cbiAgY29uc3QgZWZmZWN0T3BMYXllcjogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+ID1cbiAgICBtaWRkbGV3YXJlU3RhY2subGVuZ3RoID4gMFxuICAgICAgPyAoTGF5ZXIuc3VjY2VlZChFZmZlY3RPcENvcmUuRWZmZWN0T3BNaWRkbGV3YXJlVGFnLCB7XG4gICAgICAgICAgc3RhY2s6IG1pZGRsZXdhcmVTdGFjayxcbiAgICAgICAgfSkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuICAgICAgOiAoTGF5ZXIuZW1wdHkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuXG4gIGNvbnN0IGJhc2VMYXllciA9XG4gICAgb3B0aW9ucz8ubGFiZWwgIT0gbnVsbFxuICAgICAgPyAoTGF5ZXIubWVyZ2VBbGwoRGVidWcucnVudGltZUxhYmVsKG9wdGlvbnMubGFiZWwpLCB1c2VyV2l0aERlYnVnKSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgICA6IHVzZXJXaXRoRGVidWdcblxuICBjb25zdCBiYXNlV2l0aERldnRvb2xzID0gb3B0aW9ucz8uZGV2dG9vbHNcbiAgICA/IChEZWJ1Zy5kZXZ0b29sc0h1YkxheWVyKGJhc2VMYXllciwge1xuICAgICAgICBidWZmZXJTaXplOiBkZXZ0b29sc09wdGlvbnM/LmJ1ZmZlclNpemUsXG4gICAgICAgIGRpYWdub3N0aWNzTGV2ZWw6IGRldnRvb2xzT3B0aW9ucz8uZGlhZ25vc3RpY3NMZXZlbCxcbiAgICAgICAgdHJhaXRDb252ZXJnZURpYWdub3N0aWNzU2FtcGxpbmc6IGRldnRvb2xzT3B0aW9ucz8udHJhaXRDb252ZXJnZURpYWdub3N0aWNzU2FtcGxpbmcsXG4gICAgICB9KSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgOiBiYXNlTGF5ZXJcblxuICAvLyBOT1RFOiBydW5TZXNzaW9uIHNob3VsZCBiZSBvdmVycmlkZWFibGUgYnkgY2FsbGVycyAoZS5nLiBDSS90cmlhbC1ydW4gaW5qZWN0aW5nIGEgc3RhYmxlIHJ1bklkKS5cbiAgLy8gSW4gTGF5ZXIubWVyZ2VBbGwsIGxhdGVyIGxheWVycyBvdmVycmlkZSBlYXJsaWVyIG9uZXM7IGtlZXAgdGhlIGRlZmF1bHQgbGF5ZXIgZmlyc3QuXG4gIGNvbnN0IGFwcExheWVyID0gTGF5ZXIubWVyZ2VBbGwoXG4gICAgUnVuU2Vzc2lvbi5ydW5TZXNzaW9uTGF5ZXIoKSxcbiAgICBTY29wZVJlZ2lzdHJ5LmxheWVyKCksXG4gICAgYmFzZVdpdGhEZXZ0b29scyxcbiAgICBlZmZlY3RPcExheWVyLFxuICApIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPlxuXG4gIGNvbnN0IHJlYWRRdWVyeVN0cmljdEdhdGU6IFJlYWRRdWVyeVN0cmljdEdhdGVSdW50aW1lQ29uZmlnIHwgdW5kZWZpbmVkID0gKCgpID0+IHtcbiAgICBjb25zdCBzdHJpY3RHYXRlID0gb3B0aW9ucz8ucmVhZFF1ZXJ5Py5zdHJpY3RHYXRlXG4gICAgaWYgKCFzdHJpY3RHYXRlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBtb2RlID0gc3RyaWN0R2F0ZS5tb2RlID8/ICdvZmYnXG4gICAgaWYgKG1vZGUgPT09ICdvZmYnKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZSxcbiAgICAgIHJlcXVpcmVTdGF0aWM6IHN0cmljdEdhdGUucmVxdWlyZVN0YXRpYyxcbiAgICAgIGRlbnlGYWxsYmFja1JlYXNvbnM6IHN0cmljdEdhdGUuZGVueUZhbGxiYWNrUmVhc29ucyxcbiAgICB9XG4gIH0pKClcblxuICBjb25zdCBhcHBDb25maWc6IEFwcFJ1bnRpbWVJbXBsLkxvZ2l4QXBwQ29uZmlnPGFueT4gPSB7XG4gICAgbGF5ZXI6IGFwcExheWVyLFxuICAgIG1vZHVsZXM6IFtBcHBSdW50aW1lSW1wbC5wcm92aWRlKHJvb3RJbXBsLm1vZHVsZSwgcm9vdEltcGwubGF5ZXIgYXMgTGF5ZXIuTGF5ZXI8YW55LCBhbnksIGFueT4pXSxcbiAgICBwcm9jZXNzZXM6IHJvb3RJbXBsLnByb2Nlc3NlcyA/PyBbXSxcbiAgICBvbkVycm9yOiBvcHRpb25zPy5vbkVycm9yLFxuICAgIHN0YXRlVHJhbnNhY3Rpb246IG9wdGlvbnM/LnN0YXRlVHJhbnNhY3Rpb24sXG4gICAgY29uY3VycmVuY3lQb2xpY3k6IG9wdGlvbnM/LmNvbmN1cnJlbmN5UG9saWN5LFxuICAgIHJlYWRRdWVyeVN0cmljdEdhdGUsXG4gIH1cblxuICBjb25zdCBhcHAgPSBBcHBSdW50aW1lSW1wbC5tYWtlQXBwKGFwcENvbmZpZylcbiAgcmV0dXJuIGFwcC5tYWtlUnVudGltZSgpIGFzIE1hbmFnZWRSdW50aW1lLk1hbmFnZWRSdW50aW1lPGFueSwgbmV2ZXI+XG59XG5cbi8qKlxuICogUmVzb3VyY2VmdWwgZW50cnk6IHJldHVybnMgYSBzY29wZS1ib3VuZCBQcm9ncmFtUnVuQ29udGV4dCAoYm9vdGVkIGFuZCByZWFkeSkuXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuUHJvZ3JhbSA9IDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgcm9vdDogTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+IHwgQW55TW9kdWxlLFxuICBvcHRpb25zPzogT3BlblByb2dyYW1PcHRpb25zLFxuKTogRWZmZWN0LkVmZmVjdDxQcm9ncmFtUnVuQ29udGV4dDxTaD4sIHVua25vd24sIFNjb3BlLlNjb3BlPiA9PlxuICBQcm9ncmFtUnVubmVyLm9wZW5Qcm9ncmFtKFxuICAgIChyb290SW1wbCwgcnVudGltZU9wdGlvbnMpID0+IG1ha2Uocm9vdEltcGwsIHJ1bnRpbWVPcHRpb25zIGFzIFJ1bnRpbWVPcHRpb25zKSxcbiAgICByZXNvbHZlUm9vdEltcGwocm9vdCksXG4gICAgb3B0aW9ucyxcbiAgKVxuXG4vKipcbiAqIE9uZS1zaG90IGVudHJ5OiBib290IFx1MjE5MiBtYWluKGN0eCxhcmdzKSBcdTIxOTIgZGlzcG9zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJ1blByb2dyYW0gPSBhc3luYyA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgQXJncywgQSwgRSwgUj4oXG4gIHJvb3Q6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PiB8IEFueU1vZHVsZSxcbiAgbWFpbjogKGN0eDogUHJvZ3JhbVJ1bkNvbnRleHQ8U2g+LCBhcmdzOiBBcmdzKSA9PiBFZmZlY3QuRWZmZWN0PEEsIEUsIFI+LFxuICBvcHRpb25zPzogUnVuUHJvZ3JhbU9wdGlvbnM8QXJncz4sXG4pOiBQcm9taXNlPEE+ID0+XG4gIFByb2dyYW1SdW5uZXIucnVuUHJvZ3JhbShcbiAgICAocm9vdEltcGwsIHJ1bnRpbWVPcHRpb25zKSA9PiBtYWtlKHJvb3RJbXBsLCBydW50aW1lT3B0aW9ucyBhcyBSdW50aW1lT3B0aW9ucyksXG4gICAgcmVzb2x2ZVJvb3RJbXBsKHJvb3QpLFxuICAgIG1haW4sXG4gICAgb3B0aW9ucyxcbiAgKVxuXG4vKipcbiAqIFByb3ZpZGVyLXNjb3BlZCBTdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzIGxheWVyLlxuICpcbiAqIFVzZSBpdCB0byBhcHBseSBsb2NhbCBvdmVycmlkZXMgb24gdG9wIG9mIHRoZSBgcnVudGltZV9kZWZhdWx0YCBiYXNlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXNMYXllciA9IChcbiAgb3ZlcnJpZGVzOiBTdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzLFxuKTogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+ID0+IHtcbiAgd2FybkludmFsaWRTdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzRGV2T25seShvdmVycmlkZXMsICdSdW50aW1lLnN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXNMYXllcicpXG4gIHJldHVybiBMYXllci5zdWNjZWVkKFN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXNUYWcsIG92ZXJyaWRlcykgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+XG59XG5cbi8qKlxuICogUHJvdmlkZXItc2NvcGVkIENvbmN1cnJlbmN5UG9saWN5T3ZlcnJpZGVzIGxheWVyLlxuICpcbiAqIFVzZSBpdCB0byBhcHBseSBsb2NhbCBvdmVycmlkZXMgb24gdG9wIG9mIHRoZSBgcnVudGltZV9kZWZhdWx0YCBiYXNlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmN1cnJlbmN5UG9saWN5T3ZlcnJpZGVzTGF5ZXIgPSAoXG4gIG92ZXJyaWRlczogQ29uY3VycmVuY3lQb2xpY3lPdmVycmlkZXMsXG4pOiBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4gPT4ge1xuICB3YXJuSW52YWxpZENvbmN1cnJlbmN5UG9saWN5RGV2T25seShvdmVycmlkZXMsICdSdW50aW1lLmNvbmN1cnJlbmN5UG9saWN5T3ZlcnJpZGVzTGF5ZXInKVxuICByZXR1cm4gTGF5ZXIuc3VjY2VlZChDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlc1RhZywgb3ZlcnJpZGVzKSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj5cbn1cblxuLyoqXG4gKiBIb3Qtc3dpdGNoIFRyYWl0IGNvbnZlcmdlIG92ZXJyaWRlcyBmb3IgYSBtb2R1bGVJZC5cbiAqXG4gKiBUaGlzIG11dGF0ZXMgdGhlIGBydW50aW1lX21vZHVsZWAgcGF0Y2ggbWFwIG9ubHk7IHByb3ZpZGVyIG92ZXJyaWRlcyBzdGlsbCB0YWtlIHByZWNlZGVuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRUcmFpdENvbnZlcmdlT3ZlcnJpZGUgPSAoXG4gIHJ1bnRpbWU6IE1hbmFnZWRSdW50aW1lLk1hbmFnZWRSdW50aW1lPGFueSwgbmV2ZXI+LFxuICBtb2R1bGVJZDogc3RyaW5nLFxuICBvdmVycmlkZXM6IFN0YXRlVHJhbnNhY3Rpb25UcmFpdENvbnZlcmdlT3ZlcnJpZGVzIHwgdW5kZWZpbmVkLFxuKTogdm9pZCA9PiB7XG4gIHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvblRyYWl0Q29udmVyZ2VPdmVycmlkZXNEZXZPbmx5KG92ZXJyaWRlcywgYFJ1bnRpbWUuc2V0VHJhaXRDb252ZXJnZU92ZXJyaWRlKCR7bW9kdWxlSWR9KWApXG5cbiAgcnVudGltZS5ydW5TeW5jKFxuICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgIGNvbnN0IHJ1bnRpbWVDb25maWdPcHQgPSB5aWVsZCogRWZmZWN0LnNlcnZpY2VPcHRpb24oU3RhdGVUcmFuc2FjdGlvbkNvbmZpZ1RhZylcblxuICAgICAgaWYgKE9wdGlvbi5pc05vbmUocnVudGltZUNvbmZpZ09wdCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IHJ1bnRpbWUgY29uZmlnIGxpdmVzIGluIEVudiBhcyBhIFNlcnZpY2U7IGhvdC1zd2l0Y2ggYnkgcmVwbGFjaW5nIHRoZSBwZXItbW9kdWxlIHBhdGNoIG1hcC5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCBydW50aW1lQ29uZmlnOiBhbnkgPSBydW50aW1lQ29uZmlnT3B0LnZhbHVlXG4gICAgICBjb25zdCBuZXh0ID0ge1xuICAgICAgICAuLi4ocnVudGltZUNvbmZpZy50cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZCA/PyB7fSksXG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVycmlkZXMpIHtcbiAgICAgICAgbmV4dFttb2R1bGVJZF0gPSBvdmVycmlkZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBuZXh0W21vZHVsZUlkXVxuICAgICAgfVxuXG4gICAgICBydW50aW1lQ29uZmlnLnRyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkID0gbmV4dFxuICAgIH0pLFxuICApXG59XG5cbi8qKlxuICogSG90LXN3aXRjaCBDb25jdXJyZW5jeVBvbGljeSBwYXRjaCBmb3IgYSBtb2R1bGVJZC5cbiAqXG4gKiBUaGlzIG11dGF0ZXMgdGhlIGBydW50aW1lX21vZHVsZWAgcGF0Y2ggbWFwIG9ubHk7IHByb3ZpZGVyIG92ZXJyaWRlcyBzdGlsbCB0YWtlIHByZWNlZGVuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlID0gKFxuICBydW50aW1lOiBNYW5hZ2VkUnVudGltZS5NYW5hZ2VkUnVudGltZTxhbnksIG5ldmVyPixcbiAgbW9kdWxlSWQ6IHN0cmluZyxcbiAgcGF0Y2g6IENvbmN1cnJlbmN5UG9saWN5UGF0Y2ggfCB1bmRlZmluZWQsXG4pOiB2b2lkID0+IHtcbiAgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeVBhdGNoRGV2T25seShwYXRjaCwgYFJ1bnRpbWUuc2V0Q29uY3VycmVuY3lQb2xpY3lPdmVycmlkZSgke21vZHVsZUlkfSlgKVxuXG4gIHJ1bnRpbWUucnVuU3luYyhcbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBydW50aW1lQ29uZmlnT3B0ID0geWllbGQqIEVmZmVjdC5zZXJ2aWNlT3B0aW9uKENvbmN1cnJlbmN5UG9saWN5VGFnKVxuXG4gICAgICBpZiAoT3B0aW9uLmlzTm9uZShydW50aW1lQ29uZmlnT3B0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gTk9URTogcnVudGltZSBjb25maWcgbGl2ZXMgaW4gRW52IGFzIGEgU2VydmljZTsgaG90LXN3aXRjaCBieSByZXBsYWNpbmcgdGhlIHBlci1tb2R1bGUgcGF0Y2ggbWFwLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHJ1bnRpbWVDb25maWc6IGFueSA9IHJ1bnRpbWVDb25maWdPcHQudmFsdWVcbiAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgIC4uLihydW50aW1lQ29uZmlnLm92ZXJyaWRlc0J5TW9kdWxlSWQgPz8ge30pLFxuICAgICAgfVxuXG4gICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgbmV4dFttb2R1bGVJZF0gPSBwYXRjaFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIG5leHRbbW9kdWxlSWRdXG4gICAgICB9XG5cbiAgICAgIHJ1bnRpbWVDb25maWcub3ZlcnJpZGVzQnlNb2R1bGVJZCA9IG5leHRcbiAgICB9KSxcbiAgKVxufVxuXG4vKipcbiAqIEFwcGx5IGEgdHJhbnNhY3Rpb24gc25hcHNob3QgZm9yIHRpbWUtdHJhdmVsIHJlcGxheSAoZGV2L3Rlc3QpLlxuICpcbiAqIC0gYG1vZHVsZUlkYCAvIGBpbnN0YW5jZUlkYCBtYXRjaCBEZWJ1ZyBldmVudHMuXG4gKiAtIGBtb2RlYDogYGJlZm9yZWAgcmVwbGF5cyBwcmUtdHJhbnNhY3Rpb247IGBhZnRlcmAgcmVwbGF5cyBwb3N0LWNvbW1pdC5cbiAqXG4gKiBOby1vcCBpZiB0aGUgcnVudGltZS9pbnN0YW5jZSBjYW5ub3QgYmUgcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVRyYW5zYWN0aW9uU25hcHNob3QgPSAoXG4gIG1vZHVsZUlkOiBzdHJpbmcsXG4gIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgdHhuSWQ6IHN0cmluZyxcbiAgbW9kZTogJ2JlZm9yZScgfCAnYWZ0ZXInLFxuKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgYW55PiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgcnVudGltZSA9IE1vZHVsZVJ1bnRpbWUuZ2V0UnVudGltZUJ5TW9kdWxlQW5kSW5zdGFuY2U8YW55LCBhbnk+KG1vZHVsZUlkLCBpbnN0YW5jZUlkKVxuXG4gICAgaWYgKCFydW50aW1lKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgeWllbGQqIGdldFJ1bnRpbWVJbnRlcm5hbHMocnVudGltZSBhcyBhbnkpLnR4bi5hcHBseVRyYW5zYWN0aW9uU25hcHNob3QodHhuSWQsIG1vZGUpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0pXG4iLCAiaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnZWZmZWN0J1xuaW1wb3J0IHsgaXNEZXZFbnYgfSBmcm9tICcuL2Vudi5qcydcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZUJvb2xlYW4sXG4gIG5vcm1hbGl6ZU5vbk5lZ2F0aXZlTnVtYmVyLFxuICBub3JtYWxpemVQb3NpdGl2ZUludCxcbiAgbm9ybWFsaXplUG9zaXRpdmVOdW1iZXIsXG59IGZyb20gJy4vbm9ybWFsaXplLmpzJ1xuXG5jb25zdCBQb3NpdGl2ZUludFNjaGVtYSA9IFNjaGVtYS5JbnQucGlwZShTY2hlbWEucG9zaXRpdmUoKSlcbmNvbnN0IFBvc2l0aXZlTnVtYmVyU2NoZW1hID0gU2NoZW1hLk51bWJlci5waXBlKFNjaGVtYS5wb3NpdGl2ZSgpKVxuY29uc3QgQ29udmVyZ2VNb2RlU2NoZW1hID0gU2NoZW1hLlVuaW9uKFNjaGVtYS5MaXRlcmFsKCdhdXRvJyksIFNjaGVtYS5MaXRlcmFsKCdmdWxsJyksIFNjaGVtYS5MaXRlcmFsKCdkaXJ0eScpKVxuY29uc3QgSW5zdHJ1bWVudGF0aW9uU2NoZW1hID0gU2NoZW1hLlVuaW9uKFNjaGVtYS5MaXRlcmFsKCdmdWxsJyksIFNjaGVtYS5MaXRlcmFsKCdsaWdodCcpKVxuY29uc3QgQ29uY3VycmVuY3lMaW1pdFNjaGVtYSA9IFNjaGVtYS5VbmlvbihTY2hlbWEuTGl0ZXJhbCgndW5ib3VuZGVkJyksIFBvc2l0aXZlSW50U2NoZW1hKVxuXG5jb25zdCBpc1JlY29yZCA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHdhcm5EZXZPbmx5ID0gKGxhYmVsOiBzdHJpbmcsIGlzc3VlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+KTogdm9pZCA9PiB7XG4gIGlmICghaXNEZXZFbnYoKSkgcmV0dXJuXG4gIGlmIChpc3N1ZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS53YXJuKFxuICAgIFsnW0xvZ2l4XSBJbnZhbGlkIHJ1bnRpbWUgY29uZmlnIGRldGVjdGVkLicsIGBjb250ZXh0OiAke2xhYmVsfWAsICdpc3N1ZXM6J11cbiAgICAgIC5jb25jYXQoaXNzdWVzLm1hcCgoaSkgPT4gYC0gJHtpfWApKVxuICAgICAgLmpvaW4oJ1xcbicpLFxuICApXG59XG5cbmNvbnN0IGNvbGxlY3RVbmtub3duS2V5cyA9IChcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWxsb3dlZDogUmVhZG9ubHlTZXQ8c3RyaW5nPixcbiAgcHJlZml4OiBzdHJpbmcsXG4pOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT4ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGlmICghYWxsb3dlZC5oYXMoa2V5KSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fSR7a2V5fTogdW5rbm93biBrZXlgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXNzdWVzXG59XG5cbmNvbnN0IHZhbGlkYXRlQ29uY3VycmVuY3lQb2xpY3lQYXRjaCA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmVmaXg6IHN0cmluZyk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuXG4gIGlmICgnY29uY3VycmVuY3lMaW1pdCcgaW4gb2JqICYmIG9iai5jb25jdXJyZW5jeUxpbWl0ICE9IG51bGwpIHtcbiAgICBpZiAoIVNjaGVtYS5pcyhDb25jdXJyZW5jeUxpbWl0U2NoZW1hKShvYmouY29uY3VycmVuY3lMaW1pdCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1jb25jdXJyZW5jeUxpbWl0OiBleHBlY3RlZCBwb3NpdGl2ZSBpbnQgfCBcInVuYm91bmRlZFwiYClcbiAgICB9XG4gIH1cblxuICBpZiAoJ2xvc3NsZXNzQmFja3ByZXNzdXJlQ2FwYWNpdHknIGluIG9iaiAmJiBvYmoubG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eSAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlSW50KG9iai5sb3NzbGVzc0JhY2twcmVzc3VyZUNhcGFjaXR5KSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9bG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eTogZXhwZWN0ZWQgcG9zaXRpdmUgaW50YClcbiAgICB9XG4gIH1cblxuICBpZiAoJ2FsbG93VW5ib3VuZGVkJyBpbiBvYmogJiYgb2JqLmFsbG93VW5ib3VuZGVkICE9IG51bGwpIHtcbiAgICBpZiAobm9ybWFsaXplQm9vbGVhbihvYmouYWxsb3dVbmJvdW5kZWQpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1hbGxvd1VuYm91bmRlZDogZXhwZWN0ZWQgYm9vbGVhbmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdwcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQnIGluIG9iaiAmJiBvYmoucHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkICE9IG51bGwpIHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBvYmoucHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkXG4gICAgaWYgKCFpc1JlY29yZCh0aHJlc2hvbGQpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9cHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkOiBleHBlY3RlZCBvYmplY3RgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYWNrbG9nQ291bnQgPSB0aHJlc2hvbGRbJ2JhY2tsb2dDb3VudCddXG4gICAgICBpZiAoYmFja2xvZ0NvdW50ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlSW50KGJhY2tsb2dDb3VudCkgPT0gbnVsbCkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1wcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQuYmFja2xvZ0NvdW50OiBleHBlY3RlZCBwb3NpdGl2ZSBpbnRgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrbG9nRHVyYXRpb25NcyA9IHRocmVzaG9sZFsnYmFja2xvZ0R1cmF0aW9uTXMnXVxuICAgICAgaWYgKGJhY2tsb2dEdXJhdGlvbk1zICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlTnVtYmVyKGJhY2tsb2dEdXJhdGlvbk1zKSA9PSBudWxsKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXByZXNzdXJlV2FybmluZ1RocmVzaG9sZC5iYWNrbG9nRHVyYXRpb25NczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgnd2FybmluZ0Nvb2xkb3duTXMnIGluIG9iaiAmJiBvYmoud2FybmluZ0Nvb2xkb3duTXMgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZU51bWJlcihvYmoud2FybmluZ0Nvb2xkb3duTXMpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH13YXJuaW5nQ29vbGRvd25NczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNzdWVzXG59XG5cbmV4cG9ydCBjb25zdCB3YXJuSW52YWxpZENvbmN1cnJlbmN5UG9saWN5RGV2T25seSA9ICh2YWx1ZTogdW5rbm93biwgbGFiZWw6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHtcbiAgICB3YXJuRGV2T25seShsYWJlbCwgWydleHBlY3RlZCBvYmplY3QnXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBvbGljeSA9IHZhbHVlXG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuXG4gIGlzc3Vlcy5wdXNoKFxuICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgIHBvbGljeSxcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAnY29uY3VycmVuY3lMaW1pdCcsXG4gICAgICAgICdsb3NzbGVzc0JhY2twcmVzc3VyZUNhcGFjaXR5JyxcbiAgICAgICAgJ2FsbG93VW5ib3VuZGVkJyxcbiAgICAgICAgJ3ByZXNzdXJlV2FybmluZ1RocmVzaG9sZCcsXG4gICAgICAgICd3YXJuaW5nQ29vbGRvd25NcycsXG4gICAgICAgICdvdmVycmlkZXNCeU1vZHVsZUlkJyxcbiAgICAgIF0pLFxuICAgICAgJycsXG4gICAgKSxcbiAgKVxuXG4gIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlQ29uY3VycmVuY3lQb2xpY3lQYXRjaChwb2xpY3ksICcnKSlcblxuICBjb25zdCBvdmVycmlkZXNCeU1vZHVsZUlkID0gcG9saWN5Lm92ZXJyaWRlc0J5TW9kdWxlSWRcbiAgaWYgKG92ZXJyaWRlc0J5TW9kdWxlSWQgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQob3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGBvdmVycmlkZXNCeU1vZHVsZUlkOiBleHBlY3RlZCByZWNvcmRgKVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IFttb2R1bGVJZCwgcGF0Y2hdIG9mIE9iamVjdC5lbnRyaWVzKG92ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGBvdmVycmlkZXNCeU1vZHVsZUlkLiR7bW9kdWxlSWR9LmBcbiAgICAgICAgaWYgKHBhdGNoID09IG51bGwpIGNvbnRpbnVlXG4gICAgICAgIGlmICghaXNSZWNvcmQocGF0Y2gpKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fTx2YWx1ZT46IGV4cGVjdGVkIG9iamVjdGApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpc3N1ZXMucHVzaChcbiAgICAgICAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICAgICAgICBwYXRjaCxcbiAgICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgICAnY29uY3VycmVuY3lMaW1pdCcsXG4gICAgICAgICAgICAgICdsb3NzbGVzc0JhY2twcmVzc3VyZUNhcGFjaXR5JyxcbiAgICAgICAgICAgICAgJ2FsbG93VW5ib3VuZGVkJyxcbiAgICAgICAgICAgICAgJ3ByZXNzdXJlV2FybmluZ1RocmVzaG9sZCcsXG4gICAgICAgICAgICAgICd3YXJuaW5nQ29vbGRvd25NcycsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlQ29uY3VycmVuY3lQb2xpY3lQYXRjaChwYXRjaCwgcHJlZml4KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3YXJuRGV2T25seShsYWJlbCwgaXNzdWVzKVxufVxuXG5leHBvcnQgY29uc3Qgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeVBhdGNoRGV2T25seSA9ICh2YWx1ZTogdW5rbm93biwgbGFiZWw6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuXG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgd2FybkRldk9ubHkobGFiZWwsIFsnZXhwZWN0ZWQgb2JqZWN0J10pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cbiAgaXNzdWVzLnB1c2goXG4gICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgdmFsdWUsXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgJ2NvbmN1cnJlbmN5TGltaXQnLFxuICAgICAgICAnbG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eScsXG4gICAgICAgICdhbGxvd1VuYm91bmRlZCcsXG4gICAgICAgICdwcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQnLFxuICAgICAgICAnd2FybmluZ0Nvb2xkb3duTXMnLFxuICAgICAgXSksXG4gICAgICAnJyxcbiAgICApLFxuICApXG4gIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlQ29uY3VycmVuY3lQb2xpY3lQYXRjaCh2YWx1ZSwgJycpKVxuXG4gIHdhcm5EZXZPbmx5KGxhYmVsLCBpc3N1ZXMpXG59XG5cbmNvbnN0IHZhbGlkYXRlU3RhdGVUcmFuc2FjdGlvblRyYWl0T3ZlcnJpZGVzID0gKFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBwcmVmaXg6IHN0cmluZyxcbik6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuXG4gIGlmICgndHJhaXRDb252ZXJnZU1vZGUnIGluIG9iaiAmJiBvYmoudHJhaXRDb252ZXJnZU1vZGUgIT0gbnVsbCkge1xuICAgIGlmICghU2NoZW1hLmlzKENvbnZlcmdlTW9kZVNjaGVtYSkob2JqLnRyYWl0Q29udmVyZ2VNb2RlKSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXRyYWl0Q29udmVyZ2VNb2RlOiBleHBlY3RlZCBcImF1dG9cIiB8IFwiZnVsbFwiIHwgXCJkaXJ0eVwiYClcbiAgICB9XG4gIH1cbiAgaWYgKCd0cmFpdENvbnZlcmdlQnVkZ2V0TXMnIGluIG9iaiAmJiBvYmoudHJhaXRDb252ZXJnZUJ1ZGdldE1zICE9IG51bGwpIHtcbiAgICBpZiAobm9ybWFsaXplUG9zaXRpdmVOdW1iZXIob2JqLnRyYWl0Q29udmVyZ2VCdWRnZXRNcykgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXRyYWl0Q29udmVyZ2VCdWRnZXRNczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICB9XG4gIH1cbiAgaWYgKCd0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcycgaW4gb2JqICYmIG9iai50cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcyAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlTnVtYmVyKG9iai50cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcykgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXRyYWl0Q29udmVyZ2VEZWNpc2lvbkJ1ZGdldE1zOiBleHBlY3RlZCBwb3NpdGl2ZSBudW1iZXJgKVxuICAgIH1cbiAgfVxuICBpZiAoJ3RyYWl0Q29udmVyZ2VUaW1lU2xpY2luZycgaW4gb2JqICYmIG9iai50cmFpdENvbnZlcmdlVGltZVNsaWNpbmcgIT0gbnVsbCkge1xuICAgIGNvbnN0IHRpbWVTbGljaW5nID0gb2JqLnRyYWl0Q29udmVyZ2VUaW1lU2xpY2luZ1xuICAgIGlmICghaXNSZWNvcmQodGltZVNsaWNpbmcpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9dHJhaXRDb252ZXJnZVRpbWVTbGljaW5nOiBleHBlY3RlZCBvYmplY3RgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0c1ByZWZpeCA9IGAke3ByZWZpeH10cmFpdENvbnZlcmdlVGltZVNsaWNpbmcuYFxuICAgICAgaXNzdWVzLnB1c2goLi4uY29sbGVjdFVua25vd25LZXlzKHRpbWVTbGljaW5nLCBuZXcgU2V0KFsnZW5hYmxlZCcsICdkZWJvdW5jZU1zJywgJ21heExhZ01zJ10pLCB0c1ByZWZpeCkpXG5cbiAgICAgIGlmICgnZW5hYmxlZCcgaW4gdGltZVNsaWNpbmcgJiYgdGltZVNsaWNpbmcuZW5hYmxlZCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGltZVNsaWNpbmcuZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7dHNQcmVmaXh9ZW5hYmxlZDogZXhwZWN0ZWQgYm9vbGVhbmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgnZGVib3VuY2VNcycgaW4gdGltZVNsaWNpbmcgJiYgdGltZVNsaWNpbmcuZGVib3VuY2VNcyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZU51bWJlcih0aW1lU2xpY2luZy5kZWJvdW5jZU1zKSA9PSBudWxsKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7dHNQcmVmaXh9ZGVib3VuY2VNczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCdtYXhMYWdNcycgaW4gdGltZVNsaWNpbmcgJiYgdGltZVNsaWNpbmcubWF4TGFnTXMgIT0gbnVsbCkge1xuICAgICAgICBpZiAobm9ybWFsaXplUG9zaXRpdmVOdW1iZXIodGltZVNsaWNpbmcubWF4TGFnTXMpID09IG51bGwpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHt0c1ByZWZpeH1tYXhMYWdNczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc3N1ZXNcbn1cblxuY29uc3QgdmFsaWRhdGVUeG5MYW5lc1BhdGNoID0gKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByZWZpeDogc3RyaW5nKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgaWYgKCdlbmFibGVkJyBpbiBvYmogJiYgb2JqLmVuYWJsZWQgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVCb29sZWFuKG9iai5lbmFibGVkKSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9ZW5hYmxlZDogZXhwZWN0ZWQgYm9vbGVhbmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdvdmVycmlkZU1vZGUnIGluIG9iaiAmJiBvYmoub3ZlcnJpZGVNb2RlICE9IG51bGwpIHtcbiAgICBjb25zdCByYXcgPSBvYmoub3ZlcnJpZGVNb2RlXG4gICAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnIHx8IChyYXcgIT09ICdmb3JjZWRfb2ZmJyAmJiByYXcgIT09ICdmb3JjZWRfc3luYycpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9b3ZlcnJpZGVNb2RlOiBleHBlY3RlZCBcImZvcmNlZF9vZmZcIiB8IFwiZm9yY2VkX3N5bmNcImApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdidWRnZXRNcycgaW4gb2JqICYmIG9iai5idWRnZXRNcyAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZU5vbk5lZ2F0aXZlTnVtYmVyKG9iai5idWRnZXRNcykgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fWJ1ZGdldE1zOiBleHBlY3RlZCBub24tbmVnYXRpdmUgbnVtYmVyYClcbiAgICB9XG4gIH1cblxuICBpZiAoJ2RlYm91bmNlTXMnIGluIG9iaiAmJiBvYmouZGVib3VuY2VNcyAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZU5vbk5lZ2F0aXZlTnVtYmVyKG9iai5kZWJvdW5jZU1zKSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9ZGVib3VuY2VNczogZXhwZWN0ZWQgbm9uLW5lZ2F0aXZlIG51bWJlcmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdtYXhMYWdNcycgaW4gb2JqICYmIG9iai5tYXhMYWdNcyAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZU5vbk5lZ2F0aXZlTnVtYmVyKG9iai5tYXhMYWdNcykgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fW1heExhZ01zOiBleHBlY3RlZCBub24tbmVnYXRpdmUgbnVtYmVyYClcbiAgICB9XG4gIH1cblxuICBpZiAoJ2FsbG93Q29hbGVzY2UnIGluIG9iaiAmJiBvYmouYWxsb3dDb2FsZXNjZSAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZUJvb2xlYW4ob2JqLmFsbG93Q29hbGVzY2UpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1hbGxvd0NvYWxlc2NlOiBleHBlY3RlZCBib29sZWFuYClcbiAgICB9XG4gIH1cblxuICBpZiAoJ3lpZWxkU3RyYXRlZ3knIGluIG9iaiAmJiBvYmoueWllbGRTdHJhdGVneSAhPSBudWxsKSB7XG4gICAgY29uc3QgcmF3ID0gb2JqLnlpZWxkU3RyYXRlZ3lcbiAgICBpZiAodHlwZW9mIHJhdyAhPT0gJ3N0cmluZycgfHwgKHJhdyAhPT0gJ2Jhc2VsaW5lJyAmJiByYXcgIT09ICdpbnB1dFBlbmRpbmcnKSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXlpZWxkU3RyYXRlZ3k6IGV4cGVjdGVkIFwiYmFzZWxpbmVcIiB8IFwiaW5wdXRQZW5kaW5nXCJgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc3N1ZXNcbn1cblxuZXhwb3J0IGNvbnN0IHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvblRyYWl0Q29udmVyZ2VPdmVycmlkZXNEZXZPbmx5ID0gKHZhbHVlOiB1bmtub3duLCBsYWJlbDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGlmICghaXNEZXZFbnYoKSkgcmV0dXJuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm5cbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHtcbiAgICB3YXJuRGV2T25seShsYWJlbCwgWydleHBlY3RlZCBvYmplY3QnXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuICBpc3N1ZXMucHVzaChcbiAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICB2YWx1ZSxcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAndHJhaXRDb252ZXJnZUJ1ZGdldE1zJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VEZWNpc2lvbkJ1ZGdldE1zJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VNb2RlJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VUaW1lU2xpY2luZycsXG4gICAgICBdKSxcbiAgICAgICcnLFxuICAgICksXG4gIClcbiAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVTdGF0ZVRyYW5zYWN0aW9uVHJhaXRPdmVycmlkZXModmFsdWUsICcnKSlcblxuICB3YXJuRGV2T25seShsYWJlbCwgaXNzdWVzKVxufVxuXG5leHBvcnQgY29uc3Qgd2FybkludmFsaWRTdGF0ZVRyYW5zYWN0aW9uUnVudGltZUNvbmZpZ0Rldk9ubHkgPSAodmFsdWU6IHVua25vd24sIGxhYmVsOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFpc0RldkVudigpKSByZXR1cm5cbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVyblxuICBpZiAoIWlzUmVjb3JkKHZhbHVlKSkge1xuICAgIHdhcm5EZXZPbmx5KGxhYmVsLCBbJ2V4cGVjdGVkIG9iamVjdCddKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdXG4gIGlzc3Vlcy5wdXNoKFxuICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgIHZhbHVlLFxuICAgICAgbmV3IFNldChbXG4gICAgICAgICdpbnN0cnVtZW50YXRpb24nLFxuICAgICAgICAndHJhaXRDb252ZXJnZUJ1ZGdldE1zJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VEZWNpc2lvbkJ1ZGdldE1zJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VNb2RlJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VUaW1lU2xpY2luZycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZCcsXG4gICAgICAgICd0eG5MYW5lcycsXG4gICAgICAgICd0eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQnLFxuICAgICAgXSksXG4gICAgICAnJyxcbiAgICApLFxuICApXG5cbiAgaWYgKCdpbnN0cnVtZW50YXRpb24nIGluIHZhbHVlICYmIHZhbHVlLmluc3RydW1lbnRhdGlvbiAhPSBudWxsKSB7XG4gICAgaWYgKCFTY2hlbWEuaXMoSW5zdHJ1bWVudGF0aW9uU2NoZW1hKSh2YWx1ZS5pbnN0cnVtZW50YXRpb24pKSB7XG4gICAgICBpc3N1ZXMucHVzaChgaW5zdHJ1bWVudGF0aW9uOiBleHBlY3RlZCBcImZ1bGxcIiB8IFwibGlnaHRcImApXG4gICAgfVxuICB9XG5cbiAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVTdGF0ZVRyYW5zYWN0aW9uVHJhaXRPdmVycmlkZXModmFsdWUsICcnKSlcblxuICBjb25zdCB0eG5MYW5lcyA9ICh2YWx1ZSBhcyBhbnkpLnR4bkxhbmVzXG4gIGlmICh0eG5MYW5lcyAhPSBudWxsKSB7XG4gICAgaWYgKCFpc1JlY29yZCh0eG5MYW5lcykpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGB0eG5MYW5lczogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ3R4bkxhbmVzLidcbiAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICAgICAgdHhuTGFuZXMsXG4gICAgICAgICAgbmV3IFNldChbJ2VuYWJsZWQnLCAnb3ZlcnJpZGVNb2RlJywgJ2J1ZGdldE1zJywgJ2RlYm91bmNlTXMnLCAnbWF4TGFnTXMnLCAnYWxsb3dDb2FsZXNjZScsICd5aWVsZFN0cmF0ZWd5J10pLFxuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlVHhuTGFuZXNQYXRjaCh0eG5MYW5lcywgcHJlZml4KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvdmVycmlkZXNCeU1vZHVsZUlkID0gdmFsdWUudHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWRcbiAgaWYgKG92ZXJyaWRlc0J5TW9kdWxlSWQgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQob3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGB0cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZDogZXhwZWN0ZWQgcmVjb3JkYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbbW9kdWxlSWQsIHBhdGNoXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgdHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQuJHttb2R1bGVJZH0uYFxuICAgICAgICBpZiAocGF0Y2ggPT0gbnVsbCkgY29udGludWVcbiAgICAgICAgaWYgKCFpc1JlY29yZChwYXRjaCkpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9PHZhbHVlPjogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgICAgICAgIHBhdGNoLFxuICAgICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlTW9kZScsXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlQnVkZ2V0TXMnLFxuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMnLFxuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZVRpbWVTbGljaW5nJyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVTdGF0ZVRyYW5zYWN0aW9uVHJhaXRPdmVycmlkZXMocGF0Y2gsIHByZWZpeCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkID0gKHZhbHVlIGFzIGFueSkudHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkXG4gIGlmIChsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQobGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgaXNzdWVzLnB1c2goYHR4bkxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZDogZXhwZWN0ZWQgcmVjb3JkYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbbW9kdWxlSWQsIHBhdGNoXSBvZiBPYmplY3QuZW50cmllcyhsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGB0eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQuJHttb2R1bGVJZH0uYFxuICAgICAgICBpZiAocGF0Y2ggPT0gbnVsbCkgY29udGludWVcbiAgICAgICAgaWYgKCFpc1JlY29yZChwYXRjaCkpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9PHZhbHVlPjogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgICAgICAgIHBhdGNoLFxuICAgICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAgICdlbmFibGVkJyxcbiAgICAgICAgICAgICAgJ292ZXJyaWRlTW9kZScsXG4gICAgICAgICAgICAgICdidWRnZXRNcycsXG4gICAgICAgICAgICAgICdkZWJvdW5jZU1zJyxcbiAgICAgICAgICAgICAgJ21heExhZ01zJyxcbiAgICAgICAgICAgICAgJ2FsbG93Q29hbGVzY2UnLFxuICAgICAgICAgICAgICAneWllbGRTdHJhdGVneScsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlVHhuTGFuZXNQYXRjaChwYXRjaCwgcHJlZml4KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3YXJuRGV2T25seShsYWJlbCwgaXNzdWVzKVxufVxuXG5leHBvcnQgY29uc3Qgd2FybkludmFsaWRTdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzRGV2T25seSA9ICh2YWx1ZTogdW5rbm93biwgbGFiZWw6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuXG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgd2FybkRldk9ubHkobGFiZWwsIFsnZXhwZWN0ZWQgb2JqZWN0J10pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cbiAgaXNzdWVzLnB1c2goXG4gICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgdmFsdWUsXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VCdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlTW9kZScsXG4gICAgICAgICd0cmFpdENvbnZlcmdlVGltZVNsaWNpbmcnLFxuICAgICAgICAndHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQnLFxuICAgICAgICAndHhuTGFuZXMnLFxuICAgICAgICAndHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkJyxcbiAgICAgIF0pLFxuICAgICAgJycsXG4gICAgKSxcbiAgKVxuXG4gIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlU3RhdGVUcmFuc2FjdGlvblRyYWl0T3ZlcnJpZGVzKHZhbHVlLCAnJykpXG5cbiAgY29uc3QgdHhuTGFuZXMgPSAodmFsdWUgYXMgYW55KS50eG5MYW5lc1xuICBpZiAodHhuTGFuZXMgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQodHhuTGFuZXMpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgdHhuTGFuZXM6IGV4cGVjdGVkIG9iamVjdGApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICd0eG5MYW5lcy4nXG4gICAgICBpc3N1ZXMucHVzaChcbiAgICAgICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgICAgIHR4bkxhbmVzLFxuICAgICAgICAgIG5ldyBTZXQoWydlbmFibGVkJywgJ292ZXJyaWRlTW9kZScsICdidWRnZXRNcycsICdkZWJvdW5jZU1zJywgJ21heExhZ01zJywgJ2FsbG93Q29hbGVzY2UnXSksXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVUeG5MYW5lc1BhdGNoKHR4bkxhbmVzLCBwcmVmaXgpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlc0J5TW9kdWxlSWQgPSB2YWx1ZS50cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZFxuICBpZiAob3ZlcnJpZGVzQnlNb2R1bGVJZCAhPSBudWxsKSB7XG4gICAgaWYgKCFpc1JlY29yZChvdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgaXNzdWVzLnB1c2goYHRyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkOiBleHBlY3RlZCByZWNvcmRgKVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IFttb2R1bGVJZCwgcGF0Y2hdIG9mIE9iamVjdC5lbnRyaWVzKG92ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGB0cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZC4ke21vZHVsZUlkfS5gXG4gICAgICAgIGlmIChwYXRjaCA9PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAoIWlzUmVjb3JkKHBhdGNoKSkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH08dmFsdWU+OiBleHBlY3RlZCBvYmplY3RgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaXNzdWVzLnB1c2goXG4gICAgICAgICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgICAgICAgcGF0Y2gsXG4gICAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgICAgJ3RyYWl0Q29udmVyZ2VNb2RlJyxcbiAgICAgICAgICAgICAgJ3RyYWl0Q29udmVyZ2VCdWRnZXRNcycsXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcycsXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlVGltZVNsaWNpbmcnLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZVN0YXRlVHJhbnNhY3Rpb25UcmFpdE92ZXJyaWRlcyhwYXRjaCwgcHJlZml4KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQgPSAodmFsdWUgYXMgYW55KS50eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWRcbiAgaWYgKGxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZCAhPSBudWxsKSB7XG4gICAgaWYgKCFpc1JlY29yZChsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgdHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkOiBleHBlY3RlZCByZWNvcmRgKVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IFttb2R1bGVJZCwgcGF0Y2hdIG9mIE9iamVjdC5lbnRyaWVzKGxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYHR4bkxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZC4ke21vZHVsZUlkfS5gXG4gICAgICAgIGlmIChwYXRjaCA9PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAoIWlzUmVjb3JkKHBhdGNoKSkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH08dmFsdWU+OiBleHBlY3RlZCBvYmplY3RgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaXNzdWVzLnB1c2goXG4gICAgICAgICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgICAgICAgcGF0Y2gsXG4gICAgICAgICAgICBuZXcgU2V0KFsnZW5hYmxlZCcsICdvdmVycmlkZU1vZGUnLCAnYnVkZ2V0TXMnLCAnZGVib3VuY2VNcycsICdtYXhMYWdNcycsICdhbGxvd0NvYWxlc2NlJ10pLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVUeG5MYW5lc1BhdGNoKHBhdGNoLCBwcmVmaXgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdhcm5EZXZPbmx5KGxhYmVsLCBpc3N1ZXMpXG59XG4iLCAiaW1wb3J0IHsgQ2F1c2UsIEVmZmVjdCwgRmliZXJSZWYsIE9wdGlvbiwgU2NvcGUgfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRSdW50aW1lIH0gZnJvbSAnZWZmZWN0J1xuaW1wb3J0IHR5cGUgeyBBbnlNb2R1bGVTaGFwZSwgTW9kdWxlSW1wbCB9IGZyb20gJy4uL21vZHVsZS5qcydcbmltcG9ydCB7IG1ha2UgYXMgbWFrZUJvdW5kQXBpIH0gZnJvbSAnLi4vQm91bmRBcGlSdW50aW1lLmpzJ1xuaW1wb3J0ICogYXMgVGFza1J1bm5lciBmcm9tICcuLi9UYXNrUnVubmVyLmpzJ1xuaW1wb3J0IHsgY2xvc2VQcm9ncmFtU2NvcGUgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIuY2xvc2VTY29wZS5qcydcbmltcG9ydCB7IEJvb3RFcnJvciwgTWFpbkVycm9yLCB0eXBlIFByb2dyYW1JZGVudGl0eSB9IGZyb20gJy4vUHJvZ3JhbVJ1bm5lci5lcnJvcnMuanMnXG5pbXBvcnQgeyByZXBvcnRFcnJvcklmRW5hYmxlZCwgc2V0RXhpdENvZGVJZkVuYWJsZWQsIHNldEZhaWx1cmVFeGl0Q29kZUlmRW5hYmxlZCB9IGZyb20gJy4vUHJvZ3JhbVJ1bm5lci5leGl0Q29kZS5qcydcbmltcG9ydCB7IGluc3RhbGxHcmFjZWZ1bFNodXRkb3duSGFuZGxlcnMgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIuc2lnbmFscy5qcydcbmltcG9ydCB0eXBlIHsgUHJvZ3JhbVJ1bkNvbnRleHQgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIuY29udGV4dC5qcydcbmltcG9ydCB7IG1ha2VQcm9ncmFtUnVubmVyS2VybmVsIH0gZnJvbSAnLi9Qcm9ncmFtUnVubmVyLmtlcm5lbC5qcydcbmltcG9ydCB7IHJlc29sdmVQcm9ncmFtUnVubmVyT3B0aW9ucyB9IGZyb20gJy4vUHJvZ3JhbVJ1bm5lci5vcHRpb25zLmpzJ1xuXG5leHBvcnQgdHlwZSBSdW50aW1lRmFjdG9yeSA9IChcbiAgcm9vdEltcGw6IE1vZHVsZUltcGw8YW55LCBBbnlNb2R1bGVTaGFwZSwgYW55PixcbiAgb3B0aW9ucz86IHVua25vd24sXG4pID0+IE1hbmFnZWRSdW50aW1lLk1hbmFnZWRSdW50aW1lPGFueSwgbmV2ZXI+XG5cbmV4cG9ydCBjb25zdCBvcGVuUHJvZ3JhbSA9IDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgbWFrZVJ1bnRpbWU6IFJ1bnRpbWVGYWN0b3J5LFxuICByb290SW1wbDogTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+LFxuICBvcHRpb25zPzogdW5rbm93bixcbik6IEVmZmVjdC5FZmZlY3Q8UHJvZ3JhbVJ1bkNvbnRleHQ8U2g+LCB1bmtub3duLCBTY29wZS5TY29wZT4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGluVHhuID0geWllbGQqIEZpYmVyUmVmLmdldChUYXNrUnVubmVyLmluU3luY1RyYW5zYWN0aW9uRmliZXIpXG4gICAgaWYgKGluVHhuKSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5kaWVNZXNzYWdlKFxuICAgICAgICAnW0xvZ2l4XSBSdW50aW1lLm9wZW5Qcm9ncmFtL3J1blByb2dyYW0gaXMgbm90IGFsbG93ZWQgaW5zaWRlIGEgc3luY2hyb25vdXMgU3RhdGVUcmFuc2FjdGlvbiBib2R5JyxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBydW5uZXJPcHRpb25zID0gcmVzb2x2ZVByb2dyYW1SdW5uZXJPcHRpb25zKG9wdGlvbnMpXG4gICAgY29uc3Qga2VybmVsID0geWllbGQqIG1ha2VQcm9ncmFtUnVubmVyS2VybmVsKG1ha2VSdW50aW1lLCByb290SW1wbCwgb3B0aW9ucylcblxuICAgIC8vIEJpbmQgY3R4LnNjb3BlIGRpc3Bvc2FsIHRvIHRoZSBvdXRlciBzY29wZSAob3BlblByb2dyYW0gaXMgc2NvcGUtYm91bmQpLlxuICAgIHlpZWxkKiBFZmZlY3QuYWRkRmluYWxpemVyKCgpID0+XG4gICAgICBrZXJuZWwuY2xvc2Uoe1xuICAgICAgICB0aW1lb3V0TXM6IHJ1bm5lck9wdGlvbnMuY2xvc2VTY29wZVRpbWVvdXQsXG4gICAgICAgIG9uRXJyb3I6IChvcHRpb25zIGFzIGFueSk/Lm9uRXJyb3IsXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBOb2RlLW9ubHk6IHNpZ25hbHMgdHJpZ2dlciBncmFjZWZ1bCBzaHV0ZG93biAoY2xvc2luZyBjdHguc2NvcGUpLlxuICAgIHlpZWxkKiBrZXJuZWwuaW5zdGFsbFNpZ25hbHMocnVubmVyT3B0aW9ucy5oYW5kbGVTaWduYWxzKVxuXG4gICAgLy8gYm9vdDogdG91Y2ggdGhlIHByb2dyYW0gbW9kdWxlIHRhZyB0byBlbnN1cmUgaW5zdGFudGlhdGlvbiBhbmQgbG9naWNzL3Byb2Nlc3NlcyBzdGFydC5cbiAgICBjb25zdCBtb2R1bGVSdW50aW1lID0geWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHtcbiAgICAgIHRyeTogKCkgPT4ga2VybmVsLnJ1bnRpbWUucnVuUHJvbWlzZShyb290SW1wbC5tb2R1bGUgYXMgYW55KSxcbiAgICAgIGNhdGNoOiAoZXJyb3IpID0+IG5ldyBCb290RXJyb3Ioa2VybmVsLmlkZW50aXR5LCBlcnJvciksXG4gICAgfSlcblxuICAgIGtlcm5lbC5zZXRJbnN0YW5jZUlkKChtb2R1bGVSdW50aW1lIGFzIGFueSkuaW5zdGFuY2VJZClcbiAgICByZXR1cm4ga2VybmVsLnRvQ29udGV4dChtb2R1bGVSdW50aW1lKVxuICB9KVxuXG5leHBvcnQgY29uc3QgcnVuUHJvZ3JhbSA9IGFzeW5jIDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBBcmdzLCBBLCBFLCBSPihcbiAgbWFrZVJ1bnRpbWU6IFJ1bnRpbWVGYWN0b3J5LFxuICByb290SW1wbDogTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+LFxuICBtYWluOiAoY3R4OiBQcm9ncmFtUnVuQ29udGV4dDxTaD4sIGFyZ3M6IEFyZ3MpID0+IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj4sXG4gIG9wdGlvbnM/OiB1bmtub3duLFxuKTogUHJvbWlzZTxBPiA9PiB7XG4gIGlmIChUYXNrUnVubmVyLmlzSW5TeW5jVHJhbnNhY3Rpb24oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW0xvZ2l4XSBSdW50aW1lLm9wZW5Qcm9ncmFtL3J1blByb2dyYW0gaXMgbm90IGFsbG93ZWQgaW5zaWRlIGEgc3luY2hyb25vdXMgU3RhdGVUcmFuc2FjdGlvbiBib2R5JylcbiAgfVxuXG4gIGNvbnN0IHJ1bm5lck9wdGlvbnMgPSByZXNvbHZlUHJvZ3JhbVJ1bm5lck9wdGlvbnM8QXJncz4ob3B0aW9ucylcbiAgY29uc3QgaWRlbnRpdHk6IFByb2dyYW1JZGVudGl0eSA9IHtcbiAgICBtb2R1bGVJZDogU3RyaW5nKHJvb3RJbXBsLm1vZHVsZS5pZCksXG4gICAgaW5zdGFuY2VJZDogJ3Vua25vd24nLFxuICB9XG5cbiAgY29uc3Qgc2NvcGUgPSBFZmZlY3QucnVuU3luYyhTY29wZS5tYWtlKCkpXG4gIGNvbnN0IHJ1bnRpbWUgPSBtYWtlUnVudGltZShyb290SW1wbCBhcyB1bmtub3duIGFzIE1vZHVsZUltcGw8YW55LCBBbnlNb2R1bGVTaGFwZSwgYW55Piwgb3B0aW9ucylcblxuICBsZXQgY3R4OlxuICAgIHwgKFByb2dyYW1SdW5Db250ZXh0PFNoPiAmIHtcbiAgICAgICAgcmVhZG9ubHkgbW9kdWxlOiB7IHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZyB9XG4gICAgICB9KVxuICAgIHwgdW5kZWZpbmVkXG4gIGxldCBtYWluRXJyb3I6IHVua25vd24gfCB1bmRlZmluZWRcbiAgbGV0IGNsb3NlRXJyb3I6IHVua25vd24gfCB1bmRlZmluZWRcbiAgbGV0IHJlc3VsdDpcbiAgICB8IHsgcmVhZG9ubHkgX3RhZzogJ3N1Y2Nlc3MnOyByZWFkb25seSB2YWx1ZTogQSB9XG4gICAgfCB7IHJlYWRvbmx5IF90YWc6ICdmYWlsdXJlJzsgcmVhZG9ubHkgZXJyb3I6IHVua25vd24gfVxuICAgIHwgdW5kZWZpbmVkXG5cbiAgdHJ5IHtcbiAgICAvLyBSdW50aW1lIHJlc291cmNlIGRpc3Bvc2FsOiBiaW5kIHJ1bnRpbWUuZGlzcG9zZSB0byBjdHguc2NvcGUuXG4gICAgRWZmZWN0LnJ1blN5bmMoU2NvcGUuYWRkRmluYWxpemVyKHNjb3BlLCBFZmZlY3QucHJvbWlzZSgoKSA9PiBydW50aW1lLmRpc3Bvc2UoKSkucGlwZShFZmZlY3QuYXNWb2lkKSkpXG5cbiAgICAvLyBOb2RlLW9ubHk6IHNpZ25hbHMgdHJpZ2dlciBncmFjZWZ1bCBzaHV0ZG93biAoY2xvc2luZyBjdHguc2NvcGUpLlxuICAgIGlmIChydW5uZXJPcHRpb25zLmhhbmRsZVNpZ25hbHMpIHtcbiAgICAgIEVmZmVjdC5ydW5TeW5jKFxuICAgICAgICBpbnN0YWxsR3JhY2VmdWxTaHV0ZG93bkhhbmRsZXJzKHtcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBib290OiB0b3VjaCB0aGUgcHJvZ3JhbSBtb2R1bGUgdGFnIHRvIGVuc3VyZSBpbnN0YW50aWF0aW9uIGFuZCBsb2dpY3MvcHJvY2Vzc2VzIHN0YXJ0LlxuICAgIGxldCBtb2R1bGVSdW50aW1lOiBhbnlcbiAgICB0cnkge1xuICAgICAgbW9kdWxlUnVudGltZSA9IGF3YWl0IHJ1bnRpbWUucnVuUHJvbWlzZShyb290SW1wbC5tb2R1bGUgYXMgYW55KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRGYWlsdXJlRXhpdENvZGVJZkVuYWJsZWQocnVubmVyT3B0aW9ucy5leGl0Q29kZSlcbiAgICAgIHJlcG9ydEVycm9ySWZFbmFibGVkKHJ1bm5lck9wdGlvbnMuZXhpdENvZGUgJiYgcnVubmVyT3B0aW9ucy5yZXBvcnRFcnJvciwgZXJyb3IpXG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIF90YWc6ICdmYWlsdXJlJyxcbiAgICAgICAgZXJyb3I6IG5ldyBCb290RXJyb3IoaWRlbnRpdHksIGVycm9yKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Py5fdGFnICE9PSAnZmFpbHVyZScpIHtcbiAgICAgIGlkZW50aXR5Lmluc3RhbmNlSWQgPSBTdHJpbmcobW9kdWxlUnVudGltZS5pbnN0YW5jZUlkID8/ICd1bmtub3duJylcblxuICAgICAgY3R4ID0ge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgcnVudGltZSxcbiAgICAgICAgbW9kdWxlOiBtb2R1bGVSdW50aW1lLFxuICAgICAgICAkOiBtYWtlQm91bmRBcGkocm9vdEltcGwubW9kdWxlLnNoYXBlIGFzIGFueSwgbW9kdWxlUnVudGltZSBhcyBhbnkpIGFzIGFueSxcbiAgICAgIH0gc2F0aXNmaWVzIFByb2dyYW1SdW5Db250ZXh0PFNoPiBhcyBhbnlcbiAgICB9XG5cbiAgICBpZiAoY3R4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChhd2FpdCBjdHgucnVudGltZS5ydW5Qcm9taXNlKG1haW4oY3R4LCBydW5uZXJPcHRpb25zLmFyZ3MgYXMgQXJncykgYXMgYW55KSkgYXMgQVxuICAgICAgICBzZXRFeGl0Q29kZUlmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlLCB2YWx1ZSlcbiAgICAgICAgcmVzdWx0ID0geyBfdGFnOiAnc3VjY2VzcycsIHZhbHVlIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG1haW5FcnJvciA9IGVycm9yXG4gICAgICAgIHNldEZhaWx1cmVFeGl0Q29kZUlmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlKVxuICAgICAgICByZXBvcnRFcnJvcklmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlICYmIHJ1bm5lck9wdGlvbnMucmVwb3J0RXJyb3IsIGVycm9yKVxuICAgICAgICByZXN1bHQgPSB7IF90YWc6ICdmYWlsdXJlJywgZXJyb3I6IG5ldyBNYWluRXJyb3IoaWRlbnRpdHksIGVycm9yKSB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNvbnN0IGV4aXQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZUV4aXQoXG4gICAgICBjbG9zZVByb2dyYW1TY29wZSh7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICB0aW1lb3V0TXM6IHJ1bm5lck9wdGlvbnMuY2xvc2VTY29wZVRpbWVvdXQsXG4gICAgICAgIGlkZW50aXR5LFxuICAgICAgICBvbkVycm9yOiAob3B0aW9ucyBhcyBhbnkpPy5vbkVycm9yLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgaWYgKGV4aXQuX3RhZyA9PT0gJ0ZhaWx1cmUnKSB7XG4gICAgICBjb25zdCBmYWlsdXJlT3B0ID0gQ2F1c2UuZmFpbHVyZU9wdGlvbihleGl0LmNhdXNlKVxuICAgICAgaWYgKE9wdGlvbi5pc1NvbWUoZmFpbHVyZU9wdCkpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IGZhaWx1cmVPcHQudmFsdWVcbiAgICAgICAgaWYgKG1haW5FcnJvciAhPT0gdW5kZWZpbmVkICYmIGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBlcnJvci5tYWluRXJyb3IgPSBtYWluRXJyb3JcbiAgICAgICAgfVxuICAgICAgICBjbG9zZUVycm9yID0gZXJyb3JcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmVjdE9wdCA9IENhdXNlLmRpZU9wdGlvbihleGl0LmNhdXNlKVxuICAgICAgICBpZiAoT3B0aW9uLmlzU29tZShkZWZlY3RPcHQpICYmIGRlZmVjdE9wdC52YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IGRlZmVjdE9wdC52YWx1ZVxuICAgICAgICAgIGlmIChtYWluRXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBlcnJvci5tYWluRXJyb3IgPSBtYWluRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xvc2VFcnJvciA9IGVycm9yXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xvc2VFcnJvciA9IG5ldyBFcnJvcihTdHJpbmcoZXhpdC5jYXVzZSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2xvc2VFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2V0RmFpbHVyZUV4aXRDb2RlSWZFbmFibGVkKHJ1bm5lck9wdGlvbnMuZXhpdENvZGUpXG4gICAgcmVwb3J0RXJyb3JJZkVuYWJsZWQocnVubmVyT3B0aW9ucy5leGl0Q29kZSAmJiBydW5uZXJPcHRpb25zLnJlcG9ydEVycm9yLCBjbG9zZUVycm9yKVxuICAgIHRocm93IGNsb3NlRXJyb3JcbiAgfVxuXG4gIGlmICghcmVzdWx0KSB7XG4gICAgc2V0RmFpbHVyZUV4aXRDb2RlSWZFbmFibGVkKHJ1bm5lck9wdGlvbnMuZXhpdENvZGUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdbTG9naXhdIFByb2dyYW1SdW5uZXIucnVuUHJvZ3JhbTogbWlzc2luZyByZXN1bHQnKVxuICB9XG5cbiAgaWYgKHJlc3VsdC5fdGFnID09PSAnZmFpbHVyZScpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3JcbiAgfVxuXG4gIHJldHVybiByZXN1bHQudmFsdWVcbn1cbiIsICJjb25zdCBpc1JlY29yZCA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGxcblxuY29uc3QgZ2V0UHJvY2VzcyA9ICgpOiBhbnkgPT4gKGdsb2JhbFRoaXMgYXMgYW55KS5wcm9jZXNzXG5cbmV4cG9ydCBjb25zdCBzZXRFeGl0Q29kZUlmRW5hYmxlZCA9IChlbmFibGVkOiBib29sZWFuLCB2YWx1ZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICBpZiAoIWVuYWJsZWQpIHJldHVyblxuXG4gIGNvbnN0IHByb2MgPSBnZXRQcm9jZXNzKClcbiAgaWYgKCFpc1JlY29yZChwcm9jKSkgcmV0dXJuXG5cbiAgY29uc3QgbmV4dCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgPyB2YWx1ZSA6IDBcblxuICBwcm9jLmV4aXRDb2RlID0gbmV4dFxufVxuXG5leHBvcnQgY29uc3Qgc2V0RmFpbHVyZUV4aXRDb2RlSWZFbmFibGVkID0gKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm5cblxuICBjb25zdCBwcm9jID0gZ2V0UHJvY2VzcygpXG4gIGlmICghaXNSZWNvcmQocHJvYykpIHJldHVyblxuXG4gIHByb2MuZXhpdENvZGUgPSAxXG59XG5cbmV4cG9ydCBjb25zdCByZXBvcnRFcnJvcklmRW5hYmxlZCA9IChlbmFibGVkOiBib29sZWFuLCBlcnJvcjogdW5rbm93bik6IHZvaWQgPT4ge1xuICBpZiAoIWVuYWJsZWQpIHJldHVyblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBQcm9ncmFtUnVubmVyT3B0aW9uczxBcmdzID0gdW5rbm93bj4ge1xuICByZWFkb25seSBjbG9zZVNjb3BlVGltZW91dDogbnVtYmVyXG4gIHJlYWRvbmx5IGhhbmRsZVNpZ25hbHM6IGJvb2xlYW5cbiAgcmVhZG9ubHkgYXJnczogQXJncyB8IHVuZGVmaW5lZFxuICByZWFkb25seSBleGl0Q29kZTogYm9vbGVhblxuICByZWFkb25seSByZXBvcnRFcnJvcjogYm9vbGVhblxufVxuXG5jb25zdCBpc1JlY29yZCA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGxcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9ncmFtUnVubmVyT3B0aW9ucyA9IDxBcmdzID0gdW5rbm93bj4ob3B0aW9uczogdW5rbm93bik6IFByb2dyYW1SdW5uZXJPcHRpb25zPEFyZ3M+ID0+IHtcbiAgY29uc3QgcmVjb3JkID0gaXNSZWNvcmQob3B0aW9ucykgPyBvcHRpb25zIDogdW5kZWZpbmVkXG5cbiAgY29uc3QgY2xvc2VTY29wZVRpbWVvdXQgPSB0eXBlb2YgcmVjb3JkPy5jbG9zZVNjb3BlVGltZW91dCA9PT0gJ251bWJlcicgPyByZWNvcmQuY2xvc2VTY29wZVRpbWVvdXQgOiAxMDAwXG5cbiAgY29uc3QgaGFuZGxlU2lnbmFscyA9IHR5cGVvZiByZWNvcmQ/LmhhbmRsZVNpZ25hbHMgPT09ICdib29sZWFuJyA/IHJlY29yZC5oYW5kbGVTaWduYWxzIDogdHJ1ZVxuXG4gIGNvbnN0IGV4aXRDb2RlID0gdHlwZW9mIHJlY29yZD8uZXhpdENvZGUgPT09ICdib29sZWFuJyA/IHJlY29yZC5leGl0Q29kZSA6IGZhbHNlXG5cbiAgY29uc3QgcmVwb3J0RXJyb3IgPSB0eXBlb2YgcmVjb3JkPy5yZXBvcnRFcnJvciA9PT0gJ2Jvb2xlYW4nID8gcmVjb3JkLnJlcG9ydEVycm9yIDogdHJ1ZVxuXG4gIGNvbnN0IGFyZ3MgPSAocmVjb3JkPy5hcmdzIGFzIEFyZ3MgfCB1bmRlZmluZWQpID8/IHVuZGVmaW5lZFxuXG4gIHJldHVybiB7XG4gICAgY2xvc2VTY29wZVRpbWVvdXQsXG4gICAgaGFuZGxlU2lnbmFscyxcbiAgICBhcmdzLFxuICAgIGV4aXRDb2RlLFxuICAgIHJlcG9ydEVycm9yLFxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFNBQVMsVUFBQUEsU0FBUSxPQUF1QixVQUFBQyxlQUFxQjs7O0FDQTdELFNBQVMsY0FBYztBQVN2QixJQUFNLG9CQUFvQixPQUFPLElBQUksS0FBSyxPQUFPLFNBQVMsQ0FBQztBQUMzRCxJQUFNLHVCQUF1QixPQUFPLE9BQU8sS0FBSyxPQUFPLFNBQVMsQ0FBQztBQUNqRSxJQUFNLHFCQUFxQixPQUFPLE1BQU0sT0FBTyxRQUFRLE1BQU0sR0FBRyxPQUFPLFFBQVEsTUFBTSxHQUFHLE9BQU8sUUFBUSxPQUFPLENBQUM7QUFDL0csSUFBTSx3QkFBd0IsT0FBTyxNQUFNLE9BQU8sUUFBUSxNQUFNLEdBQUcsT0FBTyxRQUFRLE9BQU8sQ0FBQztBQUMxRixJQUFNLHlCQUF5QixPQUFPLE1BQU0sT0FBTyxRQUFRLFdBQVcsR0FBRyxpQkFBaUI7QUFFMUYsSUFBTSxXQUFXLENBQUMsVUFDaEIsT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUs7QUFFckUsSUFBTSxjQUFjLENBQUMsT0FBZSxXQUF3QztBQUMxRSxNQUFJLENBQUMsU0FBUyxFQUFHO0FBQ2pCLE1BQUksT0FBTyxXQUFXLEVBQUc7QUFFekIsVUFBUTtBQUFBLElBQ04sQ0FBQyw0Q0FBNEMsWUFBWSxLQUFLLElBQUksU0FBUyxFQUN4RSxPQUFPLE9BQU8sSUFBSSxDQUFDLE1B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Q0FBeUM7QUFDeEYsU0FBTyxNQUFNLFFBQVEsK0JBQStCLFNBQVM7QUFDL0Q7QUFPTyxJQUFNLDJCQUEyQixDQUN0QyxTQUNBLFVBQ0EsY0FDUztBQUNULDJEQUF5RCxXQUFXLG9DQUFvQyxRQUFRLEdBQUc7QUFFbkgsVUFBUTtBQUFBLElBQ05JLFFBQU8sSUFBSSxhQUFhO0FBQ3RCLFlBQU0sbUJBQW1CLE9BQU9BLFFBQU8sY0FBYyx5QkFBeUI7QUFFOUUsVUFBSUMsUUFBTyxPQUFPLGdCQUFnQixHQUFHO0FBQ25DO0FBQUEsTUFDRjtBQUlBLFlBQU0sZ0JBQXFCLGlCQUFpQjtBQUM1QyxZQUFNLE9BQU87QUFBQSxRQUNYLEdBQUksY0FBYyxvQ0FBb0MsQ0FBQztBQUFBLE1BQ3pEO0FBRUEsVUFBSSxXQUFXO0FBQ2IsYUFBSyxRQUFRLElBQUk7QUFBQSxNQUNuQixPQUFPO0FBQ0wsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUVBLG9CQUFjLG1DQUFtQztBQUFBLElBQ25ELENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFPTyxJQUFNLCtCQUErQixDQUMxQyxTQUNBLFVBQ0EsVUFDUztBQUNULDJDQUF5QyxPQUFPLHdDQUF3QyxRQUFRLEdBQUc7QUFFbkcsVUFBUTtBQUFBLElBQ05ELFFBQU8sSUFBSSxhQUFhO0FBQ3RCLFlBQU0sbUJBQW1CLE9BQU9BLFFBQU8sY0FBYyxvQkFBb0I7QUFFekUsVUFBSUMsUUFBTyxPQUFPLGdCQUFnQixHQUFHO0FBQ25DO0FBQUEsTUFDRjtBQUlBLFlBQU0sZ0JBQXFCLGlCQUFpQjtBQUM1QyxZQUFNLE9BQU87QUFBQSxRQUNYLEdBQUksY0FBYyx1QkFBdUIsQ0FBQztBQUFBLE1BQzVDO0FBRUEsVUFBSSxPQUFPO0FBQ1QsYUFBSyxRQUFRLElBQUk7QUFBQSxNQUNuQixPQUFPO0FBQ0wsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUVBLG9CQUFjLHNCQUFzQjtBQUFBLElBQ3RDLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFVTyxJQUFNLDJCQUEyQixDQUN0QyxVQUNBLFlBQ0EsT0FDQSxTQUVBRCxRQUFPLElBQUksYUFBYTtBQUN0QixRQUFNLFVBQXdCLDhCQUF3QyxVQUFVLFVBQVU7QUFFMUYsTUFBSSxDQUFDLFNBQVM7QUFDWjtBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsV0FBTyxvQkFBb0IsT0FBYyxFQUFFLElBQUkseUJBQXlCLE9BQU8sSUFBSTtBQUFBLEVBQ3JGLFFBQVE7QUFDTjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJFZmZlY3QiLCAiT3B0aW9uIiwgImlzUmVjb3JkIiwgImlzUmVjb3JkIiwgIm1ha2UiLCAibGF5ZXIiLCAib3BlblByb2dyYW0iLCAicnVuUHJvZ3JhbSIsICJFZmZlY3QiLCAiT3B0aW9uIl0KfQo=
859
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUnVudGltZS50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvY29uZmlnVmFsaWRhdGlvbi50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvcnVubmVyL1Byb2dyYW1SdW5uZXIudHMiLCAiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL3J1bm5lci9Qcm9ncmFtUnVubmVyLmV4aXRDb2RlLnRzIiwgIi4uLy4uLy4uLy4uL2xvZ2l4LWNvcmUvc3JjL2ludGVybmFsL3J1bnRpbWUvY29yZS9ydW5uZXIvUHJvZ3JhbVJ1bm5lci5vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBFZmZlY3QsIExheWVyLCBNYW5hZ2VkUnVudGltZSwgT3B0aW9uLCBTY29wZSB9IGZyb20gJ2VmZmVjdCdcbmltcG9ydCB0eXBlIHsgQW55TW9kdWxlU2hhcGUsIE1vZHVsZUltcGwgfSBmcm9tICcuL2ludGVybmFsL21vZHVsZS5qcydcbmltcG9ydCB0eXBlIHsgQW55TW9kdWxlIH0gZnJvbSAnLi9Nb2R1bGUuanMnXG5pbXBvcnQgKiBhcyBBcHBSdW50aW1lSW1wbCBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvQXBwUnVudGltZS5qcydcbmltcG9ydCAqIGFzIE1vZHVsZVJ1bnRpbWUgZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL01vZHVsZVJ1bnRpbWUuanMnXG5pbXBvcnQgKiBhcyBEZWJ1ZyBmcm9tICcuL0RlYnVnLmpzJ1xuaW1wb3J0IHR5cGUgKiBhcyBFZmZlY3RPcCBmcm9tICcuL0VmZmVjdE9wLmpzJ1xuaW1wb3J0ICogYXMgRWZmZWN0T3BDb3JlIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL0VmZmVjdE9wQ29yZS5qcydcbmltcG9ydCAqIGFzIFJ1blNlc3Npb24gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmlsaXR5L3J1blNlc3Npb24uanMnXG5pbXBvcnQgdHlwZSB7IFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uIGFzIFJlYWRRdWVyeUZhbGxiYWNrUmVhc29uQ29yZSB9IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL1JlYWRRdWVyeS5qcydcbmltcG9ydCB7XG4gIENvbmN1cnJlbmN5UG9saWN5VGFnLFxuICBDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlc1RhZyxcbiAgdHlwZSBSZWFkUXVlcnlTdHJpY3RHYXRlUnVudGltZUNvbmZpZyxcbiAgU3RhdGVUcmFuc2FjdGlvbkNvbmZpZ1RhZyxcbiAgU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlc1RhZyxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeSxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlcyxcbiAgdHlwZSBDb25jdXJyZW5jeVBvbGljeVBhdGNoLFxuICB0eXBlIFN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXMsXG4gIHR5cGUgU3RhdGVUcmFuc2FjdGlvbkluc3RydW1lbnRhdGlvbixcbiAgdHlwZSBTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlcyxcbiAgdHlwZSBUcmFpdENvbnZlcmdlVGltZVNsaWNpbmdQYXRjaCxcbiAgdHlwZSBUeG5MYW5lc1BhdGNoLFxufSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9lbnYuanMnXG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlIGZyb20gJy4vTWlkZGxld2FyZS5qcydcbmltcG9ydCB7IGdldFJ1bnRpbWVJbnRlcm5hbHMgfSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9ydW50aW1lSW50ZXJuYWxzQWNjZXNzb3IuanMnXG5pbXBvcnQgeyBlbnRlclJ1bnRpbWVCYXRjaCwgZXhpdFJ1bnRpbWVCYXRjaCB9IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL1RpY2tTY2hlZHVsZXIuanMnXG5pbXBvcnQgKiBhcyBTY29wZVJlZ2lzdHJ5IGZyb20gJy4vU2NvcGVSZWdpc3RyeS5qcydcbmltcG9ydCB7XG4gIHdhcm5JbnZhbGlkQ29uY3VycmVuY3lQb2xpY3lEZXZPbmx5LFxuICB3YXJuSW52YWxpZENvbmN1cnJlbmN5UG9saWN5UGF0Y2hEZXZPbmx5LFxuICB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25PdmVycmlkZXNEZXZPbmx5LFxuICB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25SdW50aW1lQ29uZmlnRGV2T25seSxcbiAgd2FybkludmFsaWRTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlc0Rldk9ubHksXG59IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL2NvbmZpZ1ZhbGlkYXRpb24uanMnXG5pbXBvcnQgKiBhcyBQcm9ncmFtUnVubmVyIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9Qcm9ncmFtUnVubmVyLmpzJ1xuaW1wb3J0IHR5cGUgeyBQcm9ncmFtUnVuQ29udGV4dCB9IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9Qcm9ncmFtUnVubmVyLmNvbnRleHQuanMnXG5cbmV4cG9ydCB0eXBlIHsgUHJvZ3JhbVJ1bkNvbnRleHQgfSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvUHJvZ3JhbVJ1bm5lci5jb250ZXh0LmpzJ1xuZXhwb3J0IHtcbiAgQm9vdEVycm9yLFxuICBEaXNwb3NlRXJyb3IsXG4gIERpc3Bvc2VUaW1lb3V0RXJyb3IsXG4gIE1haW5FcnJvcixcbiAgdHlwZSBQcm9ncmFtSWRlbnRpdHksXG4gIHR5cGUgUHJvZ3JhbVJ1bm5lckVycm9yVGFnLFxufSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvUHJvZ3JhbVJ1bm5lci5lcnJvcnMuanMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblByb2dyYW1PcHRpb25zIGV4dGVuZHMgUnVudGltZU9wdGlvbnMge1xuICByZWFkb25seSBjbG9zZVNjb3BlVGltZW91dD86IG51bWJlclxuICByZWFkb25seSBoYW5kbGVTaWduYWxzPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1blByb2dyYW1PcHRpb25zPEFyZ3MgPSB1bmtub3duPiBleHRlbmRzIE9wZW5Qcm9ncmFtT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFyZ3M/OiBBcmdzXG4gIHJlYWRvbmx5IGV4aXRDb2RlPzogYm9vbGVhblxuICByZWFkb25seSByZXBvcnRFcnJvcj86IGJvb2xlYW5cbn1cblxudHlwZSBIb3N0U2NoZWR1bGVyQ2FuY2VsID0gKCkgPT4gdm9pZFxuXG50eXBlIEhvc3RTY2hlZHVsZXIgPSB7XG4gIHJlYWRvbmx5IG5vd01zOiAoKSA9PiBudW1iZXJcbiAgcmVhZG9ubHkgc2NoZWR1bGVNaWNyb3Rhc2s6IChjYjogKCkgPT4gdm9pZCkgPT4gdm9pZFxuICByZWFkb25seSBzY2hlZHVsZU1hY3JvdGFzazogKGNiOiAoKSA9PiB2b2lkKSA9PiBIb3N0U2NoZWR1bGVyQ2FuY2VsXG4gIHJlYWRvbmx5IHNjaGVkdWxlQW5pbWF0aW9uRnJhbWU6IChjYjogKCkgPT4gdm9pZCkgPT4gSG9zdFNjaGVkdWxlckNhbmNlbFxuICByZWFkb25seSBzY2hlZHVsZVRpbWVvdXQ6IChtczogbnVtYmVyLCBjYjogKCkgPT4gdm9pZCkgPT4gSG9zdFNjaGVkdWxlckNhbmNlbFxufVxuXG5jb25zdCByZXNvbHZlUm9vdEltcGwgPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIHJvb3Q6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PiB8IEFueU1vZHVsZSxcbik6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PiA9PlxuICAoKHJvb3QgYXMgYW55KT8uX3RhZyA9PT0gJ01vZHVsZUltcGwnXG4gICAgPyAocm9vdCBhcyBNb2R1bGVJbXBsPGFueSwgU2gsIGFueT4pXG4gICAgOiAoKHJvb3QgYXMgYW55KT8uaW1wbCBhcyBNb2R1bGVJbXBsPGFueSwgU2gsIGFueT4pKSBzYXRpc2ZpZXMgTW9kdWxlSW1wbDxhbnksIFNoLCBhbnk+XG5cbi8qKlxuICogUnVudGltZS1sZXZlbCBTdGF0ZVRyYW5zYWN0aW9uIGRlZmF1bHRzLlxuICpcbiAqIEFwcGxpZWQgYXMgdGhlIGBydW50aW1lX2RlZmF1bHRgIGJhc2VsaW5lOyBtb2R1bGVzIGFuZCBwcm92aWRlcnMgbWF5IG92ZXJyaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdGF0ZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGluc3RydW1lbnRhdGlvbj86IFN0YXRlVHJhbnNhY3Rpb25JbnN0cnVtZW50YXRpb25cbiAgcmVhZG9ubHkgdHJhaXRDb252ZXJnZUJ1ZGdldE1zPzogbnVtYmVyXG4gIHJlYWRvbmx5IHRyYWl0Q29udmVyZ2VEZWNpc2lvbkJ1ZGdldE1zPzogbnVtYmVyXG4gIHJlYWRvbmx5IHRyYWl0Q29udmVyZ2VNb2RlPzogJ2F1dG8nIHwgJ2Z1bGwnIHwgJ2RpcnR5J1xuICByZWFkb25seSB0cmFpdENvbnZlcmdlVGltZVNsaWNpbmc/OiBUcmFpdENvbnZlcmdlVGltZVNsaWNpbmdQYXRjaFxuICAvKiogVHhuIGxhbmVzIGNvbmZpZ3VyYXRpb24gYXQgdGhlIGBydW50aW1lX2RlZmF1bHRgIGJhc2VsaW5lIChlbmFibGVkIGJ5IGRlZmF1bHQpLiAqL1xuICByZWFkb25seSB0eG5MYW5lcz86IFR4bkxhbmVzUGF0Y2hcbiAgcmVhZG9ubHkgdHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQ/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlcz4+XG4gIC8qKiBUeG4gbGFuZXMgb3ZlcnJpZGVzIGF0IHRoZSBgcnVudGltZV9tb2R1bGVgIGxheWVyLiAqL1xuICByZWFkb25seSB0eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQ/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBUeG5MYW5lc1BhdGNoPj5cbn1cblxuZXhwb3J0IHR5cGUgUmVhZFF1ZXJ5RmFsbGJhY2tSZWFzb24gPSBSZWFkUXVlcnlGYWxsYmFja1JlYXNvbkNvcmVcblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lUmVhZFF1ZXJ5U3RyaWN0R2F0ZU9wdGlvbnMge1xuICAvKipcbiAgICogU3RyaWN0IGdhdGUgbW9kZSBmb3IgUmVhZFF1ZXJ5IGZhbGxiYWNrcy5cbiAgICpcbiAgICogLSBgb2ZmYDogZGlzYWJsZWQgKGRlZmF1bHQpLlxuICAgKiAtIGB3YXJuYDogYWxsb3cgYnV0IGVtaXQgc3RydWN0dXJlZCBkaWFnbm9zdGljcy5cbiAgICogLSBgZXJyb3JgOiBmYWlsIG9uIGZvcmJpZGRlbiBmYWxsYmFja3MgKENJL3BlcmYgZ2F0ZSkuXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogJ29mZicgfCAnd2FybicgfCAnZXJyb3InXG4gIC8qKlxuICAgKiBTZWxlY3RvcnMgdGhhdCBtdXN0IHN0YXkgb24gdGhlIHN0YXRpYyBsYW5lIChrZXllZCBieSBzZWxlY3RvcklkKS5cbiAgICpcbiAgICogV2hlbiB1bmRlZmluZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBnYXRlIGNvdmVyYWdlICh0eXBpY2FsbHkgYGFsbGApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZVN0YXRpYz86IHtcbiAgICByZWFkb25seSBzZWxlY3Rvcklkcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICAgIHJlYWRvbmx5IG1vZHVsZXM/OiBSZWFkb25seUFycmF5PHN0cmluZz5cbiAgfVxuICAvKipcbiAgICogRmluZS1ncmFpbmVkIGtpbGwgc3dpdGNoOiBkZW55IHNwZWNpZmljIGZhbGxiYWNrIHJlYXNvbnMgKGUuZy4gYHVuc3RhYmxlU2VsZWN0b3JJZGApLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVueUZhbGxiYWNrUmVhc29ucz86IFJlYWRvbmx5QXJyYXk8UmVhZFF1ZXJ5RmFsbGJhY2tSZWFzb24+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVJlYWRRdWVyeU9wdGlvbnMge1xuICByZWFkb25seSBzdHJpY3RHYXRlPzogUnVudGltZVJlYWRRdWVyeVN0cmljdEdhdGVPcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZU9wdGlvbnMge1xuICByZWFkb25seSBsYXllcj86IExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPlxuICByZWFkb25seSBvbkVycm9yPzogKGNhdXNlOiBpbXBvcnQoJ2VmZmVjdCcpLkNhdXNlLkNhdXNlPHVua25vd24+KSA9PiBFZmZlY3QuRWZmZWN0PHZvaWQ+XG4gIC8qKlxuICAgKiBPcHRpb25hbCBydW50aW1lIGxhYmVsIChlLmcuIGBBcHBEZW1vUnVudGltZWApIGZvciBEZWJ1ZyAvIERldlRvb2xzIGdyb3VwaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmdcbiAgLyoqXG4gICAqIE9wdGlvbmFsIEhvc3RTY2hlZHVsZXIgb3ZlcnJpZGUgZm9yIHRoaXMgUnVudGltZS5cbiAgICpcbiAgICogVXNlIGl0IHdoZW4geW91IG5lZWQgZGV0ZXJtaW5pc3RpYyBob3N0IHNjaGVkdWxpbmcgKHRlc3RzKSBvciBhIGN1c3RvbSBob3N0IGludGVncmF0aW9uLlxuICAgKlxuICAgKiBOT1RFOlxuICAgKiAtIFRpY2tTY2hlZHVsZXIgY2FwdHVyZXMgSG9zdFNjaGVkdWxlciBhdCBMYXllciBidWlsZC10aW1lICgwNzMpOyBvdmVycmlkaW5nIEhvc3RTY2hlZHVsZXIgdmlhIGBvcHRpb25zLmxheWVyYFxuICAgKiAgIGlzIG5vdCBzdWZmaWNpZW50IHVubGVzcyB0aGUgZGVwZW5kZW50IGxheWVyIGlzIGJ1aWx0IHVuZGVyIHRoYXQgb3ZlcnJpZGUuXG4gICAqIC0gVGhpcyBvcHRpb24gYXZvaWRzIHRoZSBwaXRmYWxsIGJ5IGluamVjdGluZyBIb3N0U2NoZWR1bGVyIGludG8gdGhlIHJ1bnRpbWUgdGljayBzZXJ2aWNlcyBidWlsZCBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RTY2hlZHVsZXI/OiBIb3N0U2NoZWR1bGVyXG4gIC8qKlxuICAgKiBPcHRpb25hbCBEZWJ1ZyBjb25zb2xlIG91dHB1dCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiAtIGB0cnVlYDogZW5hYmxlIGBEZWJ1Zy5sYXllcigpYCAoYXV0byBtb2RlKS5cbiAgICogLSBgRGVidWcuRGVidWdMYXllck9wdGlvbnNgOiBmb3J3YXJkZWQgdG8gYERlYnVnLmxheWVyKG9wdGlvbnMpYC5cbiAgICpcbiAgICogQWR2YW5jZWQ6IGZvciBmdWxsIGNvbnRyb2wsIG9taXQgdGhpcyBvcHRpb24gYW5kIHByb3ZpZGUgeW91ciBvd24gRGVidWcgbGF5ZXJzIHZpYSBgb3B0aW9ucy5sYXllcmAuXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IHRydWUgfCBEZWJ1Zy5EZWJ1Z0xheWVyT3B0aW9uc1xuICByZWFkb25seSBtaWRkbGV3YXJlPzogRWZmZWN0T3AuTWlkZGxld2FyZVN0YWNrXG4gIC8qKlxuICAgKiBFbmFibGUgRGV2dG9vbHMgKGV4cGxpY2l0IG92ZXJyaWRlKS5cbiAgICpcbiAgICogLSBgdHJ1ZWA6IHVzZSBkZWZhdWx0IGBEZXZ0b29sc1J1bnRpbWVPcHRpb25zYC5cbiAgICogLSBgRGV2dG9vbHNSdW50aW1lT3B0aW9uc2A6IGN1c3RvbWl6ZSBodWIgYnVmZmVyIHNpemUsIERlYnVnT2JzZXJ2ZXIgZmlsdGVycywgZXRjLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2dG9vbHM/OiB0cnVlIHwgRGV2dG9vbHNSdW50aW1lT3B0aW9uc1xuICAvKipcbiAgICogUnVudGltZS1sZXZlbCBTdGF0ZVRyYW5zYWN0aW9uIGRlZmF1bHRzLlxuICAgKlxuICAgKiBXaGVuIG5vdCBwcm92aWRlZCwgbW9kdWxlcyBmYWxsIGJhY2sgdG8gTk9ERV9FTlYtYmFzZWQgZGVmYXVsdHM7IG1vZHVsZXMgbWF5IG92ZXJyaWRlIHZpYVxuICAgKiBgTW9kdWxlRGVmLmltcGxlbWVudCh7IHN0YXRlVHJhbnNhY3Rpb24gfSlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVUcmFuc2FjdGlvbj86IFJ1bnRpbWVTdGF0ZVRyYW5zYWN0aW9uT3B0aW9uc1xuICAvKipcbiAgICogUnVudGltZS1sZXZlbCBjb25jdXJyZW5jeSBjb250cm9sIHBsYW5lLlxuICAgKlxuICAgKiBDb252ZXJnZXMgdW5ib3VuZGVkIGNvbmN1cnJlbmN5IGludG8gYm91bmRlZCAoZGVmYXVsdCAxNiksIHdpdGggbW9kdWxlL3Byb3ZpZGVyIG92ZXJyaWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5UG9saWN5PzogQ29uY3VycmVuY3lQb2xpY3lcbiAgLyoqXG4gICAqIFJlYWRRdWVyeSBnb3Zlcm5hbmNlIChlLmcuIHN0cmljdCBnYXRlIHBvbGljaWVzKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRRdWVyeT86IFJ1bnRpbWVSZWFkUXVlcnlPcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2dG9vbHNSdW50aW1lT3B0aW9ucyB7XG4gIC8qKiBIdWIgcmluZyBidWZmZXIgY2FwYWNpdHkgKGV2ZW50cykuIERlZmF1bHQ6IDUwMC4gKi9cbiAgcmVhZG9ubHkgYnVmZmVyU2l6ZT86IG51bWJlclxuICAvKipcbiAgICogRGlhZ25vc3RpY3MgbGV2ZWwgZm9yIGV4cG9ydGFibGUgRGV2dG9vbHMgZXZlbnRzLlxuICAgKlxuICAgKiBGb3J3YXJkZWQgdG8gYERlYnVnLmRldnRvb2xzSHViTGF5ZXIoeyBkaWFnbm9zdGljc0xldmVsIH0pYC5cbiAgICogRGVmYXVsdDogYFwibGlnaHRcImAuXG4gICAqL1xuICByZWFkb25seSBkaWFnbm9zdGljc0xldmVsPzogRGVidWcuRGlhZ25vc3RpY3NMZXZlbFxuICAvKipcbiAgICogVHJhaXQgY29udmVyZ2UgZGlhZ25vc3RpY3Mgc2FtcGxpbmcgY29uZmlnLlxuICAgKlxuICAgKiBGb3J3YXJkZWQgdG8gYERlYnVnLmRldnRvb2xzSHViTGF5ZXIoeyB0cmFpdENvbnZlcmdlRGlhZ25vc3RpY3NTYW1wbGluZyB9KWAuXG4gICAqL1xuICByZWFkb25seSB0cmFpdENvbnZlcmdlRGlhZ25vc3RpY3NTYW1wbGluZz86IERlYnVnLlRyYWl0Q29udmVyZ2VEaWFnbm9zdGljc1NhbXBsaW5nQ29uZmlnXG4gIC8qKiBEZWJ1Z09ic2VydmVyIGNvbmZpZyBmb3IgYHRyYWNlOmVmZmVjdG9wYDsgdW5kZWZpbmVkIG1lYW5zIGZ1bGwgb2JzZXJ2YXRpb24uICovXG4gIHJlYWRvbmx5IG9ic2VydmVyPzogTWlkZGxld2FyZS5EZWJ1Z09ic2VydmVyQ29uZmlnIHwgZmFsc2VcbiAgLyoqIFJlc2VydmVkOiBSZWFjdCByZW5kZXIgc2FtcGxpbmcgLyB0aHJvdHRsaW5nIGNvbmZpZyAoY29uc3VtZWQgYnkgYEBsb2dpeGpzL3JlYWN0YCkuICovXG4gIHJlYWRvbmx5IHNhbXBsaW5nPzoge1xuICAgIHJlYWRvbmx5IHJlYWN0UmVuZGVyU2FtcGxlUmF0ZT86IG51bWJlclxuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGFuIGFwcGxpY2F0aW9uIHJ1bnRpbWUgZnJvbSBhIHJvb3QgbW9kdWxlLlxuICpcbiAqIC0gVXNlcyB0aGUgcm9vdCBtb2R1bGUgKyBsYXllciBhcyB0aGUgY29tcG9zaXRpb24gcm9vdC5cbiAqIC0gRm9ya3Mgcm9vdCBwcm9jZXNzZXMgd2l0aGluIHRoZSBydW50aW1lIFNjb3BlLlxuICogLSBFeHBvc2VzIGEgTWFuYWdlZFJ1bnRpbWU7IHRoZSBmdWxsIEVudiBpcyBwcm92aWRlZCBieSBgcm9vdC5sYXllciArIG9wdGlvbnMubGF5ZXJgLlxuICovXG5leHBvcnQgY29uc3QgbWFrZSA9IChcbiAgcm9vdDogTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+IHwgQW55TW9kdWxlLFxuICBvcHRpb25zPzogUnVudGltZU9wdGlvbnMsXG4pOiBNYW5hZ2VkUnVudGltZS5NYW5hZ2VkUnVudGltZTxhbnksIG5ldmVyPiA9PiB7XG4gIGNvbnN0IHJvb3RJbXBsID0gcmVzb2x2ZVJvb3RJbXBsKHJvb3QpXG5cbiAgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeURldk9ubHkob3B0aW9ucz8uY29uY3VycmVuY3lQb2xpY3ksICdSdW50aW1lLm1ha2Ugb3B0aW9ucy5jb25jdXJyZW5jeVBvbGljeScpXG4gIHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvblJ1bnRpbWVDb25maWdEZXZPbmx5KG9wdGlvbnM/LnN0YXRlVHJhbnNhY3Rpb24sICdSdW50aW1lLm1ha2Ugb3B0aW9ucy5zdGF0ZVRyYW5zYWN0aW9uJylcblxuICBjb25zdCBkZWJ1Z0xheWVyID1cbiAgICBvcHRpb25zPy5kZWJ1ZyA9PT0gdHJ1ZVxuICAgICAgPyAoRGVidWcubGF5ZXIoKSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgICA6IG9wdGlvbnM/LmRlYnVnXG4gICAgICAgID8gKERlYnVnLmxheWVyKG9wdGlvbnMuZGVidWcpIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPilcbiAgICAgICAgOiAoTGF5ZXIuZW1wdHkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuXG4gIC8vIEJhc2UgRW52OiBmdWxseSBkZWZpbmVkIGJ5IGNhbGxlci1wcm92aWRlZCBMYXllcnMgKGUuZy4gQ29uZmlnIC8gcGxhdGZvcm0gc2VydmljZXMpLlxuICAvLyBEZWJ1ZyBzaW5rcyBjYW4gYmUgZW5hYmxlZCB2aWEgb3B0aW9ucy5kZWJ1Zywgb3IgbWFudWFsbHkgY29tcG9zZWQgdmlhIG9wdGlvbnMubGF5ZXIuXG4gIGNvbnN0IHVzZXJMYXllciA9IChvcHRpb25zPy5sYXllciA/PyBMYXllci5lbXB0eSkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+XG4gIGNvbnN0IHVzZXJXaXRoRGVidWcgPSBvcHRpb25zPy5kZWJ1ZyA/IChMYXllci5tZXJnZUFsbCh1c2VyTGF5ZXIsIGRlYnVnTGF5ZXIpIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPikgOiB1c2VyTGF5ZXJcblxuICBsZXQgbWlkZGxld2FyZVN0YWNrOiBFZmZlY3RPcC5NaWRkbGV3YXJlU3RhY2sgPSBvcHRpb25zPy5taWRkbGV3YXJlID8/IFtdXG5cbiAgLy8gV2hlbiBkZXZ0b29scyBpcyBleHBsaWNpdGx5IGVuYWJsZWQ6XG4gIC8vIDEpIEFwcGVuZCBEZWJ1Z09ic2VydmVyIChgdHJhY2U6ZWZmZWN0b3BgKS5cbiAgLy8gMikgTW91bnQgdGhlIERldnRvb2xzSHViIHNpbmsgaW4gYXBwTGF5ZXIgKHByb2Nlc3MtbGV2ZWwgZXZlbnQgYWdncmVnYXRpb24pLlxuICBjb25zdCBkZXZ0b29sc09wdGlvbnM6IERldnRvb2xzUnVudGltZU9wdGlvbnMgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5kZXZ0b29scyA9PT0gdHJ1ZSA/IHt9IDogb3B0aW9ucz8uZGV2dG9vbHNcblxuICBpZiAob3B0aW9ucz8uZGV2dG9vbHMpIHtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IGRldnRvb2xzT3B0aW9ucz8ub2JzZXJ2ZXIgPT09IGZhbHNlID8gZmFsc2UgOiBkZXZ0b29sc09wdGlvbnM/Lm9ic2VydmVyXG4gICAgbWlkZGxld2FyZVN0YWNrID0gTWlkZGxld2FyZS53aXRoRGVidWcobWlkZGxld2FyZVN0YWNrLCB7XG4gICAgICBsb2dnZXI6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyQ29uZmlnLFxuICAgIH0pXG4gIH1cblxuICAvLyBPcHRpb25hbDogaW5qZWN0IHRoZSBFZmZlY3RPcCBNaWRkbGV3YXJlU3RhY2sgc2VydmljZSBmb3IgdGhpcyBSdW50aW1lLFxuICAvLyBzbyBydW50aW1lIGNvZGUgKGUuZy4gU3RhdGVUcmFpdC5pbnN0YWxsKSBjYW4gcmVzb2x2ZSB0aGUgdW5pZmllZCBFZmZlY3RPcCBidXMgY29uZmlndXJhdGlvbiBmcm9tIEVudi5cbiAgY29uc3QgZWZmZWN0T3BMYXllcjogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+ID1cbiAgICBtaWRkbGV3YXJlU3RhY2subGVuZ3RoID4gMFxuICAgICAgPyAoTGF5ZXIuc3VjY2VlZChFZmZlY3RPcENvcmUuRWZmZWN0T3BNaWRkbGV3YXJlVGFnLCB7XG4gICAgICAgICAgc3RhY2s6IG1pZGRsZXdhcmVTdGFjayxcbiAgICAgICAgfSkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuICAgICAgOiAoTGF5ZXIuZW1wdHkgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+KVxuXG4gIGNvbnN0IGJhc2VMYXllciA9XG4gICAgb3B0aW9ucz8ubGFiZWwgIT0gbnVsbFxuICAgICAgPyAoTGF5ZXIubWVyZ2VBbGwoRGVidWcucnVudGltZUxhYmVsKG9wdGlvbnMubGFiZWwpLCB1c2VyV2l0aERlYnVnKSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgICA6IHVzZXJXaXRoRGVidWdcblxuICBjb25zdCBiYXNlV2l0aERldnRvb2xzID0gb3B0aW9ucz8uZGV2dG9vbHNcbiAgICA/IChEZWJ1Zy5kZXZ0b29sc0h1YkxheWVyKGJhc2VMYXllciwge1xuICAgICAgICBidWZmZXJTaXplOiBkZXZ0b29sc09wdGlvbnM/LmJ1ZmZlclNpemUsXG4gICAgICAgIGRpYWdub3N0aWNzTGV2ZWw6IGRldnRvb2xzT3B0aW9ucz8uZGlhZ25vc3RpY3NMZXZlbCxcbiAgICAgICAgdHJhaXRDb252ZXJnZURpYWdub3N0aWNzU2FtcGxpbmc6IGRldnRvb2xzT3B0aW9ucz8udHJhaXRDb252ZXJnZURpYWdub3N0aWNzU2FtcGxpbmcsXG4gICAgICB9KSBhcyBMYXllci5MYXllcjxhbnksIG5ldmVyLCBuZXZlcj4pXG4gICAgOiBiYXNlTGF5ZXJcblxuICAvLyBOT1RFOiBydW5TZXNzaW9uIHNob3VsZCBiZSBvdmVycmlkZWFibGUgYnkgY2FsbGVycyAoZS5nLiBDSS90cmlhbC1ydW4gaW5qZWN0aW5nIGEgc3RhYmxlIHJ1bklkKS5cbiAgLy8gSW4gTGF5ZXIubWVyZ2VBbGwsIGxhdGVyIGxheWVycyBvdmVycmlkZSBlYXJsaWVyIG9uZXM7IGtlZXAgdGhlIGRlZmF1bHQgbGF5ZXIgZmlyc3QuXG4gIGNvbnN0IGFwcExheWVyID0gTGF5ZXIubWVyZ2VBbGwoXG4gICAgUnVuU2Vzc2lvbi5ydW5TZXNzaW9uTGF5ZXIoKSxcbiAgICBTY29wZVJlZ2lzdHJ5LmxheWVyKCksXG4gICAgYmFzZVdpdGhEZXZ0b29scyxcbiAgICBlZmZlY3RPcExheWVyLFxuICApIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPlxuXG4gIGNvbnN0IHJlYWRRdWVyeVN0cmljdEdhdGU6IFJlYWRRdWVyeVN0cmljdEdhdGVSdW50aW1lQ29uZmlnIHwgdW5kZWZpbmVkID0gKCgpID0+IHtcbiAgICBjb25zdCBzdHJpY3RHYXRlID0gb3B0aW9ucz8ucmVhZFF1ZXJ5Py5zdHJpY3RHYXRlXG4gICAgaWYgKCFzdHJpY3RHYXRlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBtb2RlID0gc3RyaWN0R2F0ZS5tb2RlID8/ICdvZmYnXG4gICAgaWYgKG1vZGUgPT09ICdvZmYnKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZSxcbiAgICAgIHJlcXVpcmVTdGF0aWM6IHN0cmljdEdhdGUucmVxdWlyZVN0YXRpYyxcbiAgICAgIGRlbnlGYWxsYmFja1JlYXNvbnM6IHN0cmljdEdhdGUuZGVueUZhbGxiYWNrUmVhc29ucyxcbiAgICB9XG4gIH0pKClcblxuICBjb25zdCBhcHBDb25maWc6IEFwcFJ1bnRpbWVJbXBsLkxvZ2l4QXBwQ29uZmlnPGFueT4gPSB7XG4gICAgbGF5ZXI6IGFwcExheWVyLFxuICAgIG1vZHVsZXM6IFtBcHBSdW50aW1lSW1wbC5wcm92aWRlKHJvb3RJbXBsLm1vZHVsZSwgcm9vdEltcGwubGF5ZXIgYXMgTGF5ZXIuTGF5ZXI8YW55LCBhbnksIGFueT4pXSxcbiAgICBwcm9jZXNzZXM6IHJvb3RJbXBsLnByb2Nlc3NlcyA/PyBbXSxcbiAgICBvbkVycm9yOiBvcHRpb25zPy5vbkVycm9yLFxuICAgIGhvc3RTY2hlZHVsZXI6IG9wdGlvbnM/Lmhvc3RTY2hlZHVsZXIsXG4gICAgc3RhdGVUcmFuc2FjdGlvbjogb3B0aW9ucz8uc3RhdGVUcmFuc2FjdGlvbixcbiAgICBjb25jdXJyZW5jeVBvbGljeTogb3B0aW9ucz8uY29uY3VycmVuY3lQb2xpY3ksXG4gICAgcmVhZFF1ZXJ5U3RyaWN0R2F0ZSxcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IEFwcFJ1bnRpbWVJbXBsLm1ha2VBcHAoYXBwQ29uZmlnKVxuICByZXR1cm4gYXBwLm1ha2VSdW50aW1lKCkgYXMgTWFuYWdlZFJ1bnRpbWUuTWFuYWdlZFJ1bnRpbWU8YW55LCBuZXZlcj5cbn1cblxuLyoqXG4gKiBSdW50aW1lLmJhdGNoXHVGRjFBXG4gKiAtIFByb3ZpZGVzIGEgc3Ryb25nZXIgXCJ0aWNrIGJvdW5kYXJ5XCIgZm9yIFJ1bnRpbWVTdG9yZS9UaWNrU2NoZWR1bGVyIHRoYW4gdGhlIGRlZmF1bHQgbWljcm90YXNrIGJvdW5kYXJ5LlxuICogLSBTeW5jLW9ubHk6IG5lc3RlZCBiYXRjaGVzIGZsYXR0ZW47IG9ubHkgdGhlIG91dGVybW9zdCBiYXRjaCB0cmlnZ2VycyB0aGUgZmx1c2ggYm91bmRhcnkuXG4gKiAtIE5PVCBhIHRyYW5zYWN0aW9uOiBubyByb2xsYmFjazsgZXJyb3JzIG1heSByZXN1bHQgaW4gcGFydGlhbCBjb21taXRzLCBidXQgdGhlIGZsdXNoIGJvdW5kYXJ5IGlzIHN0aWxsIHJlbGVhc2VkIGluIGZpbmFsbHkuXG4gKlxuICogV0FSTklORzpcbiAqIC0gRG8gbm90IGBhd2FpdGAgaW5zaWRlIHRoZSBiYXRjaCBjYWxsYmFjayBleHBlY3RpbmcgbWlkLWZsdXNoOyBiYXRjaCBvbmx5IGVzdGFibGlzaGVzIGEgc3luY2hyb25vdXMgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBiYXRjaCA9IDxBPihmbjogKCkgPT4gQSk6IEEgPT4ge1xuICBlbnRlclJ1bnRpbWVCYXRjaCgpXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKClcbiAgfSBmaW5hbGx5IHtcbiAgICBleGl0UnVudGltZUJhdGNoKClcbiAgfVxufVxuXG4vKipcbiAqIFJlc291cmNlZnVsIGVudHJ5OiByZXR1cm5zIGEgc2NvcGUtYm91bmQgUHJvZ3JhbVJ1bkNvbnRleHQgKGJvb3RlZCBhbmQgcmVhZHkpLlxuICovXG5leHBvcnQgY29uc3Qgb3BlblByb2dyYW0gPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIHJvb3Q6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PiB8IEFueU1vZHVsZSxcbiAgb3B0aW9ucz86IE9wZW5Qcm9ncmFtT3B0aW9ucyxcbik6IEVmZmVjdC5FZmZlY3Q8UHJvZ3JhbVJ1bkNvbnRleHQ8U2g+LCB1bmtub3duLCBTY29wZS5TY29wZT4gPT5cbiAgUHJvZ3JhbVJ1bm5lci5vcGVuUHJvZ3JhbShcbiAgICAocm9vdEltcGwsIHJ1bnRpbWVPcHRpb25zKSA9PiBtYWtlKHJvb3RJbXBsLCBydW50aW1lT3B0aW9ucyBhcyBSdW50aW1lT3B0aW9ucyksXG4gICAgcmVzb2x2ZVJvb3RJbXBsKHJvb3QpLFxuICAgIG9wdGlvbnMsXG4gIClcblxuLyoqXG4gKiBPbmUtc2hvdCBlbnRyeTogYm9vdCBcdTIxOTIgbWFpbihjdHgsYXJncykgXHUyMTkyIGRpc3Bvc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5Qcm9ncmFtID0gYXN5bmMgPFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIEFyZ3MsIEEsIEUsIFI+KFxuICByb290OiBNb2R1bGVJbXBsPGFueSwgU2gsIGFueT4gfCBBbnlNb2R1bGUsXG4gIG1haW46IChjdHg6IFByb2dyYW1SdW5Db250ZXh0PFNoPiwgYXJnczogQXJncykgPT4gRWZmZWN0LkVmZmVjdDxBLCBFLCBSPixcbiAgb3B0aW9ucz86IFJ1blByb2dyYW1PcHRpb25zPEFyZ3M+LFxuKTogUHJvbWlzZTxBPiA9PlxuICBQcm9ncmFtUnVubmVyLnJ1blByb2dyYW0oXG4gICAgKHJvb3RJbXBsLCBydW50aW1lT3B0aW9ucykgPT4gbWFrZShyb290SW1wbCwgcnVudGltZU9wdGlvbnMgYXMgUnVudGltZU9wdGlvbnMpLFxuICAgIHJlc29sdmVSb290SW1wbChyb290KSxcbiAgICBtYWluLFxuICAgIG9wdGlvbnMsXG4gIClcblxuLyoqXG4gKiBQcm92aWRlci1zY29wZWQgU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlcyBsYXllci5cbiAqXG4gKiBVc2UgaXQgdG8gYXBwbHkgbG9jYWwgb3ZlcnJpZGVzIG9uIHRvcCBvZiB0aGUgYHJ1bnRpbWVfZGVmYXVsdGAgYmFzZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzTGF5ZXIgPSAoXG4gIG92ZXJyaWRlczogU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlcyxcbik6IExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPiA9PiB7XG4gIHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlc0Rldk9ubHkob3ZlcnJpZGVzLCAnUnVudGltZS5zdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzTGF5ZXInKVxuICByZXR1cm4gTGF5ZXIuc3VjY2VlZChTdGF0ZVRyYW5zYWN0aW9uT3ZlcnJpZGVzVGFnLCBvdmVycmlkZXMpIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIG5ldmVyPlxufVxuXG4vKipcbiAqIFByb3ZpZGVyLXNjb3BlZCBDb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlcyBsYXllci5cbiAqXG4gKiBVc2UgaXQgdG8gYXBwbHkgbG9jYWwgb3ZlcnJpZGVzIG9uIHRvcCBvZiB0aGUgYHJ1bnRpbWVfZGVmYXVsdGAgYmFzZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlc0xheWVyID0gKFxuICBvdmVycmlkZXM6IENvbmN1cnJlbmN5UG9saWN5T3ZlcnJpZGVzLFxuKTogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+ID0+IHtcbiAgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeURldk9ubHkob3ZlcnJpZGVzLCAnUnVudGltZS5jb25jdXJyZW5jeVBvbGljeU92ZXJyaWRlc0xheWVyJylcbiAgcmV0dXJuIExheWVyLnN1Y2NlZWQoQ29uY3VycmVuY3lQb2xpY3lPdmVycmlkZXNUYWcsIG92ZXJyaWRlcykgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgbmV2ZXI+XG59XG5cbi8qKlxuICogSG90LXN3aXRjaCBUcmFpdCBjb252ZXJnZSBvdmVycmlkZXMgZm9yIGEgbW9kdWxlSWQuXG4gKlxuICogVGhpcyBtdXRhdGVzIHRoZSBgcnVudGltZV9tb2R1bGVgIHBhdGNoIG1hcCBvbmx5OyBwcm92aWRlciBvdmVycmlkZXMgc3RpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJhaXRDb252ZXJnZU92ZXJyaWRlID0gKFxuICBydW50aW1lOiBNYW5hZ2VkUnVudGltZS5NYW5hZ2VkUnVudGltZTxhbnksIG5ldmVyPixcbiAgbW9kdWxlSWQ6IHN0cmluZyxcbiAgb3ZlcnJpZGVzOiBTdGF0ZVRyYW5zYWN0aW9uVHJhaXRDb252ZXJnZU92ZXJyaWRlcyB8IHVuZGVmaW5lZCxcbik6IHZvaWQgPT4ge1xuICB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25UcmFpdENvbnZlcmdlT3ZlcnJpZGVzRGV2T25seShvdmVycmlkZXMsIGBSdW50aW1lLnNldFRyYWl0Q29udmVyZ2VPdmVycmlkZSgke21vZHVsZUlkfSlgKVxuXG4gIHJ1bnRpbWUucnVuU3luYyhcbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBydW50aW1lQ29uZmlnT3B0ID0geWllbGQqIEVmZmVjdC5zZXJ2aWNlT3B0aW9uKFN0YXRlVHJhbnNhY3Rpb25Db25maWdUYWcpXG5cbiAgICAgIGlmIChPcHRpb24uaXNOb25lKHJ1bnRpbWVDb25maWdPcHQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBOT1RFOiBydW50aW1lIGNvbmZpZyBsaXZlcyBpbiBFbnYgYXMgYSBTZXJ2aWNlOyBob3Qtc3dpdGNoIGJ5IHJlcGxhY2luZyB0aGUgcGVyLW1vZHVsZSBwYXRjaCBtYXAuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgcnVudGltZUNvbmZpZzogYW55ID0gcnVudGltZUNvbmZpZ09wdC52YWx1ZVxuICAgICAgY29uc3QgbmV4dCA9IHtcbiAgICAgICAgLi4uKHJ1bnRpbWVDb25maWcudHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQgPz8ge30pLFxuICAgICAgfVxuXG4gICAgICBpZiAob3ZlcnJpZGVzKSB7XG4gICAgICAgIG5leHRbbW9kdWxlSWRdID0gb3ZlcnJpZGVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgbmV4dFttb2R1bGVJZF1cbiAgICAgIH1cblxuICAgICAgcnVudGltZUNvbmZpZy50cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZCA9IG5leHRcbiAgICB9KSxcbiAgKVxufVxuXG4vKipcbiAqIEhvdC1zd2l0Y2ggQ29uY3VycmVuY3lQb2xpY3kgcGF0Y2ggZm9yIGEgbW9kdWxlSWQuXG4gKlxuICogVGhpcyBtdXRhdGVzIHRoZSBgcnVudGltZV9tb2R1bGVgIHBhdGNoIG1hcCBvbmx5OyBwcm92aWRlciBvdmVycmlkZXMgc3RpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICovXG5leHBvcnQgY29uc3Qgc2V0Q29uY3VycmVuY3lQb2xpY3lPdmVycmlkZSA9IChcbiAgcnVudGltZTogTWFuYWdlZFJ1bnRpbWUuTWFuYWdlZFJ1bnRpbWU8YW55LCBuZXZlcj4sXG4gIG1vZHVsZUlkOiBzdHJpbmcsXG4gIHBhdGNoOiBDb25jdXJyZW5jeVBvbGljeVBhdGNoIHwgdW5kZWZpbmVkLFxuKTogdm9pZCA9PiB7XG4gIHdhcm5JbnZhbGlkQ29uY3VycmVuY3lQb2xpY3lQYXRjaERldk9ubHkocGF0Y2gsIGBSdW50aW1lLnNldENvbmN1cnJlbmN5UG9saWN5T3ZlcnJpZGUoJHttb2R1bGVJZH0pYClcblxuICBydW50aW1lLnJ1blN5bmMoXG4gICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgcnVudGltZUNvbmZpZ09wdCA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihDb25jdXJyZW5jeVBvbGljeVRhZylcblxuICAgICAgaWYgKE9wdGlvbi5pc05vbmUocnVudGltZUNvbmZpZ09wdCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IHJ1bnRpbWUgY29uZmlnIGxpdmVzIGluIEVudiBhcyBhIFNlcnZpY2U7IGhvdC1zd2l0Y2ggYnkgcmVwbGFjaW5nIHRoZSBwZXItbW9kdWxlIHBhdGNoIG1hcC5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCBydW50aW1lQ29uZmlnOiBhbnkgPSBydW50aW1lQ29uZmlnT3B0LnZhbHVlXG4gICAgICBjb25zdCBuZXh0ID0ge1xuICAgICAgICAuLi4ocnVudGltZUNvbmZpZy5vdmVycmlkZXNCeU1vZHVsZUlkID8/IHt9KSxcbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGNoKSB7XG4gICAgICAgIG5leHRbbW9kdWxlSWRdID0gcGF0Y2hcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBuZXh0W21vZHVsZUlkXVxuICAgICAgfVxuXG4gICAgICBydW50aW1lQ29uZmlnLm92ZXJyaWRlc0J5TW9kdWxlSWQgPSBuZXh0XG4gICAgfSksXG4gIClcbn1cblxuLyoqXG4gKiBBcHBseSBhIHRyYW5zYWN0aW9uIHNuYXBzaG90IGZvciB0aW1lLXRyYXZlbCByZXBsYXkgKGRldi90ZXN0KS5cbiAqXG4gKiAtIGBtb2R1bGVJZGAgLyBgaW5zdGFuY2VJZGAgbWF0Y2ggRGVidWcgZXZlbnRzLlxuICogLSBgbW9kZWA6IGBiZWZvcmVgIHJlcGxheXMgcHJlLXRyYW5zYWN0aW9uOyBgYWZ0ZXJgIHJlcGxheXMgcG9zdC1jb21taXQuXG4gKlxuICogTm8tb3AgaWYgdGhlIHJ1bnRpbWUvaW5zdGFuY2UgY2Fubm90IGJlIHJlc29sdmVkLlxuICovXG5leHBvcnQgY29uc3QgYXBwbHlUcmFuc2FjdGlvblNuYXBzaG90ID0gKFxuICBtb2R1bGVJZDogc3RyaW5nLFxuICBpbnN0YW5jZUlkOiBzdHJpbmcsXG4gIHR4bklkOiBzdHJpbmcsXG4gIG1vZGU6ICdiZWZvcmUnIHwgJ2FmdGVyJyxcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIGFueT4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHJ1bnRpbWUgPSBNb2R1bGVSdW50aW1lLmdldFJ1bnRpbWVCeU1vZHVsZUFuZEluc3RhbmNlPGFueSwgYW55Pihtb2R1bGVJZCwgaW5zdGFuY2VJZClcblxuICAgIGlmICghcnVudGltZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHlpZWxkKiBnZXRSdW50aW1lSW50ZXJuYWxzKHJ1bnRpbWUgYXMgYW55KS50eG4uYXBwbHlUcmFuc2FjdGlvblNuYXBzaG90KHR4bklkLCBtb2RlKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9KVxuIiwgImltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ2VmZmVjdCdcbmltcG9ydCB7IGlzRGV2RW52IH0gZnJvbSAnLi9lbnYuanMnXG5pbXBvcnQge1xuICBub3JtYWxpemVCb29sZWFuLFxuICBub3JtYWxpemVOb25OZWdhdGl2ZU51bWJlcixcbiAgbm9ybWFsaXplUG9zaXRpdmVJbnQsXG4gIG5vcm1hbGl6ZVBvc2l0aXZlTnVtYmVyLFxufSBmcm9tICcuL25vcm1hbGl6ZS5qcydcblxuY29uc3QgUG9zaXRpdmVJbnRTY2hlbWEgPSBTY2hlbWEuSW50LnBpcGUoU2NoZW1hLnBvc2l0aXZlKCkpXG5jb25zdCBQb3NpdGl2ZU51bWJlclNjaGVtYSA9IFNjaGVtYS5OdW1iZXIucGlwZShTY2hlbWEucG9zaXRpdmUoKSlcbmNvbnN0IENvbnZlcmdlTW9kZVNjaGVtYSA9IFNjaGVtYS5VbmlvbihTY2hlbWEuTGl0ZXJhbCgnYXV0bycpLCBTY2hlbWEuTGl0ZXJhbCgnZnVsbCcpLCBTY2hlbWEuTGl0ZXJhbCgnZGlydHknKSlcbmNvbnN0IEluc3RydW1lbnRhdGlvblNjaGVtYSA9IFNjaGVtYS5VbmlvbihTY2hlbWEuTGl0ZXJhbCgnZnVsbCcpLCBTY2hlbWEuTGl0ZXJhbCgnbGlnaHQnKSlcbmNvbnN0IENvbmN1cnJlbmN5TGltaXRTY2hlbWEgPSBTY2hlbWEuVW5pb24oU2NoZW1hLkxpdGVyYWwoJ3VuYm91bmRlZCcpLCBQb3NpdGl2ZUludFNjaGVtYSlcblxuY29uc3QgaXNSZWNvcmQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKVxuXG5jb25zdCB3YXJuRGV2T25seSA9IChsYWJlbDogc3RyaW5nLCBpc3N1ZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPik6IHZvaWQgPT4ge1xuICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuICBpZiAoaXNzdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUud2FybihcbiAgICBbJ1tMb2dpeF0gSW52YWxpZCBydW50aW1lIGNvbmZpZyBkZXRlY3RlZC4nLCBgY29udGV4dDogJHtsYWJlbH1gLCAnaXNzdWVzOiddXG4gICAgICAuY29uY2F0KGlzc3Vlcy5tYXAoKGkpID0+IGAtICR7aX1gKSlcbiAgICAgIC5qb2luKCdcXG4nKSxcbiAgKVxufVxuXG5jb25zdCBjb2xsZWN0VW5rbm93bktleXMgPSAoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFsbG93ZWQ6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG4gIHByZWZpeDogc3RyaW5nLFxuKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAoIWFsbG93ZWQuaGFzKGtleSkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH0ke2tleX06IHVua25vd24ga2V5YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzc3Vlc1xufVxuXG5jb25zdCB2YWxpZGF0ZUNvbmN1cnJlbmN5UG9saWN5UGF0Y2ggPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJlZml4OiBzdHJpbmcpOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT4ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cblxuICBpZiAoJ2NvbmN1cnJlbmN5TGltaXQnIGluIG9iaiAmJiBvYmouY29uY3VycmVuY3lMaW1pdCAhPSBudWxsKSB7XG4gICAgaWYgKCFTY2hlbWEuaXMoQ29uY3VycmVuY3lMaW1pdFNjaGVtYSkob2JqLmNvbmN1cnJlbmN5TGltaXQpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9Y29uY3VycmVuY3lMaW1pdDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50IHwgXCJ1bmJvdW5kZWRcImApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdsb3NzbGVzc0JhY2twcmVzc3VyZUNhcGFjaXR5JyBpbiBvYmogJiYgb2JqLmxvc3NsZXNzQmFja3ByZXNzdXJlQ2FwYWNpdHkgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZUludChvYmoubG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eSkgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fWxvc3NsZXNzQmFja3ByZXNzdXJlQ2FwYWNpdHk6IGV4cGVjdGVkIHBvc2l0aXZlIGludGApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdhbGxvd1VuYm91bmRlZCcgaW4gb2JqICYmIG9iai5hbGxvd1VuYm91bmRlZCAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZUJvb2xlYW4ob2JqLmFsbG93VW5ib3VuZGVkKSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9YWxsb3dVbmJvdW5kZWQ6IGV4cGVjdGVkIGJvb2xlYW5gKVxuICAgIH1cbiAgfVxuXG4gIGlmICgncHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkJyBpbiBvYmogJiYgb2JqLnByZXNzdXJlV2FybmluZ1RocmVzaG9sZCAhPSBudWxsKSB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gb2JqLnByZXNzdXJlV2FybmluZ1RocmVzaG9sZFxuICAgIGlmICghaXNSZWNvcmQodGhyZXNob2xkKSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXByZXNzdXJlV2FybmluZ1RocmVzaG9sZDogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFja2xvZ0NvdW50ID0gdGhyZXNob2xkWydiYWNrbG9nQ291bnQnXVxuICAgICAgaWYgKGJhY2tsb2dDb3VudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZUludChiYWNrbG9nQ291bnQpID09IG51bGwpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9cHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkLmJhY2tsb2dDb3VudDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgYmFja2xvZ0R1cmF0aW9uTXMgPSB0aHJlc2hvbGRbJ2JhY2tsb2dEdXJhdGlvbk1zJ11cbiAgICAgIGlmIChiYWNrbG9nRHVyYXRpb25NcyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZU51bWJlcihiYWNrbG9nRHVyYXRpb25NcykgPT0gbnVsbCkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1wcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQuYmFja2xvZ0R1cmF0aW9uTXM6IGV4cGVjdGVkIHBvc2l0aXZlIG51bWJlcmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoJ3dhcm5pbmdDb29sZG93bk1zJyBpbiBvYmogJiYgb2JqLndhcm5pbmdDb29sZG93bk1zICE9IG51bGwpIHtcbiAgICBpZiAobm9ybWFsaXplUG9zaXRpdmVOdW1iZXIob2JqLndhcm5pbmdDb29sZG93bk1zKSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9d2FybmluZ0Nvb2xkb3duTXM6IGV4cGVjdGVkIHBvc2l0aXZlIG51bWJlcmApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzc3Vlc1xufVxuXG5leHBvcnQgY29uc3Qgd2FybkludmFsaWRDb25jdXJyZW5jeVBvbGljeURldk9ubHkgPSAodmFsdWU6IHVua25vd24sIGxhYmVsOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFpc0RldkVudigpKSByZXR1cm5cbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVyblxuXG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgd2FybkRldk9ubHkobGFiZWwsIFsnZXhwZWN0ZWQgb2JqZWN0J10pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwb2xpY3kgPSB2YWx1ZVxuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cblxuICBpc3N1ZXMucHVzaChcbiAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICBwb2xpY3ksXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgJ2NvbmN1cnJlbmN5TGltaXQnLFxuICAgICAgICAnbG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eScsXG4gICAgICAgICdhbGxvd1VuYm91bmRlZCcsXG4gICAgICAgICdwcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQnLFxuICAgICAgICAnd2FybmluZ0Nvb2xkb3duTXMnLFxuICAgICAgICAnb3ZlcnJpZGVzQnlNb2R1bGVJZCcsXG4gICAgICBdKSxcbiAgICAgICcnLFxuICAgICksXG4gIClcblxuICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZUNvbmN1cnJlbmN5UG9saWN5UGF0Y2gocG9saWN5LCAnJykpXG5cbiAgY29uc3Qgb3ZlcnJpZGVzQnlNb2R1bGVJZCA9IHBvbGljeS5vdmVycmlkZXNCeU1vZHVsZUlkXG4gIGlmIChvdmVycmlkZXNCeU1vZHVsZUlkICE9IG51bGwpIHtcbiAgICBpZiAoIWlzUmVjb3JkKG92ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgb3ZlcnJpZGVzQnlNb2R1bGVJZDogZXhwZWN0ZWQgcmVjb3JkYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbbW9kdWxlSWQsIHBhdGNoXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgb3ZlcnJpZGVzQnlNb2R1bGVJZC4ke21vZHVsZUlkfS5gXG4gICAgICAgIGlmIChwYXRjaCA9PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAoIWlzUmVjb3JkKHBhdGNoKSkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH08dmFsdWU+OiBleHBlY3RlZCBvYmplY3RgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaXNzdWVzLnB1c2goXG4gICAgICAgICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgICAgICAgcGF0Y2gsXG4gICAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgICAgJ2NvbmN1cnJlbmN5TGltaXQnLFxuICAgICAgICAgICAgICAnbG9zc2xlc3NCYWNrcHJlc3N1cmVDYXBhY2l0eScsXG4gICAgICAgICAgICAgICdhbGxvd1VuYm91bmRlZCcsXG4gICAgICAgICAgICAgICdwcmVzc3VyZVdhcm5pbmdUaHJlc2hvbGQnLFxuICAgICAgICAgICAgICAnd2FybmluZ0Nvb2xkb3duTXMnLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZUNvbmN1cnJlbmN5UG9saWN5UGF0Y2gocGF0Y2gsIHByZWZpeCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkRldk9ubHkobGFiZWwsIGlzc3Vlcylcbn1cblxuZXhwb3J0IGNvbnN0IHdhcm5JbnZhbGlkQ29uY3VycmVuY3lQb2xpY3lQYXRjaERldk9ubHkgPSAodmFsdWU6IHVua25vd24sIGxhYmVsOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFpc0RldkVudigpKSByZXR1cm5cbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVyblxuICBpZiAoIWlzUmVjb3JkKHZhbHVlKSkge1xuICAgIHdhcm5EZXZPbmx5KGxhYmVsLCBbJ2V4cGVjdGVkIG9iamVjdCddKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdXG4gIGlzc3Vlcy5wdXNoKFxuICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgIHZhbHVlLFxuICAgICAgbmV3IFNldChbXG4gICAgICAgICdjb25jdXJyZW5jeUxpbWl0JyxcbiAgICAgICAgJ2xvc3NsZXNzQmFja3ByZXNzdXJlQ2FwYWNpdHknLFxuICAgICAgICAnYWxsb3dVbmJvdW5kZWQnLFxuICAgICAgICAncHJlc3N1cmVXYXJuaW5nVGhyZXNob2xkJyxcbiAgICAgICAgJ3dhcm5pbmdDb29sZG93bk1zJyxcbiAgICAgIF0pLFxuICAgICAgJycsXG4gICAgKSxcbiAgKVxuICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZUNvbmN1cnJlbmN5UG9saWN5UGF0Y2godmFsdWUsICcnKSlcblxuICB3YXJuRGV2T25seShsYWJlbCwgaXNzdWVzKVxufVxuXG5jb25zdCB2YWxpZGF0ZVN0YXRlVHJhbnNhY3Rpb25UcmFpdE92ZXJyaWRlcyA9IChcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcHJlZml4OiBzdHJpbmcsXG4pOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT4ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cblxuICBpZiAoJ3RyYWl0Q29udmVyZ2VNb2RlJyBpbiBvYmogJiYgb2JqLnRyYWl0Q29udmVyZ2VNb2RlICE9IG51bGwpIHtcbiAgICBpZiAoIVNjaGVtYS5pcyhDb252ZXJnZU1vZGVTY2hlbWEpKG9iai50cmFpdENvbnZlcmdlTW9kZSkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH10cmFpdENvbnZlcmdlTW9kZTogZXhwZWN0ZWQgXCJhdXRvXCIgfCBcImZ1bGxcIiB8IFwiZGlydHlcImApXG4gICAgfVxuICB9XG4gIGlmICgndHJhaXRDb252ZXJnZUJ1ZGdldE1zJyBpbiBvYmogJiYgb2JqLnRyYWl0Q29udmVyZ2VCdWRnZXRNcyAhPSBudWxsKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlTnVtYmVyKG9iai50cmFpdENvbnZlcmdlQnVkZ2V0TXMpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH10cmFpdENvbnZlcmdlQnVkZ2V0TXM6IGV4cGVjdGVkIHBvc2l0aXZlIG51bWJlcmApXG4gICAgfVxuICB9XG4gIGlmICgndHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMnIGluIG9iaiAmJiBvYmoudHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVQb3NpdGl2ZU51bWJlcihvYmoudHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH10cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNczogZXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyYClcbiAgICB9XG4gIH1cbiAgaWYgKCd0cmFpdENvbnZlcmdlVGltZVNsaWNpbmcnIGluIG9iaiAmJiBvYmoudHJhaXRDb252ZXJnZVRpbWVTbGljaW5nICE9IG51bGwpIHtcbiAgICBjb25zdCB0aW1lU2xpY2luZyA9IG9iai50cmFpdENvbnZlcmdlVGltZVNsaWNpbmdcbiAgICBpZiAoIWlzUmVjb3JkKHRpbWVTbGljaW5nKSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fXRyYWl0Q29udmVyZ2VUaW1lU2xpY2luZzogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHNQcmVmaXggPSBgJHtwcmVmaXh9dHJhaXRDb252ZXJnZVRpbWVTbGljaW5nLmBcbiAgICAgIGlzc3Vlcy5wdXNoKC4uLmNvbGxlY3RVbmtub3duS2V5cyh0aW1lU2xpY2luZywgbmV3IFNldChbJ2VuYWJsZWQnLCAnZGVib3VuY2VNcycsICdtYXhMYWdNcyddKSwgdHNQcmVmaXgpKVxuXG4gICAgICBpZiAoJ2VuYWJsZWQnIGluIHRpbWVTbGljaW5nICYmIHRpbWVTbGljaW5nLmVuYWJsZWQgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHRpbWVTbGljaW5nLmVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3RzUHJlZml4fWVuYWJsZWQ6IGV4cGVjdGVkIGJvb2xlYW5gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoJ2RlYm91bmNlTXMnIGluIHRpbWVTbGljaW5nICYmIHRpbWVTbGljaW5nLmRlYm91bmNlTXMgIT0gbnVsbCkge1xuICAgICAgICBpZiAobm9ybWFsaXplUG9zaXRpdmVOdW1iZXIodGltZVNsaWNpbmcuZGVib3VuY2VNcykgPT0gbnVsbCkge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKGAke3RzUHJlZml4fWRlYm91bmNlTXM6IGV4cGVjdGVkIHBvc2l0aXZlIG51bWJlcmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgnbWF4TGFnTXMnIGluIHRpbWVTbGljaW5nICYmIHRpbWVTbGljaW5nLm1heExhZ01zICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZVBvc2l0aXZlTnVtYmVyKHRpbWVTbGljaW5nLm1heExhZ01zKSA9PSBudWxsKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7dHNQcmVmaXh9bWF4TGFnTXM6IGV4cGVjdGVkIHBvc2l0aXZlIG51bWJlcmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNzdWVzXG59XG5cbmNvbnN0IHZhbGlkYXRlVHhuTGFuZXNQYXRjaCA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmVmaXg6IHN0cmluZyk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuXG4gIGlmICgnZW5hYmxlZCcgaW4gb2JqICYmIG9iai5lbmFibGVkICE9IG51bGwpIHtcbiAgICBpZiAobm9ybWFsaXplQm9vbGVhbihvYmouZW5hYmxlZCkgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fWVuYWJsZWQ6IGV4cGVjdGVkIGJvb2xlYW5gKVxuICAgIH1cbiAgfVxuXG4gIGlmICgnb3ZlcnJpZGVNb2RlJyBpbiBvYmogJiYgb2JqLm92ZXJyaWRlTW9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgcmF3ID0gb2JqLm92ZXJyaWRlTW9kZVxuICAgIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJyB8fCAocmF3ICE9PSAnZm9yY2VkX29mZicgJiYgcmF3ICE9PSAnZm9yY2VkX3N5bmMnKSkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fW92ZXJyaWRlTW9kZTogZXhwZWN0ZWQgXCJmb3JjZWRfb2ZmXCIgfCBcImZvcmNlZF9zeW5jXCJgKVxuICAgIH1cbiAgfVxuXG4gIGlmICgnYnVkZ2V0TXMnIGluIG9iaiAmJiBvYmouYnVkZ2V0TXMgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVOb25OZWdhdGl2ZU51bWJlcihvYmouYnVkZ2V0TXMpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1idWRnZXRNczogZXhwZWN0ZWQgbm9uLW5lZ2F0aXZlIG51bWJlcmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdkZWJvdW5jZU1zJyBpbiBvYmogJiYgb2JqLmRlYm91bmNlTXMgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVOb25OZWdhdGl2ZU51bWJlcihvYmouZGVib3VuY2VNcykgPT0gbnVsbCkge1xuICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fWRlYm91bmNlTXM6IGV4cGVjdGVkIG5vbi1uZWdhdGl2ZSBudW1iZXJgKVxuICAgIH1cbiAgfVxuXG4gIGlmICgnbWF4TGFnTXMnIGluIG9iaiAmJiBvYmoubWF4TGFnTXMgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVOb25OZWdhdGl2ZU51bWJlcihvYmoubWF4TGFnTXMpID09IG51bGwpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH1tYXhMYWdNczogZXhwZWN0ZWQgbm9uLW5lZ2F0aXZlIG51bWJlcmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCdhbGxvd0NvYWxlc2NlJyBpbiBvYmogJiYgb2JqLmFsbG93Q29hbGVzY2UgIT0gbnVsbCkge1xuICAgIGlmIChub3JtYWxpemVCb29sZWFuKG9iai5hbGxvd0NvYWxlc2NlKSA9PSBudWxsKSB7XG4gICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9YWxsb3dDb2FsZXNjZTogZXhwZWN0ZWQgYm9vbGVhbmApXG4gICAgfVxuICB9XG5cbiAgaWYgKCd5aWVsZFN0cmF0ZWd5JyBpbiBvYmogJiYgb2JqLnlpZWxkU3RyYXRlZ3kgIT0gbnVsbCkge1xuICAgIGNvbnN0IHJhdyA9IG9iai55aWVsZFN0cmF0ZWd5XG4gICAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnIHx8IChyYXcgIT09ICdiYXNlbGluZScgJiYgcmF3ICE9PSAnaW5wdXRQZW5kaW5nJykpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGAke3ByZWZpeH15aWVsZFN0cmF0ZWd5OiBleHBlY3RlZCBcImJhc2VsaW5lXCIgfCBcImlucHV0UGVuZGluZ1wiYClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNzdWVzXG59XG5cbmV4cG9ydCBjb25zdCB3YXJuSW52YWxpZFN0YXRlVHJhbnNhY3Rpb25UcmFpdENvbnZlcmdlT3ZlcnJpZGVzRGV2T25seSA9ICh2YWx1ZTogdW5rbm93biwgbGFiZWw6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuXG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgd2FybkRldk9ubHkobGFiZWwsIFsnZXhwZWN0ZWQgb2JqZWN0J10pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW11cbiAgaXNzdWVzLnB1c2goXG4gICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgdmFsdWUsXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VCdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlTW9kZScsXG4gICAgICAgICd0cmFpdENvbnZlcmdlVGltZVNsaWNpbmcnLFxuICAgICAgXSksXG4gICAgICAnJyxcbiAgICApLFxuICApXG4gIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlU3RhdGVUcmFuc2FjdGlvblRyYWl0T3ZlcnJpZGVzKHZhbHVlLCAnJykpXG5cbiAgd2FybkRldk9ubHkobGFiZWwsIGlzc3Vlcylcbn1cblxuZXhwb3J0IGNvbnN0IHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvblJ1bnRpbWVDb25maWdEZXZPbmx5ID0gKHZhbHVlOiB1bmtub3duLCBsYWJlbDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGlmICghaXNEZXZFbnYoKSkgcmV0dXJuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm5cbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHtcbiAgICB3YXJuRGV2T25seShsYWJlbCwgWydleHBlY3RlZCBvYmplY3QnXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXVxuICBpc3N1ZXMucHVzaChcbiAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICB2YWx1ZSxcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAnaW5zdHJ1bWVudGF0aW9uJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VCdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlRGVjaXNpb25CdWRnZXRNcycsXG4gICAgICAgICd0cmFpdENvbnZlcmdlTW9kZScsXG4gICAgICAgICd0cmFpdENvbnZlcmdlVGltZVNsaWNpbmcnLFxuICAgICAgICAndHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQnLFxuICAgICAgICAndHhuTGFuZXMnLFxuICAgICAgICAndHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkJyxcbiAgICAgIF0pLFxuICAgICAgJycsXG4gICAgKSxcbiAgKVxuXG4gIGlmICgnaW5zdHJ1bWVudGF0aW9uJyBpbiB2YWx1ZSAmJiB2YWx1ZS5pbnN0cnVtZW50YXRpb24gIT0gbnVsbCkge1xuICAgIGlmICghU2NoZW1hLmlzKEluc3RydW1lbnRhdGlvblNjaGVtYSkodmFsdWUuaW5zdHJ1bWVudGF0aW9uKSkge1xuICAgICAgaXNzdWVzLnB1c2goYGluc3RydW1lbnRhdGlvbjogZXhwZWN0ZWQgXCJmdWxsXCIgfCBcImxpZ2h0XCJgKVxuICAgIH1cbiAgfVxuXG4gIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlU3RhdGVUcmFuc2FjdGlvblRyYWl0T3ZlcnJpZGVzKHZhbHVlLCAnJykpXG5cbiAgY29uc3QgdHhuTGFuZXMgPSAodmFsdWUgYXMgYW55KS50eG5MYW5lc1xuICBpZiAodHhuTGFuZXMgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQodHhuTGFuZXMpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgdHhuTGFuZXM6IGV4cGVjdGVkIG9iamVjdGApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICd0eG5MYW5lcy4nXG4gICAgICBpc3N1ZXMucHVzaChcbiAgICAgICAgLi4uY29sbGVjdFVua25vd25LZXlzKFxuICAgICAgICAgIHR4bkxhbmVzLFxuICAgICAgICAgIG5ldyBTZXQoWydlbmFibGVkJywgJ292ZXJyaWRlTW9kZScsICdidWRnZXRNcycsICdkZWJvdW5jZU1zJywgJ21heExhZ01zJywgJ2FsbG93Q29hbGVzY2UnLCAneWllbGRTdHJhdGVneSddKSxcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZVR4bkxhbmVzUGF0Y2godHhuTGFuZXMsIHByZWZpeCkpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3ZlcnJpZGVzQnlNb2R1bGVJZCA9IHZhbHVlLnRyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkXG4gIGlmIChvdmVycmlkZXNCeU1vZHVsZUlkICE9IG51bGwpIHtcbiAgICBpZiAoIWlzUmVjb3JkKG92ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgdHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQ6IGV4cGVjdGVkIHJlY29yZGApXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgW21vZHVsZUlkLCBwYXRjaF0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYHRyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkLiR7bW9kdWxlSWR9LmBcbiAgICAgICAgaWYgKHBhdGNoID09IG51bGwpIGNvbnRpbnVlXG4gICAgICAgIGlmICghaXNSZWNvcmQocGF0Y2gpKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fTx2YWx1ZT46IGV4cGVjdGVkIG9iamVjdGApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpc3N1ZXMucHVzaChcbiAgICAgICAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICAgICAgICBwYXRjaCxcbiAgICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZU1vZGUnLFxuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZUJ1ZGdldE1zJyxcbiAgICAgICAgICAgICAgJ3RyYWl0Q29udmVyZ2VEZWNpc2lvbkJ1ZGdldE1zJyxcbiAgICAgICAgICAgICAgJ3RyYWl0Q29udmVyZ2VUaW1lU2xpY2luZycsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlU3RhdGVUcmFuc2FjdGlvblRyYWl0T3ZlcnJpZGVzKHBhdGNoLCBwcmVmaXgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZCA9ICh2YWx1ZSBhcyBhbnkpLnR4bkxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZFxuICBpZiAobGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkICE9IG51bGwpIHtcbiAgICBpZiAoIWlzUmVjb3JkKGxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGB0eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQ6IGV4cGVjdGVkIHJlY29yZGApXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgW21vZHVsZUlkLCBwYXRjaF0gb2YgT2JqZWN0LmVudHJpZXMobGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgdHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkLiR7bW9kdWxlSWR9LmBcbiAgICAgICAgaWYgKHBhdGNoID09IG51bGwpIGNvbnRpbnVlXG4gICAgICAgIGlmICghaXNSZWNvcmQocGF0Y2gpKSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goYCR7cHJlZml4fTx2YWx1ZT46IGV4cGVjdGVkIG9iamVjdGApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpc3N1ZXMucHVzaChcbiAgICAgICAgICAuLi5jb2xsZWN0VW5rbm93bktleXMoXG4gICAgICAgICAgICBwYXRjaCxcbiAgICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgICAnZW5hYmxlZCcsXG4gICAgICAgICAgICAgICdvdmVycmlkZU1vZGUnLFxuICAgICAgICAgICAgICAnYnVkZ2V0TXMnLFxuICAgICAgICAgICAgICAnZGVib3VuY2VNcycsXG4gICAgICAgICAgICAgICdtYXhMYWdNcycsXG4gICAgICAgICAgICAgICdhbGxvd0NvYWxlc2NlJyxcbiAgICAgICAgICAgICAgJ3lpZWxkU3RyYXRlZ3knLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZVR4bkxhbmVzUGF0Y2gocGF0Y2gsIHByZWZpeCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkRldk9ubHkobGFiZWwsIGlzc3Vlcylcbn1cblxuZXhwb3J0IGNvbnN0IHdhcm5JbnZhbGlkU3RhdGVUcmFuc2FjdGlvbk92ZXJyaWRlc0Rldk9ubHkgPSAodmFsdWU6IHVua25vd24sIGxhYmVsOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFpc0RldkVudigpKSByZXR1cm5cbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVyblxuICBpZiAoIWlzUmVjb3JkKHZhbHVlKSkge1xuICAgIHdhcm5EZXZPbmx5KGxhYmVsLCBbJ2V4cGVjdGVkIG9iamVjdCddKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdXG4gIGlzc3Vlcy5wdXNoKFxuICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgIHZhbHVlLFxuICAgICAgbmV3IFNldChbXG4gICAgICAgICd0cmFpdENvbnZlcmdlQnVkZ2V0TXMnLFxuICAgICAgICAndHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMnLFxuICAgICAgICAndHJhaXRDb252ZXJnZU1vZGUnLFxuICAgICAgICAndHJhaXRDb252ZXJnZVRpbWVTbGljaW5nJyxcbiAgICAgICAgJ3RyYWl0Q29udmVyZ2VPdmVycmlkZXNCeU1vZHVsZUlkJyxcbiAgICAgICAgJ3R4bkxhbmVzJyxcbiAgICAgICAgJ3R4bkxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZCcsXG4gICAgICBdKSxcbiAgICAgICcnLFxuICAgICksXG4gIClcblxuICBpc3N1ZXMucHVzaCguLi52YWxpZGF0ZVN0YXRlVHJhbnNhY3Rpb25UcmFpdE92ZXJyaWRlcyh2YWx1ZSwgJycpKVxuXG4gIGNvbnN0IHR4bkxhbmVzID0gKHZhbHVlIGFzIGFueSkudHhuTGFuZXNcbiAgaWYgKHR4bkxhbmVzICE9IG51bGwpIHtcbiAgICBpZiAoIWlzUmVjb3JkKHR4bkxhbmVzKSkge1xuICAgICAgaXNzdWVzLnB1c2goYHR4bkxhbmVzOiBleHBlY3RlZCBvYmplY3RgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAndHhuTGFuZXMuJ1xuICAgICAgaXNzdWVzLnB1c2goXG4gICAgICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgICAgICB0eG5MYW5lcyxcbiAgICAgICAgICBuZXcgU2V0KFsnZW5hYmxlZCcsICdvdmVycmlkZU1vZGUnLCAnYnVkZ2V0TXMnLCAnZGVib3VuY2VNcycsICdtYXhMYWdNcycsICdhbGxvd0NvYWxlc2NlJ10pLFxuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlVHhuTGFuZXNQYXRjaCh0eG5MYW5lcywgcHJlZml4KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvdmVycmlkZXNCeU1vZHVsZUlkID0gdmFsdWUudHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWRcbiAgaWYgKG92ZXJyaWRlc0J5TW9kdWxlSWQgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQob3ZlcnJpZGVzQnlNb2R1bGVJZCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGB0cmFpdENvbnZlcmdlT3ZlcnJpZGVzQnlNb2R1bGVJZDogZXhwZWN0ZWQgcmVjb3JkYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbbW9kdWxlSWQsIHBhdGNoXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgdHJhaXRDb252ZXJnZU92ZXJyaWRlc0J5TW9kdWxlSWQuJHttb2R1bGVJZH0uYFxuICAgICAgICBpZiAocGF0Y2ggPT0gbnVsbCkgY29udGludWVcbiAgICAgICAgaWYgKCFpc1JlY29yZChwYXRjaCkpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9PHZhbHVlPjogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgICAgICAgIHBhdGNoLFxuICAgICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlTW9kZScsXG4gICAgICAgICAgICAgICd0cmFpdENvbnZlcmdlQnVkZ2V0TXMnLFxuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZURlY2lzaW9uQnVkZ2V0TXMnLFxuICAgICAgICAgICAgICAndHJhaXRDb252ZXJnZVRpbWVTbGljaW5nJyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgaXNzdWVzLnB1c2goLi4udmFsaWRhdGVTdGF0ZVRyYW5zYWN0aW9uVHJhaXRPdmVycmlkZXMocGF0Y2gsIHByZWZpeCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkID0gKHZhbHVlIGFzIGFueSkudHhuTGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkXG4gIGlmIChsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQgIT0gbnVsbCkge1xuICAgIGlmICghaXNSZWNvcmQobGFuZXNPdmVycmlkZXNCeU1vZHVsZUlkKSkge1xuICAgICAgaXNzdWVzLnB1c2goYHR4bkxhbmVzT3ZlcnJpZGVzQnlNb2R1bGVJZDogZXhwZWN0ZWQgcmVjb3JkYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbbW9kdWxlSWQsIHBhdGNoXSBvZiBPYmplY3QuZW50cmllcyhsYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQpKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGB0eG5MYW5lc092ZXJyaWRlc0J5TW9kdWxlSWQuJHttb2R1bGVJZH0uYFxuICAgICAgICBpZiAocGF0Y2ggPT0gbnVsbCkgY29udGludWVcbiAgICAgICAgaWYgKCFpc1JlY29yZChwYXRjaCkpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaChgJHtwcmVmaXh9PHZhbHVlPjogZXhwZWN0ZWQgb2JqZWN0YClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICAgIC4uLmNvbGxlY3RVbmtub3duS2V5cyhcbiAgICAgICAgICAgIHBhdGNoLFxuICAgICAgICAgICAgbmV3IFNldChbJ2VuYWJsZWQnLCAnb3ZlcnJpZGVNb2RlJywgJ2J1ZGdldE1zJywgJ2RlYm91bmNlTXMnLCAnbWF4TGFnTXMnLCAnYWxsb3dDb2FsZXNjZSddKSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIGlzc3Vlcy5wdXNoKC4uLnZhbGlkYXRlVHhuTGFuZXNQYXRjaChwYXRjaCwgcHJlZml4KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3YXJuRGV2T25seShsYWJlbCwgaXNzdWVzKVxufVxuIiwgImltcG9ydCB7IENhdXNlLCBFZmZlY3QsIEZpYmVyUmVmLCBPcHRpb24sIFNjb3BlIH0gZnJvbSAnZWZmZWN0J1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkUnVudGltZSB9IGZyb20gJ2VmZmVjdCdcbmltcG9ydCB0eXBlIHsgQW55TW9kdWxlU2hhcGUsIE1vZHVsZUltcGwgfSBmcm9tICcuLi9tb2R1bGUuanMnXG5pbXBvcnQgeyBtYWtlIGFzIG1ha2VCb3VuZEFwaSB9IGZyb20gJy4uL0JvdW5kQXBpUnVudGltZS5qcydcbmltcG9ydCAqIGFzIFRhc2tSdW5uZXIgZnJvbSAnLi4vVGFza1J1bm5lci5qcydcbmltcG9ydCB7IGNsb3NlUHJvZ3JhbVNjb3BlIH0gZnJvbSAnLi9Qcm9ncmFtUnVubmVyLmNsb3NlU2NvcGUuanMnXG5pbXBvcnQgeyBCb290RXJyb3IsIE1haW5FcnJvciwgdHlwZSBQcm9ncmFtSWRlbnRpdHkgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIuZXJyb3JzLmpzJ1xuaW1wb3J0IHsgcmVwb3J0RXJyb3JJZkVuYWJsZWQsIHNldEV4aXRDb2RlSWZFbmFibGVkLCBzZXRGYWlsdXJlRXhpdENvZGVJZkVuYWJsZWQgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIuZXhpdENvZGUuanMnXG5pbXBvcnQgeyBpbnN0YWxsR3JhY2VmdWxTaHV0ZG93bkhhbmRsZXJzIH0gZnJvbSAnLi9Qcm9ncmFtUnVubmVyLnNpZ25hbHMuanMnXG5pbXBvcnQgdHlwZSB7IFByb2dyYW1SdW5Db250ZXh0IH0gZnJvbSAnLi9Qcm9ncmFtUnVubmVyLmNvbnRleHQuanMnXG5pbXBvcnQgeyBtYWtlUHJvZ3JhbVJ1bm5lcktlcm5lbCB9IGZyb20gJy4vUHJvZ3JhbVJ1bm5lci5rZXJuZWwuanMnXG5pbXBvcnQgeyByZXNvbHZlUHJvZ3JhbVJ1bm5lck9wdGlvbnMgfSBmcm9tICcuL1Byb2dyYW1SdW5uZXIub3B0aW9ucy5qcydcblxuZXhwb3J0IHR5cGUgUnVudGltZUZhY3RvcnkgPSAoXG4gIHJvb3RJbXBsOiBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4sXG4gIG9wdGlvbnM/OiB1bmtub3duLFxuKSA9PiBNYW5hZ2VkUnVudGltZS5NYW5hZ2VkUnVudGltZTxhbnksIG5ldmVyPlxuXG5leHBvcnQgY29uc3Qgb3BlblByb2dyYW0gPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIG1ha2VSdW50aW1lOiBSdW50aW1lRmFjdG9yeSxcbiAgcm9vdEltcGw6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PixcbiAgb3B0aW9ucz86IHVua25vd24sXG4pOiBFZmZlY3QuRWZmZWN0PFByb2dyYW1SdW5Db250ZXh0PFNoPiwgdW5rbm93biwgU2NvcGUuU2NvcGU+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBpblR4biA9IHlpZWxkKiBGaWJlclJlZi5nZXQoVGFza1J1bm5lci5pblN5bmNUcmFuc2FjdGlvbkZpYmVyKVxuICAgIGlmIChpblR4bikge1xuICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZGllTWVzc2FnZShcbiAgICAgICAgJ1tMb2dpeF0gUnVudGltZS5vcGVuUHJvZ3JhbS9ydW5Qcm9ncmFtIGlzIG5vdCBhbGxvd2VkIGluc2lkZSBhIHN5bmNocm9ub3VzIFN0YXRlVHJhbnNhY3Rpb24gYm9keScsXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyT3B0aW9ucyA9IHJlc29sdmVQcm9ncmFtUnVubmVyT3B0aW9ucyhvcHRpb25zKVxuICAgIGNvbnN0IGtlcm5lbCA9IHlpZWxkKiBtYWtlUHJvZ3JhbVJ1bm5lcktlcm5lbChtYWtlUnVudGltZSwgcm9vdEltcGwsIG9wdGlvbnMpXG5cbiAgICAvLyBCaW5kIGN0eC5zY29wZSBkaXNwb3NhbCB0byB0aGUgb3V0ZXIgc2NvcGUgKG9wZW5Qcm9ncmFtIGlzIHNjb3BlLWJvdW5kKS5cbiAgICB5aWVsZCogRWZmZWN0LmFkZEZpbmFsaXplcigoKSA9PlxuICAgICAga2VybmVsLmNsb3NlKHtcbiAgICAgICAgdGltZW91dE1zOiBydW5uZXJPcHRpb25zLmNsb3NlU2NvcGVUaW1lb3V0LFxuICAgICAgICBvbkVycm9yOiAob3B0aW9ucyBhcyBhbnkpPy5vbkVycm9yLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gTm9kZS1vbmx5OiBzaWduYWxzIHRyaWdnZXIgZ3JhY2VmdWwgc2h1dGRvd24gKGNsb3NpbmcgY3R4LnNjb3BlKS5cbiAgICB5aWVsZCoga2VybmVsLmluc3RhbGxTaWduYWxzKHJ1bm5lck9wdGlvbnMuaGFuZGxlU2lnbmFscylcblxuICAgIC8vIGJvb3Q6IHRvdWNoIHRoZSBwcm9ncmFtIG1vZHVsZSB0YWcgdG8gZW5zdXJlIGluc3RhbnRpYXRpb24gYW5kIGxvZ2ljcy9wcm9jZXNzZXMgc3RhcnQuXG4gICAgY29uc3QgbW9kdWxlUnVudGltZSA9IHlpZWxkKiBFZmZlY3QudHJ5UHJvbWlzZSh7XG4gICAgICB0cnk6ICgpID0+IGtlcm5lbC5ydW50aW1lLnJ1blByb21pc2Uocm9vdEltcGwubW9kdWxlIGFzIGFueSksXG4gICAgICBjYXRjaDogKGVycm9yKSA9PiBuZXcgQm9vdEVycm9yKGtlcm5lbC5pZGVudGl0eSwgZXJyb3IpLFxuICAgIH0pXG5cbiAgICBrZXJuZWwuc2V0SW5zdGFuY2VJZCgobW9kdWxlUnVudGltZSBhcyBhbnkpLmluc3RhbmNlSWQpXG4gICAgcmV0dXJuIGtlcm5lbC50b0NvbnRleHQobW9kdWxlUnVudGltZSlcbiAgfSlcblxuZXhwb3J0IGNvbnN0IHJ1blByb2dyYW0gPSBhc3luYyA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgQXJncywgQSwgRSwgUj4oXG4gIG1ha2VSdW50aW1lOiBSdW50aW1lRmFjdG9yeSxcbiAgcm9vdEltcGw6IE1vZHVsZUltcGw8YW55LCBTaCwgYW55PixcbiAgbWFpbjogKGN0eDogUHJvZ3JhbVJ1bkNvbnRleHQ8U2g+LCBhcmdzOiBBcmdzKSA9PiBFZmZlY3QuRWZmZWN0PEEsIEUsIFI+LFxuICBvcHRpb25zPzogdW5rbm93bixcbik6IFByb21pc2U8QT4gPT4ge1xuICBpZiAoVGFza1J1bm5lci5pc0luU3luY1RyYW5zYWN0aW9uKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tMb2dpeF0gUnVudGltZS5vcGVuUHJvZ3JhbS9ydW5Qcm9ncmFtIGlzIG5vdCBhbGxvd2VkIGluc2lkZSBhIHN5bmNocm9ub3VzIFN0YXRlVHJhbnNhY3Rpb24gYm9keScpXG4gIH1cblxuICBjb25zdCBydW5uZXJPcHRpb25zID0gcmVzb2x2ZVByb2dyYW1SdW5uZXJPcHRpb25zPEFyZ3M+KG9wdGlvbnMpXG4gIGNvbnN0IGlkZW50aXR5OiBQcm9ncmFtSWRlbnRpdHkgPSB7XG4gICAgbW9kdWxlSWQ6IFN0cmluZyhyb290SW1wbC5tb2R1bGUuaWQpLFxuICAgIGluc3RhbmNlSWQ6ICd1bmtub3duJyxcbiAgfVxuXG4gIGNvbnN0IHNjb3BlID0gRWZmZWN0LnJ1blN5bmMoU2NvcGUubWFrZSgpKVxuICBjb25zdCBydW50aW1lID0gbWFrZVJ1bnRpbWUocm9vdEltcGwgYXMgdW5rbm93biBhcyBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4sIG9wdGlvbnMpXG5cbiAgbGV0IGN0eDpcbiAgICB8IChQcm9ncmFtUnVuQ29udGV4dDxTaD4gJiB7XG4gICAgICAgIHJlYWRvbmx5IG1vZHVsZTogeyByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmcgfVxuICAgICAgfSlcbiAgICB8IHVuZGVmaW5lZFxuICBsZXQgbWFpbkVycm9yOiB1bmtub3duIHwgdW5kZWZpbmVkXG4gIGxldCBjbG9zZUVycm9yOiB1bmtub3duIHwgdW5kZWZpbmVkXG4gIGxldCByZXN1bHQ6XG4gICAgfCB7IHJlYWRvbmx5IF90YWc6ICdzdWNjZXNzJzsgcmVhZG9ubHkgdmFsdWU6IEEgfVxuICAgIHwgeyByZWFkb25seSBfdGFnOiAnZmFpbHVyZSc7IHJlYWRvbmx5IGVycm9yOiB1bmtub3duIH1cbiAgICB8IHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgLy8gUnVudGltZSByZXNvdXJjZSBkaXNwb3NhbDogYmluZCBydW50aW1lLmRpc3Bvc2UgdG8gY3R4LnNjb3BlLlxuICAgIEVmZmVjdC5ydW5TeW5jKFNjb3BlLmFkZEZpbmFsaXplcihzY29wZSwgRWZmZWN0LnByb21pc2UoKCkgPT4gcnVudGltZS5kaXNwb3NlKCkpLnBpcGUoRWZmZWN0LmFzVm9pZCkpKVxuXG4gICAgLy8gTm9kZS1vbmx5OiBzaWduYWxzIHRyaWdnZXIgZ3JhY2VmdWwgc2h1dGRvd24gKGNsb3NpbmcgY3R4LnNjb3BlKS5cbiAgICBpZiAocnVubmVyT3B0aW9ucy5oYW5kbGVTaWduYWxzKSB7XG4gICAgICBFZmZlY3QucnVuU3luYyhcbiAgICAgICAgaW5zdGFsbEdyYWNlZnVsU2h1dGRvd25IYW5kbGVycyh7XG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gYm9vdDogdG91Y2ggdGhlIHByb2dyYW0gbW9kdWxlIHRhZyB0byBlbnN1cmUgaW5zdGFudGlhdGlvbiBhbmQgbG9naWNzL3Byb2Nlc3NlcyBzdGFydC5cbiAgICBsZXQgbW9kdWxlUnVudGltZTogYW55XG4gICAgdHJ5IHtcbiAgICAgIG1vZHVsZVJ1bnRpbWUgPSBhd2FpdCBydW50aW1lLnJ1blByb21pc2Uocm9vdEltcGwubW9kdWxlIGFzIGFueSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0RmFpbHVyZUV4aXRDb2RlSWZFbmFibGVkKHJ1bm5lck9wdGlvbnMuZXhpdENvZGUpXG4gICAgICByZXBvcnRFcnJvcklmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlICYmIHJ1bm5lck9wdGlvbnMucmVwb3J0RXJyb3IsIGVycm9yKVxuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBfdGFnOiAnZmFpbHVyZScsXG4gICAgICAgIGVycm9yOiBuZXcgQm9vdEVycm9yKGlkZW50aXR5LCBlcnJvciksXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdD8uX3RhZyAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICBpZGVudGl0eS5pbnN0YW5jZUlkID0gU3RyaW5nKG1vZHVsZVJ1bnRpbWUuaW5zdGFuY2VJZCA/PyAndW5rbm93bicpXG5cbiAgICAgIGN0eCA9IHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHJ1bnRpbWUsXG4gICAgICAgIG1vZHVsZTogbW9kdWxlUnVudGltZSxcbiAgICAgICAgJDogbWFrZUJvdW5kQXBpKHJvb3RJbXBsLm1vZHVsZS5zaGFwZSBhcyBhbnksIG1vZHVsZVJ1bnRpbWUgYXMgYW55KSBhcyBhbnksXG4gICAgICB9IHNhdGlzZmllcyBQcm9ncmFtUnVuQ29udGV4dDxTaD4gYXMgYW55XG4gICAgfVxuXG4gICAgaWYgKGN0eCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoYXdhaXQgY3R4LnJ1bnRpbWUucnVuUHJvbWlzZShtYWluKGN0eCwgcnVubmVyT3B0aW9ucy5hcmdzIGFzIEFyZ3MpIGFzIGFueSkpIGFzIEFcbiAgICAgICAgc2V0RXhpdENvZGVJZkVuYWJsZWQocnVubmVyT3B0aW9ucy5leGl0Q29kZSwgdmFsdWUpXG4gICAgICAgIHJlc3VsdCA9IHsgX3RhZzogJ3N1Y2Nlc3MnLCB2YWx1ZSB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBtYWluRXJyb3IgPSBlcnJvclxuICAgICAgICBzZXRGYWlsdXJlRXhpdENvZGVJZkVuYWJsZWQocnVubmVyT3B0aW9ucy5leGl0Q29kZSlcbiAgICAgICAgcmVwb3J0RXJyb3JJZkVuYWJsZWQocnVubmVyT3B0aW9ucy5leGl0Q29kZSAmJiBydW5uZXJPcHRpb25zLnJlcG9ydEVycm9yLCBlcnJvcilcbiAgICAgICAgcmVzdWx0ID0geyBfdGFnOiAnZmFpbHVyZScsIGVycm9yOiBuZXcgTWFpbkVycm9yKGlkZW50aXR5LCBlcnJvcikgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCBleGl0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2VFeGl0KFxuICAgICAgY2xvc2VQcm9ncmFtU2NvcGUoe1xuICAgICAgICBzY29wZSxcbiAgICAgICAgdGltZW91dE1zOiBydW5uZXJPcHRpb25zLmNsb3NlU2NvcGVUaW1lb3V0LFxuICAgICAgICBpZGVudGl0eSxcbiAgICAgICAgb25FcnJvcjogKG9wdGlvbnMgYXMgYW55KT8ub25FcnJvcixcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGlmIChleGl0Ll90YWcgPT09ICdGYWlsdXJlJykge1xuICAgICAgY29uc3QgZmFpbHVyZU9wdCA9IENhdXNlLmZhaWx1cmVPcHRpb24oZXhpdC5jYXVzZSlcbiAgICAgIGlmIChPcHRpb24uaXNTb21lKGZhaWx1cmVPcHQpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBmYWlsdXJlT3B0LnZhbHVlXG4gICAgICAgIGlmIChtYWluRXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZXJyb3IubWFpbkVycm9yID0gbWFpbkVycm9yXG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VFcnJvciA9IGVycm9yXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZWZlY3RPcHQgPSBDYXVzZS5kaWVPcHRpb24oZXhpdC5jYXVzZSlcbiAgICAgICAgaWYgKE9wdGlvbi5pc1NvbWUoZGVmZWN0T3B0KSAmJiBkZWZlY3RPcHQudmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBkZWZlY3RPcHQudmFsdWVcbiAgICAgICAgICBpZiAobWFpbkVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZXJyb3IubWFpbkVycm9yID0gbWFpbkVycm9yXG4gICAgICAgICAgfVxuICAgICAgICAgIGNsb3NlRXJyb3IgPSBlcnJvclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsb3NlRXJyb3IgPSBuZXcgRXJyb3IoU3RyaW5nKGV4aXQuY2F1c2UpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNsb3NlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgIHNldEZhaWx1cmVFeGl0Q29kZUlmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlKVxuICAgIHJlcG9ydEVycm9ySWZFbmFibGVkKHJ1bm5lck9wdGlvbnMuZXhpdENvZGUgJiYgcnVubmVyT3B0aW9ucy5yZXBvcnRFcnJvciwgY2xvc2VFcnJvcilcbiAgICB0aHJvdyBjbG9zZUVycm9yXG4gIH1cblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHNldEZhaWx1cmVFeGl0Q29kZUlmRW5hYmxlZChydW5uZXJPcHRpb25zLmV4aXRDb2RlKVxuICAgIHRocm93IG5ldyBFcnJvcignW0xvZ2l4XSBQcm9ncmFtUnVubmVyLnJ1blByb2dyYW06IG1pc3NpbmcgcmVzdWx0JylcbiAgfVxuXG4gIGlmIChyZXN1bHQuX3RhZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yXG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnZhbHVlXG59XG4iLCAiY29uc3QgaXNSZWNvcmQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsXG5cbmNvbnN0IGdldFByb2Nlc3MgPSAoKTogYW55ID0+IChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzc1xuXG5leHBvcnQgY29uc3Qgc2V0RXhpdENvZGVJZkVuYWJsZWQgPSAoZW5hYmxlZDogYm9vbGVhbiwgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm5cblxuICBjb25zdCBwcm9jID0gZ2V0UHJvY2VzcygpXG4gIGlmICghaXNSZWNvcmQocHJvYykpIHJldHVyblxuXG4gIGNvbnN0IG5leHQgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpID8gdmFsdWUgOiAwXG5cbiAgcHJvYy5leGl0Q29kZSA9IG5leHRcbn1cblxuZXhwb3J0IGNvbnN0IHNldEZhaWx1cmVFeGl0Q29kZUlmRW5hYmxlZCA9IChlbmFibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuXG5cbiAgY29uc3QgcHJvYyA9IGdldFByb2Nlc3MoKVxuICBpZiAoIWlzUmVjb3JkKHByb2MpKSByZXR1cm5cblxuICBwcm9jLmV4aXRDb2RlID0gMVxufVxuXG5leHBvcnQgY29uc3QgcmVwb3J0RXJyb3JJZkVuYWJsZWQgPSAoZW5hYmxlZDogYm9vbGVhbiwgZXJyb3I6IHVua25vd24pOiB2b2lkID0+IHtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmVycm9yKGVycm9yKVxufVxuIiwgImV4cG9ydCBpbnRlcmZhY2UgUHJvZ3JhbVJ1bm5lck9wdGlvbnM8QXJncyA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgY2xvc2VTY29wZVRpbWVvdXQ6IG51bWJlclxuICByZWFkb25seSBoYW5kbGVTaWduYWxzOiBib29sZWFuXG4gIHJlYWRvbmx5IGFyZ3M6IEFyZ3MgfCB1bmRlZmluZWRcbiAgcmVhZG9ubHkgZXhpdENvZGU6IGJvb2xlYW5cbiAgcmVhZG9ubHkgcmVwb3J0RXJyb3I6IGJvb2xlYW5cbn1cblxuY29uc3QgaXNSZWNvcmQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvZ3JhbVJ1bm5lck9wdGlvbnMgPSA8QXJncyA9IHVua25vd24+KG9wdGlvbnM6IHVua25vd24pOiBQcm9ncmFtUnVubmVyT3B0aW9uczxBcmdzPiA9PiB7XG4gIGNvbnN0IHJlY29yZCA9IGlzUmVjb3JkKG9wdGlvbnMpID8gb3B0aW9ucyA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGNsb3NlU2NvcGVUaW1lb3V0ID0gdHlwZW9mIHJlY29yZD8uY2xvc2VTY29wZVRpbWVvdXQgPT09ICdudW1iZXInID8gcmVjb3JkLmNsb3NlU2NvcGVUaW1lb3V0IDogMTAwMFxuXG4gIGNvbnN0IGhhbmRsZVNpZ25hbHMgPSB0eXBlb2YgcmVjb3JkPy5oYW5kbGVTaWduYWxzID09PSAnYm9vbGVhbicgPyByZWNvcmQuaGFuZGxlU2lnbmFscyA6IHRydWVcblxuICBjb25zdCBleGl0Q29kZSA9IHR5cGVvZiByZWNvcmQ/LmV4aXRDb2RlID09PSAnYm9vbGVhbicgPyByZWNvcmQuZXhpdENvZGUgOiBmYWxzZVxuXG4gIGNvbnN0IHJlcG9ydEVycm9yID0gdHlwZW9mIHJlY29yZD8ucmVwb3J0RXJyb3IgPT09ICdib29sZWFuJyA/IHJlY29yZC5yZXBvcnRFcnJvciA6IHRydWVcblxuICBjb25zdCBhcmdzID0gKHJlY29yZD8uYXJncyBhcyBBcmdzIHwgdW5kZWZpbmVkKSA/PyB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIGNsb3NlU2NvcGVUaW1lb3V0LFxuICAgIGhhbmRsZVNpZ25hbHMsXG4gICAgYXJncyxcbiAgICBleGl0Q29kZSxcbiAgICByZXBvcnRFcnJvcixcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxVQUFBQSxTQUFRLE9BQXVCLFVBQUFDLGVBQXFCOzs7QUNBN0QsU0FBUyxjQUFjO0FBU3ZCLElBQU0sb0JBQW9CLE9BQU8sSUFBSSxLQUFLLE9BQU8sU0FBUyxDQUFDO0FBQzNELElBQU0sdUJBQXVCLE9BQU8sT0FBTyxLQUFLLE9BQU8sU0FBUyxDQUFDO0FBQ2pFLElBQU0scUJBQXFCLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxHQUFHLE9BQU8sUUFBUSxNQUFNLEdBQUcsT0FBTyxRQUFRLE9BQU8sQ0FBQztBQUMvRyxJQUFNLHdCQUF3QixPQUFPLE1BQU0sT0FBTyxRQUFRLE1BQU0sR0FBRyxPQUFPLFFBQVEsT0FBTyxDQUFDO0FBQzFGLElBQU0seUJBQXlCLE9BQU8sTUFBTSxPQUFPLFFBQVEsV0FBVyxHQUFHLGlCQUFpQjtBQUUxRixJQUFNLFdBQVcsQ0FBQyxVQUNoQixPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSztBQUVyRSxJQUFNLGNBQWMsQ0FBQyxPQUFlLFdBQXdDO0FBQzFFLE1BQUksQ0FBQyxTQUFTLEVBQUc7QUFDakIsTUFBSSxPQUFPLFdBQVcsRUFBRztBQUV6QixVQUFRO0FBQUEsSUFDTixDQUFDLDRDQUE0QyxZQUFZLEtBQUssSUFBSSxTQUFTLEVBQ3hFLE9BQU8sT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQ2xDLEtBQUssSUFBSTtBQUFBLEVBQ2Q7QUFDRjtBQUVBLElBQU0scUJBQXFCLENBQ3pCLEtB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RDtBQU9PLElBQU0sa0NBQWtDLENBQzdDLGNBQ21DO0FBQ25DLHNDQUFvQyxXQUFXLHlDQUF5QztBQUN4RixTQUFPLE1BQU0sUUFBUSwrQkFBK0IsU0FBUztBQUMvRDtBQU9PLElBQU0sMkJBQTJCLENBQ3RDLFNBQ0EsVUFDQSxjQUNTO0FBQ1QsMkRBQXlELFdBQVcsb0NBQW9DLFFBQVEsR0FBRztBQUVuSCxVQUFRO0FBQUEsSUFDTkksUUFBTyxJQUFJLGFBQWE7QUFDdEIsWUFBTSxtQkFBbUIsT0FBT0EsUUFBTyxjQUFjLHlCQUF5QjtBQUU5RSxVQUFJQyxRQUFPLE9BQU8sZ0JBQWdCLEdBQUc7QUFDbkM7QUFBQSxNQUNGO0FBSUEsWUFBTSxnQkFBcUIsaUJBQWlCO0FBQzVDLFlBQU0sT0FBTztBQUFBLFFBQ1gsR0FBSSxjQUFjLG9DQUFvQyxDQUFDO0FBQUEsTUFDekQ7QUFFQSxVQUFJLFdBQVc7QUFDYixhQUFLLFFBQVEsSUFBSTtBQUFBLE1BQ25CLE9BQU87QUFDTCxlQUFPLEtBQUssUUFBUTtBQUFBLE1BQ3RCO0FBRUEsb0JBQWMsbUNBQW1DO0FBQUEsSUFDbkQsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQU9PLElBQU0sK0JBQStCLENBQzFDLFNBQ0EsVUFDQSxVQUNTO0FBQ1QsMkNBQXlDLE9BQU8sd0NBQXdDLFFBQVEsR0FBRztBQUVuRyxVQUFRO0FBQUEsSUFDTkQsUUFBTyxJQUFJLGFBQWE7QUFDdEIsWUFBTSxtQkFBbUIsT0FBT0EsUUFBTyxjQUFjLG9CQUFvQjtBQUV6RSxVQUFJQyxRQUFPLE9BQU8sZ0JBQWdCLEdBQUc7QUFDbkM7QUFBQSxNQUNGO0FBSUEsWUFBTSxnQkFBcUIsaUJBQWlCO0FBQzVDLFlBQU0sT0FBTztBQUFBLFFBQ1gsR0FBSSxjQUFjLHVCQUF1QixDQUFDO0FBQUEsTUFDNUM7QUFFQSxVQUFJLE9BQU87QUFDVCxhQUFLLFFBQVEsSUFBSTtBQUFBLE1BQ25CLE9BQU87QUFDTCxlQUFPLEtBQUssUUFBUTtBQUFBLE1BQ3RCO0FBRUEsb0JBQWMsc0JBQXNCO0FBQUEsSUFDdEMsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQVVPLElBQU0sMkJBQTJCLENBQ3RDLFVBQ0EsWUFDQSxPQUNBLFNBRUFELFFBQU8sSUFBSSxhQUFhO0FBQ3RCLFFBQU0sVUFBd0IsOEJBQXdDLFVBQVUsVUFBVTtBQUUxRixNQUFJLENBQUMsU0FBUztBQUNaO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDRixXQUFPLG9CQUFvQixPQUFjLEVBQUUsSUFBSSx5QkFBeUIsT0FBTyxJQUFJO0FBQUEsRUFDckYsUUFBUTtBQUNOO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbIkVmZmVjdCIsICJPcHRpb24iLCAiaXNSZWNvcmQiLCAiaXNSZWNvcmQiLCAibWFrZSIsICJsYXllciIsICJvcGVuUHJvZ3JhbSIsICJydW5Qcm9ncmFtIiwgIkVmZmVjdCIsICJPcHRpb24iXQp9Cg==
@@ -5,9 +5,12 @@ import {
5
5
  ScopedRuntimeTag,
6
6
  internal,
7
7
  layer
8
- } from "../chunks/chunk-NQW73ACJ.js";
9
- import "../chunks/chunk-PTSJJANP.js";
10
- import "../chunks/chunk-CZRI7MHA.js";
8
+ } from "../chunks/chunk-PMXBOYQI.js";
9
+ import "../chunks/chunk-EYNDQLSB.js";
10
+ import "../chunks/chunk-YMVMZA3U.js";
11
+ import "../chunks/chunk-UJGVDFZN.js";
12
+ import "../chunks/chunk-SH7TP5CJ.js";
13
+ import "../chunks/chunk-SI5OKFFY.js";
11
14
  export {
12
15
  ScopeRegistryTag,
13
16
  ScopedRuntimeTag,