nfets 0.0.13 → 0.0.14

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 (638) hide show
  1. package/README.md +4 -0
  2. package/dist/chunk-3WPW27WV.mjs +24 -0
  3. package/dist/chunk-VB5FKAWY.mjs +7 -0
  4. package/dist/{chunk-Z2TLKKAE.mjs → chunk-W6MRGYXP.mjs} +0 -1
  5. package/dist/chunk-XYOTPYUB.mjs +238 -0
  6. package/dist/core/index.cjs +261 -0
  7. package/dist/core/index.d.cts +576 -0
  8. package/dist/core/index.d.ts +576 -0
  9. package/dist/core/index.mjs +1 -0
  10. package/dist/either-CdHd_Yt7.d.cts +20 -0
  11. package/dist/either-CdHd_Yt7.d.ts +20 -0
  12. package/dist/index.cjs +82 -77
  13. package/dist/index.d.cts +70 -677
  14. package/dist/index.d.ts +70 -677
  15. package/dist/index.mjs +1 -260
  16. package/dist/nfe/index.cjs +30 -0
  17. package/dist/nfe/index.d.cts +4622 -0
  18. package/dist/nfe/index.d.ts +4622 -0
  19. package/dist/nfe/index.mjs +1 -0
  20. package/dist/src-NRIPS2N7.mjs +7 -0
  21. package/package.json +17 -6
  22. package/packages/nfe/schemas/PL_009_V4/110150_v1.00.xsd +88 -0
  23. package/packages/nfe/schemas/PL_009_V4/Averb_v1.00.xsd +11 -0
  24. package/packages/nfe/schemas/PL_009_V4/CCe_v1.00.xsd +11 -0
  25. package/packages/nfe/schemas/PL_009_V4/EPEC_v1.00.xsd +9 -0
  26. package/packages/nfe/schemas/PL_009_V4/EPP1.xml +13 -0
  27. package/packages/nfe/schemas/PL_009_V4/ERP1.xml +19 -0
  28. package/packages/nfe/schemas/PL_009_V4/EventoCancEConf_v1.00.xsd +9 -0
  29. package/packages/nfe/schemas/PL_009_V4/EventoCancInsucessoNFe_v1.00.xsd +9 -0
  30. package/packages/nfe/schemas/PL_009_V4/EventoEConf_v1.00.xsd +9 -0
  31. package/packages/nfe/schemas/PL_009_V4/EventoInsucessoNFe_v1.00.xsd +9 -0
  32. package/packages/nfe/schemas/PL_009_V4/MT_inutNFe_v4.00.xsd +9 -0
  33. package/packages/nfe/schemas/PL_009_V4/SuframaInternaliza_v1.00.xsd +9 -0
  34. package/packages/nfe/schemas/PL_009_V4/SuframaVistoria_v1.00.xsd +9 -0
  35. package/packages/nfe/schemas/PL_009_V4/confRecebto_v1.00.xsd +9 -0
  36. package/packages/nfe/schemas/PL_009_V4/consCad_v2.00.xsd +9 -0
  37. package/packages/nfe/schemas/PL_009_V4/consGTIN_v1.00.xsd +10 -0
  38. package/packages/nfe/schemas/PL_009_V4/consNFeDest_v1.01.xsd +10 -0
  39. package/packages/nfe/schemas/PL_009_V4/consReciNFe_v3.10.xsd +9 -0
  40. package/packages/nfe/schemas/PL_009_V4/consReciNFe_v4.00.xsd +9 -0
  41. package/packages/nfe/schemas/PL_009_V4/consSitNFe_v3.10.xsd +9 -0
  42. package/packages/nfe/schemas/PL_009_V4/consSitNFe_v4.00.xsd +9 -0
  43. package/packages/nfe/schemas/PL_009_V4/consStatServ_v3.10.xsd +9 -0
  44. package/packages/nfe/schemas/PL_009_V4/consStatServ_v4.00.xsd +9 -0
  45. package/packages/nfe/schemas/PL_009_V4/distDFeInt_v1.00.xsd +71 -0
  46. package/packages/nfe/schemas/PL_009_V4/distDFeInt_v1.01.xsd +97 -0
  47. package/packages/nfe/schemas/PL_009_V4/downloadNFe_v1.00.xsd +10 -0
  48. package/packages/nfe/schemas/PL_009_V4/e110110_v1.00.xsd +58 -0
  49. package/packages/nfe/schemas/PL_009_V4/e110111_v1.00.xsd +42 -0
  50. package/packages/nfe/schemas/PL_009_V4/e110112_v1.00.xsd +69 -0
  51. package/packages/nfe/schemas/PL_009_V4/e110130_v1.00.xsd +102 -0
  52. package/packages/nfe/schemas/PL_009_V4/e110131_v1.00.xsd +51 -0
  53. package/packages/nfe/schemas/PL_009_V4/e110140NFCe_v1.00.xsd +118 -0
  54. package/packages/nfe/schemas/PL_009_V4/e110140NFe_v1.00.xsd +124 -0
  55. package/packages/nfe/schemas/PL_009_V4/e110140_v1.00.xsd +124 -0
  56. package/packages/nfe/schemas/PL_009_V4/e110150_v1.00.xsd +88 -0
  57. package/packages/nfe/schemas/PL_009_V4/e110192_v1.00.xsd +106 -0
  58. package/packages/nfe/schemas/PL_009_V4/e110193_v1.00.xsd +40 -0
  59. package/packages/nfe/schemas/PL_009_V4/e110750_v1.00.xsd +138 -0
  60. package/packages/nfe/schemas/PL_009_V4/e110751_v1.00.xsd +39 -0
  61. package/packages/nfe/schemas/PL_009_V4/e111500_v1.00.xsd +69 -0
  62. package/packages/nfe/schemas/PL_009_V4/e111501_v1.00.xsd +69 -0
  63. package/packages/nfe/schemas/PL_009_V4/e111502_v1.00.xsd +50 -0
  64. package/packages/nfe/schemas/PL_009_V4/e111503_v1.00.xsd +50 -0
  65. package/packages/nfe/schemas/PL_009_V4/e210200_v1.00.xsd +31 -0
  66. package/packages/nfe/schemas/PL_009_V4/e210210_v1.00.xsd +31 -0
  67. package/packages/nfe/schemas/PL_009_V4/e210220_v1.00.xsd +44 -0
  68. package/packages/nfe/schemas/PL_009_V4/e210240_v1.00.xsd +44 -0
  69. package/packages/nfe/schemas/PL_009_V4/e411500_v1.00.xsd +134 -0
  70. package/packages/nfe/schemas/PL_009_V4/e411501_v1.00.xsd +134 -0
  71. package/packages/nfe/schemas/PL_009_V4/e411502_v1.00.xsd +95 -0
  72. package/packages/nfe/schemas/PL_009_V4/e411503_v1.00.xsd +95 -0
  73. package/packages/nfe/schemas/PL_009_V4/e610130_v1.00.xsd +128 -0
  74. package/packages/nfe/schemas/PL_009_V4/e610131_v1.00.xsd +68 -0
  75. package/packages/nfe/schemas/PL_009_V4/e790700_v1.00.xsd +125 -0
  76. package/packages/nfe/schemas/PL_009_V4/e990900_v1.00.xsd +87 -0
  77. package/packages/nfe/schemas/PL_009_V4/e990910_v1.00.xsd +81 -0
  78. package/packages/nfe/schemas/PL_009_V4/envAverb_v1.00.xsd +9 -0
  79. package/packages/nfe/schemas/PL_009_V4/envCCe_v1.00.xsd +10 -0
  80. package/packages/nfe/schemas/PL_009_V4/envCancelPProrrogNFe_v1.0.xsd +50 -0
  81. package/packages/nfe/schemas/PL_009_V4/envComprovanteEntregaNFe_v1.00.xsd +11 -0
  82. package/packages/nfe/schemas/PL_009_V4/envConfRecebto_v1.00.xsd +9 -0
  83. package/packages/nfe/schemas/PL_009_V4/envEPEC_v1.00.xsd +9 -0
  84. package/packages/nfe/schemas/PL_009_V4/envEventoAtorInteressado_v1.00.xsd +9 -0
  85. package/packages/nfe/schemas/PL_009_V4/envEventoCancEConf_v1.00.xsd +10 -0
  86. package/packages/nfe/schemas/PL_009_V4/envEventoCancEntregaNFe_v1.00.xsd +10 -0
  87. package/packages/nfe/schemas/PL_009_V4/envEventoCancInsucessoNFe_v1.00.xsd +10 -0
  88. package/packages/nfe/schemas/PL_009_V4/envEventoCancNFe_v1.00.xsd +9 -0
  89. package/packages/nfe/schemas/PL_009_V4/envEventoCancSubst_v1.00.xsd +9 -0
  90. package/packages/nfe/schemas/PL_009_V4/envEventoEConf_v1.00.xsd +10 -0
  91. package/packages/nfe/schemas/PL_009_V4/envEventoEntregaNFe_v1.00.xsd +10 -0
  92. package/packages/nfe/schemas/PL_009_V4/envEventoInsucessoNFe_v1.00.xsd +10 -0
  93. package/packages/nfe/schemas/PL_009_V4/envEvento_v1.00.xsd +9 -0
  94. package/packages/nfe/schemas/PL_009_V4/envFiscoNfe_v1.0.xsd +179 -0
  95. package/packages/nfe/schemas/PL_009_V4/envPProrrogNFe_v1.0.xsd +65 -0
  96. package/packages/nfe/schemas/PL_009_V4/envRemIndus_v1.00.xsd +9 -0
  97. package/packages/nfe/schemas/PL_009_V4/envSuframaInternaliza_v1.00.xsd +10 -0
  98. package/packages/nfe/schemas/PL_009_V4/envSuframaVistoria_v1.00.xsd +10 -0
  99. package/packages/nfe/schemas/PL_009_V4/enviNFe_v3.10.xsd +9 -0
  100. package/packages/nfe/schemas/PL_009_V4/enviNFe_v4.00.xsd +9 -0
  101. package/packages/nfe/schemas/PL_009_V4/eventoAtorInteressado_v1.00.xsd +9 -0
  102. package/packages/nfe/schemas/PL_009_V4/eventoCancEntregaNFe_v1.00.xsd +9 -0
  103. package/packages/nfe/schemas/PL_009_V4/eventoCancNFe_v1.00.xsd +9 -0
  104. package/packages/nfe/schemas/PL_009_V4/eventoCancSubst_v1.00.xsd +9 -0
  105. package/packages/nfe/schemas/PL_009_V4/eventoEPEC_v0.01.xsd +267 -0
  106. package/packages/nfe/schemas/PL_009_V4/eventoEPEC_v1.00.xsd +231 -0
  107. package/packages/nfe/schemas/PL_009_V4/eventoEntregaNFe_v1.00.xsd +9 -0
  108. package/packages/nfe/schemas/PL_009_V4/eventoRemIndus_v1.00.xsd +9 -0
  109. package/packages/nfe/schemas/PL_009_V4/inutNFe_v3.10.xsd +9 -0
  110. package/packages/nfe/schemas/PL_009_V4/inutNFe_v4.00.xsd +9 -0
  111. package/packages/nfe/schemas/PL_009_V4/leiauteAverb_v1.00.xsd +482 -0
  112. package/packages/nfe/schemas/PL_009_V4/leiauteCCe_v1.00.xsd +382 -0
  113. package/packages/nfe/schemas/PL_009_V4/leiauteCcgConsGTIN_v1.00.xsd +94 -0
  114. package/packages/nfe/schemas/PL_009_V4/leiauteComprovanteEntregaNFe_v1.00.xsd +487 -0
  115. package/packages/nfe/schemas/PL_009_V4/leiauteConfRecebto_v1.00.xsd +369 -0
  116. package/packages/nfe/schemas/PL_009_V4/leiauteConsNFeDest_v1.01.xsd +483 -0
  117. package/packages/nfe/schemas/PL_009_V4/leiauteConsSitNFe_v3.10.xsd +502 -0
  118. package/packages/nfe/schemas/PL_009_V4/leiauteConsSitNFe_v4.00.xsd +502 -0
  119. package/packages/nfe/schemas/PL_009_V4/leiauteConsStatServ_v3.10.xsd +98 -0
  120. package/packages/nfe/schemas/PL_009_V4/leiauteConsStatServ_v4.00.xsd +98 -0
  121. package/packages/nfe/schemas/PL_009_V4/leiauteConsultaCadastro_v2.00.xsd +404 -0
  122. package/packages/nfe/schemas/PL_009_V4/leiauteDownloadNFe_v1.00.xsd +149 -0
  123. package/packages/nfe/schemas/PL_009_V4/leiauteEPEC_v1.00.xsd +423 -0
  124. package/packages/nfe/schemas/PL_009_V4/leiauteEventoAtorInteressado_v1.00.xsd +384 -0
  125. package/packages/nfe/schemas/PL_009_V4/leiauteEventoCancEConf_v1.00.xsd +296 -0
  126. package/packages/nfe/schemas/PL_009_V4/leiauteEventoCancEntregaNFe_v1.00.xsd +307 -0
  127. package/packages/nfe/schemas/PL_009_V4/leiauteEventoCancInsucessoNFe_v1.00.xsd +297 -0
  128. package/packages/nfe/schemas/PL_009_V4/leiauteEventoCancNFe_v1.00.xsd +358 -0
  129. package/packages/nfe/schemas/PL_009_V4/leiauteEventoCancSubst_v1.00.xsd +366 -0
  130. package/packages/nfe/schemas/PL_009_V4/leiauteEventoEConf_v1.00.xsd +296 -0
  131. package/packages/nfe/schemas/PL_009_V4/leiauteEventoEntregaNFe_v1.00.xsd +321 -0
  132. package/packages/nfe/schemas/PL_009_V4/leiauteEventoInsucessoNFe_v1.00.xsd +297 -0
  133. package/packages/nfe/schemas/PL_009_V4/leiauteEvento_v1.00.xsd +335 -0
  134. package/packages/nfe/schemas/PL_009_V4/leiauteInutNFe_v3.10.xsd +193 -0
  135. package/packages/nfe/schemas/PL_009_V4/leiauteInutNFe_v4.00.xsd +193 -0
  136. package/packages/nfe/schemas/PL_009_V4/leiauteInutNFe_v4.00_MT.xsd +200 -0
  137. package/packages/nfe/schemas/PL_009_V4/leiauteNFe_v3.10.xsd +6060 -0
  138. package/packages/nfe/schemas/PL_009_V4/leiauteNFe_v4.00.xsd +7339 -0
  139. package/packages/nfe/schemas/PL_009_V4/leiauteRemIndus_v1.00.xsd +344 -0
  140. package/packages/nfe/schemas/PL_009_V4/leiauteSuframaInternaliza_v1.00.xsd +642 -0
  141. package/packages/nfe/schemas/PL_009_V4/leiauteSuframaVistoria_v1.00.xsd +648 -0
  142. package/packages/nfe/schemas/PL_009_V4/nfe_v3.10.xsd +9 -0
  143. package/packages/nfe/schemas/PL_009_V4/nfe_v4.00.xsd +9 -0
  144. package/packages/nfe/schemas/PL_009_V4/procAverbNFe_v1.00.xsd +10 -0
  145. package/packages/nfe/schemas/PL_009_V4/procCCeNFe_v1.00.xsd +10 -0
  146. package/packages/nfe/schemas/PL_009_V4/procComprovanteEntregaNFe_v1.00.xsd +10 -0
  147. package/packages/nfe/schemas/PL_009_V4/procConfRecebtoNFe_v1.00.xsd +9 -0
  148. package/packages/nfe/schemas/PL_009_V4/procEPEC_v1.00.xsd +9 -0
  149. package/packages/nfe/schemas/PL_009_V4/procEventoAtorInteressado_v1.00.xsd +9 -0
  150. package/packages/nfe/schemas/PL_009_V4/procEventoCancEConf_v1.00.xsd +9 -0
  151. package/packages/nfe/schemas/PL_009_V4/procEventoCancEntregaNFe_v1.00.xsd +9 -0
  152. package/packages/nfe/schemas/PL_009_V4/procEventoCancInsucessoNFe_v1.00.xsd +9 -0
  153. package/packages/nfe/schemas/PL_009_V4/procEventoCancNFe_v1.00.xsd +9 -0
  154. package/packages/nfe/schemas/PL_009_V4/procEventoCancSubst_v1.00.xsd +9 -0
  155. package/packages/nfe/schemas/PL_009_V4/procEventoEConf_v1.00.xsd +9 -0
  156. package/packages/nfe/schemas/PL_009_V4/procEventoEntregaNFe_v1.00.xsd +9 -0
  157. package/packages/nfe/schemas/PL_009_V4/procEventoInsucessoNFe_v1.00.xsd +9 -0
  158. package/packages/nfe/schemas/PL_009_V4/procEventoNFe_v1.00.xsd +9 -0
  159. package/packages/nfe/schemas/PL_009_V4/procEventoNFe_v99.99.xsd +37 -0
  160. package/packages/nfe/schemas/PL_009_V4/procInutNFe_v3.10.xsd +9 -0
  161. package/packages/nfe/schemas/PL_009_V4/procInutNFe_v4.00.xsd +9 -0
  162. package/packages/nfe/schemas/PL_009_V4/procNFe_v3.10.xsd +9 -0
  163. package/packages/nfe/schemas/PL_009_V4/procNFe_v4.00.xsd +9 -0
  164. package/packages/nfe/schemas/PL_009_V4/procRemIndus_v1.00.xsd +9 -0
  165. package/packages/nfe/schemas/PL_009_V4/prod_leiauteNFe_v4.00.xsd +6736 -0
  166. package/packages/nfe/schemas/PL_009_V4/resEvento_v1.00.xsd +94 -0
  167. package/packages/nfe/schemas/PL_009_V4/resEvento_v1.01.xsd +108 -0
  168. package/packages/nfe/schemas/PL_009_V4/resNFe_v1.00.xsd +110 -0
  169. package/packages/nfe/schemas/PL_009_V4/resNFe_v1.01.xsd +122 -0
  170. package/packages/nfe/schemas/PL_009_V4/retComprovanteEntregaNFe_v1.00.xsd +10 -0
  171. package/packages/nfe/schemas/PL_009_V4/retConsCad_v2.00.xsd +9 -0
  172. package/packages/nfe/schemas/PL_009_V4/retConsGTIN_v1.00.xsd +9 -0
  173. package/packages/nfe/schemas/PL_009_V4/retConsReciNFe_v3.10.xsd +9 -0
  174. package/packages/nfe/schemas/PL_009_V4/retConsReciNFe_v4.00.xsd +9 -0
  175. package/packages/nfe/schemas/PL_009_V4/retConsSitNFe_v3.10.xsd +9 -0
  176. package/packages/nfe/schemas/PL_009_V4/retConsSitNFe_v4.00.xsd +9 -0
  177. package/packages/nfe/schemas/PL_009_V4/retConsStatServ_v3.10.xsd +9 -0
  178. package/packages/nfe/schemas/PL_009_V4/retConsStatServ_v4.00.xsd +9 -0
  179. package/packages/nfe/schemas/PL_009_V4/retDistDFeInt_v1.00.xsd +84 -0
  180. package/packages/nfe/schemas/PL_009_V4/retDistDFeInt_v1.01.xsd +99 -0
  181. package/packages/nfe/schemas/PL_009_V4/retDownloadNFe_v1.00.xsd +9 -0
  182. package/packages/nfe/schemas/PL_009_V4/retEnvAverb_v1.00.xsd +9 -0
  183. package/packages/nfe/schemas/PL_009_V4/retEnvAverb_v1.00_1.xsd +9 -0
  184. package/packages/nfe/schemas/PL_009_V4/retEnvCCe_v1.00.xsd +10 -0
  185. package/packages/nfe/schemas/PL_009_V4/retEnvCancelPProrrogNFe_v1.0.xsd +231 -0
  186. package/packages/nfe/schemas/PL_009_V4/retEnvConfRecebto_v1.00.xsd +9 -0
  187. package/packages/nfe/schemas/PL_009_V4/retEnvEPEC_v1.00.xsd +9 -0
  188. package/packages/nfe/schemas/PL_009_V4/retEnvEventoAtorInteressado_v1.00.xsd +9 -0
  189. package/packages/nfe/schemas/PL_009_V4/retEnvEventoCancNFe_v1.00.xsd +9 -0
  190. package/packages/nfe/schemas/PL_009_V4/retEnvEventoCancSubst_v1.00.xsd +9 -0
  191. package/packages/nfe/schemas/PL_009_V4/retEnvEvento_v1.00.xsd +9 -0
  192. package/packages/nfe/schemas/PL_009_V4/retEnvFiscoNFe_v1.0.xsd +234 -0
  193. package/packages/nfe/schemas/PL_009_V4/retEnvRemIndus_v1.00.xsd +9 -0
  194. package/packages/nfe/schemas/PL_009_V4/retEnvSuframaInternaliza_v1.00.xsd +9 -0
  195. package/packages/nfe/schemas/PL_009_V4/retEnvSuframaVistoria_v1.00.xsd +9 -0
  196. package/packages/nfe/schemas/PL_009_V4/retEnviNFe_v3.10.xsd +9 -0
  197. package/packages/nfe/schemas/PL_009_V4/retEnviNFe_v4.00.xsd +9 -0
  198. package/packages/nfe/schemas/PL_009_V4/retEventoCancEConf_v1.00.xsd +9 -0
  199. package/packages/nfe/schemas/PL_009_V4/retEventoCancEntregaNFe_v1.00.xsd +9 -0
  200. package/packages/nfe/schemas/PL_009_V4/retEventoCancInsucessoNFe_v1.00.xsd +9 -0
  201. package/packages/nfe/schemas/PL_009_V4/retEventoEConf_v1.00.xsd +9 -0
  202. package/packages/nfe/schemas/PL_009_V4/retEventoEPEC_v0.01.xsd +207 -0
  203. package/packages/nfe/schemas/PL_009_V4/retEventoEntregaNFe_v1.00.xsd +9 -0
  204. package/packages/nfe/schemas/PL_009_V4/retEventoInsucessoNFe_v1.00.xsd +9 -0
  205. package/packages/nfe/schemas/PL_009_V4/retInutNFe_v3.10.xsd +9 -0
  206. package/packages/nfe/schemas/PL_009_V4/retInutNFe_v4.00.xsd +9 -0
  207. package/packages/nfe/schemas/PL_009_V4/retPProrrogNFe_v1.0.xsd +233 -0
  208. package/packages/nfe/schemas/PL_009_V4/retconsNFeDest_v1.01.xsd +9 -0
  209. package/packages/nfe/schemas/PL_009_V4/tiposBasico_v1.03.xsd +873 -0
  210. package/packages/nfe/schemas/PL_009_V4/tiposBasico_v3.10.xsd +571 -0
  211. package/packages/nfe/schemas/PL_009_V4/tiposBasico_v4.00.xsd +598 -0
  212. package/packages/nfe/schemas/PL_009_V4/tiposBasicosCcgConsGTIN_v1.00.xsd +84 -0
  213. package/packages/nfe/schemas/PL_009_V4/tiposDistDFe_v1.00.xsd +217 -0
  214. package/packages/nfe/schemas/PL_009_V4/tiposDistDFe_v1.01.xsd +222 -0
  215. package/packages/nfe/schemas/PL_009_V4/xmldsig-core-schema_v1.01.xsd +98 -0
  216. package/packages/nfe/schemas/PL_010_V1/110150_v1.00.xsd +88 -0
  217. package/packages/nfe/schemas/PL_010_V1/Averb_v1.00.xsd +11 -0
  218. package/packages/nfe/schemas/PL_010_V1/CCe_v1.00.xsd +11 -0
  219. package/packages/nfe/schemas/PL_010_V1/DFeTiposBasicos_v1.00.xsd +1088 -0
  220. package/packages/nfe/schemas/PL_010_V1/EPEC_v1.00.xsd +9 -0
  221. package/packages/nfe/schemas/PL_010_V1/EPP1.xml +13 -0
  222. package/packages/nfe/schemas/PL_010_V1/ERP1.xml +19 -0
  223. package/packages/nfe/schemas/PL_010_V1/EventoCancEConf_v1.00.xsd +9 -0
  224. package/packages/nfe/schemas/PL_010_V1/EventoCancInsucessoNFe_v1.00.xsd +9 -0
  225. package/packages/nfe/schemas/PL_010_V1/EventoEConf_v1.00.xsd +9 -0
  226. package/packages/nfe/schemas/PL_010_V1/EventoInsucessoNFe_v1.00.xsd +9 -0
  227. package/packages/nfe/schemas/PL_010_V1/MT_inutNFe_v4.00.xsd +9 -0
  228. package/packages/nfe/schemas/PL_010_V1/SuframaInternaliza_v1.00.xsd +9 -0
  229. package/packages/nfe/schemas/PL_010_V1/SuframaVistoria_v1.00.xsd +9 -0
  230. package/packages/nfe/schemas/PL_010_V1/confRecebto_v1.00.xsd +9 -0
  231. package/packages/nfe/schemas/PL_010_V1/consCad_v2.00.xsd +9 -0
  232. package/packages/nfe/schemas/PL_010_V1/consGTIN_v1.00.xsd +10 -0
  233. package/packages/nfe/schemas/PL_010_V1/consNFeDest_v1.01.xsd +10 -0
  234. package/packages/nfe/schemas/PL_010_V1/consReciNFe_v3.10.xsd +9 -0
  235. package/packages/nfe/schemas/PL_010_V1/consReciNFe_v4.00.xsd +9 -0
  236. package/packages/nfe/schemas/PL_010_V1/consSitNFe_v3.10.xsd +9 -0
  237. package/packages/nfe/schemas/PL_010_V1/consSitNFe_v4.00.xsd +9 -0
  238. package/packages/nfe/schemas/PL_010_V1/consStatServ_v3.10.xsd +9 -0
  239. package/packages/nfe/schemas/PL_010_V1/consStatServ_v4.00.xsd +9 -0
  240. package/packages/nfe/schemas/PL_010_V1/distDFeInt_v1.00.xsd +71 -0
  241. package/packages/nfe/schemas/PL_010_V1/distDFeInt_v1.01.xsd +97 -0
  242. package/packages/nfe/schemas/PL_010_V1/downloadNFe_v1.00.xsd +10 -0
  243. package/packages/nfe/schemas/PL_010_V1/e110001_v1.00.xsd +73 -0
  244. package/packages/nfe/schemas/PL_010_V1/e110110_v1.00.xsd +58 -0
  245. package/packages/nfe/schemas/PL_010_V1/e110111_v1.00.xsd +42 -0
  246. package/packages/nfe/schemas/PL_010_V1/e110112_v1.00.xsd +69 -0
  247. package/packages/nfe/schemas/PL_010_V1/e110130_v1.00.xsd +102 -0
  248. package/packages/nfe/schemas/PL_010_V1/e110131_v1.00.xsd +51 -0
  249. package/packages/nfe/schemas/PL_010_V1/e110140NFCe_v1.00.xsd +118 -0
  250. package/packages/nfe/schemas/PL_010_V1/e110140NFe_v1.00.xsd +124 -0
  251. package/packages/nfe/schemas/PL_010_V1/e110140_v1.00.xsd +124 -0
  252. package/packages/nfe/schemas/PL_010_V1/e110150_v1.00.xsd +88 -0
  253. package/packages/nfe/schemas/PL_010_V1/e110192_v1.00.xsd +106 -0
  254. package/packages/nfe/schemas/PL_010_V1/e110193_v1.00.xsd +40 -0
  255. package/packages/nfe/schemas/PL_010_V1/e110750_v1.00.xsd +138 -0
  256. package/packages/nfe/schemas/PL_010_V1/e110751_v1.00.xsd +39 -0
  257. package/packages/nfe/schemas/PL_010_V1/e111500_v1.00.xsd +69 -0
  258. package/packages/nfe/schemas/PL_010_V1/e111501_v1.00.xsd +69 -0
  259. package/packages/nfe/schemas/PL_010_V1/e111502_v1.00.xsd +50 -0
  260. package/packages/nfe/schemas/PL_010_V1/e111503_v1.00.xsd +50 -0
  261. package/packages/nfe/schemas/PL_010_V1/e112110_v1.00.xsd +69 -0
  262. package/packages/nfe/schemas/PL_010_V1/e112120_v1.00 .xsd +107 -0
  263. package/packages/nfe/schemas/PL_010_V1/e112130_v1.00.xsd +119 -0
  264. package/packages/nfe/schemas/PL_010_V1/e112140_v1.00.xsd +107 -0
  265. package/packages/nfe/schemas/PL_010_V1/e210200_v1.00.xsd +31 -0
  266. package/packages/nfe/schemas/PL_010_V1/e210210_v1.00.xsd +31 -0
  267. package/packages/nfe/schemas/PL_010_V1/e210220_v1.00.xsd +44 -0
  268. package/packages/nfe/schemas/PL_010_V1/e210240_v1.00.xsd +44 -0
  269. package/packages/nfe/schemas/PL_010_V1/e211110_v1.00.xsd +134 -0
  270. package/packages/nfe/schemas/PL_010_V1/e211120_v1.00.xsd +124 -0
  271. package/packages/nfe/schemas/PL_010_V1/e211124_v1.00.xsd +107 -0
  272. package/packages/nfe/schemas/PL_010_V1/e211128_v1.00.xsd +69 -0
  273. package/packages/nfe/schemas/PL_010_V1/e211130_v1.00.xsd +107 -0
  274. package/packages/nfe/schemas/PL_010_V1/e211140_v1.00.xsd +107 -0
  275. package/packages/nfe/schemas/PL_010_V1/e211150_v1.00.xsd +85 -0
  276. package/packages/nfe/schemas/PL_010_V1/e212110_v1.00.xsd +70 -0
  277. package/packages/nfe/schemas/PL_010_V1/e212120_v1.00.xsd +69 -0
  278. package/packages/nfe/schemas/PL_010_V1/e411500_v1.00.xsd +134 -0
  279. package/packages/nfe/schemas/PL_010_V1/e411501_v1.00.xsd +134 -0
  280. package/packages/nfe/schemas/PL_010_V1/e411502_v1.00.xsd +95 -0
  281. package/packages/nfe/schemas/PL_010_V1/e411503_v1.00.xsd +95 -0
  282. package/packages/nfe/schemas/PL_010_V1/e412120_v1.00.xsd +88 -0
  283. package/packages/nfe/schemas/PL_010_V1/e412130_v1.00.xsd +88 -0
  284. package/packages/nfe/schemas/PL_010_V1/e610130_v1.00.xsd +128 -0
  285. package/packages/nfe/schemas/PL_010_V1/e610131_v1.00.xsd +68 -0
  286. package/packages/nfe/schemas/PL_010_V1/e790700_v1.00.xsd +148 -0
  287. package/packages/nfe/schemas/PL_010_V1/e990900_v1.00.xsd +87 -0
  288. package/packages/nfe/schemas/PL_010_V1/e990910_v1.00.xsd +81 -0
  289. package/packages/nfe/schemas/PL_010_V1/envAverb_v1.00.xsd +9 -0
  290. package/packages/nfe/schemas/PL_010_V1/envCCe_v1.00.xsd +10 -0
  291. package/packages/nfe/schemas/PL_010_V1/envCancelPProrrogNFe_v1.0.xsd +50 -0
  292. package/packages/nfe/schemas/PL_010_V1/envComprovanteEntregaNFe_v1.00.xsd +11 -0
  293. package/packages/nfe/schemas/PL_010_V1/envConfRecebto_v1.00.xsd +9 -0
  294. package/packages/nfe/schemas/PL_010_V1/envEPEC_v1.00.xsd +9 -0
  295. package/packages/nfe/schemas/PL_010_V1/envEventoAtorInteressado_v1.00.xsd +9 -0
  296. package/packages/nfe/schemas/PL_010_V1/envEventoCancEConf_v1.00.xsd +10 -0
  297. package/packages/nfe/schemas/PL_010_V1/envEventoCancEntregaNFe_v1.00.xsd +10 -0
  298. package/packages/nfe/schemas/PL_010_V1/envEventoCancInsucessoNFe_v1.00.xsd +10 -0
  299. package/packages/nfe/schemas/PL_010_V1/envEventoCancNFe_v1.00.xsd +9 -0
  300. package/packages/nfe/schemas/PL_010_V1/envEventoCancSubst_v1.00.xsd +9 -0
  301. package/packages/nfe/schemas/PL_010_V1/envEventoEConf_v1.00.xsd +10 -0
  302. package/packages/nfe/schemas/PL_010_V1/envEventoEntregaNFe_v1.00.xsd +10 -0
  303. package/packages/nfe/schemas/PL_010_V1/envEventoInsucessoNFe_v1.00.xsd +10 -0
  304. package/packages/nfe/schemas/PL_010_V1/envEvento_v1.00.xsd +9 -0
  305. package/packages/nfe/schemas/PL_010_V1/envFiscoNfe_v1.0.xsd +179 -0
  306. package/packages/nfe/schemas/PL_010_V1/envPProrrogNFe_v1.0.xsd +65 -0
  307. package/packages/nfe/schemas/PL_010_V1/envRemIndus_v1.00.xsd +9 -0
  308. package/packages/nfe/schemas/PL_010_V1/envSuframaInternaliza_v1.00.xsd +10 -0
  309. package/packages/nfe/schemas/PL_010_V1/envSuframaVistoria_v1.00.xsd +10 -0
  310. package/packages/nfe/schemas/PL_010_V1/enviNFe_v3.10.xsd +9 -0
  311. package/packages/nfe/schemas/PL_010_V1/enviNFe_v4.00.xsd +9 -0
  312. package/packages/nfe/schemas/PL_010_V1/eventoAtorInteressado_v1.00.xsd +9 -0
  313. package/packages/nfe/schemas/PL_010_V1/eventoCancEntregaNFe_v1.00.xsd +9 -0
  314. package/packages/nfe/schemas/PL_010_V1/eventoCancNFe_v1.00.xsd +9 -0
  315. package/packages/nfe/schemas/PL_010_V1/eventoCancSubst_v1.00.xsd +9 -0
  316. package/packages/nfe/schemas/PL_010_V1/eventoEPEC_v0.01.xsd +267 -0
  317. package/packages/nfe/schemas/PL_010_V1/eventoEPEC_v1.00.xsd +231 -0
  318. package/packages/nfe/schemas/PL_010_V1/eventoEntregaNFe_v1.00.xsd +9 -0
  319. package/packages/nfe/schemas/PL_010_V1/eventoRemIndus_v1.00.xsd +9 -0
  320. package/packages/nfe/schemas/PL_010_V1/inutNFe_v3.10.xsd +9 -0
  321. package/packages/nfe/schemas/PL_010_V1/inutNFe_v4.00.xsd +9 -0
  322. package/packages/nfe/schemas/PL_010_V1/leiauteAverb_v1.00.xsd +468 -0
  323. package/packages/nfe/schemas/PL_010_V1/leiauteCCe_v1.00.xsd +382 -0
  324. package/packages/nfe/schemas/PL_010_V1/leiauteCcgConsGTIN_v1.00.xsd +94 -0
  325. package/packages/nfe/schemas/PL_010_V1/leiauteComprovanteEntregaNFe_v1.00.xsd +487 -0
  326. package/packages/nfe/schemas/PL_010_V1/leiauteConfRecebto_v1.00.xsd +369 -0
  327. package/packages/nfe/schemas/PL_010_V1/leiauteConsNFeDest_v1.01.xsd +483 -0
  328. package/packages/nfe/schemas/PL_010_V1/leiauteConsSitNFe_v3.10.xsd +502 -0
  329. package/packages/nfe/schemas/PL_010_V1/leiauteConsSitNFe_v4.00.xsd +502 -0
  330. package/packages/nfe/schemas/PL_010_V1/leiauteConsStatServ_v3.10.xsd +98 -0
  331. package/packages/nfe/schemas/PL_010_V1/leiauteConsStatServ_v4.00.xsd +98 -0
  332. package/packages/nfe/schemas/PL_010_V1/leiauteConsultaCadastro_v2.00.xsd +404 -0
  333. package/packages/nfe/schemas/PL_010_V1/leiauteDownloadNFe_v1.00.xsd +149 -0
  334. package/packages/nfe/schemas/PL_010_V1/leiauteEPEC_v1.00.xsd +423 -0
  335. package/packages/nfe/schemas/PL_010_V1/leiauteEventoAtorInteressado_v1.00.xsd +384 -0
  336. package/packages/nfe/schemas/PL_010_V1/leiauteEventoCancEConf_v1.00.xsd +296 -0
  337. package/packages/nfe/schemas/PL_010_V1/leiauteEventoCancEntregaNFe_v1.00.xsd +307 -0
  338. package/packages/nfe/schemas/PL_010_V1/leiauteEventoCancInsucessoNFe_v1.00.xsd +297 -0
  339. package/packages/nfe/schemas/PL_010_V1/leiauteEventoCancNFe_v1.00.xsd +358 -0
  340. package/packages/nfe/schemas/PL_010_V1/leiauteEventoCancSubst_v1.00.xsd +366 -0
  341. package/packages/nfe/schemas/PL_010_V1/leiauteEventoEConf_v1.00.xsd +296 -0
  342. package/packages/nfe/schemas/PL_010_V1/leiauteEventoEntregaNFe_v1.00.xsd +321 -0
  343. package/packages/nfe/schemas/PL_010_V1/leiauteEventoInsucessoNFe_v1.00.xsd +297 -0
  344. package/packages/nfe/schemas/PL_010_V1/leiauteEvento_v1.00.xsd +335 -0
  345. package/packages/nfe/schemas/PL_010_V1/leiauteInutNFe_v3.10.xsd +193 -0
  346. package/packages/nfe/schemas/PL_010_V1/leiauteInutNFe_v4.00.xsd +193 -0
  347. package/packages/nfe/schemas/PL_010_V1/leiauteInutNFe_v4.00_MT.xsd +200 -0
  348. package/packages/nfe/schemas/PL_010_V1/leiauteNFe_v3.10.xsd +6060 -0
  349. package/packages/nfe/schemas/PL_010_V1/leiauteNFe_v4.00.xsd +7557 -0
  350. package/packages/nfe/schemas/PL_010_V1/leiauteRemIndus_v1.00.xsd +344 -0
  351. package/packages/nfe/schemas/PL_010_V1/leiauteSuframaInternaliza_v1.00.xsd +642 -0
  352. package/packages/nfe/schemas/PL_010_V1/leiauteSuframaVistoria_v1.00.xsd +648 -0
  353. package/packages/nfe/schemas/PL_010_V1/nfe_v3.10.xsd +9 -0
  354. package/packages/nfe/schemas/PL_010_V1/nfe_v4.00.xsd +10 -0
  355. package/packages/nfe/schemas/PL_010_V1/procAverbNFe_v1.00.xsd +10 -0
  356. package/packages/nfe/schemas/PL_010_V1/procCCeNFe_v1.00.xsd +10 -0
  357. package/packages/nfe/schemas/PL_010_V1/procComprovanteEntregaNFe_v1.00.xsd +10 -0
  358. package/packages/nfe/schemas/PL_010_V1/procConfRecebtoNFe_v1.00.xsd +9 -0
  359. package/packages/nfe/schemas/PL_010_V1/procEPEC_v1.00.xsd +9 -0
  360. package/packages/nfe/schemas/PL_010_V1/procEventoAtorInteressado_v1.00.xsd +9 -0
  361. package/packages/nfe/schemas/PL_010_V1/procEventoCancEConf_v1.00.xsd +9 -0
  362. package/packages/nfe/schemas/PL_010_V1/procEventoCancEntregaNFe_v1.00.xsd +9 -0
  363. package/packages/nfe/schemas/PL_010_V1/procEventoCancInsucessoNFe_v1.00.xsd +9 -0
  364. package/packages/nfe/schemas/PL_010_V1/procEventoCancNFe_v1.00.xsd +9 -0
  365. package/packages/nfe/schemas/PL_010_V1/procEventoCancSubst_v1.00.xsd +9 -0
  366. package/packages/nfe/schemas/PL_010_V1/procEventoEConf_v1.00.xsd +9 -0
  367. package/packages/nfe/schemas/PL_010_V1/procEventoEntregaNFe_v1.00.xsd +9 -0
  368. package/packages/nfe/schemas/PL_010_V1/procEventoInsucessoNFe_v1.00.xsd +9 -0
  369. package/packages/nfe/schemas/PL_010_V1/procEventoNFe_v1.00.xsd +9 -0
  370. package/packages/nfe/schemas/PL_010_V1/procEventoNFe_v99.99.xsd +37 -0
  371. package/packages/nfe/schemas/PL_010_V1/procInutNFe_v3.10.xsd +9 -0
  372. package/packages/nfe/schemas/PL_010_V1/procInutNFe_v4.00.xsd +9 -0
  373. package/packages/nfe/schemas/PL_010_V1/procNFe_v3.10.xsd +9 -0
  374. package/packages/nfe/schemas/PL_010_V1/procNFe_v4.00.xsd +9 -0
  375. package/packages/nfe/schemas/PL_010_V1/procRemIndus_v1.00.xsd +9 -0
  376. package/packages/nfe/schemas/PL_010_V1/prod_leiauteNFe_v4.00.xsd +6736 -0
  377. package/packages/nfe/schemas/PL_010_V1/resEvento_v1.00.xsd +94 -0
  378. package/packages/nfe/schemas/PL_010_V1/resEvento_v1.01.xsd +108 -0
  379. package/packages/nfe/schemas/PL_010_V1/resNFe_v1.00.xsd +110 -0
  380. package/packages/nfe/schemas/PL_010_V1/resNFe_v1.01.xsd +122 -0
  381. package/packages/nfe/schemas/PL_010_V1/retComprovanteEntregaNFe_v1.00.xsd +10 -0
  382. package/packages/nfe/schemas/PL_010_V1/retConsCad_v2.00.xsd +9 -0
  383. package/packages/nfe/schemas/PL_010_V1/retConsGTIN_v1.00.xsd +9 -0
  384. package/packages/nfe/schemas/PL_010_V1/retConsReciNFe_v3.10.xsd +9 -0
  385. package/packages/nfe/schemas/PL_010_V1/retConsReciNFe_v4.00.xsd +9 -0
  386. package/packages/nfe/schemas/PL_010_V1/retConsSitNFe_v3.10.xsd +9 -0
  387. package/packages/nfe/schemas/PL_010_V1/retConsSitNFe_v4.00.xsd +9 -0
  388. package/packages/nfe/schemas/PL_010_V1/retConsStatServ_v3.10.xsd +9 -0
  389. package/packages/nfe/schemas/PL_010_V1/retConsStatServ_v4.00.xsd +9 -0
  390. package/packages/nfe/schemas/PL_010_V1/retDistDFeInt_v1.00.xsd +84 -0
  391. package/packages/nfe/schemas/PL_010_V1/retDistDFeInt_v1.01.xsd +99 -0
  392. package/packages/nfe/schemas/PL_010_V1/retDownloadNFe_v1.00.xsd +9 -0
  393. package/packages/nfe/schemas/PL_010_V1/retEnvAverb_v1.00.xsd +9 -0
  394. package/packages/nfe/schemas/PL_010_V1/retEnvAverb_v1.00_1.xsd +9 -0
  395. package/packages/nfe/schemas/PL_010_V1/retEnvCCe_v1.00.xsd +10 -0
  396. package/packages/nfe/schemas/PL_010_V1/retEnvCancelPProrrogNFe_v1.0.xsd +231 -0
  397. package/packages/nfe/schemas/PL_010_V1/retEnvConfRecebto_v1.00.xsd +9 -0
  398. package/packages/nfe/schemas/PL_010_V1/retEnvEPEC_v1.00.xsd +9 -0
  399. package/packages/nfe/schemas/PL_010_V1/retEnvEventoAtorInteressado_v1.00.xsd +9 -0
  400. package/packages/nfe/schemas/PL_010_V1/retEnvEventoCancNFe_v1.00.xsd +9 -0
  401. package/packages/nfe/schemas/PL_010_V1/retEnvEventoCancSubst_v1.00.xsd +9 -0
  402. package/packages/nfe/schemas/PL_010_V1/retEnvEvento_v1.00.xsd +9 -0
  403. package/packages/nfe/schemas/PL_010_V1/retEnvFiscoNFe_v1.0.xsd +234 -0
  404. package/packages/nfe/schemas/PL_010_V1/retEnvRemIndus_v1.00.xsd +9 -0
  405. package/packages/nfe/schemas/PL_010_V1/retEnvSuframaInternaliza_v1.00.xsd +9 -0
  406. package/packages/nfe/schemas/PL_010_V1/retEnvSuframaVistoria_v1.00.xsd +9 -0
  407. package/packages/nfe/schemas/PL_010_V1/retEnviNFe_v3.10.xsd +9 -0
  408. package/packages/nfe/schemas/PL_010_V1/retEnviNFe_v4.00.xsd +9 -0
  409. package/packages/nfe/schemas/PL_010_V1/retEventoCancEConf_v1.00.xsd +9 -0
  410. package/packages/nfe/schemas/PL_010_V1/retEventoCancEntregaNFe_v1.00.xsd +9 -0
  411. package/packages/nfe/schemas/PL_010_V1/retEventoCancInsucessoNFe_v1.00.xsd +9 -0
  412. package/packages/nfe/schemas/PL_010_V1/retEventoEConf_v1.00.xsd +9 -0
  413. package/packages/nfe/schemas/PL_010_V1/retEventoEPEC_v0.01.xsd +207 -0
  414. package/packages/nfe/schemas/PL_010_V1/retEventoEntregaNFe_v1.00.xsd +9 -0
  415. package/packages/nfe/schemas/PL_010_V1/retEventoInsucessoNFe_v1.00.xsd +9 -0
  416. package/packages/nfe/schemas/PL_010_V1/retInutNFe_v3.10.xsd +9 -0
  417. package/packages/nfe/schemas/PL_010_V1/retInutNFe_v4.00.xsd +9 -0
  418. package/packages/nfe/schemas/PL_010_V1/retPProrrogNFe_v1.0.xsd +233 -0
  419. package/packages/nfe/schemas/PL_010_V1/retconsNFeDest_v1.01.xsd +9 -0
  420. package/packages/nfe/schemas/PL_010_V1/tiposBasico_v1.03.xsd +872 -0
  421. package/packages/nfe/schemas/PL_010_V1/tiposBasico_v3.10.xsd +571 -0
  422. package/packages/nfe/schemas/PL_010_V1/tiposBasico_v4.00.xsd +598 -0
  423. package/packages/nfe/schemas/PL_010_V1/tiposBasicosCcgConsGTIN_v1.00.xsd +84 -0
  424. package/packages/nfe/schemas/PL_010_V1/tiposDistDFe_v1.00.xsd +217 -0
  425. package/packages/nfe/schemas/PL_010_V1/tiposDistDFe_v1.01.xsd +222 -0
  426. package/packages/nfe/schemas/PL_010_V1/xmldsig-core-schema_v1.01.xsd +98 -0
  427. package/packages/nfe/schemas/PL_010_V1.21/110150_v1.00.xsd +88 -0
  428. package/packages/nfe/schemas/PL_010_V1.21/Averb_v1.00.xsd +11 -0
  429. package/packages/nfe/schemas/PL_010_V1.21/CCe_v1.00.xsd +11 -0
  430. package/packages/nfe/schemas/PL_010_V1.21/DFeTiposBasicos_v1.00.xsd +1097 -0
  431. package/packages/nfe/schemas/PL_010_V1.21/EPEC_v1.00.xsd +9 -0
  432. package/packages/nfe/schemas/PL_010_V1.21/EPP1.xml +13 -0
  433. package/packages/nfe/schemas/PL_010_V1.21/ERP1.xml +19 -0
  434. package/packages/nfe/schemas/PL_010_V1.21/EventoCancEConf_v1.00.xsd +9 -0
  435. package/packages/nfe/schemas/PL_010_V1.21/EventoCancInsucessoNFe_v1.00.xsd +9 -0
  436. package/packages/nfe/schemas/PL_010_V1.21/EventoEConf_v1.00.xsd +9 -0
  437. package/packages/nfe/schemas/PL_010_V1.21/EventoInsucessoNFe_v1.00.xsd +9 -0
  438. package/packages/nfe/schemas/PL_010_V1.21/MT_inutNFe_v4.00.xsd +9 -0
  439. package/packages/nfe/schemas/PL_010_V1.21/SuframaInternaliza_v1.00.xsd +9 -0
  440. package/packages/nfe/schemas/PL_010_V1.21/SuframaVistoria_v1.00.xsd +9 -0
  441. package/packages/nfe/schemas/PL_010_V1.21/confRecebto_v1.00.xsd +9 -0
  442. package/packages/nfe/schemas/PL_010_V1.21/consCad_v2.00.xsd +9 -0
  443. package/packages/nfe/schemas/PL_010_V1.21/consGTIN_v1.00.xsd +10 -0
  444. package/packages/nfe/schemas/PL_010_V1.21/consNFeDest_v1.01.xsd +10 -0
  445. package/packages/nfe/schemas/PL_010_V1.21/consReciNFe_v3.10.xsd +9 -0
  446. package/packages/nfe/schemas/PL_010_V1.21/consReciNFe_v4.00.xsd +9 -0
  447. package/packages/nfe/schemas/PL_010_V1.21/consSitNFe_v3.10.xsd +9 -0
  448. package/packages/nfe/schemas/PL_010_V1.21/consSitNFe_v4.00.xsd +9 -0
  449. package/packages/nfe/schemas/PL_010_V1.21/consStatServ_v3.10.xsd +9 -0
  450. package/packages/nfe/schemas/PL_010_V1.21/consStatServ_v4.00.xsd +9 -0
  451. package/packages/nfe/schemas/PL_010_V1.21/distDFeInt_v1.00.xsd +71 -0
  452. package/packages/nfe/schemas/PL_010_V1.21/distDFeInt_v1.01.xsd +97 -0
  453. package/packages/nfe/schemas/PL_010_V1.21/downloadNFe_v1.00.xsd +10 -0
  454. package/packages/nfe/schemas/PL_010_V1.21/e110001_v1.00.xsd +73 -0
  455. package/packages/nfe/schemas/PL_010_V1.21/e110110_v1.00.xsd +58 -0
  456. package/packages/nfe/schemas/PL_010_V1.21/e110111_v1.00.xsd +42 -0
  457. package/packages/nfe/schemas/PL_010_V1.21/e110112_v1.00.xsd +69 -0
  458. package/packages/nfe/schemas/PL_010_V1.21/e110130_v1.00.xsd +102 -0
  459. package/packages/nfe/schemas/PL_010_V1.21/e110131_v1.00.xsd +51 -0
  460. package/packages/nfe/schemas/PL_010_V1.21/e110140NFCe_v1.00.xsd +118 -0
  461. package/packages/nfe/schemas/PL_010_V1.21/e110140NFe_v1.00.xsd +124 -0
  462. package/packages/nfe/schemas/PL_010_V1.21/e110140_v1.00.xsd +124 -0
  463. package/packages/nfe/schemas/PL_010_V1.21/e110150_v1.00.xsd +88 -0
  464. package/packages/nfe/schemas/PL_010_V1.21/e110192_v1.00.xsd +106 -0
  465. package/packages/nfe/schemas/PL_010_V1.21/e110193_v1.00.xsd +40 -0
  466. package/packages/nfe/schemas/PL_010_V1.21/e110750_v1.00.xsd +138 -0
  467. package/packages/nfe/schemas/PL_010_V1.21/e110751_v1.00.xsd +39 -0
  468. package/packages/nfe/schemas/PL_010_V1.21/e111500_v1.00.xsd +69 -0
  469. package/packages/nfe/schemas/PL_010_V1.21/e111501_v1.00.xsd +69 -0
  470. package/packages/nfe/schemas/PL_010_V1.21/e111502_v1.00.xsd +50 -0
  471. package/packages/nfe/schemas/PL_010_V1.21/e111503_v1.00.xsd +50 -0
  472. package/packages/nfe/schemas/PL_010_V1.21/e112110_v1.00.xsd +69 -0
  473. package/packages/nfe/schemas/PL_010_V1.21/e112120_v1.00 .xsd +107 -0
  474. package/packages/nfe/schemas/PL_010_V1.21/e112130_v1.00.xsd +119 -0
  475. package/packages/nfe/schemas/PL_010_V1.21/e112140_v1.00.xsd +107 -0
  476. package/packages/nfe/schemas/PL_010_V1.21/e210200_v1.00.xsd +31 -0
  477. package/packages/nfe/schemas/PL_010_V1.21/e210210_v1.00.xsd +31 -0
  478. package/packages/nfe/schemas/PL_010_V1.21/e210220_v1.00.xsd +44 -0
  479. package/packages/nfe/schemas/PL_010_V1.21/e210240_v1.00.xsd +44 -0
  480. package/packages/nfe/schemas/PL_010_V1.21/e211110_v1.00.xsd +134 -0
  481. package/packages/nfe/schemas/PL_010_V1.21/e211120_v1.00.xsd +124 -0
  482. package/packages/nfe/schemas/PL_010_V1.21/e211124_v1.00.xsd +107 -0
  483. package/packages/nfe/schemas/PL_010_V1.21/e211128_v1.00.xsd +69 -0
  484. package/packages/nfe/schemas/PL_010_V1.21/e211130_v1.00.xsd +107 -0
  485. package/packages/nfe/schemas/PL_010_V1.21/e211140_v1.00.xsd +107 -0
  486. package/packages/nfe/schemas/PL_010_V1.21/e211150_v1.00.xsd +85 -0
  487. package/packages/nfe/schemas/PL_010_V1.21/e212110_v1.00.xsd +70 -0
  488. package/packages/nfe/schemas/PL_010_V1.21/e212120_v1.00.xsd +69 -0
  489. package/packages/nfe/schemas/PL_010_V1.21/e411500_v1.00.xsd +134 -0
  490. package/packages/nfe/schemas/PL_010_V1.21/e411501_v1.00.xsd +134 -0
  491. package/packages/nfe/schemas/PL_010_V1.21/e411502_v1.00.xsd +95 -0
  492. package/packages/nfe/schemas/PL_010_V1.21/e411503_v1.00.xsd +95 -0
  493. package/packages/nfe/schemas/PL_010_V1.21/e412120_v1.00.xsd +88 -0
  494. package/packages/nfe/schemas/PL_010_V1.21/e412130_v1.00.xsd +88 -0
  495. package/packages/nfe/schemas/PL_010_V1.21/e610130_v1.00.xsd +128 -0
  496. package/packages/nfe/schemas/PL_010_V1.21/e610131_v1.00.xsd +68 -0
  497. package/packages/nfe/schemas/PL_010_V1.21/e790700_v1.00.xsd +148 -0
  498. package/packages/nfe/schemas/PL_010_V1.21/e990900_v1.00.xsd +87 -0
  499. package/packages/nfe/schemas/PL_010_V1.21/e990910_v1.00.xsd +81 -0
  500. package/packages/nfe/schemas/PL_010_V1.21/envAverb_v1.00.xsd +9 -0
  501. package/packages/nfe/schemas/PL_010_V1.21/envCCe_v1.00.xsd +10 -0
  502. package/packages/nfe/schemas/PL_010_V1.21/envCancelPProrrogNFe_v1.0.xsd +50 -0
  503. package/packages/nfe/schemas/PL_010_V1.21/envComprovanteEntregaNFe_v1.00.xsd +11 -0
  504. package/packages/nfe/schemas/PL_010_V1.21/envConfRecebto_v1.00.xsd +9 -0
  505. package/packages/nfe/schemas/PL_010_V1.21/envEPEC_v1.00.xsd +9 -0
  506. package/packages/nfe/schemas/PL_010_V1.21/envEventoAtorInteressado_v1.00.xsd +9 -0
  507. package/packages/nfe/schemas/PL_010_V1.21/envEventoCancEConf_v1.00.xsd +10 -0
  508. package/packages/nfe/schemas/PL_010_V1.21/envEventoCancEntregaNFe_v1.00.xsd +10 -0
  509. package/packages/nfe/schemas/PL_010_V1.21/envEventoCancInsucessoNFe_v1.00.xsd +10 -0
  510. package/packages/nfe/schemas/PL_010_V1.21/envEventoCancNFe_v1.00.xsd +9 -0
  511. package/packages/nfe/schemas/PL_010_V1.21/envEventoCancSubst_v1.00.xsd +9 -0
  512. package/packages/nfe/schemas/PL_010_V1.21/envEventoEConf_v1.00.xsd +10 -0
  513. package/packages/nfe/schemas/PL_010_V1.21/envEventoEntregaNFe_v1.00.xsd +10 -0
  514. package/packages/nfe/schemas/PL_010_V1.21/envEventoInsucessoNFe_v1.00.xsd +10 -0
  515. package/packages/nfe/schemas/PL_010_V1.21/envEvento_v1.00.xsd +9 -0
  516. package/packages/nfe/schemas/PL_010_V1.21/envFiscoNfe_v1.0.xsd +179 -0
  517. package/packages/nfe/schemas/PL_010_V1.21/envPProrrogNFe_v1.0.xsd +65 -0
  518. package/packages/nfe/schemas/PL_010_V1.21/envRemIndus_v1.00.xsd +9 -0
  519. package/packages/nfe/schemas/PL_010_V1.21/envSuframaInternaliza_v1.00.xsd +10 -0
  520. package/packages/nfe/schemas/PL_010_V1.21/envSuframaVistoria_v1.00.xsd +10 -0
  521. package/packages/nfe/schemas/PL_010_V1.21/enviNFe_v3.10.xsd +9 -0
  522. package/packages/nfe/schemas/PL_010_V1.21/enviNFe_v4.00.xsd +9 -0
  523. package/packages/nfe/schemas/PL_010_V1.21/eventoAtorInteressado_v1.00.xsd +9 -0
  524. package/packages/nfe/schemas/PL_010_V1.21/eventoCancEntregaNFe_v1.00.xsd +9 -0
  525. package/packages/nfe/schemas/PL_010_V1.21/eventoCancNFe_v1.00.xsd +9 -0
  526. package/packages/nfe/schemas/PL_010_V1.21/eventoCancSubst_v1.00.xsd +9 -0
  527. package/packages/nfe/schemas/PL_010_V1.21/eventoEPEC_v0.01.xsd +267 -0
  528. package/packages/nfe/schemas/PL_010_V1.21/eventoEPEC_v1.00.xsd +231 -0
  529. package/packages/nfe/schemas/PL_010_V1.21/eventoEntregaNFe_v1.00.xsd +9 -0
  530. package/packages/nfe/schemas/PL_010_V1.21/eventoRemIndus_v1.00.xsd +9 -0
  531. package/packages/nfe/schemas/PL_010_V1.21/inutNFe_v3.10.xsd +9 -0
  532. package/packages/nfe/schemas/PL_010_V1.21/inutNFe_v4.00.xsd +9 -0
  533. package/packages/nfe/schemas/PL_010_V1.21/leiauteAverb_v1.00.xsd +468 -0
  534. package/packages/nfe/schemas/PL_010_V1.21/leiauteCCe_v1.00.xsd +382 -0
  535. package/packages/nfe/schemas/PL_010_V1.21/leiauteCcgConsGTIN_v1.00.xsd +94 -0
  536. package/packages/nfe/schemas/PL_010_V1.21/leiauteComprovanteEntregaNFe_v1.00.xsd +487 -0
  537. package/packages/nfe/schemas/PL_010_V1.21/leiauteConfRecebto_v1.00.xsd +369 -0
  538. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsNFeDest_v1.01.xsd +483 -0
  539. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsSitNFe_v3.10.xsd +502 -0
  540. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsSitNFe_v4.00.xsd +502 -0
  541. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsStatServ_v3.10.xsd +98 -0
  542. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsStatServ_v4.00.xsd +98 -0
  543. package/packages/nfe/schemas/PL_010_V1.21/leiauteConsultaCadastro_v2.00.xsd +404 -0
  544. package/packages/nfe/schemas/PL_010_V1.21/leiauteDownloadNFe_v1.00.xsd +149 -0
  545. package/packages/nfe/schemas/PL_010_V1.21/leiauteEPEC_v1.00.xsd +423 -0
  546. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoAtorInteressado_v1.00.xsd +384 -0
  547. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoCancEConf_v1.00.xsd +296 -0
  548. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoCancEntregaNFe_v1.00.xsd +307 -0
  549. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoCancInsucessoNFe_v1.00.xsd +297 -0
  550. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoCancNFe_v1.00.xsd +358 -0
  551. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoCancSubst_v1.00.xsd +366 -0
  552. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoEConf_v1.00.xsd +296 -0
  553. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoEntregaNFe_v1.00.xsd +321 -0
  554. package/packages/nfe/schemas/PL_010_V1.21/leiauteEventoInsucessoNFe_v1.00.xsd +297 -0
  555. package/packages/nfe/schemas/PL_010_V1.21/leiauteEvento_v1.00.xsd +335 -0
  556. package/packages/nfe/schemas/PL_010_V1.21/leiauteInutNFe_v3.10.xsd +193 -0
  557. package/packages/nfe/schemas/PL_010_V1.21/leiauteInutNFe_v4.00.xsd +193 -0
  558. package/packages/nfe/schemas/PL_010_V1.21/leiauteInutNFe_v4.00_MT.xsd +200 -0
  559. package/packages/nfe/schemas/PL_010_V1.21/leiauteNFe_v3.10.xsd +6060 -0
  560. package/packages/nfe/schemas/PL_010_V1.21/leiauteNFe_v4.00.xsd +7558 -0
  561. package/packages/nfe/schemas/PL_010_V1.21/leiauteRemIndus_v1.00.xsd +344 -0
  562. package/packages/nfe/schemas/PL_010_V1.21/leiauteSuframaInternaliza_v1.00.xsd +642 -0
  563. package/packages/nfe/schemas/PL_010_V1.21/leiauteSuframaVistoria_v1.00.xsd +648 -0
  564. package/packages/nfe/schemas/PL_010_V1.21/nfe_v3.10.xsd +9 -0
  565. package/packages/nfe/schemas/PL_010_V1.21/nfe_v4.00.xsd +10 -0
  566. package/packages/nfe/schemas/PL_010_V1.21/procAverbNFe_v1.00.xsd +10 -0
  567. package/packages/nfe/schemas/PL_010_V1.21/procCCeNFe_v1.00.xsd +10 -0
  568. package/packages/nfe/schemas/PL_010_V1.21/procComprovanteEntregaNFe_v1.00.xsd +10 -0
  569. package/packages/nfe/schemas/PL_010_V1.21/procConfRecebtoNFe_v1.00.xsd +9 -0
  570. package/packages/nfe/schemas/PL_010_V1.21/procEPEC_v1.00.xsd +9 -0
  571. package/packages/nfe/schemas/PL_010_V1.21/procEventoAtorInteressado_v1.00.xsd +9 -0
  572. package/packages/nfe/schemas/PL_010_V1.21/procEventoCancEConf_v1.00.xsd +9 -0
  573. package/packages/nfe/schemas/PL_010_V1.21/procEventoCancEntregaNFe_v1.00.xsd +9 -0
  574. package/packages/nfe/schemas/PL_010_V1.21/procEventoCancInsucessoNFe_v1.00.xsd +9 -0
  575. package/packages/nfe/schemas/PL_010_V1.21/procEventoCancNFe_v1.00.xsd +9 -0
  576. package/packages/nfe/schemas/PL_010_V1.21/procEventoCancSubst_v1.00.xsd +9 -0
  577. package/packages/nfe/schemas/PL_010_V1.21/procEventoEConf_v1.00.xsd +9 -0
  578. package/packages/nfe/schemas/PL_010_V1.21/procEventoEntregaNFe_v1.00.xsd +9 -0
  579. package/packages/nfe/schemas/PL_010_V1.21/procEventoInsucessoNFe_v1.00.xsd +9 -0
  580. package/packages/nfe/schemas/PL_010_V1.21/procEventoNFe_v1.00.xsd +9 -0
  581. package/packages/nfe/schemas/PL_010_V1.21/procEventoNFe_v99.99.xsd +37 -0
  582. package/packages/nfe/schemas/PL_010_V1.21/procInutNFe_v3.10.xsd +9 -0
  583. package/packages/nfe/schemas/PL_010_V1.21/procInutNFe_v4.00.xsd +9 -0
  584. package/packages/nfe/schemas/PL_010_V1.21/procNFe_v3.10.xsd +9 -0
  585. package/packages/nfe/schemas/PL_010_V1.21/procNFe_v4.00.xsd +9 -0
  586. package/packages/nfe/schemas/PL_010_V1.21/procRemIndus_v1.00.xsd +9 -0
  587. package/packages/nfe/schemas/PL_010_V1.21/prod_leiauteNFe_v4.00.xsd +6736 -0
  588. package/packages/nfe/schemas/PL_010_V1.21/resEvento_v1.00.xsd +94 -0
  589. package/packages/nfe/schemas/PL_010_V1.21/resEvento_v1.01.xsd +108 -0
  590. package/packages/nfe/schemas/PL_010_V1.21/resNFe_v1.00.xsd +110 -0
  591. package/packages/nfe/schemas/PL_010_V1.21/resNFe_v1.01.xsd +122 -0
  592. package/packages/nfe/schemas/PL_010_V1.21/retComprovanteEntregaNFe_v1.00.xsd +10 -0
  593. package/packages/nfe/schemas/PL_010_V1.21/retConsCad_v2.00.xsd +9 -0
  594. package/packages/nfe/schemas/PL_010_V1.21/retConsGTIN_v1.00.xsd +9 -0
  595. package/packages/nfe/schemas/PL_010_V1.21/retConsReciNFe_v3.10.xsd +9 -0
  596. package/packages/nfe/schemas/PL_010_V1.21/retConsReciNFe_v4.00.xsd +9 -0
  597. package/packages/nfe/schemas/PL_010_V1.21/retConsSitNFe_v3.10.xsd +9 -0
  598. package/packages/nfe/schemas/PL_010_V1.21/retConsSitNFe_v4.00.xsd +9 -0
  599. package/packages/nfe/schemas/PL_010_V1.21/retConsStatServ_v3.10.xsd +9 -0
  600. package/packages/nfe/schemas/PL_010_V1.21/retConsStatServ_v4.00.xsd +9 -0
  601. package/packages/nfe/schemas/PL_010_V1.21/retDistDFeInt_v1.00.xsd +84 -0
  602. package/packages/nfe/schemas/PL_010_V1.21/retDistDFeInt_v1.01.xsd +99 -0
  603. package/packages/nfe/schemas/PL_010_V1.21/retDownloadNFe_v1.00.xsd +9 -0
  604. package/packages/nfe/schemas/PL_010_V1.21/retEnvAverb_v1.00.xsd +9 -0
  605. package/packages/nfe/schemas/PL_010_V1.21/retEnvAverb_v1.00_1.xsd +9 -0
  606. package/packages/nfe/schemas/PL_010_V1.21/retEnvCCe_v1.00.xsd +10 -0
  607. package/packages/nfe/schemas/PL_010_V1.21/retEnvCancelPProrrogNFe_v1.0.xsd +231 -0
  608. package/packages/nfe/schemas/PL_010_V1.21/retEnvConfRecebto_v1.00.xsd +9 -0
  609. package/packages/nfe/schemas/PL_010_V1.21/retEnvEPEC_v1.00.xsd +9 -0
  610. package/packages/nfe/schemas/PL_010_V1.21/retEnvEventoAtorInteressado_v1.00.xsd +9 -0
  611. package/packages/nfe/schemas/PL_010_V1.21/retEnvEventoCancNFe_v1.00.xsd +9 -0
  612. package/packages/nfe/schemas/PL_010_V1.21/retEnvEventoCancSubst_v1.00.xsd +9 -0
  613. package/packages/nfe/schemas/PL_010_V1.21/retEnvEvento_v1.00.xsd +9 -0
  614. package/packages/nfe/schemas/PL_010_V1.21/retEnvFiscoNFe_v1.0.xsd +234 -0
  615. package/packages/nfe/schemas/PL_010_V1.21/retEnvRemIndus_v1.00.xsd +9 -0
  616. package/packages/nfe/schemas/PL_010_V1.21/retEnvSuframaInternaliza_v1.00.xsd +9 -0
  617. package/packages/nfe/schemas/PL_010_V1.21/retEnvSuframaVistoria_v1.00.xsd +9 -0
  618. package/packages/nfe/schemas/PL_010_V1.21/retEnviNFe_v3.10.xsd +9 -0
  619. package/packages/nfe/schemas/PL_010_V1.21/retEnviNFe_v4.00.xsd +9 -0
  620. package/packages/nfe/schemas/PL_010_V1.21/retEventoCancEConf_v1.00.xsd +9 -0
  621. package/packages/nfe/schemas/PL_010_V1.21/retEventoCancEntregaNFe_v1.00.xsd +9 -0
  622. package/packages/nfe/schemas/PL_010_V1.21/retEventoCancInsucessoNFe_v1.00.xsd +9 -0
  623. package/packages/nfe/schemas/PL_010_V1.21/retEventoEConf_v1.00.xsd +9 -0
  624. package/packages/nfe/schemas/PL_010_V1.21/retEventoEPEC_v0.01.xsd +207 -0
  625. package/packages/nfe/schemas/PL_010_V1.21/retEventoEntregaNFe_v1.00.xsd +9 -0
  626. package/packages/nfe/schemas/PL_010_V1.21/retEventoInsucessoNFe_v1.00.xsd +9 -0
  627. package/packages/nfe/schemas/PL_010_V1.21/retInutNFe_v3.10.xsd +9 -0
  628. package/packages/nfe/schemas/PL_010_V1.21/retInutNFe_v4.00.xsd +9 -0
  629. package/packages/nfe/schemas/PL_010_V1.21/retPProrrogNFe_v1.0.xsd +233 -0
  630. package/packages/nfe/schemas/PL_010_V1.21/retconsNFeDest_v1.01.xsd +9 -0
  631. package/packages/nfe/schemas/PL_010_V1.21/tiposBasico_v1.03.xsd +872 -0
  632. package/packages/nfe/schemas/PL_010_V1.21/tiposBasico_v3.10.xsd +571 -0
  633. package/packages/nfe/schemas/PL_010_V1.21/tiposBasico_v4.00.xsd +598 -0
  634. package/packages/nfe/schemas/PL_010_V1.21/tiposBasicosCcgConsGTIN_v1.00.xsd +84 -0
  635. package/packages/nfe/schemas/PL_010_V1.21/tiposDistDFe_v1.00.xsd +217 -0
  636. package/packages/nfe/schemas/PL_010_V1.21/tiposDistDFe_v1.01.xsd +222 -0
  637. package/packages/nfe/schemas/PL_010_V1.21/xmldsig-core-schema_v1.01.xsd +98 -0
  638. package/dist/src-QBEIGHGM.mjs +0 -8
@@ -1,8 +0,0 @@
1
- import{a as s,b as te,c as b,d as E,e as Di,f as ht}from"./chunk-Z2TLKKAE.mjs";import ee from"fs";import Bi from"crypto";import{EventEmitter as Ri}from"events";var Ii,ct,ut=b(()=>{"use strict";Ii=class extends Ri{static{s(this,"PersistentFile")}constructor({filepath:t,newFilename:i,originalFilename:r,mimetype:n,hashAlgorithm:a}){super(),this.lastModifiedDate=null,Object.assign(this,{filepath:t,newFilename:i,originalFilename:r,mimetype:n,hashAlgorithm:a}),this.size=0,this._writeStream=null,typeof this.hashAlgorithm=="string"?this.hash=Bi.createHash(this.hashAlgorithm):this.hash=null}open(){this._writeStream=ee.createWriteStream(this.filepath),this._writeStream.on("error",t=>{this.emit("error",t)})}toJSON(){let t={size:this.size,filepath:this.filepath,newFilename:this.newFilename,mimetype:this.mimetype,mtime:this.lastModifiedDate,length:this.length,originalFilename:this.originalFilename};return this.hash&&this.hash!==""&&(t.hash=this.hash),t}toString(){return`PersistentFile: ${this.newFilename}, Original: ${this.originalFilename}, Path: ${this.filepath}`}write(t,i){if(this.hash&&this.hash.update(t),this._writeStream.closed){i();return}this._writeStream.write(t,()=>{this.lastModifiedDate=new Date,this.size+=t.length,this.emit("progress",this.size),i()})}end(t){this.hash&&(this.hash=this.hash.digest("hex")),this._writeStream.end(()=>{this.emit("end"),t()})}destroy(){this._writeStream.destroy();let t=this.filepath;setTimeout(function(){ee.unlink(t,()=>{})},1)}},ct=Ii});import{createHash as Pi}from"crypto";import{EventEmitter as Hi}from"events";var Ui,ft,dt=b(()=>{"use strict";Ui=class extends Hi{static{s(this,"VolatileFile")}constructor({filepath:t,newFilename:i,originalFilename:r,mimetype:n,hashAlgorithm:a,createFileWriteStream:o}){super(),this.lastModifiedDate=null,Object.assign(this,{filepath:t,newFilename:i,originalFilename:r,mimetype:n,hashAlgorithm:a,createFileWriteStream:o}),this.size=0,this._writeStream=null,typeof this.hashAlgorithm=="string"?this.hash=Pi(this.hashAlgorithm):this.hash=null}open(){this._writeStream=this.createFileWriteStream(this),this._writeStream.on("error",t=>{this.emit("error",t)})}destroy(){this._writeStream.destroy()}toJSON(){let t={size:this.size,newFilename:this.newFilename,length:this.length,originalFilename:this.originalFilename,mimetype:this.mimetype};return this.hash&&this.hash!==""&&(t.hash=this.hash),t}toString(){return`VolatileFile: ${this.originalFilename}`}write(t,i){if(this.hash&&this.hash.update(t),this._writeStream.closed||this._writeStream.destroyed){i();return}this._writeStream.write(t,()=>{this.size+=t.length,this.emit("progress",this.size),i()})}end(t){this.hash&&(this.hash=this.hash.digest("hex")),this._writeStream.end(()=>{this.emit("end"),t()})}},ft=Ui});var Se=E(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.toBig=c.shrSL=c.shrSH=c.rotrSL=c.rotrSH=c.rotrBL=c.rotrBH=c.rotr32L=c.rotr32H=c.rotlSL=c.rotlSH=c.rotlBL=c.rotlBH=c.add5L=c.add5H=c.add4L=c.add4H=c.add3L=c.add3H=void 0;c.add=ge;c.fromBig=mt;c.split=ie;var Y=BigInt(2**32-1),pt=BigInt(32);function mt(e,t=!1){return t?{h:Number(e&Y),l:Number(e>>pt&Y)}:{h:Number(e>>pt&Y)|0,l:Number(e&Y)|0}}s(mt,"fromBig");function ie(e,t=!1){let i=e.length,r=new Uint32Array(i),n=new Uint32Array(i);for(let a=0;a<i;a++){let{h:o,l}=mt(e[a],t);[r[a],n[a]]=[o,l]}return[r,n]}s(ie,"split");var re=s((e,t)=>BigInt(e>>>0)<<pt|BigInt(t>>>0),"toBig");c.toBig=re;var se=s((e,t,i)=>e>>>i,"shrSH");c.shrSH=se;var ne=s((e,t,i)=>e<<32-i|t>>>i,"shrSL");c.shrSL=ne;var oe=s((e,t,i)=>e>>>i|t<<32-i,"rotrSH");c.rotrSH=oe;var ae=s((e,t,i)=>e<<32-i|t>>>i,"rotrSL");c.rotrSL=ae;var le=s((e,t,i)=>e<<64-i|t>>>i-32,"rotrBH");c.rotrBH=le;var he=s((e,t,i)=>e>>>i-32|t<<64-i,"rotrBL");c.rotrBL=he;var ce=s((e,t)=>t,"rotr32H");c.rotr32H=ce;var ue=s((e,t)=>e,"rotr32L");c.rotr32L=ue;var fe=s((e,t,i)=>e<<i|t>>>32-i,"rotlSH");c.rotlSH=fe;var de=s((e,t,i)=>t<<i|e>>>32-i,"rotlSL");c.rotlSL=de;var pe=s((e,t,i)=>t<<i-32|e>>>64-i,"rotlBH");c.rotlBH=pe;var me=s((e,t,i)=>e<<i-32|t>>>64-i,"rotlBL");c.rotlBL=me;function ge(e,t,i,r){let n=(t>>>0)+(r>>>0);return{h:e+i+(n/2**32|0)|0,l:n|0}}s(ge,"add");var ye=s((e,t,i)=>(e>>>0)+(t>>>0)+(i>>>0),"add3L");c.add3L=ye;var _e=s((e,t,i,r)=>t+i+r+(e/2**32|0)|0,"add3H");c.add3H=_e;var be=s((e,t,i,r)=>(e>>>0)+(t>>>0)+(i>>>0)+(r>>>0),"add4L");c.add4L=be;var we=s((e,t,i,r,n)=>t+i+r+n+(e/2**32|0)|0,"add4H");c.add4H=we;var xe=s((e,t,i,r,n)=>(e>>>0)+(t>>>0)+(i>>>0)+(r>>>0)+(n>>>0),"add5L");c.add5L=xe;var Ee=s((e,t,i,r,n,a)=>t+i+r+n+a+(e/2**32|0)|0,"add5H");c.add5H=Ee;var Ni={fromBig:mt,split:ie,toBig:re,shrSH:se,shrSL:ne,rotrSH:oe,rotrSL:ae,rotrBH:le,rotrBL:he,rotr32H:ce,rotr32L:ue,rotlSH:fe,rotlSL:de,rotlBH:pe,rotlBL:me,add:ge,add3L:ye,add3H:_e,add4L:be,add4H:we,add5H:Ee,add5L:xe};c.default=Ni});var Ae=E(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.crypto=void 0;var O=te("crypto");X.crypto=O&&typeof O=="object"&&"webcrypto"in O?O.webcrypto:O&&typeof O=="object"&&"randomBytes"in O?O:void 0});var Re=E(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.wrapXOFConstructorWithOpts=h.wrapConstructorWithOpts=h.wrapConstructor=h.Hash=h.nextTick=h.swap32IfBE=h.byteSwapIfBE=h.swap8IfBE=h.isLE=void 0;h.isBytes=Te;h.anumber=gt;h.abytes=N;h.ahash=vi;h.aexists=Ci;h.aoutput=Mi;h.u8=zi;h.u32=ji;h.clean=$i;h.createView=Vi;h.rotr=qi;h.rotl=Wi;h.byteSwap=yt;h.byteSwap32=ke;h.bytesToHex=Xi;h.hexToBytes=Ji;h.asyncLoop=Qi;h.utf8ToBytes=_t;h.bytesToUtf8=Zi;h.toBytes=J;h.kdfInputToBytes=Gi;h.concatBytes=tr;h.checkOpts=er;h.createHasher=Oe;h.createOptHasher=De;h.createXOFer=Be;h.randomBytes=rr;var U=Ae();function Te(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}s(Te,"isBytes");function gt(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}s(gt,"anumber");function N(e,...t){if(!Te(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error("Uint8Array expected of length "+t+", got length="+e.length)}s(N,"abytes");function vi(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");gt(e.outputLen),gt(e.blockLen)}s(vi,"ahash");function Ci(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}s(Ci,"aexists");function Mi(e,t){N(e);let i=t.outputLen;if(e.length<i)throw new Error("digestInto() expects output buffer of length at least "+i)}s(Mi,"aoutput");function zi(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}s(zi,"u8");function ji(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}s(ji,"u32");function $i(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}s($i,"clean");function Vi(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}s(Vi,"createView");function qi(e,t){return e<<32-t|e>>>t}s(qi,"rotr");function Wi(e,t){return e<<t|e>>>32-t>>>0}s(Wi,"rotl");h.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function yt(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}s(yt,"byteSwap");h.swap8IfBE=h.isLE?e=>e:e=>yt(e);h.byteSwapIfBE=h.swap8IfBE;function ke(e){for(let t=0;t<e.length;t++)e[t]=yt(e[t]);return e}s(ke,"byteSwap32");h.swap32IfBE=h.isLE?e=>e:ke;var Le=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Yi=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Xi(e){if(N(e),Le)return e.toHex();let t="";for(let i=0;i<e.length;i++)t+=Yi[e[i]];return t}s(Xi,"bytesToHex");var L={_0:48,_9:57,A:65,F:70,a:97,f:102};function Fe(e){if(e>=L._0&&e<=L._9)return e-L._0;if(e>=L.A&&e<=L.F)return e-(L.A-10);if(e>=L.a&&e<=L.f)return e-(L.a-10)}s(Fe,"asciiToBase16");function Ji(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(Le)return Uint8Array.fromHex(e);let t=e.length,i=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let r=new Uint8Array(i);for(let n=0,a=0;n<i;n++,a+=2){let o=Fe(e.charCodeAt(a)),l=Fe(e.charCodeAt(a+1));if(o===void 0||l===void 0){let u=e[a]+e[a+1];throw new Error('hex string expected, got non-hex character "'+u+'" at index '+a)}r[n]=o*16+l}return r}s(Ji,"hexToBytes");var Ki=s(async()=>{},"nextTick");h.nextTick=Ki;async function Qi(e,t,i){let r=Date.now();for(let n=0;n<e;n++){i(n);let a=Date.now()-r;a>=0&&a<t||(await(0,h.nextTick)(),r+=a)}}s(Qi,"asyncLoop");function _t(e){if(typeof e!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(e))}s(_t,"utf8ToBytes");function Zi(e){return new TextDecoder().decode(e)}s(Zi,"bytesToUtf8");function J(e){return typeof e=="string"&&(e=_t(e)),N(e),e}s(J,"toBytes");function Gi(e){return typeof e=="string"&&(e=_t(e)),N(e),e}s(Gi,"kdfInputToBytes");function tr(...e){let t=0;for(let r=0;r<e.length;r++){let n=e[r];N(n),t+=n.length}let i=new Uint8Array(t);for(let r=0,n=0;r<e.length;r++){let a=e[r];i.set(a,n),n+=a.length}return i}s(tr,"concatBytes");function er(e,t){if(t!==void 0&&{}.toString.call(t)!=="[object Object]")throw new Error("options should be object or undefined");return Object.assign(e,t)}s(er,"checkOpts");var ir=class{static{s(this,"Hash")}};h.Hash=ir;function Oe(e){let t=s(r=>e().update(J(r)).digest(),"hashC"),i=e();return t.outputLen=i.outputLen,t.blockLen=i.blockLen,t.create=()=>e(),t}s(Oe,"createHasher");function De(e){let t=s((r,n)=>e(n).update(J(r)).digest(),"hashC"),i=e({});return t.outputLen=i.outputLen,t.blockLen=i.blockLen,t.create=r=>e(r),t}s(De,"createOptHasher");function Be(e){let t=s((r,n)=>e(n).update(J(r)).digest(),"hashC"),i=e({});return t.outputLen=i.outputLen,t.blockLen=i.blockLen,t.create=r=>e(r),t}s(Be,"createXOFer");h.wrapConstructor=Oe;h.wrapConstructorWithOpts=De;h.wrapXOFConstructorWithOpts=Be;function rr(e=32){if(U.crypto&&typeof U.crypto.getRandomValues=="function")return U.crypto.getRandomValues(new Uint8Array(e));if(U.crypto&&typeof U.crypto.randomBytes=="function")return Uint8Array.from(U.crypto.randomBytes(e));throw new Error("crypto.getRandomValues must be defined")}s(rr,"randomBytes")});var je=E(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.shake256=p.shake128=p.keccak_512=p.keccak_384=p.keccak_256=p.keccak_224=p.sha3_512=p.sha3_384=p.sha3_256=p.sha3_224=p.Keccak=void 0;p.keccakP=Ce;var M=Se(),w=Re(),sr=BigInt(0),C=BigInt(1),nr=BigInt(2),or=BigInt(7),ar=BigInt(256),lr=BigInt(113),He=[],Ue=[],Ne=[];for(let e=0,t=C,i=1,r=0;e<24;e++){[i,r]=[r,(2*i+3*r)%5],He.push(2*(5*r+i)),Ue.push((e+1)*(e+2)/2%64);let n=sr;for(let a=0;a<7;a++)t=(t<<C^(t>>or)*lr)%ar,t&nr&&(n^=C<<(C<<BigInt(a))-C);Ne.push(n)}var ve=(0,M.split)(Ne,!0),hr=ve[0],cr=ve[1],Ie=s((e,t,i)=>i>32?(0,M.rotlBH)(e,t,i):(0,M.rotlSH)(e,t,i),"rotlH"),Pe=s((e,t,i)=>i>32?(0,M.rotlBL)(e,t,i):(0,M.rotlSL)(e,t,i),"rotlL");function Ce(e,t=24){let i=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let o=0;o<10;o++)i[o]=e[o]^e[o+10]^e[o+20]^e[o+30]^e[o+40];for(let o=0;o<10;o+=2){let l=(o+8)%10,u=(o+2)%10,y=i[u],d=i[u+1],T=Ie(y,d,1)^i[l],_=Pe(y,d,1)^i[l+1];for(let S=0;S<50;S+=10)e[o+S]^=T,e[o+S+1]^=_}let n=e[2],a=e[3];for(let o=0;o<24;o++){let l=Ue[o],u=Ie(n,a,l),y=Pe(n,a,l),d=He[o];n=e[d],a=e[d+1],e[d]=u,e[d+1]=y}for(let o=0;o<50;o+=10){for(let l=0;l<10;l++)i[l]=e[o+l];for(let l=0;l<10;l++)e[o+l]^=~i[(l+2)%10]&i[(l+4)%10]}e[0]^=hr[r],e[1]^=cr[r]}(0,w.clean)(i)}s(Ce,"keccakP");var bt=class Me extends w.Hash{static{s(this,"Keccak")}constructor(t,i,r,n=!1,a=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=t,this.suffix=i,this.outputLen=r,this.enableXOF=n,this.rounds=a,(0,w.anumber)(r),!(0<t&&t<200))throw new Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=(0,w.u32)(this.state)}clone(){return this._cloneInto()}keccak(){(0,w.swap32IfBE)(this.state32),Ce(this.state32,this.rounds),(0,w.swap32IfBE)(this.state32),this.posOut=0,this.pos=0}update(t){(0,w.aexists)(this),t=(0,w.toBytes)(t),(0,w.abytes)(t);let{blockLen:i,state:r}=this,n=t.length;for(let a=0;a<n;){let o=Math.min(i-this.pos,n-a);for(let l=0;l<o;l++)r[this.pos++]^=t[a++];this.pos===i&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:t,suffix:i,pos:r,blockLen:n}=this;t[r]^=i,(i&128)!==0&&r===n-1&&this.keccak(),t[n-1]^=128,this.keccak()}writeInto(t){(0,w.aexists)(this,!1),(0,w.abytes)(t),this.finish();let i=this.state,{blockLen:r}=this;for(let n=0,a=t.length;n<a;){this.posOut>=r&&this.keccak();let o=Math.min(r-this.posOut,a-n);t.set(i.subarray(this.posOut,this.posOut+o),n),this.posOut+=o,n+=o}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return(0,w.anumber)(t),this.xofInto(new Uint8Array(t))}digestInto(t){if((0,w.aoutput)(t,this),this.finished)throw new Error("digest() was already called");return this.writeInto(t),this.destroy(),t}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,(0,w.clean)(this.state)}_cloneInto(t){let{blockLen:i,suffix:r,outputLen:n,rounds:a,enableXOF:o}=this;return t||(t=new Me(i,r,n,o,a)),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=a,t.suffix=r,t.outputLen=n,t.enableXOF=o,t.destroyed=this.destroyed,t}};p.Keccak=bt;var D=s((e,t,i)=>(0,w.createHasher)(()=>new bt(t,e,i)),"gen");p.sha3_224=D(6,144,224/8);p.sha3_256=D(6,136,256/8);p.sha3_384=D(6,104,384/8);p.sha3_512=D(6,72,512/8);p.keccak_224=D(1,144,224/8);p.keccak_256=D(1,136,256/8);p.keccak_384=D(1,104,384/8);p.keccak_512=D(1,72,512/8);var ze=s((e,t,i)=>(0,w.createXOFer)((r={})=>new bt(t,e,r.dkLen===void 0?i:r.dkLen,!0)),"genShake");p.shake128=ze(31,168,128/8);p.shake256=ze(31,136,256/8)});var Ke=E((Fs,B)=>{"use strict";var{sha3_512:ur}=je(),Ve=24,z=32,wt=s((e=4,t=Math.random)=>{let i="";for(;i.length<e;)i=i+Math.floor(t()*36).toString(36);return i},"createEntropy");function qe(e){let t=8n,i=0n;for(let r of e.values()){let n=BigInt(r);i=(i<<t)+n}return i}s(qe,"bufToBigInt");var We=s((e="")=>qe(ur(e)).toString(36).slice(1),"hash"),$e=Array.from({length:26},(e,t)=>String.fromCharCode(t+97)),fr=s(e=>$e[Math.floor(e()*$e.length)],"randomLetter"),Ye=s(({globalObj:e=typeof global<"u"?global:typeof window<"u"?window:{},random:t=Math.random}={})=>{let i=Object.keys(e).toString(),r=i.length?i+wt(z,t):wt(z,t);return We(r).substring(0,z)},"createFingerprint"),Xe=s(e=>()=>e++,"createCounter"),dr=476782367,Je=s(({random:e=Math.random,counter:t=Xe(Math.floor(e()*dr)),length:i=Ve,fingerprint:r=Ye({random:e})}={})=>s(function(){let a=fr(e),o=Date.now().toString(36),l=t().toString(36),u=wt(i,e),y=`${o+u+l+r}`;return`${a+We(y).substring(1,i)}`},"cuid2"),"init"),pr=Je(),mr=s((e,{minLength:t=2,maxLength:i=z}={})=>{let r=e.length,n=/^[0-9a-z]+$/;try{if(typeof e=="string"&&r>=t&&r<=i&&n.test(e))return!0}finally{}return!1},"isCuid");B.exports.getConstants=()=>({defaultLength:Ve,bigLength:z});B.exports.init=Je;B.exports.createId=pr;B.exports.bufToBigInt=qe;B.exports.createCounter=Xe;B.exports.createFingerprint=Ye;B.exports.isCuid=mr});var Qe=E((ks,j)=>{"use strict";var{createId:gr,init:yr,getConstants:_r,isCuid:br}=Ke();j.exports.createId=gr;j.exports.init=yr;j.exports.getConstants=_r;j.exports.isCuid=br});var xt=E((Ls,Ge)=>{"use strict";Ge.exports=Ze;function Ze(e,t){if(e&&t)return Ze(e)(t);if(typeof e!="function")throw new TypeError("need wrapper function");return Object.keys(e).forEach(function(r){i[r]=e[r]}),i;function i(){for(var r=new Array(arguments.length),n=0;n<r.length;n++)r[n]=arguments[n];var a=e.apply(this,r),o=r[r.length-1];return typeof a=="function"&&a!==o&&Object.keys(o).forEach(function(l){a[l]=o[l]}),a}s(i,"wrapper")}s(Ze,"wrappy")});var si=E((Ds,ri)=>{"use strict";var K,wr=typeof setImmediate=="function";ri.exports=ei;function ei(e){F.length||(ii(),Et=!0),F[F.length]=e}s(ei,"rawAsap");var F=[],Et=!1,A=0,xr=1024;function ti(){for(;A<F.length;){var e=A;if(A=A+1,F[e].call(),A>xr){for(var t=0,i=F.length-A;t<i;t++)F[t]=F[t+A];F.length-=A,A=0}}F.length=0,A=0,Et=!1}s(ti,"flush");ei.requestFlush=ii;function ii(){var e=process.domain;e&&(K||(K=te("domain")),K.active=process.domain=null),Et&&wr?setImmediate(ti):process.nextTick(ti),e&&(K.active=process.domain=e)}s(ii,"requestFlush")});var li=E((Rs,ai)=>{"use strict";var ni=si(),St=[];ai.exports=Er;function Er(e){var t;St.length?t=St.pop():t=new oi,t.task=e,t.domain=process.domain,ni(t)}s(Er,"asap");function oi(){this.task=null,this.domain=null}s(oi,"RawTask");oi.prototype.call=function(){this.domain&&this.domain.enter();var e=!0;try{this.task.call(),e=!1,this.domain&&this.domain.exit()}finally{e&&ni.requestFlush(),this.task=null,this.domain=null,St.push(this)}}});var ui=E((Ps,ci)=>{"use strict";var Sr=xt();ci.exports=Sr(Ar);var hi=li();function Ar(e){var t=!0;return hi(function(){t=!1}),s(function(){var r=arguments,n=this;t?hi(function(){e.apply(n,r)}):e.apply(n,r)},"zalgoSafe")}s(Ar,"dezalgo")});var pi=E((Us,At)=>{"use strict";var fi=xt();At.exports=fi(Q);At.exports.strict=fi(di);Q.proto=Q(function(){Object.defineProperty(Function.prototype,"once",{value:s(function(){return Q(this)},"value"),configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:s(function(){return di(this)},"value"),configurable:!0})});function Q(e){var t=s(function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))},"f");return t.called=!1,t}s(Q,"once");function di(e){var t=s(function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},"f"),i=e.name||"Function wrapped with `once`";return t.onceError=i+" shouldn't be called more than once",t.called=!1,t}s(di,"onceStrict")});var $={};Di($,{aborted:()=>kt,biggerThanMaxFileSize:()=>zt,biggerThanTotalMaxFileSize:()=>Pt,cannotCreateDir:()=>$t,default:()=>m,filenameNotString:()=>Dt,malformedMultipart:()=>Nt,maxFieldsExceeded:()=>Rt,maxFieldsSizeExceeded:()=>Bt,maxFilesExceeded:()=>Mt,missingContentType:()=>Ut,missingMultipartBoundary:()=>vt,missingPlugin:()=>Ft,noEmptyFiles:()=>Ht,noParser:()=>Lt,pluginFailed:()=>jt,pluginFunction:()=>Tt,smallerThanMinFileSize:()=>It,uninitializedParser:()=>Ot,unknownTransferEncoding:()=>Ct});var Ft,Tt,kt,Lt,Ot,Dt,Bt,Rt,It,Pt,Ht,Ut,Nt,vt,Ct,Mt,zt,jt,$t,Fr,m,I=b(()=>{"use strict";Ft=1e3,Tt=1001,kt=1002,Lt=1003,Ot=1004,Dt=1005,Bt=1006,Rt=1007,It=1008,Pt=1009,Ht=1010,Ut=1011,Nt=1012,vt=1013,Ct=1014,Mt=1015,zt=1016,jt=1017,$t=1018,Fr=class extends Error{static{s(this,"FormidableError")}constructor(e,t,i=500){super(e),this.code=t,this.httpCode=i}},m=Fr});import{Transform as Tr}from"stream";var kr,Z,Vt=b(()=>{"use strict";kr=class extends Tr{static{s(this,"DummyParser")}constructor(t,i={}){super(),this.globalOptions={...i},this.incomingForm=t}_flush(t){this.incomingForm.ended=!0,this.incomingForm._maybeEnd(),t()}},Z=kr});import{Transform as Lr}from"stream";function Ir(e){return e|32}var x,f,mi,R,G,tt,Or,V,Dr,Br,Rr,gi,yi,q,et=b(()=>{"use strict";I();I();x=0,f={PARSER_UNINITIALIZED:x++,START:x++,START_BOUNDARY:x++,HEADER_FIELD_START:x++,HEADER_FIELD:x++,HEADER_VALUE_START:x++,HEADER_VALUE:x++,HEADER_VALUE_ALMOST_DONE:x++,HEADERS_ALMOST_DONE:x++,PART_DATA_START:x++,PART_DATA:x++,PART_END:x++,END:x++},mi=1,R={PART_BOUNDARY:mi,LAST_BOUNDARY:mi*=2},G=10,tt=13,Or=32,V=45,Dr=58,Br=97,Rr=122;s(Ir,"lower");gi={};Object.keys(f).forEach(e=>{gi[e]=f[e]});yi=class _i extends Lr{static{s(this,"MultipartParser")}constructor(t={}){super({readableObjectMode:!0}),this.boundary=null,this.boundaryChars=null,this.lookbehind=null,this.bufferLength=0,this.state=f.PARSER_UNINITIALIZED,this.globalOptions={...t},this.index=null,this.flags=0}_endUnexpected(){return new m(`MultipartParser.end(): stream ended unexpectedly: ${this.explain()}`,1012,400)}_flush(t){this.state===f.HEADER_FIELD_START&&this.index===0||this.state===f.PART_DATA&&this.index===this.boundary.length?(this._handleCallback("partEnd"),this._handleCallback("end"),t()):this.state!==f.END?t(this._endUnexpected()):t()}initWithBoundary(t){this.boundary=Buffer.from(`\r
2
- --${t}`),this.lookbehind=Buffer.alloc(this.boundary.length+8),this.state=f.START,this.boundaryChars={};for(let i=0;i<this.boundary.length;i++)this.boundaryChars[this.boundary[i]]=!0}_handleCallback(t,i,r,n){r!==void 0&&r===n||this.push({name:t,buffer:i,start:r,end:n})}_transform(t,i,r){let n=0,a=this.index,{index:o,state:l,flags:u}=this,{lookbehind:y,boundary:d,boundaryChars:T}=this,_=d.length,S=_-1;this.bufferLength=t.length;let g=null,at=null,v=s((k,W)=>{this[`${k}Mark`]=typeof W=="number"?W:n},"setMark"),Gt=s(k=>{delete this[`${k}Mark`]},"clearMarkSymbol"),H=s((k,W)=>{let lt=`${k}Mark`;lt in this&&(W?(this._handleCallback(k,t,this[lt],n),Gt(k)):(this._handleCallback(k,t,this[lt],t.length),v(k,0)))},"dataCallback");for(n=0;n<this.bufferLength;n++)switch(g=t[n],l){case f.PARSER_UNINITIALIZED:r(this._endUnexpected());return;case f.START:o=0,l=f.START_BOUNDARY;case f.START_BOUNDARY:if(o===d.length-2){if(g===V)u|=R.LAST_BOUNDARY;else if(g!==tt){r(this._endUnexpected());return}o++;break}else if(o-1===d.length-2){if(u&R.LAST_BOUNDARY&&g===V)this._handleCallback("end"),l=f.END,u=0;else if(!(u&R.LAST_BOUNDARY)&&g===G)o=0,this._handleCallback("partBegin"),l=f.HEADER_FIELD_START;else{r(this._endUnexpected());return}break}g!==d[o+2]&&(o=-2),g===d[o+2]&&o++;break;case f.HEADER_FIELD_START:l=f.HEADER_FIELD,v("headerField"),o=0;case f.HEADER_FIELD:if(g===tt){Gt("headerField"),l=f.HEADERS_ALMOST_DONE;break}if(o++,g===V)break;if(g===Dr){if(o===1){r(this._endUnexpected());return}H("headerField",!0),l=f.HEADER_VALUE_START;break}if(at=Ir(g),at<Br||at>Rr){r(this._endUnexpected());return}break;case f.HEADER_VALUE_START:if(g===Or)break;v("headerValue"),l=f.HEADER_VALUE;case f.HEADER_VALUE:g===tt&&(H("headerValue",!0),this._handleCallback("headerEnd"),l=f.HEADER_VALUE_ALMOST_DONE);break;case f.HEADER_VALUE_ALMOST_DONE:if(g!==G){r(this._endUnexpected());return}l=f.HEADER_FIELD_START;break;case f.HEADERS_ALMOST_DONE:if(g!==G){r(this._endUnexpected());return}this._handleCallback("headersEnd"),l=f.PART_DATA_START;break;case f.PART_DATA_START:l=f.PART_DATA,v("partData");case f.PART_DATA:if(a=o,o===0){for(n+=S;n<this.bufferLength&&!(t[n]in T);)n+=_;n-=S,g=t[n]}if(o<d.length)d[o]===g?(o===0&&H("partData",!0),o++):o=0;else if(o===d.length)o++,g===tt?u|=R.PART_BOUNDARY:g===V?u|=R.LAST_BOUNDARY:o=0;else if(o-1===d.length)if(u&R.PART_BOUNDARY){if(o=0,g===G){u&=~R.PART_BOUNDARY,this._handleCallback("partEnd"),this._handleCallback("partBegin"),l=f.HEADER_FIELD_START;break}}else u&R.LAST_BOUNDARY&&g===V?(this._handleCallback("partEnd"),this._handleCallback("end"),l=f.END,u=0):o=0;o>0?y[o-1]=g:a>0&&(this._handleCallback("partData",y,0,a),a=0,v("partData"),n--);break;case f.END:break;default:r(this._endUnexpected());return}return H("headerField"),H("headerValue"),H("partData"),this.index=o,this.state=l,this.flags=u,r(),this.bufferLength}explain(){return`state = ${_i.stateToString(this.state)}`}};yi.stateToString=e=>{for(let t in f)if(f[t]===e)return t};q=Object.assign(yi,{STATES:gi})});import{PassThrough as Pr}from"stream";var Hr,qt,Wt=b(()=>{"use strict";Hr=class extends Pr{static{s(this,"OctetStreamParser")}constructor(t={}){super(),this.globalOptions={...t}}},qt=Hr});async function it(e,t){let i=this||e;return/octet-stream/i.test(i.headers["content-type"])&&await Nr.call(i,i,t),i}async function Nr(e,t){this.type=Ur;let i=this.headers["x-file-name"],r=this.headers["content-type"],n={originalFilename:i,mimetype:r},a=this._getNewName(n),o=this._joinDirectoryName(a),l=await this._newFile({newFilename:a,filepath:o,originalFilename:i,mimetype:r});this.emit("fileBegin",i,l),l.open(),this.openedFiles.push(l),this._flushing+=1,this._parser=new qt(this.options);let u=0;return this._parser.on("data",y=>{this.pause(),u+=1,l.write(y,()=>{u-=1,this.resume(),this.ended&&this._parser.emit("doneWritingFile")})}),this._parser.on("end",()=>{this._flushing-=1,this.ended=!0;let y=s(()=>{l.end(()=>{this.emit("file","file",l),this._maybeEnd()})},"done");u===0?y():this._parser.once("doneWritingFile",y)}),this}var Ur,bi=b(()=>{"use strict";Wt();Ur="octet-stream";s(it,"plugin");s(Nr,"init")});import{Transform as vr}from"stream";var Cr,Yt,Xt=b(()=>{"use strict";Cr=class extends vr{static{s(this,"QuerystringParser")}constructor(t={}){super({readableObjectMode:!0}),this.globalOptions={...t},this.buffer="",this.bufferLength=0}_transform(t,i,r){this.buffer+=t.toString("ascii"),this.bufferLength=this.buffer.length,r()}_flush(t){let i=new URLSearchParams(this.buffer);for(let[r,n]of i)this.push({key:r,value:n});this.buffer="",t()}},Yt=Cr});function rt(e,t){let i=this||e;return/urlencoded/i.test(i.headers["content-type"])&&zr.call(i,i,t),i}function zr(e,t){this.type=Mr;let i=new Yt(this.options);return i.on("data",({key:r,value:n})=>{this.emit("field",r,n)}),i.once("end",()=>{this.ended=!0,this._maybeEnd()}),this._parser=i,this}var Mr,wi=b(()=>{"use strict";Xt();Mr="urlencoded";s(rt,"plugin");s(zr,"init")});import{Stream as jr}from"stream";function st(e,t){let i=this||e;if(/multipart/i.test(i.headers["content-type"])){let n=i.headers["content-type"].match(/boundary=(?:"([^"]+)"|([^;]+))/i);if(n)Vr(n[1]||n[2]).call(i,i,t);else{let a=new m("bad content-type header, no multipart boundary",1013,400);i._error(a)}}return i}function Vr(e){return s(function(){this.type=$r;let i=new q(this.options),r,n,a;i.initWithBoundary(e),i.on("data",async({name:o,buffer:l,start:u,end:y})=>{if(o==="partBegin")a=new jr,a.readable=!0,a.headers={},a.name=null,a.originalFilename=null,a.mimetype=null,a.transferEncoding=this.options.encoding,a.transferBuffer="",r="",n="";else if(o==="headerField")r+=l.toString(this.options.encoding,u,y);else if(o==="headerValue")n+=l.toString(this.options.encoding,u,y);else if(o==="headerEnd"){r=r.toLowerCase(),a.headers[r]=n;let d=n.match(/\bname=("([^"]*)"|([^\(\)<>@,;:\\"\/\[\]\?=\{\}\s\t/]+))/i);r==="content-disposition"?(d&&(a.name=d[2]||d[3]||""),a.originalFilename=this._getFileName(n)):r==="content-type"?a.mimetype=n:r==="content-transfer-encoding"&&(a.transferEncoding=n.toLowerCase()),r="",n=""}else if(o==="headersEnd"){switch(a.transferEncoding){case"binary":case"7bit":case"8bit":case"utf-8":{let d=s(_=>{_.name==="partData"&&a.emit("data",_.buffer.slice(_.start,_.end))},"dataPropagation"),T=s(_=>{_.name==="partEnd"&&(a.emit("end"),i.off("data",d),i.off("data",T))},"dataStopPropagation");i.on("data",d),i.on("data",T);break}case"base64":{let d=s(_=>{if(_.name==="partData"){a.transferBuffer+=_.buffer.slice(_.start,_.end).toString("ascii");let S=parseInt(a.transferBuffer.length/4,10)*4;a.emit("data",Buffer.from(a.transferBuffer.substring(0,S),"base64")),a.transferBuffer=a.transferBuffer.substring(S)}},"dataPropagation"),T=s(_=>{_.name==="partEnd"&&(a.emit("data",Buffer.from(a.transferBuffer,"base64")),a.emit("end"),i.off("data",d),i.off("data",T))},"dataStopPropagation");i.on("data",d),i.on("data",T);break}default:return this._error(new m("unknown transfer-encoding",1014,501))}this._parser.pause(),await this.onPart(a),this._parser.resume()}else o==="end"&&(this.ended=!0,this._maybeEnd())}),this._parser=i},"initMultipart")}var $r,xi=b(()=>{"use strict";et();I();I();$r="multipart";s(st,"plugin");s(Vr,"createInitMultipart")});import{Transform as qr}from"stream";var Wr,Jt,Kt=b(()=>{"use strict";Wr=class extends qr{static{s(this,"JSONParser")}constructor(t={}){super({readableObjectMode:!0}),this.chunks=[],this.globalOptions={...t}}_transform(t,i,r){this.chunks.push(String(t)),r()}_flush(t){try{let i=JSON.parse(this.chunks.join(""));this.push(i)}catch(i){t(i);return}this.chunks=null,t()}},Jt=Wr});function nt(e,t){let i=this||e;return/json/i.test(i.headers["content-type"])&&Xr.call(i,i,t),i}function Xr(e,t){this.type=Yr;let i=new Jt(this.options);i.on("data",r=>{this.fields=r}),i.once("end",()=>{this.ended=!0,this._maybeEnd()}),this._parser=i}var Yr,Ei=b(()=>{"use strict";Kt();Yr="json";s(nt,"plugin");s(Xr,"init")});var Qt=b(()=>{"use strict";bi();wi();xi();Ei()});import{EventEmitter as Jr}from"events";import Kr from"fs/promises";import ot from"os";import P from"path";import{StringDecoder as Qr}from"string_decoder";function Si(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Ai,Fi,Ti,Zr,Gr,Zt,ts,es,is,rs,ki,Li=b(()=>{"use strict";Ai=ht(Qe(),1),Fi=ht(ui(),1),Ti=ht(pi(),1);I();ut();dt();Vt();et();Qt();Zr=`${process.env.NODE_ENV}-${ot.platform()}-${ot.hostname()}`,Gr=(0,Ai.init)({length:25,fingerprint:Zr.toLowerCase()}),Zt={maxFields:1e3,maxFieldsSize:20*1024*1024,maxFiles:1/0,maxFileSize:200*1024*1024,maxTotalFileSize:void 0,minFileSize:1,allowEmptyFiles:!1,createDirsFromUploads:!1,keepExtensions:!1,encoding:"utf-8",hashAlgorithm:!1,uploadDir:ot.tmpdir(),enabledPlugins:[it,rt,st,nt],fileWriteStreamHandler:null,defaultInvalidName:"invalid-name",filter(e){return!0},filename:void 0};s(Si,"hasOwnProp");ts=s(function(e){let t=Promise.resolve();return async function(...i){let r=t,n,a;return t=new Promise(function(o){a=o}),await r,n=e(...i),n.then(a).catch(a),n}},"decorateForceSequential"),es=ts(function(e){let t=P.dirname(e);return Kr.mkdir(t,{recursive:!0})}),is=s(e=>{let t=e.charCodeAt(0);return!(t===46||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)},"invalidExtensionChar"),rs=class extends Jr{static{s(this,"IncomingForm")}constructor(t={}){super(),this.options={...Zt,...t},this.options.maxTotalFileSize||(this.options.maxTotalFileSize=this.options.maxFileSize);let i=P.resolve(this.options.uploadDir||this.options.uploaddir||ot.tmpdir());if(this.uploaddir=i,this.uploadDir=i,["error","headers","type","bytesExpected","bytesReceived","_parser","req"].forEach(r=>{this[r]=null}),this._setUpRename(),this._flushing=0,this._fieldsSize=0,this._totalFileSize=0,this._plugins=[],this.openedFiles=[],this.options.enabledPlugins=[].concat(this.options.enabledPlugins).filter(Boolean),this.options.enabledPlugins.length===0)throw new m("expect at least 1 enabled builtin plugin, see options.enabledPlugins",1e3);this.options.enabledPlugins.forEach(r=>{this.use(r)}),this._setUpMaxFields(),this._setUpMaxFiles(),this.ended=void 0,this.type=void 0}use(t){if(typeof t!="function")throw new m(".use: expect `plugin` to be a function",1001);return this._plugins.push(t.bind(this)),this}pause(){try{this.req.pause()}catch(t){return this.ended||this._error(t),!1}return!0}resume(){try{this.req.resume()}catch(t){return this.ended||this._error(t),!1}return!0}async parse(t,i){this.req=t;let r;if(!i){let o,l;r=new Promise((u,y)=>{o=u,l=y}),i=s((u,y,d)=>{u?l(u):o([y,d])},"cb")}let n=(0,Ti.default)((0,Fi.default)(i));this.fields={};let a={};return this.on("field",(o,l)=>{this.type==="multipart"||this.type==="urlencoded"?Si(this.fields,o)?this.fields[o].push(l):this.fields[o]=[l]:this.fields[o]=l}),this.on("file",(o,l)=>{Si(a,o)?a[o].push(l):a[o]=[l]}),this.on("error",o=>{n(o,this.fields,a)}),this.on("end",()=>{n(null,this.fields,a)}),await this.writeHeaders(t.headers),t.on("error",o=>{this._error(o)}).on("aborted",()=>{this.emit("aborted"),this._error(new m("Request aborted",1002))}).on("data",o=>{try{this.write(o)}catch(l){this._error(l)}}).on("end",()=>{this.error||this._parser&&this._parser.end()}),r||this}async writeHeaders(t){if(this.headers=t,this._parseContentLength(),await this._parseContentType(),!this._parser){this._error(new m("no parser found",1003,415));return}this._parser.once("error",i=>{this._error(i)})}write(t){return this.error?null:this._parser?(this.bytesReceived+=t.length,this.emit("progress",this.bytesReceived,this.bytesExpected),this._parser.write(t),this.bytesReceived):(this._error(new m("uninitialized parser",1004)),null)}onPart(t){return this._handlePart(t)}async _handlePart(t){if(t.originalFilename&&typeof t.originalFilename!="string"){this._error(new m("the part.originalFilename should be string when it exists",1005));return}if(!t.mimetype){let o="",l=new Qr(t.transferEncoding||this.options.encoding);t.on("data",u=>{if(this._fieldsSize+=u.length,this._fieldsSize>this.options.maxFieldsSize){this._error(new m(`options.maxFieldsSize (${this.options.maxFieldsSize} bytes) exceeded, received ${this._fieldsSize} bytes of field data`,1006,413));return}o+=l.write(u)}),t.on("end",()=>{this.emit("field",t.name,o)});return}if(!this.options.filter(t))return;this._flushing+=1;let i=0,r=this._getNewName(t),n=this._joinDirectoryName(r),a=await this._newFile({newFilename:r,filepath:n,originalFilename:t.originalFilename,mimetype:t.mimetype});a.on("error",o=>{this._error(o)}),this.emit("fileBegin",t.name,a),a.open(),this.openedFiles.push(a),t.on("data",o=>{if(this._totalFileSize+=o.length,i+=o.length,this._totalFileSize>this.options.maxTotalFileSize){this._error(new m(`options.maxTotalFileSize (${this.options.maxTotalFileSize} bytes) exceeded, received ${this._totalFileSize} bytes of file data`,1009,413));return}o.length!==0&&(this.pause(),a.write(o,()=>{this.resume()}))}),t.on("end",()=>{if(!this.options.allowEmptyFiles&&i===0){this._error(new m("options.allowEmptyFiles is false, file size should be greater than 0",1010,400));return}if(i<this.options.minFileSize){this._error(new m(`options.minFileSize (${this.options.minFileSize} bytes) inferior, received ${i} bytes of file data`,1008,400));return}if(i>this.options.maxFileSize){this._error(new m(`options.maxFileSize (${this.options.maxFileSize} bytes), received ${i} bytes of file data`,1016,413));return}a.end(()=>{this._flushing-=1,this.emit("file",t.name,a),this._maybeEnd()})})}async _parseContentType(){if(this.bytesExpected===0){this._parser=new Z(this,this.options);return}if(!this.headers["content-type"]){this._error(new m("bad content-type header, no content-type",1011,400));return}new Z(this,this.options);let t=[];await Promise.all(this._plugins.map(async(i,r)=>{let n=null;try{n=await i(this,this.options)||this}catch(a){let o=new m(`plugin on index ${r} failed with: ${a.message}`,1017,500);throw o.idx=r,o}Object.assign(this,n),this.emit("plugin",r,n)})),this.emit("pluginsResults",t)}_error(t,i="error"){this.error||this.ended||(this.req=null,this.error=t,this.emit(i,t),this.openedFiles.forEach(r=>{r.destroy()}))}_parseContentLength(){this.bytesReceived=0,this.headers["content-length"]?this.bytesExpected=parseInt(this.headers["content-length"],10):this.headers["transfer-encoding"]===void 0&&(this.bytesExpected=0),this.bytesExpected!==null&&this.emit("progress",this.bytesReceived,this.bytesExpected)}_newParser(){return new q(this.options)}async _newFile({filepath:t,originalFilename:i,mimetype:r,newFilename:n}){if(this.options.fileWriteStreamHandler)return new ft({newFilename:n,filepath:t,originalFilename:i,mimetype:r,createFileWriteStream:this.options.fileWriteStreamHandler,hashAlgorithm:this.options.hashAlgorithm});if(this.options.createDirsFromUploads)try{await es(t)}catch{this._error(new m("cannot create directory",1018,409))}return new ct({newFilename:n,filepath:t,originalFilename:i,mimetype:r,hashAlgorithm:this.options.hashAlgorithm})}_getFileName(t){let i=t.match(/\bfilename=("(.*?)"|([^()<>{}[\]@,;:"?=\s/\t]+))($|;\s)/i);if(!i)return null;let r=i[2]||i[3]||"",n=r.substr(r.lastIndexOf("\\")+1);return n=n.replace(/%22/g,'"'),n=n.replace(/&#([\d]{4});/g,(a,o)=>String.fromCharCode(o)),n}_getExtension(t){if(!t)return"";let i=P.basename(t),r=i.indexOf("."),n=i.lastIndexOf("."),a=P.extname(i);r!==n&&(a=i.slice(r));let o,l=Array.from(a).findIndex(is);return l===-1?o=a:o=a.substring(0,l),o==="."?"":o}_joinDirectoryName(t){let i=P.join(this.uploadDir,t);return i.startsWith(this.uploadDir)?i:P.join(this.uploadDir,this.options.defaultInvalidName)}_setUpRename(){typeof this.options.filename=="function"?this._getNewName=i=>{let r="",n=this.options.defaultInvalidName;return i.originalFilename&&({ext:r,name:n}=P.parse(i.originalFilename),this.options.keepExtensions!==!0&&(r="")),this.options.filename.call(this,n,r,i,this)}:this._getNewName=i=>{let r=Gr();if(i&&this.options.keepExtensions){let n=typeof i=="string"?i:i.originalFilename;return`${r}${this._getExtension(n)}`}return r}}_setUpMaxFields(){if(this.options.maxFields!==1/0){let t=0;this.on("field",()=>{t+=1,t>this.options.maxFields&&this._error(new m(`options.maxFields (${this.options.maxFields}) exceeded`,1007,413))})}}_setUpMaxFiles(){if(this.options.maxFiles!==1/0){let t=0;this.on("fileBegin",()=>{t+=1,t>this.options.maxFiles&&this._error(new m(`options.maxFiles (${this.options.maxFiles}) exceeded`,1015,413))})}}_maybeEnd(){!this.ended||this._flushing||this.error||(this.req=null,this.emit("end"))}},ki=rs});var Oi=b(()=>{"use strict";Kt();Vt();et();Wt();Xt()});var ss,Xn,Jn,ns=b(()=>{ut();dt();Li();Oi();Qt();I();ss=s((...e)=>new ki(...e),"formidable"),{enabledPlugins:Xn}=Zt,Jn=ss});ns();export{Z as DummyParser,ct as File,ki as Formidable,ki as IncomingForm,Jt as JSONParser,q as MultipartParser,qt as OctetStreamParser,qt as OctetstreamParser,ct as PersistentFile,Yt as QueryStringParser,Yt as QuerystringParser,ft as VolatileFile,Jn as default,Zt as defaultOptions,Xn as enabledPlugins,$ as errors,ss as formidable,nt as json,st as multipart,it as octetstream,rt as querystring};
3
- /*! Bundled license information:
4
-
5
- @noble/hashes/utils.js:
6
- (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
7
- */
8
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL1BlcnNpc3RlbnRGaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9mb3JtaWRhYmxlQDMuNS40L25vZGVfbW9kdWxlcy9mb3JtaWRhYmxlL3NyYy9Wb2xhdGlsZUZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bub2JsZStoYXNoZXNAMS44LjAvbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvc3JjL191NjQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bub2JsZStoYXNoZXNAMS44LjAvbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvc3JjL2NyeXB0b05vZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bub2JsZStoYXNoZXNAMS44LjAvbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Abm9ibGUraGFzaGVzQDEuOC4wL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL3NyYy9zaGEzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGFyYWxsZWxkcml2ZStjdWlkMkAyLjMuMS9ub2RlX21vZHVsZXMvQHBhcmFsbGVsZHJpdmUvY3VpZDIvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGFyYWxsZWxkcml2ZStjdWlkMkAyLjMuMS9ub2RlX21vZHVsZXMvQHBhcmFsbGVsZHJpdmUvY3VpZDIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dyYXBweUAxLjAuMi9ub2RlX21vZHVsZXMvd3JhcHB5L3dyYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYXNhcEAyLjAuNi9ub2RlX21vZHVsZXMvYXNhcC9yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzYXBAMi4wLjYvbm9kZV9tb2R1bGVzL2FzYXAvYXNhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGV6YWxnb0AxLjAuNC9ub2RlX21vZHVsZXMvZGV6YWxnby9kZXphbGdvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9vbmNlQDEuNC4wL25vZGVfbW9kdWxlcy9vbmNlL29uY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL0Zvcm1pZGFibGVFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvcGFyc2Vycy9EdW1teS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvcGFyc2Vycy9NdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BhcnNlcnMvT2N0ZXRTdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BsdWdpbnMvb2N0ZXRzdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BhcnNlcnMvUXVlcnlzdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BsdWdpbnMvcXVlcnlzdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BsdWdpbnMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9mb3JtaWRhYmxlQDMuNS40L25vZGVfbW9kdWxlcy9mb3JtaWRhYmxlL3NyYy9wYXJzZXJzL0pTT04uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1pZGFibGVAMy41LjQvbm9kZV9tb2R1bGVzL2Zvcm1pZGFibGUvc3JjL3BsdWdpbnMvanNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvcGx1Z2lucy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvRm9ybWlkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvcGFyc2Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWlkYWJsZUAzLjUuNC9ub2RlX21vZHVsZXMvZm9ybWlkYWJsZS9zcmMvaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuXG5jbGFzcyBQZXJzaXN0ZW50RmlsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKHsgZmlsZXBhdGgsIG5ld0ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBtaW1ldHlwZSwgaGFzaEFsZ29yaXRobSB9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubGFzdE1vZGlmaWVkRGF0ZSA9IG51bGw7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7IGZpbGVwYXRoLCBuZXdGaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgbWltZXR5cGUsIGhhc2hBbGdvcml0aG0gfSk7XG5cbiAgICB0aGlzLnNpemUgPSAwO1xuICAgIHRoaXMuX3dyaXRlU3RyZWFtID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5oYXNoQWxnb3JpdGhtID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5oYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYXNoID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuX3dyaXRlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0odGhpcy5maWxlcGF0aCk7XG4gICAgdGhpcy5fd3JpdGVTdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIGZpbGVwYXRoOiB0aGlzLmZpbGVwYXRoLFxuICAgICAgbmV3RmlsZW5hbWU6IHRoaXMubmV3RmlsZW5hbWUsXG4gICAgICBtaW1ldHlwZTogdGhpcy5taW1ldHlwZSxcbiAgICAgIG10aW1lOiB0aGlzLmxhc3RNb2RpZmllZERhdGUsXG4gICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgb3JpZ2luYWxGaWxlbmFtZTogdGhpcy5vcmlnaW5hbEZpbGVuYW1lLFxuICAgIH07XG4gICAgaWYgKHRoaXMuaGFzaCAmJiB0aGlzLmhhc2ggIT09ICcnKSB7XG4gICAgICBqc29uLmhhc2ggPSB0aGlzLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBQZXJzaXN0ZW50RmlsZTogJHt0aGlzLm5ld0ZpbGVuYW1lfSwgT3JpZ2luYWw6ICR7dGhpcy5vcmlnaW5hbEZpbGVuYW1lfSwgUGF0aDogJHt0aGlzLmZpbGVwYXRofWA7XG4gIH1cblxuICB3cml0ZShidWZmZXIsIGNiKSB7XG4gICAgaWYgKHRoaXMuaGFzaCkge1xuICAgICAgdGhpcy5oYXNoLnVwZGF0ZShidWZmZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93cml0ZVN0cmVhbS5jbG9zZWQpIHtcbiAgICAgIGNiKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fd3JpdGVTdHJlYW0ud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICB0aGlzLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5zaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcy5zaXplKTtcbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICBlbmQoY2IpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2ggPSB0aGlzLmhhc2guZGlnZXN0KCdoZXgnKTtcbiAgICB9XG4gICAgdGhpcy5fd3JpdGVTdHJlYW0uZW5kKCgpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICBjYigpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl93cml0ZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgY29uc3QgZmlsZXBhdGggPSB0aGlzLmZpbGVwYXRoOyBcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnMudW5saW5rKGZpbGVwYXRoLCAoKSA9PiB7fSk7XG4gICAgfSwgMSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQZXJzaXN0ZW50RmlsZTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuXG5jbGFzcyBWb2xhdGlsZUZpbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3Rvcih7IGZpbGVwYXRoLCBuZXdGaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgbWltZXR5cGUsIGhhc2hBbGdvcml0aG0sIGNyZWF0ZUZpbGVXcml0ZVN0cmVhbSB9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubGFzdE1vZGlmaWVkRGF0ZSA9IG51bGw7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7IGZpbGVwYXRoLCBuZXdGaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgbWltZXR5cGUsIGhhc2hBbGdvcml0aG0sIGNyZWF0ZUZpbGVXcml0ZVN0cmVhbSB9KTtcblxuICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgdGhpcy5fd3JpdGVTdHJlYW0gPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmhhc2hBbGdvcml0aG0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmhhc2ggPSBjcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFzaCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLl93cml0ZVN0cmVhbSA9IHRoaXMuY3JlYXRlRmlsZVdyaXRlU3RyZWFtKHRoaXMpO1xuICAgIHRoaXMuX3dyaXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl93cml0ZVN0cmVhbS5kZXN0cm95KCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIG5ld0ZpbGVuYW1lOiB0aGlzLm5ld0ZpbGVuYW1lLFxuICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IHRoaXMub3JpZ2luYWxGaWxlbmFtZSxcbiAgICAgIG1pbWV0eXBlOiB0aGlzLm1pbWV0eXBlLFxuICAgIH07XG4gICAgaWYgKHRoaXMuaGFzaCAmJiB0aGlzLmhhc2ggIT09ICcnKSB7XG4gICAgICBqc29uLmhhc2ggPSB0aGlzLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBWb2xhdGlsZUZpbGU6ICR7dGhpcy5vcmlnaW5hbEZpbGVuYW1lfWA7XG4gIH1cblxuICB3cml0ZShidWZmZXIsIGNiKSB7XG4gICAgaWYgKHRoaXMuaGFzaCkge1xuICAgICAgdGhpcy5oYXNoLnVwZGF0ZShidWZmZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93cml0ZVN0cmVhbS5jbG9zZWQgfHwgdGhpcy5fd3JpdGVTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICBjYigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3dyaXRlU3RyZWFtLndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgdGhpcy5zaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcy5zaXplKTtcbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICBlbmQoY2IpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2ggPSB0aGlzLmhhc2guZGlnZXN0KCdoZXgnKTtcbiAgICB9XG4gICAgdGhpcy5fd3JpdGVTdHJlYW0uZW5kKCgpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICBjYigpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvbGF0aWxlRmlsZTtcbiIsICIvKipcbiAqIEludGVybmFsIGhlbHBlcnMgZm9yIHU2NC4gQmlnVWludDY0QXJyYXkgaXMgdG9vIHNsb3cgYXMgcGVyIDIwMjUsIHNvIHdlIGltcGxlbWVudCBpdCB1c2luZyBVaW50MzJBcnJheS5cbiAqIEB0b2RvIHJlLWNoZWNrIGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDIyMTI1ODhcbiAqIEBtb2R1bGVcbiAqL1xuY29uc3QgVTMyX01BU0s2NCA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMiAqKiAzMiAtIDEpO1xuY29uc3QgXzMybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMzIpO1xuXG5mdW5jdGlvbiBmcm9tQmlnKFxuICBuOiBiaWdpbnQsXG4gIGxlID0gZmFsc2Vcbik6IHtcbiAgaDogbnVtYmVyO1xuICBsOiBudW1iZXI7XG59IHtcbiAgaWYgKGxlKSByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIoKG4gPj4gXzMybikgJiBVMzJfTUFTSzY0KSB9O1xuICByZXR1cm4geyBoOiBOdW1iZXIoKG4gPj4gXzMybikgJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0KGxzdDogYmlnaW50W10sIGxlID0gZmFsc2UpOiBVaW50MzJBcnJheVtdIHtcbiAgY29uc3QgbGVuID0gbHN0Lmxlbmd0aDtcbiAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxlbik7XG4gIGxldCBBbCA9IG5ldyBVaW50MzJBcnJheShsZW4pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpO1xuICAgIFtBaFtpXSwgQWxbaV1dID0gW2gsIGxdO1xuICB9XG4gIHJldHVybiBbQWgsIEFsXTtcbn1cblxuY29uc3QgdG9CaWcgPSAoaDogbnVtYmVyLCBsOiBudW1iZXIpOiBiaWdpbnQgPT4gKEJpZ0ludChoID4+PiAwKSA8PCBfMzJuKSB8IEJpZ0ludChsID4+PiAwKTtcbi8vIGZvciBTaGlmdCBpbiBbMCwgMzIpXG5jb25zdCBzaHJTSCA9IChoOiBudW1iZXIsIF9sOiBudW1iZXIsIHM6IG51bWJlcik6IG51bWJlciA9PiBoID4+PiBzO1xuY29uc3Qgc2hyU0wgPSAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcik6IG51bWJlciA9PiAoaCA8PCAoMzIgLSBzKSkgfCAobCA+Pj4gcyk7XG4vLyBSaWdodCByb3RhdGUgZm9yIFNoaWZ0IGluIFsxLCAzMilcbmNvbnN0IHJvdHJTSCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChoID4+PiBzKSB8IChsIDw8ICgzMiAtIHMpKTtcbmNvbnN0IHJvdHJTTCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChoIDw8ICgzMiAtIHMpKSB8IChsID4+PiBzKTtcbi8vIFJpZ2h0IHJvdGF0ZSBmb3IgU2hpZnQgaW4gKDMyLCA2NCksIE5PVEU6IDMyIGlzIHNwZWNpYWwgY2FzZS5cbmNvbnN0IHJvdHJCSCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChoIDw8ICg2NCAtIHMpKSB8IChsID4+PiAocyAtIDMyKSk7XG5jb25zdCByb3RyQkwgPSAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcik6IG51bWJlciA9PiAoaCA+Pj4gKHMgLSAzMikpIHwgKGwgPDwgKDY0IC0gcykpO1xuLy8gUmlnaHQgcm90YXRlIGZvciBzaGlmdD09PTMyIChqdXN0IHN3YXBzIGwmaClcbmNvbnN0IHJvdHIzMkggPSAoX2g6IG51bWJlciwgbDogbnVtYmVyKTogbnVtYmVyID0+IGw7XG5jb25zdCByb3RyMzJMID0gKGg6IG51bWJlciwgX2w6IG51bWJlcik6IG51bWJlciA9PiBoO1xuLy8gTGVmdCByb3RhdGUgZm9yIFNoaWZ0IGluIFsxLCAzMilcbmNvbnN0IHJvdGxTSCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChoIDw8IHMpIHwgKGwgPj4+ICgzMiAtIHMpKTtcbmNvbnN0IHJvdGxTTCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChsIDw8IHMpIHwgKGggPj4+ICgzMiAtIHMpKTtcbi8vIExlZnQgcm90YXRlIGZvciBTaGlmdCBpbiAoMzIsIDY0KSwgTk9URTogMzIgaXMgc3BlY2lhbCBjYXNlLlxuY29uc3Qgcm90bEJIID0gKGg6IG51bWJlciwgbDogbnVtYmVyLCBzOiBudW1iZXIpOiBudW1iZXIgPT4gKGwgPDwgKHMgLSAzMikpIHwgKGggPj4+ICg2NCAtIHMpKTtcbmNvbnN0IHJvdGxCTCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKTogbnVtYmVyID0+IChoIDw8IChzIC0gMzIpKSB8IChsID4+PiAoNjQgLSBzKSk7XG5cbi8vIEpTIHVzZXMgMzItYml0IHNpZ25lZCBpbnRlZ2VycyBmb3IgYml0d2lzZSBvcGVyYXRpb25zIHdoaWNoIG1lYW5zIHdlIGNhbm5vdFxuLy8gc2ltcGxlIHRha2UgY2Fycnkgb3V0IG9mIGxvdyBiaXQgc3VtIGJ5IHNoaWZ0LCB3ZSBuZWVkIHRvIHVzZSBkaXZpc2lvbi5cbmZ1bmN0aW9uIGFkZChcbiAgQWg6IG51bWJlcixcbiAgQWw6IG51bWJlcixcbiAgQmg6IG51bWJlcixcbiAgQmw6IG51bWJlclxuKToge1xuICBoOiBudW1iZXI7XG4gIGw6IG51bWJlcjtcbn0ge1xuICBjb25zdCBsID0gKEFsID4+PiAwKSArIChCbCA+Pj4gMCk7XG4gIHJldHVybiB7IGg6IChBaCArIEJoICsgKChsIC8gMiAqKiAzMikgfCAwKSkgfCAwLCBsOiBsIHwgMCB9O1xufVxuLy8gQWRkaXRpb24gd2l0aCBtb3JlIHRoYW4gMiBlbGVtZW50c1xuY29uc3QgYWRkM0wgPSAoQWw6IG51bWJlciwgQmw6IG51bWJlciwgQ2w6IG51bWJlcik6IG51bWJlciA9PiAoQWwgPj4+IDApICsgKEJsID4+PiAwKSArIChDbCA+Pj4gMCk7XG5jb25zdCBhZGQzSCA9IChsb3c6IG51bWJlciwgQWg6IG51bWJlciwgQmg6IG51bWJlciwgQ2g6IG51bWJlcik6IG51bWJlciA9PlxuICAoQWggKyBCaCArIENoICsgKChsb3cgLyAyICoqIDMyKSB8IDApKSB8IDA7XG5jb25zdCBhZGQ0TCA9IChBbDogbnVtYmVyLCBCbDogbnVtYmVyLCBDbDogbnVtYmVyLCBEbDogbnVtYmVyKTogbnVtYmVyID0+XG4gIChBbCA+Pj4gMCkgKyAoQmwgPj4+IDApICsgKENsID4+PiAwKSArIChEbCA+Pj4gMCk7XG5jb25zdCBhZGQ0SCA9IChsb3c6IG51bWJlciwgQWg6IG51bWJlciwgQmg6IG51bWJlciwgQ2g6IG51bWJlciwgRGg6IG51bWJlcik6IG51bWJlciA9PlxuICAoQWggKyBCaCArIENoICsgRGggKyAoKGxvdyAvIDIgKiogMzIpIHwgMCkpIHwgMDtcbmNvbnN0IGFkZDVMID0gKEFsOiBudW1iZXIsIEJsOiBudW1iZXIsIENsOiBudW1iZXIsIERsOiBudW1iZXIsIEVsOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgKEFsID4+PiAwKSArIChCbCA+Pj4gMCkgKyAoQ2wgPj4+IDApICsgKERsID4+PiAwKSArIChFbCA+Pj4gMCk7XG5jb25zdCBhZGQ1SCA9IChsb3c6IG51bWJlciwgQWg6IG51bWJlciwgQmg6IG51bWJlciwgQ2g6IG51bWJlciwgRGg6IG51bWJlciwgRWg6IG51bWJlcik6IG51bWJlciA9PlxuICAoQWggKyBCaCArIENoICsgRGggKyBFaCArICgobG93IC8gMiAqKiAzMikgfCAwKSkgfCAwO1xuXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCB7XG4gIGFkZCwgYWRkM0gsIGFkZDNMLCBhZGQ0SCwgYWRkNEwsIGFkZDVILCBhZGQ1TCwgZnJvbUJpZywgcm90bEJILCByb3RsQkwsIHJvdGxTSCwgcm90bFNMLCByb3RyMzJILCByb3RyMzJMLCByb3RyQkgsIHJvdHJCTCwgcm90clNILCByb3RyU0wsIHNoclNILCBzaHJTTCwgc3BsaXQsIHRvQmlnXG59O1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCB1NjQ6IHsgZnJvbUJpZzogdHlwZW9mIGZyb21CaWc7IHNwbGl0OiB0eXBlb2Ygc3BsaXQ7IHRvQmlnOiAoaDogbnVtYmVyLCBsOiBudW1iZXIpID0+IGJpZ2ludDsgc2hyU0g6IChoOiBudW1iZXIsIF9sOiBudW1iZXIsIHM6IG51bWJlcikgPT4gbnVtYmVyOyBzaHJTTDogKGg6IG51bWJlciwgbDogbnVtYmVyLCBzOiBudW1iZXIpID0+IG51bWJlcjsgcm90clNIOiAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcikgPT4gbnVtYmVyOyByb3RyU0w6IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKSA9PiBudW1iZXI7IHJvdHJCSDogKGg6IG51bWJlciwgbDogbnVtYmVyLCBzOiBudW1iZXIpID0+IG51bWJlcjsgcm90ckJMOiAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcikgPT4gbnVtYmVyOyByb3RyMzJIOiAoX2g6IG51bWJlciwgbDogbnVtYmVyKSA9PiBudW1iZXI7IHJvdHIzMkw6IChoOiBudW1iZXIsIF9sOiBudW1iZXIpID0+IG51bWJlcjsgcm90bFNIOiAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcikgPT4gbnVtYmVyOyByb3RsU0w6IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKSA9PiBudW1iZXI7IHJvdGxCSDogKGg6IG51bWJlciwgbDogbnVtYmVyLCBzOiBudW1iZXIpID0+IG51bWJlcjsgcm90bEJMOiAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcikgPT4gbnVtYmVyOyBhZGQ6IHR5cGVvZiBhZGQ7IGFkZDNMOiAoQWw6IG51bWJlciwgQmw6IG51bWJlciwgQ2w6IG51bWJlcikgPT4gbnVtYmVyOyBhZGQzSDogKGxvdzogbnVtYmVyLCBBaDogbnVtYmVyLCBCaDogbnVtYmVyLCBDaDogbnVtYmVyKSA9PiBudW1iZXI7IGFkZDRMOiAoQWw6IG51bWJlciwgQmw6IG51bWJlciwgQ2w6IG51bWJlciwgRGw6IG51bWJlcikgPT4gbnVtYmVyOyBhZGQ0SDogKGxvdzogbnVtYmVyLCBBaDogbnVtYmVyLCBCaDogbnVtYmVyLCBDaDogbnVtYmVyLCBEaDogbnVtYmVyKSA9PiBudW1iZXI7IGFkZDVIOiAobG93OiBudW1iZXIsIEFoOiBudW1iZXIsIEJoOiBudW1iZXIsIENoOiBudW1iZXIsIERoOiBudW1iZXIsIEVoOiBudW1iZXIpID0+IG51bWJlcjsgYWRkNUw6IChBbDogbnVtYmVyLCBCbDogbnVtYmVyLCBDbDogbnVtYmVyLCBEbDogbnVtYmVyLCBFbDogbnVtYmVyKSA9PiBudW1iZXI7IH0gPSB7XG4gIGZyb21CaWcsIHNwbGl0LCB0b0JpZyxcbiAgc2hyU0gsIHNoclNMLFxuICByb3RyU0gsIHJvdHJTTCwgcm90ckJILCByb3RyQkwsXG4gIHJvdHIzMkgsIHJvdHIzMkwsXG4gIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTCxcbiAgYWRkLCBhZGQzTCwgYWRkM0gsIGFkZDRMLCBhZGQ0SCwgYWRkNUgsIGFkZDVMLFxufTtcbmV4cG9ydCBkZWZhdWx0IHU2NDtcbiIsICIvKipcbiAqIEludGVybmFsIHdlYmNyeXB0byBhbGlhcy5cbiAqIFdlIHByZWZlciBXZWJDcnlwdG8gYWthIGdsb2JhbFRoaXMuY3J5cHRvLCB3aGljaCBleGlzdHMgaW4gbm9kZS5qcyAxNisuXG4gKiBGYWxscyBiYWNrIHRvIE5vZGUuanMgYnVpbHQtaW4gY3J5cHRvIGZvciBOb2RlLmpzIDw9djE0LlxuICogU2VlIHV0aWxzLnRzIGZvciBkZXRhaWxzLlxuICogQG1vZHVsZVxuICovXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyBuYyBmcm9tICdub2RlOmNyeXB0byc7XG5leHBvcnQgY29uc3QgY3J5cHRvOiBhbnkgPVxuICBuYyAmJiB0eXBlb2YgbmMgPT09ICdvYmplY3QnICYmICd3ZWJjcnlwdG8nIGluIG5jXG4gICAgPyAobmMud2ViY3J5cHRvIGFzIGFueSlcbiAgICA6IG5jICYmIHR5cGVvZiBuYyA9PT0gJ29iamVjdCcgJiYgJ3JhbmRvbUJ5dGVzJyBpbiBuY1xuICAgICAgPyBuY1xuICAgICAgOiB1bmRlZmluZWQ7XG4iLCAiLyoqXG4gKiBVdGlsaXRpZXMgZm9yIGhleCwgYnl0ZXMsIENTUFJORy5cbiAqIEBtb2R1bGVcbiAqL1xuLyohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuXG4vLyBXZSB1c2UgV2ViQ3J5cHRvIGFrYSBnbG9iYWxUaGlzLmNyeXB0bywgd2hpY2ggZXhpc3RzIGluIGJyb3dzZXJzIGFuZCBub2RlLmpzIDE2Ky5cbi8vIG5vZGUuanMgdmVyc2lvbnMgZWFybGllciB0aGFuIHYxOSBkb24ndCBkZWNsYXJlIGl0IGluIGdsb2JhbCBzY29wZS5cbi8vIEZvciBub2RlLmpzLCBwYWNrYWdlLmpzb24jZXhwb3J0cyBmaWVsZCBtYXBwaW5nIHJld3JpdGVzIGltcG9ydFxuLy8gZnJvbSBgY3J5cHRvYCB0byBgY3J5cHRvTm9kZWAsIHdoaWNoIGltcG9ydHMgbmF0aXZlIG1vZHVsZS5cbi8vIE1ha2VzIHRoZSB1dGlscyB1bi1pbXBvcnRhYmxlIGluIGJyb3dzZXJzIHdpdGhvdXQgYSBidW5kbGVyLlxuLy8gT25jZSBub2RlLmpzIDE4IGlzIGRlcHJlY2F0ZWQgKDIwMjUtMDQtMzApLCB3ZSBjYW4ganVzdCBkcm9wIHRoZSBpbXBvcnQuXG5pbXBvcnQgeyBjcnlwdG8gfSBmcm9tICdAbm9ibGUvaGFzaGVzL2NyeXB0byc7XG5cbi8qKiBDaGVja3MgaWYgc29tZXRoaW5nIGlzIFVpbnQ4QXJyYXkuIEJlIGNhcmVmdWw6IG5vZGVqcyBCdWZmZXIgd2lsbCByZXR1cm4gdHJ1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0J5dGVzKGE6IHVua25vd24pOiBhIGlzIFVpbnQ4QXJyYXkge1xuICByZXR1cm4gYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgKEFycmF5QnVmZmVyLmlzVmlldyhhKSAmJiBhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVaW50OEFycmF5Jyk7XG59XG5cbi8qKiBBc3NlcnRzIHNvbWV0aGluZyBpcyBwb3NpdGl2ZSBpbnRlZ2VyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFudW1iZXIobjogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobikgfHwgbiA8IDApIHRocm93IG5ldyBFcnJvcigncG9zaXRpdmUgaW50ZWdlciBleHBlY3RlZCwgZ290ICcgKyBuKTtcbn1cblxuLyoqIEFzc2VydHMgc29tZXRoaW5nIGlzIFVpbnQ4QXJyYXkuICovXG5leHBvcnQgZnVuY3Rpb24gYWJ5dGVzKGI6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQsIC4uLmxlbmd0aHM6IG51bWJlcltdKTogdm9pZCB7XG4gIGlmICghaXNCeXRlcyhiKSkgdGhyb3cgbmV3IEVycm9yKCdVaW50OEFycmF5IGV4cGVjdGVkJyk7XG4gIGlmIChsZW5ndGhzLmxlbmd0aCA+IDAgJiYgIWxlbmd0aHMuaW5jbHVkZXMoYi5sZW5ndGgpKVxuICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJyArIGxlbmd0aHMgKyAnLCBnb3QgbGVuZ3RoPScgKyBiLmxlbmd0aCk7XG59XG5cbi8qKiBBc3NlcnRzIHNvbWV0aGluZyBpcyBoYXNoICovXG5leHBvcnQgZnVuY3Rpb24gYWhhc2goaDogSUhhc2gpOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiBoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBoLmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggc2hvdWxkIGJlIHdyYXBwZWQgYnkgdXRpbHMuY3JlYXRlSGFzaGVyJyk7XG4gIGFudW1iZXIoaC5vdXRwdXRMZW4pO1xuICBhbnVtYmVyKGguYmxvY2tMZW4pO1xufVxuXG4vKiogQXNzZXJ0cyBhIGhhc2ggaW5zdGFuY2UgaGFzIG5vdCBiZWVuIGRlc3Ryb3llZCAvIGZpbmlzaGVkICovXG5leHBvcnQgZnVuY3Rpb24gYWV4aXN0cyhpbnN0YW5jZTogYW55LCBjaGVja0ZpbmlzaGVkID0gdHJ1ZSk6IHZvaWQge1xuICBpZiAoaW5zdGFuY2UuZGVzdHJveWVkKSB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkJyk7XG4gIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKSB0aHJvdyBuZXcgRXJyb3IoJ0hhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQnKTtcbn1cblxuLyoqIEFzc2VydHMgb3V0cHV0IGlzIHByb3Blcmx5LXNpemVkIGJ5dGUgYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBhb3V0cHV0KG91dDogYW55LCBpbnN0YW5jZTogYW55KTogdm9pZCB7XG4gIGFieXRlcyhvdXQpO1xuICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47XG4gIGlmIChvdXQubGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3RJbnRvKCkgZXhwZWN0cyBvdXRwdXQgYnVmZmVyIG9mIGxlbmd0aCBhdCBsZWFzdCAnICsgbWluKTtcbiAgfVxufVxuXG4vKiogR2VuZXJpYyB0eXBlIGVuY29tcGFzc2luZyA4LzE2LzMyLWJ5dGUgYXJyYXlzIC0gYnV0IG5vdCA2NC1ieXRlLiAqL1xuLy8gcHJldHRpZXItaWdub3JlXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID0gSW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkgfCBVaW50OEFycmF5IHxcbiAgVWludDE2QXJyYXkgfCBJbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBJbnQzMkFycmF5O1xuXG4vKiogQ2FzdCB1OCAvIHUxNiAvIHUzMiB0byB1OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OChhcnI6IFR5cGVkQXJyYXkpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBhcnIuYnl0ZUxlbmd0aCk7XG59XG5cbi8qKiBDYXN0IHU4IC8gdTE2IC8gdTMyIHRvIHUzMi4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1MzIoYXJyOiBUeXBlZEFycmF5KTogVWludDMyQXJyYXkge1xuICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGFyci5ieXRlTGVuZ3RoIC8gNCkpO1xufVxuXG4vKiogWmVyb2l6ZSBhIGJ5dGUgYXJyYXkuIFdhcm5pbmc6IEpTIHByb3ZpZGVzIG5vIGd1YXJhbnRlZXMuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW4oLi4uYXJyYXlzOiBUeXBlZEFycmF5W10pOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICBhcnJheXNbaV0uZmlsbCgwKTtcbiAgfVxufVxuXG4vKiogQ3JlYXRlIERhdGFWaWV3IG9mIGFuIGFycmF5IGZvciBlYXN5IGJ5dGUtbGV2ZWwgbWFuaXB1bGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpZXcoYXJyOiBUeXBlZEFycmF5KTogRGF0YVZpZXcge1xuICByZXR1cm4gbmV3IERhdGFWaWV3KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBhcnIuYnl0ZUxlbmd0aCk7XG59XG5cbi8qKiBUaGUgcm90YXRlIHJpZ2h0IChjaXJjdWxhciByaWdodCBzaGlmdCkgb3BlcmF0aW9uIGZvciB1aW50MzIgKi9cbmV4cG9ydCBmdW5jdGlvbiByb3RyKHdvcmQ6IG51bWJlciwgc2hpZnQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAod29yZCA8PCAoMzIgLSBzaGlmdCkpIHwgKHdvcmQgPj4+IHNoaWZ0KTtcbn1cblxuLyoqIFRoZSByb3RhdGUgbGVmdCAoY2lyY3VsYXIgbGVmdCBzaGlmdCkgb3BlcmF0aW9uIGZvciB1aW50MzIgKi9cbmV4cG9ydCBmdW5jdGlvbiByb3RsKHdvcmQ6IG51bWJlciwgc2hpZnQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAod29yZCA8PCBzaGlmdCkgfCAoKHdvcmQgPj4+ICgzMiAtIHNoaWZ0KSkgPj4+IDApO1xufVxuXG4vKiogSXMgY3VycmVudCBwbGF0Zm9ybSBsaXR0bGUtZW5kaWFuPyBNb3N0IGFyZS4gQmlnLUVuZGlhbiBwbGF0Zm9ybTogSUJNICovXG5leHBvcnQgY29uc3QgaXNMRTogYm9vbGVhbiA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT5cbiAgbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KFsweDExMjIzMzQ0XSkuYnVmZmVyKVswXSA9PT0gMHg0NCkoKTtcblxuLyoqIFRoZSBieXRlIHN3YXAgb3BlcmF0aW9uIGZvciB1aW50MzIgKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlU3dhcCh3b3JkOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgICgod29yZCA8PCAyNCkgJiAweGZmMDAwMDAwKSB8XG4gICAgKCh3b3JkIDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAoKHdvcmQgPj4+IDgpICYgMHhmZjAwKSB8XG4gICAgKCh3b3JkID4+PiAyNCkgJiAweGZmKVxuICApO1xufVxuLyoqIENvbmRpdGlvbmFsbHkgYnl0ZSBzd2FwIGlmIG9uIGEgYmlnLWVuZGlhbiBwbGF0Zm9ybSAqL1xuZXhwb3J0IGNvbnN0IHN3YXA4SWZCRTogKG46IG51bWJlcikgPT4gbnVtYmVyID0gaXNMRVxuICA/IChuOiBudW1iZXIpID0+IG5cbiAgOiAobjogbnVtYmVyKSA9PiBieXRlU3dhcChuKTtcblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgY29uc3QgYnl0ZVN3YXBJZkJFOiB0eXBlb2Ygc3dhcDhJZkJFID0gc3dhcDhJZkJFO1xuLyoqIEluIHBsYWNlIGJ5dGUgc3dhcCBmb3IgVWludDMyQXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlU3dhcDMyKGFycjogVWludDMyQXJyYXkpOiBVaW50MzJBcnJheSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgYXJyW2ldID0gYnl0ZVN3YXAoYXJyW2ldKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY29uc3Qgc3dhcDMySWZCRTogKHU6IFVpbnQzMkFycmF5KSA9PiBVaW50MzJBcnJheSA9IGlzTEVcbiAgPyAodTogVWludDMyQXJyYXkpID0+IHVcbiAgOiBieXRlU3dhcDMyO1xuXG4vLyBCdWlsdC1pbiBoZXggY29udmVyc2lvbiBodHRwczovL2Nhbml1c2UuY29tL21kbi1qYXZhc2NyaXB0X2J1aWx0aW5zX3VpbnQ4YXJyYXlfZnJvbWhleFxuY29uc3QgaGFzSGV4QnVpbHRpbjogYm9vbGVhbiA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT5cbiAgLy8gQHRzLWlnbm9yZVxuICB0eXBlb2YgVWludDhBcnJheS5mcm9tKFtdKS50b0hleCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgVWludDhBcnJheS5mcm9tSGV4ID09PSAnZnVuY3Rpb24nKSgpO1xuXG4vLyBBcnJheSB3aGVyZSBpbmRleCAweGYwICgyNDApIGlzIG1hcHBlZCB0byBzdHJpbmcgJ2YwJ1xuY29uc3QgaGV4ZXMgPSAvKiBAX19QVVJFX18gKi8gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjU2IH0sIChfLCBpKSA9PlxuICBpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4pO1xuXG4vKipcbiAqIENvbnZlcnQgYnl0ZSBhcnJheSB0byBoZXggc3RyaW5nLiBVc2VzIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlIGJ5dGVzVG9IZXgoVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSkpIC8vICdjYWZlMDEyMydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9IZXgoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBhYnl0ZXMoYnl0ZXMpO1xuICAvLyBAdHMtaWdub3JlXG4gIGlmIChoYXNIZXhCdWlsdGluKSByZXR1cm4gYnl0ZXMudG9IZXgoKTtcbiAgLy8gcHJlLWNhY2hpbmcgaW1wcm92ZXMgdGhlIHNwZWVkIDZ4XG4gIGxldCBoZXggPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGhleCArPSBoZXhlc1tieXRlc1tpXV07XG4gIH1cbiAgcmV0dXJuIGhleDtcbn1cblxuLy8gV2UgdXNlIG9wdGltaXplZCB0ZWNobmlxdWUgdG8gY29udmVydCBoZXggc3RyaW5nIHRvIGJ5dGUgYXJyYXlcbmNvbnN0IGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIEE6IDY1LCBGOiA3MCwgYTogOTcsIGY6IDEwMiB9IGFzIGNvbnN0O1xuZnVuY3Rpb24gYXNjaWlUb0Jhc2UxNihjaDogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNoID49IGFzY2lpcy5fMCAmJiBjaCA8PSBhc2NpaXMuXzkpIHJldHVybiBjaCAtIGFzY2lpcy5fMDsgLy8gJzInID0+IDUwLTQ4XG4gIGlmIChjaCA+PSBhc2NpaXMuQSAmJiBjaCA8PSBhc2NpaXMuRikgcmV0dXJuIGNoIC0gKGFzY2lpcy5BIC0gMTApOyAvLyAnQicgPT4gNjYtKDY1LTEwKVxuICBpZiAoY2ggPj0gYXNjaWlzLmEgJiYgY2ggPD0gYXNjaWlzLmYpIHJldHVybiBjaCAtIChhc2NpaXMuYSAtIDEwKTsgLy8gJ2InID0+IDk4LSg5Ny0xMClcbiAgcmV0dXJuO1xufVxuXG4vKipcbiAqIENvbnZlcnQgaGV4IHN0cmluZyB0byBieXRlIGFycmF5LiBVc2VzIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlIGhleFRvQnl0ZXMoJ2NhZmUwMTIzJykgLy8gVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAnICsgdHlwZW9mIGhleCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaWYgKGhhc0hleEJ1aWx0aW4pIHJldHVybiBVaW50OEFycmF5LmZyb21IZXgoaGV4KTtcbiAgY29uc3QgaGwgPSBoZXgubGVuZ3RoO1xuICBjb25zdCBhbCA9IGhsIC8gMjtcbiAgaWYgKGhsICUgMikgdGhyb3cgbmV3IEVycm9yKCdoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAnICsgaGwpO1xuICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFsKTtcbiAgZm9yIChsZXQgYWkgPSAwLCBoaSA9IDA7IGFpIDwgYWw7IGFpKyssIGhpICs9IDIpIHtcbiAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTtcbiAgICBjb25zdCBuMiA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkgKyAxKSk7XG4gICAgaWYgKG4xID09PSB1bmRlZmluZWQgfHwgbjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyIFwiJyArIGNoYXIgKyAnXCIgYXQgaW5kZXggJyArIGhpKTtcbiAgICB9XG4gICAgYXJyYXlbYWldID0gbjEgKiAxNiArIG4yOyAvLyBtdWx0aXBseSBmaXJzdCBvY3RldCwgZS5nLiAnYTMnID0+IDEwKjE2KzMgPT4gMTYwICsgMyA9PiAxNjNcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogVGhlcmUgaXMgbm8gc2V0SW1tZWRpYXRlIGluIGJyb3dzZXIgYW5kIHNldFRpbWVvdXQgaXMgc2xvdy5cbiAqIENhbGwgb2YgYXN5bmMgZm4gd2lsbCByZXR1cm4gUHJvbWlzZSwgd2hpY2ggd2lsbCBiZSBmdWxsZmlsZWQgb25seSBvblxuICogbmV4dCBzY2hlZHVsZXIgcXVldWUgcHJvY2Vzc2luZyBzdGVwIGFuZCB0aGlzIGlzIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLlxuICovXG5leHBvcnQgY29uc3QgbmV4dFRpY2sgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7fTtcblxuLyoqIFJldHVybnMgY29udHJvbCB0byB0aHJlYWQgZWFjaCAndGljaycgbXMgdG8gYXZvaWQgYmxvY2tpbmcuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNMb29wKFxuICBpdGVyczogbnVtYmVyLFxuICB0aWNrOiBudW1iZXIsXG4gIGNiOiAoaTogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IHRzID0gRGF0ZS5ub3coKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyczsgaSsrKSB7XG4gICAgY2IoaSk7XG4gICAgLy8gRGF0ZS5ub3coKSBpcyBub3QgbW9ub3RvbmljLCBzbyBpbiBjYXNlIGlmIGNsb2NrIGdvZXMgYmFja3dhcmRzIHdlIHJldHVybiByZXR1cm4gY29udHJvbCB0b29cbiAgICBjb25zdCBkaWZmID0gRGF0ZS5ub3coKSAtIHRzO1xuICAgIGlmIChkaWZmID49IDAgJiYgZGlmZiA8IHRpY2spIGNvbnRpbnVlO1xuICAgIGF3YWl0IG5leHRUaWNrKCk7XG4gICAgdHMgKz0gZGlmZjtcbiAgfVxufVxuXG4vLyBHbG9iYWwgc3ltYm9scywgYnV0IHRzIGRvZXNuJ3Qgc2VlIHRoZW06IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE1MzVcbmRlY2xhcmUgY29uc3QgVGV4dEVuY29kZXI6IGFueTtcbmRlY2xhcmUgY29uc3QgVGV4dERlY29kZXI6IGFueTtcblxuLyoqXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gYnl0ZXMgdXNpbmcgVVRGOCBlbmNvZGluZy5cbiAqIEBleGFtcGxlIHV0ZjhUb0J5dGVzKCdhYmMnKSAvLyBVaW50OEFycmF5LmZyb20oWzk3LCA5OCwgOTldKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBleHBlY3RlZCcpO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cikpOyAvLyBodHRwczovL2J1Z3ppbC5sYS8xNjgxODA5XG59XG5cbi8qKlxuICogQ29udmVydHMgYnl0ZXMgdG8gc3RyaW5nIHVzaW5nIFVURjggZW5jb2RpbmcuXG4gKiBAZXhhbXBsZSBieXRlc1RvVXRmOChVaW50OEFycmF5LmZyb20oWzk3LCA5OCwgOTldKSkgLy8gJ2FiYydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9VdGY4KGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShieXRlcyk7XG59XG5cbi8qKiBBY2NlcHRlZCBpbnB1dCBvZiBoYXNoIGZ1bmN0aW9ucy4gU3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGJ5dGUgYXJyYXlzLiAqL1xuZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmcgfCBVaW50OEFycmF5O1xuLyoqXG4gKiBOb3JtYWxpemVzIChub24taGV4KSBzdHJpbmcgb3IgVWludDhBcnJheSB0byBVaW50OEFycmF5LlxuICogV2FybmluZzogd2hlbiBVaW50OEFycmF5IGlzIHBhc3NlZCwgaXQgd291bGQgTk9UIGdldCBjb3BpZWQuXG4gKiBLZWVwIGluIG1pbmQgZm9yIGZ1dHVyZSBtdXRhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0J5dGVzKGRhdGE6IElucHV0KTogVWludDhBcnJheSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTtcbiAgYWJ5dGVzKGRhdGEpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqIEtERnMgY2FuIGFjY2VwdCBzdHJpbmcgb3IgVWludDhBcnJheSBmb3IgdXNlciBjb252ZW5pZW5jZS4gKi9cbmV4cG9ydCB0eXBlIEtERklucHV0ID0gc3RyaW5nIHwgVWludDhBcnJheTtcbi8qKlxuICogSGVscGVyIGZvciBLREZzOiBjb25zdW1lcyB1aW50OGFycmF5IG9yIHN0cmluZy5cbiAqIFdoZW4gc3RyaW5nIGlzIHBhc3NlZCwgZG9lcyB1dGY4IGRlY29kaW5nLCB1c2luZyBUZXh0RGVjb2Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtkZklucHV0VG9CeXRlcyhkYXRhOiBLREZJbnB1dCk6IFVpbnQ4QXJyYXkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSBkYXRhID0gdXRmOFRvQnl0ZXMoZGF0YSk7XG4gIGFieXRlcyhkYXRhKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBDb3BpZXMgc2V2ZXJhbCBVaW50OEFycmF5cyBpbnRvIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRCeXRlcyguLi5hcnJheXM6IFVpbnQ4QXJyYXlbXSk6IFVpbnQ4QXJyYXkge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhID0gYXJyYXlzW2ldO1xuICAgIGFieXRlcyhhKTtcbiAgICBzdW0gKz0gYS5sZW5ndGg7XG4gIH1cbiAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTtcbiAgZm9yIChsZXQgaSA9IDAsIHBhZCA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhID0gYXJyYXlzW2ldO1xuICAgIHJlcy5zZXQoYSwgcGFkKTtcbiAgICBwYWQgKz0gYS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudHlwZSBFbXB0eU9iaiA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrT3B0czxUMSBleHRlbmRzIEVtcHR5T2JqLCBUMiBleHRlbmRzIEVtcHR5T2JqPihcbiAgZGVmYXVsdHM6IFQxLFxuICBvcHRzPzogVDJcbik6IFQxICYgVDIge1xuICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkICYmIHt9LnRvU3RyaW5nLmNhbGwob3B0cykgIT09ICdbb2JqZWN0IE9iamVjdF0nKVxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IG9yIHVuZGVmaW5lZCcpO1xuICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcbiAgcmV0dXJuIG1lcmdlZCBhcyBUMSAmIFQyO1xufVxuXG4vKiogSGFzaCBpbnRlcmZhY2UuICovXG5leHBvcnQgdHlwZSBJSGFzaCA9IHtcbiAgKGRhdGE6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5O1xuICBibG9ja0xlbjogbnVtYmVyO1xuICBvdXRwdXRMZW46IG51bWJlcjtcbiAgY3JlYXRlOiBhbnk7XG59O1xuXG4vKiogRm9yIHJ1bnRpbWUgY2hlY2sgaWYgY2xhc3MgaW1wbGVtZW50cyBpbnRlcmZhY2UgKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIYXNoPFQgZXh0ZW5kcyBIYXNoPFQ+PiB7XG4gIGFic3RyYWN0IGJsb2NrTGVuOiBudW1iZXI7IC8vIEJ5dGVzIHBlciBibG9ja1xuICBhYnN0cmFjdCBvdXRwdXRMZW46IG51bWJlcjsgLy8gQnl0ZXMgaW4gb3V0cHV0XG4gIGFic3RyYWN0IHVwZGF0ZShidWY6IElucHV0KTogdGhpcztcbiAgLy8gV3JpdGVzIGRpZ2VzdCBpbnRvIGJ1ZlxuICBhYnN0cmFjdCBkaWdlc3RJbnRvKGJ1ZjogVWludDhBcnJheSk6IHZvaWQ7XG4gIGFic3RyYWN0IGRpZ2VzdCgpOiBVaW50OEFycmF5O1xuICAvKipcbiAgICogUmVzZXRzIGludGVybmFsIHN0YXRlLiBNYWtlcyBIYXNoIGluc3RhbmNlIHVudXNhYmxlLlxuICAgKiBSZXNldCBpcyBpbXBvc3NpYmxlIGZvciBrZXllZCBoYXNoZXMgaWYga2V5IGlzIGNvbnN1bWVkIGludG8gc3RhdGUuIElmIGRpZ2VzdCBpcyBub3QgY29uc3VtZWRcbiAgICogYnkgdXNlciwgdGhleSB3aWxsIG5lZWQgdG8gbWFudWFsbHkgY2FsbCBgZGVzdHJveSgpYCB3aGVuIHplcm9pbmcgaXMgbmVjZXNzYXJ5LlxuICAgKi9cbiAgYWJzdHJhY3QgZGVzdHJveSgpOiB2b2lkO1xuICAvKipcbiAgICogQ2xvbmVzIGhhc2ggaW5zdGFuY2UuIFVuc2FmZTogZG9lc24ndCBjaGVjayB3aGV0aGVyIGB0b2AgaXMgdmFsaWQuIENhbiBiZSB1c2VkIGFzIGBjbG9uZSgpYFxuICAgKiB3aGVuIG5vIG9wdGlvbnMgYXJlIHBhc3NlZC5cbiAgICogUmVhc29ucyB0byB1c2UgYF9jbG9uZUludG9gIGluc3RlYWQgb2YgY2xvbmU6IDEpIHBlcmZvcm1hbmNlIDIpIHJldXNlIGluc3RhbmNlID0+IGFsbCBpbnRlcm5hbFxuICAgKiBidWZmZXJzIGFyZSBvdmVyd3JpdHRlbiA9PiBjYXVzZXMgYnVmZmVyIG92ZXJ3cml0ZSB3aGljaCBpcyB1c2VkIGZvciBkaWdlc3QgaW4gc29tZSBjYXNlcy5cbiAgICogVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgZm9yIGNsZWFuLXVwIGJlY2F1c2UgaXQncyBpbXBvc3NpYmxlIGluIEpTLlxuICAgKi9cbiAgYWJzdHJhY3QgX2Nsb25lSW50byh0bz86IFQpOiBUO1xuICAvLyBTYWZlIHZlcnNpb24gdGhhdCBjbG9uZXMgaW50ZXJuYWwgc3RhdGVcbiAgYWJzdHJhY3QgY2xvbmUoKTogVDtcbn1cblxuLyoqXG4gKiBYT0Y6IHN0cmVhbWluZyBBUEkgdG8gcmVhZCBkaWdlc3QgaW4gY2h1bmtzLlxuICogU2FtZSBhcyAnc3F1ZWV6ZScgaW4ga2VjY2FrL2sxMiBhbmQgJ3NlZWsnIGluIGJsYWtlMywgYnV0IG1vcmUgZ2VuZXJpYyBuYW1lLlxuICogV2hlbiBoYXNoIHVzZWQgaW4gWE9GIG1vZGUgaXQgaXMgdXAgdG8gdXNlciB0byBjYWxsICcuZGVzdHJveScgYWZ0ZXJ3YXJkcywgc2luY2Ugd2UgY2Fubm90XG4gKiBkZXN0cm95IHN0YXRlLCBuZXh0IGNhbGwgY2FuIHJlcXVpcmUgbW9yZSBieXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgSGFzaFhPRjxUIGV4dGVuZHMgSGFzaDxUPj4gPSBIYXNoPFQ+ICYge1xuICB4b2YoYnl0ZXM6IG51bWJlcik6IFVpbnQ4QXJyYXk7IC8vIFJlYWQgJ2J5dGVzJyBieXRlcyBmcm9tIGRpZ2VzdCBzdHJlYW1cbiAgeG9mSW50byhidWY6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5OyAvLyByZWFkIGJ1Zi5sZW5ndGggYnl0ZXMgZnJvbSBkaWdlc3Qgc3RyZWFtIGludG8gYnVmXG59O1xuXG4vKiogSGFzaCBmdW5jdGlvbiAqL1xuZXhwb3J0IHR5cGUgQ0hhc2ggPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVIYXNoZXI+O1xuLyoqIEhhc2ggZnVuY3Rpb24gd2l0aCBvdXRwdXQgKi9cbmV4cG9ydCB0eXBlIENIYXNoTyA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZU9wdEhhc2hlcj47XG4vKiogWE9GIHdpdGggb3V0cHV0ICovXG5leHBvcnQgdHlwZSBDSGFzaFhPID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlWE9GZXI+O1xuXG4vKiogV3JhcHMgaGFzaCBmdW5jdGlvbiwgY3JlYXRpbmcgYW4gaW50ZXJmYWNlIG9uIHRvcCBvZiBpdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcjxUIGV4dGVuZHMgSGFzaDxUPj4oXG4gIGhhc2hDb25zOiAoKSA9PiBIYXNoPFQ+XG4pOiB7XG4gIChtc2c6IElucHV0KTogVWludDhBcnJheTtcbiAgb3V0cHV0TGVuOiBudW1iZXI7XG4gIGJsb2NrTGVuOiBudW1iZXI7XG4gIGNyZWF0ZSgpOiBIYXNoPFQ+O1xufSB7XG4gIGNvbnN0IGhhc2hDID0gKG1zZzogSW5wdXQpOiBVaW50OEFycmF5ID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMobXNnKSkuZGlnZXN0KCk7XG4gIGNvbnN0IHRtcCA9IGhhc2hDb25zKCk7XG4gIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47XG4gIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICBoYXNoQy5jcmVhdGUgPSAoKSA9PiBoYXNoQ29ucygpO1xuICByZXR1cm4gaGFzaEM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRIYXNoZXI8SCBleHRlbmRzIEhhc2g8SD4sIFQgZXh0ZW5kcyBPYmplY3Q+KFxuICBoYXNoQ29uczogKG9wdHM/OiBUKSA9PiBIYXNoPEg+XG4pOiB7XG4gIChtc2c6IElucHV0LCBvcHRzPzogVCk6IFVpbnQ4QXJyYXk7XG4gIG91dHB1dExlbjogbnVtYmVyO1xuICBibG9ja0xlbjogbnVtYmVyO1xuICBjcmVhdGUob3B0cz86IFQpOiBIYXNoPEg+O1xufSB7XG4gIGNvbnN0IGhhc2hDID0gKG1zZzogSW5wdXQsIG9wdHM/OiBUKTogVWludDhBcnJheSA9PiBoYXNoQ29ucyhvcHRzKS51cGRhdGUodG9CeXRlcyhtc2cpKS5kaWdlc3QoKTtcbiAgY29uc3QgdG1wID0gaGFzaENvbnMoe30gYXMgVCk7XG4gIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47XG4gIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICBoYXNoQy5jcmVhdGUgPSAob3B0cz86IFQpID0+IGhhc2hDb25zKG9wdHMpO1xuICByZXR1cm4gaGFzaEM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVYT0ZlcjxIIGV4dGVuZHMgSGFzaFhPRjxIPiwgVCBleHRlbmRzIE9iamVjdD4oXG4gIGhhc2hDb25zOiAob3B0cz86IFQpID0+IEhhc2hYT0Y8SD5cbik6IHtcbiAgKG1zZzogSW5wdXQsIG9wdHM/OiBUKTogVWludDhBcnJheTtcbiAgb3V0cHV0TGVuOiBudW1iZXI7XG4gIGJsb2NrTGVuOiBudW1iZXI7XG4gIGNyZWF0ZShvcHRzPzogVCk6IEhhc2hYT0Y8SD47XG59IHtcbiAgY29uc3QgaGFzaEMgPSAobXNnOiBJbnB1dCwgb3B0cz86IFQpOiBVaW50OEFycmF5ID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzKG1zZykpLmRpZ2VzdCgpO1xuICBjb25zdCB0bXAgPSBoYXNoQ29ucyh7fSBhcyBUKTtcbiAgaGFzaEMub3V0cHV0TGVuID0gdG1wLm91dHB1dExlbjtcbiAgaGFzaEMuYmxvY2tMZW4gPSB0bXAuYmxvY2tMZW47XG4gIGhhc2hDLmNyZWF0ZSA9IChvcHRzPzogVCkgPT4gaGFzaENvbnMob3B0cyk7XG4gIHJldHVybiBoYXNoQztcbn1cbmV4cG9ydCBjb25zdCB3cmFwQ29uc3RydWN0b3I6IHR5cGVvZiBjcmVhdGVIYXNoZXIgPSBjcmVhdGVIYXNoZXI7XG5leHBvcnQgY29uc3Qgd3JhcENvbnN0cnVjdG9yV2l0aE9wdHM6IHR5cGVvZiBjcmVhdGVPcHRIYXNoZXIgPSBjcmVhdGVPcHRIYXNoZXI7XG5leHBvcnQgY29uc3Qgd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHM6IHR5cGVvZiBjcmVhdGVYT0ZlciA9IGNyZWF0ZVhPRmVyO1xuXG4vKiogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIFBSTkcuIFVzZXMgaW50ZXJuYWwgT1MtbGV2ZWwgYGNyeXB0by5nZXRSYW5kb21WYWx1ZXNgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUJ5dGVzKGJ5dGVzTGVuZ3RoID0gMzIpOiBVaW50OEFycmF5IHtcbiAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGJ5dGVzTGVuZ3RoKSk7XG4gIH1cbiAgLy8gTGVnYWN5IE5vZGUuanMgY29tcGF0aWJpbGl0eVxuICBpZiAoY3J5cHRvICYmIHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNyeXB0by5yYW5kb21CeXRlcyhieXRlc0xlbmd0aCkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtdXN0IGJlIGRlZmluZWQnKTtcbn1cbiIsICIvKipcbiAqIFNIQTMgKGtlY2NhaykgaGFzaCBmdW5jdGlvbiwgYmFzZWQgb24gYSBuZXcgXCJTcG9uZ2UgZnVuY3Rpb25cIiBkZXNpZ24uXG4gKiBEaWZmZXJlbnQgZnJvbSBvbGRlciBoYXNoZXMsIHRoZSBpbnRlcm5hbCBzdGF0ZSBpcyBiaWdnZXIgdGhhbiBvdXRwdXQgc2l6ZS5cbiAqXG4gKiBDaGVjayBvdXQgW0ZJUFMtMjAyXShodHRwczovL252bHB1YnMubmlzdC5nb3YvbmlzdHB1YnMvRklQUy9OSVNULkZJUFMuMjAyLnBkZiksXG4gKiBbV2Vic2l0ZV0oaHR0cHM6Ly9rZWNjYWsudGVhbS9rZWNjYWsuaHRtbCksXG4gKiBbdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gU0hBLTMgYW5kIEtlY2Nha10oaHR0cHM6Ly9jcnlwdG8uc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzE1NzI3L3doYXQtYXJlLXRoZS1rZXktZGlmZmVyZW5jZXMtYmV0d2Vlbi10aGUtZHJhZnQtc2hhLTMtc3RhbmRhcmQtYW5kLXRoZS1rZWNjYWstc3ViKS5cbiAqXG4gKiBDaGVjayBvdXQgYHNoYTMtYWRkb25zYCBtb2R1bGUgZm9yIGNTSEFLRSwgazEyLCBhbmQgb3RoZXJzLlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyByb3RsQkgsIHJvdGxCTCwgcm90bFNILCByb3RsU0wsIHNwbGl0IH0gZnJvbSAnLi9fdTY0LnRzJztcbi8vIHByZXR0aWVyLWlnbm9yZVxuaW1wb3J0IHtcbiAgYWJ5dGVzLCBhZXhpc3RzLCBhbnVtYmVyLCBhb3V0cHV0LFxuICBjbGVhbiwgY3JlYXRlSGFzaGVyLCBjcmVhdGVYT0ZlciwgSGFzaCxcbiAgc3dhcDMySWZCRSxcbiAgdG9CeXRlcywgdTMyLFxuICB0eXBlIENIYXNoLCB0eXBlIENIYXNoWE8sIHR5cGUgSGFzaFhPRiwgdHlwZSBJbnB1dFxufSBmcm9tICcuL3V0aWxzLnRzJztcblxuLy8gTm8gX19QVVJFX18gYW5ub3RhdGlvbnMgaW4gc2hhMyBoZWFkZXI6XG4vLyBFVkVSWVRISU5HIGlzIGluIGZhY3QgdXNlZCBvbiBldmVyeSBleHBvcnQuXG4vLyBWYXJpb3VzIHBlciByb3VuZCBjb25zdGFudHMgY2FsY3VsYXRpb25zXG5jb25zdCBfMG4gPSBCaWdJbnQoMCk7XG5jb25zdCBfMW4gPSBCaWdJbnQoMSk7XG5jb25zdCBfMm4gPSBCaWdJbnQoMik7XG5jb25zdCBfN24gPSBCaWdJbnQoNyk7XG5jb25zdCBfMjU2biA9IEJpZ0ludCgyNTYpO1xuY29uc3QgXzB4NzFuID0gQmlnSW50KDB4NzEpO1xuY29uc3QgU0hBM19QSTogbnVtYmVyW10gPSBbXTtcbmNvbnN0IFNIQTNfUk9UTDogbnVtYmVyW10gPSBbXTtcbmNvbnN0IF9TSEEzX0lPVEE6IGJpZ2ludFtdID0gW107XG5mb3IgKGxldCByb3VuZCA9IDAsIFIgPSBfMW4sIHggPSAxLCB5ID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuICAvLyBQaVxuICBbeCwgeV0gPSBbeSwgKDIgKiB4ICsgMyAqIHkpICUgNV07XG4gIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpO1xuICAvLyBSb3RhdGlvbmFsXG4gIFNIQTNfUk9UTC5wdXNoKCgoKHJvdW5kICsgMSkgKiAocm91bmQgKyAyKSkgLyAyKSAlIDY0KTtcbiAgLy8gSW90YVxuICBsZXQgdCA9IF8wbjtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICBSID0gKChSIDw8IF8xbikgXiAoKFIgPj4gXzduKSAqIF8weDcxbikpICUgXzI1Nm47XG4gICAgaWYgKFIgJiBfMm4pIHQgXj0gXzFuIDw8ICgoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuKTtcbiAgfVxuICBfU0hBM19JT1RBLnB1c2godCk7XG59XG5jb25zdCBJT1RBUyA9IHNwbGl0KF9TSEEzX0lPVEEsIHRydWUpO1xuY29uc3QgU0hBM19JT1RBX0ggPSBJT1RBU1swXTtcbmNvbnN0IFNIQTNfSU9UQV9MID0gSU9UQVNbMV07XG5cbi8vIExlZnQgcm90YXRpb24gKHdpdGhvdXQgMCwgMzIsIDY0KVxuY29uc3Qgcm90bEggPSAoaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlcikgPT4gKHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKSk7XG5jb25zdCByb3RsTCA9IChoOiBudW1iZXIsIGw6IG51bWJlciwgczogbnVtYmVyKSA9PiAocyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpKTtcblxuLyoqIGBrZWNjYWtmMTYwMGAgaW50ZXJuYWwgZnVuY3Rpb24sIGFkZGl0aW9uYWxseSBhbGxvd3MgdG8gYWRqdXN0IHJvdW5kIGNvdW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlY2Nha1AoczogVWludDMyQXJyYXksIHJvdW5kczogbnVtYmVyID0gMjQpOiB2b2lkIHtcbiAgY29uc3QgQiA9IG5ldyBVaW50MzJBcnJheSg1ICogMik7XG4gIC8vIE5PVEU6IGFsbCBpbmRpY2VzIGFyZSB4MiBzaW5jZSB3ZSBzdG9yZSBzdGF0ZSBhcyB1MzIgaW5zdGVhZCBvZiB1NjQgKGJpZ2ludHMgdG8gc2xvdyBpbiBqcylcbiAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuICAgIC8vIFRoZXRhIFx1MDNCOFxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCAxMDsgeCArPSAyKSB7XG4gICAgICBjb25zdCBpZHgxID0gKHggKyA4KSAlIDEwO1xuICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDtcbiAgICAgIGNvbnN0IEIwID0gQltpZHgwXTtcbiAgICAgIGNvbnN0IEIxID0gQltpZHgwICsgMV07XG4gICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdO1xuICAgICAgY29uc3QgVGwgPSByb3RsTChCMCwgQjEsIDEpIF4gQltpZHgxICsgMV07XG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IDUwOyB5ICs9IDEwKSB7XG4gICAgICAgIHNbeCArIHldIF49IFRoO1xuICAgICAgICBzW3ggKyB5ICsgMV0gXj0gVGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJobyAoXHUwM0MxKSBhbmQgUGkgKFx1MDNDMClcbiAgICBsZXQgY3VySCA9IHNbMl07XG4gICAgbGV0IGN1ckwgPSBzWzNdO1xuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07XG4gICAgICBjb25zdCBUaCA9IHJvdGxIKGN1ckgsIGN1ckwsIHNoaWZ0KTtcbiAgICAgIGNvbnN0IFRsID0gcm90bEwoY3VySCwgY3VyTCwgc2hpZnQpO1xuICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdO1xuICAgICAgY3VySCA9IHNbUEldO1xuICAgICAgY3VyTCA9IHNbUEkgKyAxXTtcbiAgICAgIHNbUEldID0gVGg7XG4gICAgICBzW1BJICsgMV0gPSBUbDtcbiAgICB9XG4gICAgLy8gQ2hpIChcdTAzQzcpXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCAxMDsgeCsrKSBCW3hdID0gc1t5ICsgeF07XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspIHNbeSArIHhdIF49IH5CWyh4ICsgMikgJSAxMF0gJiBCWyh4ICsgNCkgJSAxMF07XG4gICAgfVxuICAgIC8vIElvdGEgKFx1MDNCOSlcbiAgICBzWzBdIF49IFNIQTNfSU9UQV9IW3JvdW5kXTtcbiAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTtcbiAgfVxuICBjbGVhbihCKTtcbn1cblxuLyoqIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24uICovXG5leHBvcnQgY2xhc3MgS2VjY2FrIGV4dGVuZHMgSGFzaDxLZWNjYWs+IGltcGxlbWVudHMgSGFzaFhPRjxLZWNjYWs+IHtcbiAgcHJvdGVjdGVkIHN0YXRlOiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgcG9zID0gMDtcbiAgcHJvdGVjdGVkIHBvc091dCA9IDA7XG4gIHByb3RlY3RlZCBmaW5pc2hlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc3RhdGUzMjogVWludDMyQXJyYXk7XG4gIHByb3RlY3RlZCBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgYmxvY2tMZW46IG51bWJlcjtcbiAgcHVibGljIHN1ZmZpeDogbnVtYmVyO1xuICBwdWJsaWMgb3V0cHV0TGVuOiBudW1iZXI7XG4gIHByb3RlY3RlZCBlbmFibGVYT0YgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJvdW5kczogbnVtYmVyO1xuXG4gIC8vIE5PVEU6IHdlIGFjY2VwdCBhcmd1bWVudHMgaW4gYnl0ZXMgaW5zdGVhZCBvZiBiaXRzIGhlcmUuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJsb2NrTGVuOiBudW1iZXIsXG4gICAgc3VmZml4OiBudW1iZXIsXG4gICAgb3V0cHV0TGVuOiBudW1iZXIsXG4gICAgZW5hYmxlWE9GID0gZmFsc2UsXG4gICAgcm91bmRzOiBudW1iZXIgPSAyNFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjtcbiAgICB0aGlzLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICB0aGlzLm91dHB1dExlbiA9IG91dHB1dExlbjtcbiAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjtcbiAgICB0aGlzLnJvdW5kcyA9IHJvdW5kcztcbiAgICAvLyBDYW4gYmUgcGFzc2VkIGZyb20gdXNlciBhcyBka0xlblxuICAgIGFudW1iZXIob3V0cHV0TGVuKTtcbiAgICAvLyAxNjAwID0gNXg1IG1hdHJpeCBvZiA2NGJpdC4gIDE2MDAgYml0cyA9PT0gMjAwIGJ5dGVzXG4gICAgLy8gMCA8IGJsb2NrTGVuIDwgMjAwXG4gICAgaWYgKCEoMCA8IGJsb2NrTGVuICYmIGJsb2NrTGVuIDwgMjAwKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignb25seSBrZWNjYWstZjE2MDAgZnVuY3Rpb24gaXMgc3VwcG9ydGVkJyk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBVaW50OEFycmF5KDIwMCk7XG4gICAgdGhpcy5zdGF0ZTMyID0gdTMyKHRoaXMuc3RhdGUpO1xuICB9XG4gIGNsb25lKCk6IEtlY2NhayB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb25lSW50bygpO1xuICB9XG4gIHByb3RlY3RlZCBrZWNjYWsoKTogdm9pZCB7XG4gICAgc3dhcDMySWZCRSh0aGlzLnN0YXRlMzIpO1xuICAgIGtlY2Nha1AodGhpcy5zdGF0ZTMyLCB0aGlzLnJvdW5kcyk7XG4gICAgc3dhcDMySWZCRSh0aGlzLnN0YXRlMzIpO1xuICAgIHRoaXMucG9zT3V0ID0gMDtcbiAgICB0aGlzLnBvcyA9IDA7XG4gIH1cbiAgdXBkYXRlKGRhdGE6IElucHV0KTogdGhpcyB7XG4gICAgYWV4aXN0cyh0aGlzKTtcbiAgICBkYXRhID0gdG9CeXRlcyhkYXRhKTtcbiAgICBhYnl0ZXMoZGF0YSk7XG4gICAgY29uc3QgeyBibG9ja0xlbiwgc3RhdGUgfSA9IHRoaXM7XG4gICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHtcbiAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWtlOyBpKyspIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdO1xuICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgdGhpcy5rZWNjYWsoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcHJvdGVjdGVkIGZpbmlzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgc3RhdGUsIHN1ZmZpeCwgcG9zLCBibG9ja0xlbiB9ID0gdGhpcztcbiAgICAvLyBEbyB0aGUgcGFkZGluZ1xuICAgIHN0YXRlW3Bvc10gXj0gc3VmZml4O1xuICAgIGlmICgoc3VmZml4ICYgMHg4MCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpIHRoaXMua2VjY2FrKCk7XG4gICAgc3RhdGVbYmxvY2tMZW4gLSAxXSBePSAweDgwO1xuICAgIHRoaXMua2VjY2FrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyaXRlSW50byhvdXQ6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICBhZXhpc3RzKHRoaXMsIGZhbHNlKTtcbiAgICBhYnl0ZXMob3V0KTtcbiAgICB0aGlzLmZpbmlzaCgpO1xuICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBibG9ja0xlbiB9ID0gdGhpcztcbiAgICBmb3IgKGxldCBwb3MgPSAwLCBsZW4gPSBvdXQubGVuZ3RoOyBwb3MgPCBsZW47ICkge1xuICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKSB0aGlzLmtlY2NhaygpO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3NPdXQsIGxlbiAtIHBvcyk7XG4gICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTtcbiAgICAgIHRoaXMucG9zT3V0ICs9IHRha2U7XG4gICAgICBwb3MgKz0gdGFrZTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB4b2ZJbnRvKG91dDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIC8vIFNoYTMvS2VjY2FrIHVzYWdlIHdpdGggWE9GIGlzIHByb2JhYmx5IG1pc3Rha2UsIG9ubHkgU0hBS0UgaW5zdGFuY2VzIGNhbiBkbyBYT0ZcbiAgICBpZiAoIXRoaXMuZW5hYmxlWE9GKSB0aHJvdyBuZXcgRXJyb3IoJ1hPRiBpcyBub3QgcG9zc2libGUgZm9yIHRoaXMgaW5zdGFuY2UnKTtcbiAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTtcbiAgfVxuICB4b2YoYnl0ZXM6IG51bWJlcik6IFVpbnQ4QXJyYXkge1xuICAgIGFudW1iZXIoYnl0ZXMpO1xuICAgIHJldHVybiB0aGlzLnhvZkludG8obmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTtcbiAgfVxuICBkaWdlc3RJbnRvKG91dDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGFvdXRwdXQob3V0LCB0aGlzKTtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQnKTtcbiAgICB0aGlzLndyaXRlSW50byhvdXQpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgZGlnZXN0KCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTtcbiAgfVxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBjbGVhbih0aGlzLnN0YXRlKTtcbiAgfVxuICBfY2xvbmVJbnRvKHRvPzogS2VjY2FrKTogS2VjY2FrIHtcbiAgICBjb25zdCB7IGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbiwgcm91bmRzLCBlbmFibGVYT0YgfSA9IHRoaXM7XG4gICAgdG8gfHw9IG5ldyBLZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcyk7XG4gICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTtcbiAgICB0by5wb3MgPSB0aGlzLnBvcztcbiAgICB0by5wb3NPdXQgPSB0aGlzLnBvc091dDtcbiAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7XG4gICAgdG8ucm91bmRzID0gcm91bmRzO1xuICAgIC8vIFN1ZmZpeCBjYW4gY2hhbmdlIGluIGNTSEFLRVxuICAgIHRvLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgdG8uZW5hYmxlWE9GID0gZW5hYmxlWE9GO1xuICAgIHRvLmRlc3Ryb3llZCA9IHRoaXMuZGVzdHJveWVkO1xuICAgIHJldHVybiB0bztcbiAgfVxufVxuXG5jb25zdCBnZW4gPSAoc3VmZml4OiBudW1iZXIsIGJsb2NrTGVuOiBudW1iZXIsIG91dHB1dExlbjogbnVtYmVyKSA9PlxuICBjcmVhdGVIYXNoZXIoKCkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4pKTtcblxuLyoqIFNIQTMtMjI0IGhhc2ggZnVuY3Rpb24uICovXG5leHBvcnQgY29uc3Qgc2hhM18yMjQ6IENIYXNoID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBnZW4oMHgwNiwgMTQ0LCAyMjQgLyA4KSkoKTtcbi8qKiBTSEEzLTI1NiBoYXNoIGZ1bmN0aW9uLiBEaWZmZXJlbnQgZnJvbSBrZWNjYWstMjU2LiAqL1xuZXhwb3J0IGNvbnN0IHNoYTNfMjU2OiBDSGFzaCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gZ2VuKDB4MDYsIDEzNiwgMjU2IC8gOCkpKCk7XG4vKiogU0hBMy0zODQgaGFzaCBmdW5jdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBzaGEzXzM4NDogQ0hhc2ggPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGdlbigweDA2LCAxMDQsIDM4NCAvIDgpKSgpO1xuLyoqIFNIQTMtNTEyIGhhc2ggZnVuY3Rpb24uICovXG5leHBvcnQgY29uc3Qgc2hhM181MTI6IENIYXNoID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBnZW4oMHgwNiwgNzIsIDUxMiAvIDgpKSgpO1xuXG4vKioga2VjY2FrLTIyNCBoYXNoIGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGtlY2Nha18yMjQ6IENIYXNoID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBnZW4oMHgwMSwgMTQ0LCAyMjQgLyA4KSkoKTtcbi8qKiBrZWNjYWstMjU2IGhhc2ggZnVuY3Rpb24uIERpZmZlcmVudCBmcm9tIFNIQTMtMjU2LiAqL1xuZXhwb3J0IGNvbnN0IGtlY2Nha18yNTY6IENIYXNoID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBnZW4oMHgwMSwgMTM2LCAyNTYgLyA4KSkoKTtcbi8qKiBrZWNjYWstMzg0IGhhc2ggZnVuY3Rpb24uICovXG5leHBvcnQgY29uc3Qga2VjY2FrXzM4NDogQ0hhc2ggPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGdlbigweDAxLCAxMDQsIDM4NCAvIDgpKSgpO1xuLyoqIGtlY2Nhay01MTIgaGFzaCBmdW5jdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWtfNTEyOiBDSGFzaCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gZ2VuKDB4MDEsIDcyLCA1MTIgLyA4KSkoKTtcblxuZXhwb3J0IHR5cGUgU2hha2VPcHRzID0geyBka0xlbj86IG51bWJlciB9O1xuXG5jb25zdCBnZW5TaGFrZSA9IChzdWZmaXg6IG51bWJlciwgYmxvY2tMZW46IG51bWJlciwgb3V0cHV0TGVuOiBudW1iZXIpID0+XG4gIGNyZWF0ZVhPRmVyPEhhc2hYT0Y8S2VjY2FrPiwgU2hha2VPcHRzPihcbiAgICAob3B0czogU2hha2VPcHRzID0ge30pID0+XG4gICAgICBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG9wdHMuZGtMZW4gPT09IHVuZGVmaW5lZCA/IG91dHB1dExlbiA6IG9wdHMuZGtMZW4sIHRydWUpXG4gICk7XG5cbi8qKiBTSEFLRTEyOCBYT0Ygd2l0aCAxMjgtYml0IHNlY3VyaXR5LiAqL1xuZXhwb3J0IGNvbnN0IHNoYWtlMTI4OiBDSGFzaFhPID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBnZW5TaGFrZSgweDFmLCAxNjgsIDEyOCAvIDgpKSgpO1xuLyoqIFNIQUtFMjU2IFhPRiB3aXRoIDI1Ni1iaXQgc2VjdXJpdHkuICovXG5leHBvcnQgY29uc3Qgc2hha2UyNTY6IENIYXNoWE8gPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGdlblNoYWtlKDB4MWYsIDEzNiwgMjU2IC8gOCkpKCk7XG4iLCAiLyogZ2xvYmFsIGdsb2JhbCwgd2luZG93LCBtb2R1bGUgKi9cbmNvbnN0IHsgc2hhM181MTI6IHNoYTMgfSA9IHJlcXVpcmUoXCJAbm9ibGUvaGFzaGVzL3NoYTNcIik7XG5cbmNvbnN0IGRlZmF1bHRMZW5ndGggPSAyNDtcbmNvbnN0IGJpZ0xlbmd0aCA9IDMyO1xuXG5jb25zdCBjcmVhdGVFbnRyb3B5ID0gKGxlbmd0aCA9IDQsIHJhbmRvbSA9IE1hdGgucmFuZG9tKSA9PiB7XG4gIGxldCBlbnRyb3B5ID0gXCJcIjtcblxuICB3aGlsZSAoZW50cm9weS5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICBlbnRyb3B5ID0gZW50cm9weSArIE1hdGguZmxvb3IocmFuZG9tKCkgKiAzNikudG9TdHJpbmcoMzYpO1xuICB9XG4gIHJldHVybiBlbnRyb3B5O1xufTtcblxuLypcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanVhbmVsYXMvYmlnaW50LWNvbnZlcnNpb25cbiAqIE1JVCBMaWNlbnNlIENvcHlyaWdodCAoYykgMjAxOCBKdWFuIEhlcm7DoW5kZXogU2VycmFub1xuICovXG5mdW5jdGlvbiBidWZUb0JpZ0ludChidWYpIHtcbiAgbGV0IGJpdHMgPSA4bjtcblxuICBsZXQgdmFsdWUgPSAwbjtcbiAgZm9yIChjb25zdCBpIG9mIGJ1Zi52YWx1ZXMoKSkge1xuICAgIGNvbnN0IGJpID0gQmlnSW50KGkpO1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IGJpdHMpICsgYmk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5jb25zdCBoYXNoID0gKGlucHV0ID0gXCJcIikgPT4ge1xuICAvLyBEcm9wIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYmVjYXVzZSBpdCB3aWxsIGJpYXMgdGhlIGhpc3RvZ3JhbVxuICAvLyB0byB0aGUgbGVmdC5cbiAgcmV0dXJuIGJ1ZlRvQmlnSW50KHNoYTMoaW5wdXQpKS50b1N0cmluZygzNikuc2xpY2UoMSk7XG59O1xuXG5jb25zdCBhbHBoYWJldCA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI2IH0sICh4LCBpKSA9PlxuICBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyA5Nylcbik7XG5cbmNvbnN0IHJhbmRvbUxldHRlciA9IChyYW5kb20pID0+XG4gIGFscGhhYmV0W01hdGguZmxvb3IocmFuZG9tKCkgKiBhbHBoYWJldC5sZW5ndGgpXTtcblxuLypcblRoaXMgaXMgYSBmaW5nZXJwcmludCBvZiB0aGUgaG9zdCBlbnZpcm9ubWVudC4gSXQgaXMgdXNlZCB0byBoZWxwXG5wcmV2ZW50IGNvbGxpc2lvbnMgd2hlbiBnZW5lcmF0aW5nIGlkcyBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbS5cbklmIG5vIGdsb2JhbCBvYmplY3QgaXMgYXZhaWxhYmxlLCB5b3UgY2FuIHBhc3MgaW4geW91ciBvd24sIG9yIGZhbGwgYmFja1xub24gYSByYW5kb20gc3RyaW5nLlxuKi9cbmNvbnN0IGNyZWF0ZUZpbmdlcnByaW50ID0gKHtcbiAgZ2xvYmFsT2JqID0gdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gZ2xvYmFsXG4gICAgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyB3aW5kb3dcbiAgICA6IHt9LFxuICByYW5kb20gPSBNYXRoLnJhbmRvbSxcbn0gPSB7fSkgPT4ge1xuICBjb25zdCBnbG9iYWxzID0gT2JqZWN0LmtleXMoZ2xvYmFsT2JqKS50b1N0cmluZygpO1xuICBjb25zdCBzb3VyY2VTdHJpbmcgPSBnbG9iYWxzLmxlbmd0aFxuICAgID8gZ2xvYmFscyArIGNyZWF0ZUVudHJvcHkoYmlnTGVuZ3RoLCByYW5kb20pXG4gICAgOiBjcmVhdGVFbnRyb3B5KGJpZ0xlbmd0aCwgcmFuZG9tKTtcblxuICByZXR1cm4gaGFzaChzb3VyY2VTdHJpbmcpLnN1YnN0cmluZygwLCBiaWdMZW5ndGgpO1xufTtcblxuY29uc3QgY3JlYXRlQ291bnRlciA9IChjb3VudCkgPT4gKCkgPT4ge1xuICByZXR1cm4gY291bnQrKztcbn07XG5cbi8vIH4yMmsgaG9zdHMgYmVmb3JlIDUwJSBjaGFuY2Ugb2YgaW5pdGlhbCBjb3VudGVyIGNvbGxpc2lvblxuLy8gd2l0aCBhIHJlbWFpbmluZyBjb3VudGVyIHJhbmdlIG9mIDkuMGUrMTUgaW4gSmF2YVNjcmlwdC5cbmNvbnN0IGluaXRpYWxDb3VudE1heCA9IDQ3Njc4MjM2NztcblxuY29uc3QgaW5pdCA9ICh7XG4gIC8vIEZhbGxiYWNrIGlmIHRoZSB1c2VyIGRvZXMgbm90IHBhc3MgaW4gYSBDU1BSTkcuIFRoaXMgc2hvdWxkIGJlIE9LXG4gIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgcmVseSBzb2xlbHkgb24gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBlbnRyb3B5LlxuICAvLyBXZSBhbHNvIHVzZSB0aGUgaG9zdCBmaW5nZXJwcmludCwgY3VycmVudCB0aW1lLCBhbmQgYSBzZXNzaW9uIGNvdW50ZXIuXG4gIHJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICBjb3VudGVyID0gY3JlYXRlQ291bnRlcihNYXRoLmZsb29yKHJhbmRvbSgpICogaW5pdGlhbENvdW50TWF4KSksXG4gIGxlbmd0aCA9IGRlZmF1bHRMZW5ndGgsXG4gIGZpbmdlcnByaW50ID0gY3JlYXRlRmluZ2VycHJpbnQoeyByYW5kb20gfSksXG59ID0ge30pID0+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGN1aWQyKCkge1xuICAgIGNvbnN0IGZpcnN0TGV0dGVyID0gcmFuZG9tTGV0dGVyKHJhbmRvbSk7XG5cbiAgICAvLyBJZiB3ZSdyZSBsdWNreSwgdGhlIGAudG9TdHJpbmcoMzYpYCBjYWxscyBtYXkgcmVkdWNlIGhhc2hpbmcgcm91bmRzXG4gICAgLy8gYnkgc2hvcnRlbmluZyB0aGUgaW5wdXQgdG8gdGhlIGhhc2ggZnVuY3Rpb24gYSBsaXR0bGUuXG4gICAgY29uc3QgdGltZSA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpO1xuICAgIGNvbnN0IGNvdW50ID0gY291bnRlcigpLnRvU3RyaW5nKDM2KTtcblxuICAgIC8vIFRoZSBzYWx0IHNob3VsZCBiZSBsb25nIGVub3VnaCB0byBiZSBnbG9iYWxseSB1bmlxdWUgYWNyb3NzIHRoZSBmdWxsXG4gICAgLy8gbGVuZ3RoIG9mIHRoZSBoYXNoLiBGb3Igc2ltcGxpY2l0eSwgd2UgdXNlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGVcbiAgICAvLyBpbnRlbmRlZCBpZCBvdXRwdXQuXG4gICAgY29uc3Qgc2FsdCA9IGNyZWF0ZUVudHJvcHkobGVuZ3RoLCByYW5kb20pO1xuICAgIGNvbnN0IGhhc2hJbnB1dCA9IGAke3RpbWUgKyBzYWx0ICsgY291bnQgKyBmaW5nZXJwcmludH1gO1xuXG4gICAgcmV0dXJuIGAke2ZpcnN0TGV0dGVyICsgaGFzaChoYXNoSW5wdXQpLnN1YnN0cmluZygxLCBsZW5ndGgpfWA7XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVJZCA9IGluaXQoKTtcblxuY29uc3QgaXNDdWlkID0gKGlkLCB7IG1pbkxlbmd0aCA9IDIsIG1heExlbmd0aCA9IGJpZ0xlbmd0aCB9ID0ge30pID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gaWQubGVuZ3RoO1xuICBjb25zdCByZWdleCA9IC9eWzAtOWEtel0rJC87XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIGxlbmd0aCA+PSBtaW5MZW5ndGggJiZcbiAgICAgIGxlbmd0aCA8PSBtYXhMZW5ndGggJiZcbiAgICAgIHJlZ2V4LnRlc3QoaWQpXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5nZXRDb25zdGFudHMgPSAoKSA9PiAoeyBkZWZhdWx0TGVuZ3RoLCBiaWdMZW5ndGggfSk7XG5tb2R1bGUuZXhwb3J0cy5pbml0ID0gaW5pdDtcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlkID0gY3JlYXRlSWQ7XG5tb2R1bGUuZXhwb3J0cy5idWZUb0JpZ0ludCA9IGJ1ZlRvQmlnSW50O1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlQ291bnRlciA9IGNyZWF0ZUNvdW50ZXI7XG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVGaW5nZXJwcmludCA9IGNyZWF0ZUZpbmdlcnByaW50O1xubW9kdWxlLmV4cG9ydHMuaXNDdWlkID0gaXNDdWlkO1xuIiwgImNvbnN0IHsgY3JlYXRlSWQsIGluaXQsIGdldENvbnN0YW50cywgaXNDdWlkIH0gPSByZXF1aXJlKFwiLi9zcmMvaW5kZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlkID0gY3JlYXRlSWQ7XG5tb2R1bGUuZXhwb3J0cy5pbml0ID0gaW5pdDtcbm1vZHVsZS5leHBvcnRzLmdldENvbnN0YW50cyA9IGdldENvbnN0YW50cztcbm1vZHVsZS5leHBvcnRzLmlzQ3VpZCA9IGlzQ3VpZDtcbiIsICIvLyBSZXR1cm5zIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB3cmFwcGVkIGNhbGxiYWNrXG4vLyBUaGUgd3JhcHBlciBmdW5jdGlvbiBzaG91bGQgZG8gc29tZSBzdHVmZiwgYW5kIHJldHVybiBhXG4vLyBwcmVzdW1hYmx5IGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbi5cbi8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG93biBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCwgc28gdGhhdFxuLy8gZGVjb3JhdGlvbnMgYW5kIHN1Y2ggYXJlIG5vdCBsb3N0IGFsb25nIHRoZSB3YXkuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweVxuZnVuY3Rpb24gd3JhcHB5IChmbiwgY2IpIHtcbiAgaWYgKGZuICYmIGNiKSByZXR1cm4gd3JhcHB5KGZuKShjYilcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25lZWQgd3JhcHBlciBmdW5jdGlvbicpXG5cbiAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB3cmFwcGVyW2tdID0gZm5ba11cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlclxuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gICAgdmFyIHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aC0xXVxuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnZnVuY3Rpb24nICYmIHJldCAhPT0gY2IpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNiKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldFtrXSA9IGNiW2tdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRvbWFpbjsgLy8gVGhlIGRvbWFpbiBtb2R1bGUgaXMgZXhlY3V0ZWQgb24gZGVtYW5kXG52YXIgaGFzU2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG4vLyBVc2UgdGhlIGZhc3Rlc3QgbWVhbnMgcG9zc2libGUgdG8gZXhlY3V0ZSBhIHRhc2sgaW4gaXRzIG93biB0dXJuLCB3aXRoXG4vLyBwcmlvcml0eSBvdmVyIG90aGVyIGV2ZW50cyBpbmNsdWRpbmcgbmV0d29yayBJTyBldmVudHMgaW4gTm9kZS5qcy5cbi8vXG4vLyBBbiBleGNlcHRpb24gdGhyb3duIGJ5IGEgdGFzayB3aWxsIHBlcm1hbmVudGx5IGludGVycnVwdCB0aGUgcHJvY2Vzc2luZyBvZlxuLy8gc3Vic2VxdWVudCB0YXNrcy4gVGhlIGhpZ2hlciBsZXZlbCBgYXNhcGAgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGlmIGFuXG4vLyBleGNlcHRpb24gaXMgdGhyb3duIGJ5IGEgdGFzaywgdGhhdCB0aGUgdGFzayBxdWV1ZSB3aWxsIGNvbnRpbnVlIGZsdXNoaW5nIGFzXG4vLyBzb29uIGFzIHBvc3NpYmxlLCBidXQgaWYgeW91IHVzZSBgcmF3QXNhcGAgZGlyZWN0bHksIHlvdSBhcmUgcmVzcG9uc2libGUgdG9cbi8vIGVpdGhlciBlbnN1cmUgdGhhdCBubyBleGNlcHRpb25zIGFyZSB0aHJvd24gZnJvbSB5b3VyIHRhc2ssIG9yIHRvIG1hbnVhbGx5XG4vLyBjYWxsIGByYXdBc2FwLnJlcXVlc3RGbHVzaGAgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bi5cbm1vZHVsZS5leHBvcnRzID0gcmF3QXNhcDtcbmZ1bmN0aW9uIHJhd0FzYXAodGFzaykge1xuICAgIGlmICghcXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RGbHVzaCgpO1xuICAgICAgICBmbHVzaGluZyA9IHRydWU7XG4gICAgfVxuICAgIC8vIEF2b2lkcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICBxdWV1ZVtxdWV1ZS5sZW5ndGhdID0gdGFzaztcbn1cblxudmFyIHF1ZXVlID0gW107XG4vLyBPbmNlIGEgZmx1c2ggaGFzIGJlZW4gcmVxdWVzdGVkLCBubyBmdXJ0aGVyIGNhbGxzIHRvIGByZXF1ZXN0Rmx1c2hgIGFyZVxuLy8gbmVjZXNzYXJ5IHVudGlsIHRoZSBuZXh0IGBmbHVzaGAgY29tcGxldGVzLlxudmFyIGZsdXNoaW5nID0gZmFsc2U7XG4vLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5leHQgdGFzayB0byBleGVjdXRlIGluIHRoZSB0YXNrIHF1ZXVlLiBUaGlzIGlzXG4vLyBwcmVzZXJ2ZWQgYmV0d2VlbiBjYWxscyB0byBgZmx1c2hgIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3VtZWQgaWZcbi8vIGEgdGFzayB0aHJvd3MgYW4gZXhjZXB0aW9uLlxudmFyIGluZGV4ID0gMDtcbi8vIElmIGEgdGFzayBzY2hlZHVsZXMgYWRkaXRpb25hbCB0YXNrcyByZWN1cnNpdmVseSwgdGhlIHRhc2sgcXVldWUgY2FuIGdyb3dcbi8vIHVuYm91bmRlZC4gVG8gcHJldmVudCBtZW1vcnkgZXhjYXVzdGlvbiwgdGhlIHRhc2sgcXVldWUgd2lsbCBwZXJpb2RpY2FsbHlcbi8vIHRydW5jYXRlIGFscmVhZHktY29tcGxldGVkIHRhc2tzLlxudmFyIGNhcGFjaXR5ID0gMTAyNDtcblxuLy8gVGhlIGZsdXNoIGZ1bmN0aW9uIHByb2Nlc3NlcyBhbGwgdGFza3MgdGhhdCBoYXZlIGJlZW4gc2NoZWR1bGVkIHdpdGhcbi8vIGByYXdBc2FwYCB1bmxlc3MgYW5kIHVudGlsIG9uZSBvZiB0aG9zZSB0YXNrcyB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuLy8gSWYgYSB0YXNrIHRocm93cyBhbiBleGNlcHRpb24sIGBmbHVzaGAgZW5zdXJlcyB0aGF0IGl0cyBzdGF0ZSB3aWxsIHJlbWFpblxuLy8gY29uc2lzdGVudCBhbmQgd2lsbCByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgd2hlbiBjYWxsZWQgYWdhaW4uXG4vLyBIb3dldmVyLCBgZmx1c2hgIGRvZXMgbm90IG1ha2UgYW55IGFycmFuZ2VtZW50cyB0byBiZSBjYWxsZWQgYWdhaW4gaWYgYW5cbi8vIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG5mdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB3aGlsZSAoaW5kZXggPCBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICAvLyBBZHZhbmNlIHRoZSBpbmRleCBiZWZvcmUgY2FsbGluZyB0aGUgdGFzay4gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbFxuICAgICAgICAvLyBiZWdpbiBmbHVzaGluZyBvbiB0aGUgbmV4dCB0YXNrIHRoZSB0YXNrIHRocm93cyBhbiBlcnJvci5cbiAgICAgICAgaW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgIHF1ZXVlW2N1cnJlbnRJbmRleF0uY2FsbCgpO1xuICAgICAgICAvLyBQcmV2ZW50IGxlYWtpbmcgbWVtb3J5IGZvciBsb25nIGNoYWlucyBvZiByZWN1cnNpdmUgY2FsbHMgdG8gYGFzYXBgLlxuICAgICAgICAvLyBJZiB3ZSBjYWxsIGBhc2FwYCB3aXRoaW4gdGFza3Mgc2NoZWR1bGVkIGJ5IGBhc2FwYCwgdGhlIHF1ZXVlIHdpbGxcbiAgICAgICAgLy8gZ3JvdywgYnV0IHRvIGF2b2lkIGFuIE8obikgd2FsayBmb3IgZXZlcnkgdGFzayB3ZSBleGVjdXRlLCB3ZSBkb24ndFxuICAgICAgICAvLyBzaGlmdCB0YXNrcyBvZmYgdGhlIHF1ZXVlIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBwZXJpb2RpY2FsbHkgc2hpZnQgMTAyNCB0YXNrcyBvZmYgdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoaW5kZXggPiBjYXBhY2l0eSkge1xuICAgICAgICAgICAgLy8gTWFudWFsbHkgc2hpZnQgYWxsIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgaW5kZXggYmFjayB0byB0aGVcbiAgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgcXVldWUuXG4gICAgICAgICAgICBmb3IgKHZhciBzY2FuID0gMCwgbmV3TGVuZ3RoID0gcXVldWUubGVuZ3RoIC0gaW5kZXg7IHNjYW4gPCBuZXdMZW5ndGg7IHNjYW4rKykge1xuICAgICAgICAgICAgICAgIHF1ZXVlW3NjYW5dID0gcXVldWVbc2NhbiArIGluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXVlLmxlbmd0aCAtPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgIGluZGV4ID0gMDtcbiAgICBmbHVzaGluZyA9IGZhbHNlO1xufVxuXG5yYXdBc2FwLnJlcXVlc3RGbHVzaCA9IHJlcXVlc3RGbHVzaDtcbmZ1bmN0aW9uIHJlcXVlc3RGbHVzaCgpIHtcbiAgICAvLyBFbnN1cmUgZmx1c2hpbmcgaXMgbm90IGJvdW5kIHRvIGFueSBkb21haW4uXG4gICAgLy8gSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gZXhpdCB0aGUgZG9tYWluLCBiZWNhdXNlIGRvbWFpbnMgZXhpc3Qgb24gYSBzdGFjay5cbiAgICAvLyBUbyBleGVjdXRlIGNvZGUgb3V0c2lkZSBvZiBhbnkgZG9tYWluLCB0aGUgZm9sbG93aW5nIGRhbmNlIGlzIG5lY2Vzc2FyeS5cbiAgICB2YXIgcGFyZW50RG9tYWluID0gcHJvY2Vzcy5kb21haW47XG4gICAgaWYgKHBhcmVudERvbWFpbikge1xuICAgICAgICBpZiAoIWRvbWFpbikge1xuICAgICAgICAgICAgLy8gTGF6eSBleGVjdXRlIHRoZSBkb21haW4gbW9kdWxlLlxuICAgICAgICAgICAgLy8gT25seSBlbXBsb3llZCBpZiB0aGUgdXNlciBlbGVjdHMgdG8gdXNlIGRvbWFpbnMuXG4gICAgICAgICAgICBkb21haW4gPSByZXF1aXJlKFwiZG9tYWluXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRvbWFpbi5hY3RpdmUgPSBwcm9jZXNzLmRvbWFpbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gYHNldEltbWVkaWF0ZWAgaXMgc2xvd2VyIHRoYXQgYHByb2Nlc3MubmV4dFRpY2tgLCBidXQgYHByb2Nlc3MubmV4dFRpY2tgXG4gICAgLy8gY2Fubm90IGhhbmRsZSByZWN1cnNpb24uXG4gICAgLy8gYHJlcXVlc3RGbHVzaGAgd2lsbCBvbmx5IGJlIGNhbGxlZCByZWN1cnNpdmVseSBmcm9tIGBhc2FwLmpzYCwgdG8gcmVzdW1lXG4gICAgLy8gZmx1c2hpbmcgYWZ0ZXIgYW4gZXJyb3IgaXMgdGhyb3duIGludG8gYSBkb21haW4uXG4gICAgLy8gQ29udmVuaWVudGx5LCBgc2V0SW1tZWRpYXRlYCB3YXMgaW50cm9kdWNlZCBpbiB0aGUgc2FtZSB2ZXJzaW9uXG4gICAgLy8gYHByb2Nlc3MubmV4dFRpY2tgIHN0YXJ0ZWQgdGhyb3dpbmcgcmVjdXJzaW9uIGVycm9ycy5cbiAgICBpZiAoZmx1c2hpbmcgJiYgaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZShmbHVzaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERvbWFpbikge1xuICAgICAgICBkb21haW4uYWN0aXZlID0gcHJvY2Vzcy5kb21haW4gPSBwYXJlbnREb21haW47XG4gICAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgcmF3QXNhcCA9IHJlcXVpcmUoXCIuL3Jhd1wiKTtcbnZhciBmcmVlVGFza3MgPSBbXTtcblxuLyoqXG4gKiBDYWxscyBhIHRhc2sgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZXR1cm5pbmcsIGluIGl0cyBvd24gZXZlbnQsIHdpdGhcbiAqIHByaW9yaXR5IG92ZXIgSU8gZXZlbnRzLiBBbiBleGNlcHRpb24gdGhyb3duIGluIGEgdGFzayBjYW4gYmUgaGFuZGxlZCBieVxuICogYHByb2Nlc3Mub24oXCJ1bmNhdWdodEV4Y2VwdGlvblwiKSBvciBgZG9tYWluLm9uKFwiZXJyb3JcIilgLCBidXQgd2lsbCBvdGhlcndpc2VcbiAqIGNyYXNoIHRoZSBwcm9jZXNzLiBJZiB0aGUgZXJyb3IgaXMgaGFuZGxlZCwgYWxsIHN1YnNlcXVlbnQgdGFza3Mgd2lsbFxuICogcmVzdW1lLlxuICpcbiAqIEBwYXJhbSB7e2NhbGx9fSB0YXNrIEEgY2FsbGFibGUgb2JqZWN0LCB0eXBpY2FsbHkgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vXG4gKiBhcmd1bWVudHMuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gYXNhcDtcbmZ1bmN0aW9uIGFzYXAodGFzaykge1xuICAgIHZhciByYXdUYXNrO1xuICAgIGlmIChmcmVlVGFza3MubGVuZ3RoKSB7XG4gICAgICAgIHJhd1Rhc2sgPSBmcmVlVGFza3MucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmF3VGFzayA9IG5ldyBSYXdUYXNrKCk7XG4gICAgfVxuICAgIHJhd1Rhc2sudGFzayA9IHRhc2s7XG4gICAgcmF3VGFzay5kb21haW4gPSBwcm9jZXNzLmRvbWFpbjtcbiAgICByYXdBc2FwKHJhd1Rhc2spO1xufVxuXG5mdW5jdGlvbiBSYXdUYXNrKCkge1xuICAgIHRoaXMudGFzayA9IG51bGw7XG4gICAgdGhpcy5kb21haW4gPSBudWxsO1xufVxuXG5SYXdUYXNrLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmRvbWFpbikge1xuICAgICAgICB0aGlzLmRvbWFpbi5lbnRlcigpO1xuICAgIH1cbiAgICB2YXIgdGhyZXcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMudGFzay5jYWxsKCk7XG4gICAgICAgIHRocmV3ID0gZmFsc2U7XG4gICAgICAgIC8vIElmIHRoZSB0YXNrIHRocm93cyBhbiBleGNlcHRpb24gKHByZXN1bWFibHkpIE5vZGUuanMgcmVzdG9yZXMgdGhlXG4gICAgICAgIC8vIGRvbWFpbiBzdGFjayBmb3IgdGhlIG5leHQgZXZlbnQuXG4gICAgICAgIGlmICh0aGlzLmRvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5kb21haW4uZXhpdCgpO1xuICAgICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gV2UgdXNlIHRyeS9maW5hbGx5IGFuZCBhIHRocmV3IGZsYWcgdG8gYXZvaWQgbWVzc2luZyB1cCBzdGFjayB0cmFjZXNcbiAgICAgICAgLy8gd2hlbiB3ZSBjYXRjaCBhbmQgcmVsZWFzZSBlcnJvcnMuXG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgLy8gSW4gTm9kZS5qcywgdW5jYXVnaHQgZXhjZXB0aW9ucyBhcmUgY29uc2lkZXJlZCBmYXRhbCBlcnJvcnMuXG4gICAgICAgICAgICAvLyBSZS10aHJvdyB0aGVtIHRvIGludGVycnVwdCBmbHVzaGluZyFcbiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGZsdXNoaW5nIGNvbnRpbnVlcyBpZiBhbiB1bmNhdWdodCBleGNlcHRpb24gaXNcbiAgICAgICAgICAgIC8vIHN1cHByZXNzZWQgbGlzdGVuaW5nIHByb2Nlc3Mub24oXCJ1bmNhdWdodEV4Y2VwdGlvblwiKSBvclxuICAgICAgICAgICAgLy8gZG9tYWluLm9uKFwiZXJyb3JcIikuXG4gICAgICAgICAgICByYXdBc2FwLnJlcXVlc3RGbHVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSB0YXNrIHRocmV3IGFuIGVycm9yLCB3ZSBkbyBub3Qgd2FudCB0byBleGl0IHRoZSBkb21haW4gaGVyZS5cbiAgICAgICAgLy8gRXhpdGluZyB0aGUgZG9tYWluIHdvdWxkIHByZXZlbnQgdGhlIGRvbWFpbiBmcm9tIGNhdGNoaW5nIHRoZSBlcnJvci5cbiAgICAgICAgdGhpcy50YXNrID0gbnVsbDtcbiAgICAgICAgdGhpcy5kb21haW4gPSBudWxsO1xuICAgICAgICBmcmVlVGFza3MucHVzaCh0aGlzKTtcbiAgICB9XG59O1xuXG4iLCAidmFyIHdyYXBweSA9IHJlcXVpcmUoJ3dyYXBweScpXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweShkZXphbGdvKVxuXG52YXIgYXNhcCA9IHJlcXVpcmUoJ2FzYXAnKVxuXG5mdW5jdGlvbiBkZXphbGdvIChjYikge1xuICB2YXIgc3luYyA9IHRydWVcbiAgYXNhcChmdW5jdGlvbiAoKSB7XG4gICAgc3luYyA9IGZhbHNlXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHphbGdvU2FmZSgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50c1xuICAgIHZhciBtZSA9IHRoaXNcbiAgICBpZiAoc3luYylcbiAgICAgIGFzYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiLmFwcGx5KG1lLCBhcmdzKVxuICAgICAgfSlcbiAgICBlbHNlXG4gICAgICBjYi5hcHBseShtZSwgYXJncylcbiAgfVxufVxuIiwgInZhciB3cmFwcHkgPSByZXF1aXJlKCd3cmFwcHknKVxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHkob25jZSlcbm1vZHVsZS5leHBvcnRzLnN0cmljdCA9IHdyYXBweShvbmNlU3RyaWN0KVxuXG5vbmNlLnByb3RvID0gb25jZShmdW5jdGlvbiAoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZSh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2VTdHJpY3QnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlU3RyaWN0KHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZCkgcmV0dXJuIGYudmFsdWVcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG5cbmZ1bmN0aW9uIG9uY2VTdHJpY3QgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihmLm9uY2VFcnJvcilcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICB2YXIgbmFtZSA9IGZuLm5hbWUgfHwgJ0Z1bmN0aW9uIHdyYXBwZWQgd2l0aCBgb25jZWAnXG4gIGYub25jZUVycm9yID0gbmFtZSArIFwiIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2VcIlxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG4iLCAiY29uc3QgbWlzc2luZ1BsdWdpbiA9IDEwMDA7XG5jb25zdCBwbHVnaW5GdW5jdGlvbiA9IDEwMDE7XG5jb25zdCBhYm9ydGVkID0gMTAwMjtcbmNvbnN0IG5vUGFyc2VyID0gMTAwMztcbmNvbnN0IHVuaW5pdGlhbGl6ZWRQYXJzZXIgPSAxMDA0O1xuY29uc3QgZmlsZW5hbWVOb3RTdHJpbmcgPSAxMDA1O1xuY29uc3QgbWF4RmllbGRzU2l6ZUV4Y2VlZGVkID0gMTAwNjtcbmNvbnN0IG1heEZpZWxkc0V4Y2VlZGVkID0gMTAwNztcbmNvbnN0IHNtYWxsZXJUaGFuTWluRmlsZVNpemUgPSAxMDA4O1xuY29uc3QgYmlnZ2VyVGhhblRvdGFsTWF4RmlsZVNpemUgPSAxMDA5O1xuY29uc3Qgbm9FbXB0eUZpbGVzID0gMTAxMDtcbmNvbnN0IG1pc3NpbmdDb250ZW50VHlwZSA9IDEwMTE7XG5jb25zdCBtYWxmb3JtZWRNdWx0aXBhcnQgPSAxMDEyO1xuY29uc3QgbWlzc2luZ011bHRpcGFydEJvdW5kYXJ5ID0gMTAxMztcbmNvbnN0IHVua25vd25UcmFuc2ZlckVuY29kaW5nID0gMTAxNDtcbmNvbnN0IG1heEZpbGVzRXhjZWVkZWQgPSAxMDE1O1xuY29uc3QgYmlnZ2VyVGhhbk1heEZpbGVTaXplID0gMTAxNjtcbmNvbnN0IHBsdWdpbkZhaWxlZCA9IDEwMTc7XG5jb25zdCBjYW5ub3RDcmVhdGVEaXIgPSAxMDE4O1xuXG5jb25zdCBGb3JtaWRhYmxlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgaW50ZXJuYWxDb2RlLCBodHRwQ29kZSA9IDUwMCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuY29kZSA9IGludGVybmFsQ29kZTtcbiAgICB0aGlzLmh0dHBDb2RlID0gaHR0cENvZGU7XG4gIH1cbn07XG5cbmV4cG9ydCB7XG4gIG1pc3NpbmdQbHVnaW4sXG4gIHBsdWdpbkZ1bmN0aW9uLFxuICBhYm9ydGVkLFxuICBub1BhcnNlcixcbiAgdW5pbml0aWFsaXplZFBhcnNlcixcbiAgZmlsZW5hbWVOb3RTdHJpbmcsXG4gIG1heEZpZWxkc1NpemVFeGNlZWRlZCxcbiAgbWF4RmllbGRzRXhjZWVkZWQsXG4gIG1heEZpbGVzRXhjZWVkZWQsXG4gIHNtYWxsZXJUaGFuTWluRmlsZVNpemUsXG4gIGJpZ2dlclRoYW5NYXhGaWxlU2l6ZSxcbiAgbm9FbXB0eUZpbGVzLFxuICBtaXNzaW5nQ29udGVudFR5cGUsXG4gIG1hbGZvcm1lZE11bHRpcGFydCxcbiAgbWlzc2luZ011bHRpcGFydEJvdW5kYXJ5LFxuICB1bmtub3duVHJhbnNmZXJFbmNvZGluZyxcbiAgYmlnZ2VyVGhhblRvdGFsTWF4RmlsZVNpemUsXG4gIHBsdWdpbkZhaWxlZCxcbiAgY2Fubm90Q3JlYXRlRGlyLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybWlkYWJsZUVycm9yO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ25vZGU6c3RyZWFtJztcblxuY2xhc3MgRHVtbXlQYXJzZXIgZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihpbmNvbWluZ0Zvcm0sIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5pbmNvbWluZ0Zvcm0gPSBpbmNvbWluZ0Zvcm07XG4gIH1cblxuICBfZmx1c2goY2FsbGJhY2spIHtcbiAgICB0aGlzLmluY29taW5nRm9ybS5lbmRlZCA9IHRydWU7XG4gICAgdGhpcy5pbmNvbWluZ0Zvcm0uX21heWJlRW5kKCk7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEdW1teVBhcnNlcjtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuLi9Gb3JtaWRhYmxlRXJyb3IuanMnO1xuaW1wb3J0IEZvcm1pZGFibGVFcnJvciBmcm9tICcuLi9Gb3JtaWRhYmxlRXJyb3IuanMnO1xuXG5sZXQgcyA9IDA7XG5jb25zdCBTVEFURSA9IHtcbiAgUEFSU0VSX1VOSU5JVElBTElaRUQ6IHMrKyxcbiAgU1RBUlQ6IHMrKyxcbiAgU1RBUlRfQk9VTkRBUlk6IHMrKyxcbiAgSEVBREVSX0ZJRUxEX1NUQVJUOiBzKyssXG4gIEhFQURFUl9GSUVMRDogcysrLFxuICBIRUFERVJfVkFMVUVfU1RBUlQ6IHMrKyxcbiAgSEVBREVSX1ZBTFVFOiBzKyssXG4gIEhFQURFUl9WQUxVRV9BTE1PU1RfRE9ORTogcysrLFxuICBIRUFERVJTX0FMTU9TVF9ET05FOiBzKyssXG4gIFBBUlRfREFUQV9TVEFSVDogcysrLFxuICBQQVJUX0RBVEE6IHMrKyxcbiAgUEFSVF9FTkQ6IHMrKyxcbiAgRU5EOiBzKyssXG59O1xuXG5sZXQgZiA9IDE7XG5jb25zdCBGQk9VTkRBUlkgPSB7IFBBUlRfQk9VTkRBUlk6IGYsIExBU1RfQk9VTkRBUlk6IChmICo9IDIpIH07XG5cbmNvbnN0IExGID0gMTA7XG5jb25zdCBDUiA9IDEzO1xuY29uc3QgU1BBQ0UgPSAzMjtcbmNvbnN0IEhZUEhFTiA9IDQ1O1xuY29uc3QgQ09MT04gPSA1ODtcbmNvbnN0IEEgPSA5NztcbmNvbnN0IFogPSAxMjI7XG5cbmZ1bmN0aW9uIGxvd2VyKGMpIHtcbiAgcmV0dXJuIGMgfCAweDIwO1xufVxuXG5leHBvcnQgY29uc3QgU1RBVEVTID0ge307XG5cbk9iamVjdC5rZXlzKFNUQVRFKS5mb3JFYWNoKChzdGF0ZU5hbWUpID0+IHtcbiAgU1RBVEVTW3N0YXRlTmFtZV0gPSBTVEFURVtzdGF0ZU5hbWVdO1xufSk7XG5cbmNsYXNzIE11bHRpcGFydFBhcnNlciBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHsgcmVhZGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgIHRoaXMuYm91bmRhcnkgPSBudWxsO1xuICAgIHRoaXMuYm91bmRhcnlDaGFycyA9IG51bGw7XG4gICAgdGhpcy5sb29rYmVoaW5kID0gbnVsbDtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFLlBBUlNFUl9VTklOSVRJQUxJWkVEO1xuXG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5pbmRleCA9IG51bGw7XG4gICAgdGhpcy5mbGFncyA9IDA7XG4gIH1cblxuICBfZW5kVW5leHBlY3RlZCgpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgIGBNdWx0aXBhcnRQYXJzZXIuZW5kKCk6IHN0cmVhbSBlbmRlZCB1bmV4cGVjdGVkbHk6ICR7dGhpcy5leHBsYWluKCl9YCxcbiAgICAgIGVycm9ycy5tYWxmb3JtZWRNdWx0aXBhcnQsXG4gICAgICA0MDAsXG4gICAgKTtcbiAgfVxuXG4gIF9mbHVzaChkb25lKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUgPT09IFNUQVRFLkhFQURFUl9GSUVMRF9TVEFSVCAmJiB0aGlzLmluZGV4ID09PSAwKSB8fFxuICAgICAgKHRoaXMuc3RhdGUgPT09IFNUQVRFLlBBUlRfREFUQSAmJiB0aGlzLmluZGV4ID09PSB0aGlzLmJvdW5kYXJ5Lmxlbmd0aClcbiAgICApIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKCdwYXJ0RW5kJyk7XG4gICAgICB0aGlzLl9oYW5kbGVDYWxsYmFjaygnZW5kJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURS5FTkQpIHtcbiAgICAgIGRvbmUodGhpcy5fZW5kVW5leHBlY3RlZCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRXaXRoQm91bmRhcnkoc3RyKSB7XG4gICAgdGhpcy5ib3VuZGFyeSA9IEJ1ZmZlci5mcm9tKGBcXHJcXG4tLSR7c3RyfWApO1xuICAgIHRoaXMubG9va2JlaGluZCA9IEJ1ZmZlci5hbGxvYyh0aGlzLmJvdW5kYXJ5Lmxlbmd0aCArIDgpO1xuICAgIHRoaXMuc3RhdGUgPSBTVEFURS5TVEFSVDtcbiAgICB0aGlzLmJvdW5kYXJ5Q2hhcnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZGFyeS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ib3VuZGFyeUNoYXJzW3RoaXMuYm91bmRhcnlbaV1dID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuICBfaGFuZGxlQ2FsbGJhY2sobmFtZSwgYnVmLCBzdGFydCwgZW5kKSB7XG4gICAgaWYgKHN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgc3RhcnQgPT09IGVuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnB1c2goeyBuYW1lLCBidWZmZXI6IGJ1Ziwgc3RhcnQsIGVuZCB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBfdHJhbnNmb3JtKGJ1ZmZlciwgXywgZG9uZSkge1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgcHJldkluZGV4ID0gdGhpcy5pbmRleDtcbiAgICBsZXQgeyBpbmRleCwgc3RhdGUsIGZsYWdzIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgbG9va2JlaGluZCwgYm91bmRhcnksIGJvdW5kYXJ5Q2hhcnMgfSA9IHRoaXM7XG4gICAgY29uc3QgYm91bmRhcnlMZW5ndGggPSBib3VuZGFyeS5sZW5ndGg7XG4gICAgY29uc3QgYm91bmRhcnlFbmQgPSBib3VuZGFyeUxlbmd0aCAtIDE7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGxldCBjID0gbnVsbDtcbiAgICBsZXQgY2wgPSBudWxsO1xuXG4gICAgY29uc3Qgc2V0TWFyayA9IChuYW1lLCBpZHgpID0+IHtcbiAgICAgIHRoaXNbYCR7bmFtZX1NYXJrYF0gPSB0eXBlb2YgaWR4ID09PSAnbnVtYmVyJyA/IGlkeCA6IGk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyTWFya1N5bWJvbCA9IChuYW1lKSA9PiB7XG4gICAgICBkZWxldGUgdGhpc1tgJHtuYW1lfU1hcmtgXTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGF0YUNhbGxiYWNrID0gKG5hbWUsIHNob3VsZENsZWFyKSA9PiB7XG4gICAgICBjb25zdCBtYXJrU3ltYm9sID0gYCR7bmFtZX1NYXJrYDtcbiAgICAgIGlmICghKG1hcmtTeW1ib2wgaW4gdGhpcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZENsZWFyKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKG5hbWUsIGJ1ZmZlciwgdGhpc1ttYXJrU3ltYm9sXSwgYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIHNldE1hcmsobmFtZSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9oYW5kbGVDYWxsYmFjayhuYW1lLCBidWZmZXIsIHRoaXNbbWFya1N5bWJvbF0sIGkpO1xuICAgICAgICBjbGVhck1hcmtTeW1ib2wobmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmJ1ZmZlckxlbmd0aDsgaSsrKSB7XG4gICAgICBjID0gYnVmZmVyW2ldO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlIFNUQVRFLlBBUlNFUl9VTklOSVRJQUxJWkVEOlxuICAgICAgICAgIGRvbmUodGhpcy5fZW5kVW5leHBlY3RlZCgpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU1RBVEUuU1RBUlQ6XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgIHN0YXRlID0gU1RBVEUuU1RBUlRfQk9VTkRBUlk7XG4gICAgICAgIGNhc2UgU1RBVEUuU1RBUlRfQk9VTkRBUlk6XG4gICAgICAgICAgaWYgKGluZGV4ID09PSBib3VuZGFyeS5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gSFlQSEVOKSB7XG4gICAgICAgICAgICAgIGZsYWdzIHw9IEZCT1VOREFSWS5MQVNUX0JPVU5EQVJZO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjICE9PSBDUikge1xuICAgICAgICAgICAgICBkb25lKHRoaXMuX2VuZFVuZXhwZWN0ZWQoKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IC0gMSA9PT0gYm91bmRhcnkubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgaWYgKGZsYWdzICYgRkJPVU5EQVJZLkxBU1RfQk9VTkRBUlkgJiYgYyA9PT0gSFlQSEVOKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKCdlbmQnKTtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5FTkQ7XG4gICAgICAgICAgICAgIGZsYWdzID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIEZCT1VOREFSWS5MQVNUX0JPVU5EQVJZKSAmJiBjID09PSBMRikge1xuICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKCdwYXJ0QmVnaW4nKTtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfRklFTERfU1RBUlQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb25lKHRoaXMuX2VuZFVuZXhwZWN0ZWQoKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjICE9PSBib3VuZGFyeVtpbmRleCArIDJdKSB7XG4gICAgICAgICAgICBpbmRleCA9IC0yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gYm91bmRhcnlbaW5kZXggKyAyXSkge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU1RBVEUuSEVBREVSX0ZJRUxEX1NUQVJUOlxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuSEVBREVSX0ZJRUxEO1xuICAgICAgICAgIHNldE1hcmsoJ2hlYWRlckZpZWxkJyk7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBjYXNlIFNUQVRFLkhFQURFUl9GSUVMRDpcbiAgICAgICAgICBpZiAoYyA9PT0gQ1IpIHtcbiAgICAgICAgICAgIGNsZWFyTWFya1N5bWJvbCgnaGVhZGVyRmllbGQnKTtcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuSEVBREVSU19BTE1PU1RfRE9ORTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgaWYgKGMgPT09IEhZUEhFTikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMgPT09IENPTE9OKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgLy8gZW1wdHkgaGVhZGVyIGZpZWxkXG4gICAgICAgICAgICAgIGRvbmUodGhpcy5fZW5kVW5leHBlY3RlZCgpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YUNhbGxiYWNrKCdoZWFkZXJGaWVsZCcsIHRydWUpO1xuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfVkFMVUVfU1RBUlQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbCA9IGxvd2VyKGMpO1xuICAgICAgICAgIGlmIChjbCA8IEEgfHwgY2wgPiBaKSB7XG4gICAgICAgICAgICBkb25lKHRoaXMuX2VuZFVuZXhwZWN0ZWQoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNUQVRFLkhFQURFUl9WQUxVRV9TVEFSVDpcbiAgICAgICAgICBpZiAoYyA9PT0gU1BBQ0UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldE1hcmsoJ2hlYWRlclZhbHVlJyk7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfVkFMVUU7XG4gICAgICAgIGNhc2UgU1RBVEUuSEVBREVSX1ZBTFVFOlxuICAgICAgICAgIGlmIChjID09PSBDUikge1xuICAgICAgICAgICAgZGF0YUNhbGxiYWNrKCdoZWFkZXJWYWx1ZScsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2soJ2hlYWRlckVuZCcpO1xuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfVkFMVUVfQUxNT1NUX0RPTkU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNUQVRFLkhFQURFUl9WQUxVRV9BTE1PU1RfRE9ORTpcbiAgICAgICAgICBpZiAoYyAhPT0gTEYpIHtcbiAgICAgICAgICAgIGRvbmUodGhpcy5fZW5kVW5leHBlY3RlZCgpKTtcbnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfRklFTERfU1RBUlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU1RBVEUuSEVBREVSU19BTE1PU1RfRE9ORTpcbiAgICAgICAgICBpZiAoYyAhPT0gTEYpIHtcbiAgICAgICAgICAgIGRvbmUodGhpcy5fZW5kVW5leHBlY3RlZCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVDYWxsYmFjaygnaGVhZGVyc0VuZCcpO1xuICAgICAgICAgIHN0YXRlID0gU1RBVEUuUEFSVF9EQVRBX1NUQVJUO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNUQVRFLlBBUlRfREFUQV9TVEFSVDpcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlBBUlRfREFUQTtcbiAgICAgICAgICBzZXRNYXJrKCdwYXJ0RGF0YScpO1xuICAgICAgICBjYXNlIFNUQVRFLlBBUlRfREFUQTpcbiAgICAgICAgICBwcmV2SW5kZXggPSBpbmRleDtcblxuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gYm95ZXItbW9vcmUgZGVyaXZlZCBhbGdvcml0aG0gdG8gc2FmZWx5IHNraXAgbm9uLWJvdW5kYXJ5IGRhdGFcbiAgICAgICAgICAgIGkgKz0gYm91bmRhcnlFbmQ7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMuYnVmZmVyTGVuZ3RoICYmICEoYnVmZmVyW2ldIGluIGJvdW5kYXJ5Q2hhcnMpKSB7XG4gICAgICAgICAgICAgIGkgKz0gYm91bmRhcnlMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpIC09IGJvdW5kYXJ5RW5kO1xuICAgICAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5kZXggPCBib3VuZGFyeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChib3VuZGFyeVtpbmRleF0gPT09IGMpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF0YUNhbGxiYWNrKCdwYXJ0RGF0YScsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gYm91bmRhcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGMgPT09IENSKSB7XG4gICAgICAgICAgICAgIC8vIENSID0gcGFydCBib3VuZGFyeVxuICAgICAgICAgICAgICBmbGFncyB8PSBGQk9VTkRBUlkuUEFSVF9CT1VOREFSWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gSFlQSEVOKSB7XG4gICAgICAgICAgICAgIC8vIEhZUEhFTiA9IGVuZCBib3VuZGFyeVxuICAgICAgICAgICAgICBmbGFncyB8PSBGQk9VTkRBUlkuTEFTVF9CT1VOREFSWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IC0gMSA9PT0gYm91bmRhcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiBGQk9VTkRBUlkuUEFSVF9CT1VOREFSWSkge1xuICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgIGlmIChjID09PSBMRikge1xuICAgICAgICAgICAgICAgIC8vIHVuc2V0IHRoZSBQQVJUX0JPVU5EQVJZIGZsYWdcbiAgICAgICAgICAgICAgICBmbGFncyAmPSB+RkJPVU5EQVJZLlBBUlRfQk9VTkRBUlk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2soJ3BhcnRFbmQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDYWxsYmFjaygncGFydEJlZ2luJyk7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5IRUFERVJfRklFTERfU1RBUlQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGQk9VTkRBUlkuTEFTVF9CT1VOREFSWSkge1xuICAgICAgICAgICAgICBpZiAoYyA9PT0gSFlQSEVOKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2soJ3BhcnRFbmQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDYWxsYmFjaygnZW5kJyk7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5FTkQ7XG4gICAgICAgICAgICAgICAgZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIC8vIHdoZW4gbWF0Y2hpbmcgYSBwb3NzaWJsZSBib3VuZGFyeSwga2VlcCBhIGxvb2tiZWhpbmQgcmVmZXJlbmNlXG4gICAgICAgICAgICAvLyBpbiBjYXNlIGl0IHR1cm5zIG91dCB0byBiZSBhIGZhbHNlIGxlYWRcbiAgICAgICAgICAgIGxvb2tiZWhpbmRbaW5kZXggLSAxXSA9IGM7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAvLyBpZiBvdXIgYm91bmRhcnkgdHVybmVkIG91dCB0byBiZSBydWJiaXNoLCB0aGUgY2FwdHVyZWQgbG9va2JlaGluZFxuICAgICAgICAgICAgLy8gYmVsb25ncyB0byBwYXJ0RGF0YVxuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2soJ3BhcnREYXRhJywgbG9va2JlaGluZCwgMCwgcHJldkluZGV4KTtcbiAgICAgICAgICAgIHByZXZJbmRleCA9IDA7XG4gICAgICAgICAgICBzZXRNYXJrKCdwYXJ0RGF0YScpO1xuXG4gICAgICAgICAgICAvLyByZWNvbnNpZGVyIHRoZSBjdXJyZW50IGNoYXJhY3RlciBldmVuIHNvIGl0IGludGVycnVwdGVkIHRoZSBzZXF1ZW5jZVxuICAgICAgICAgICAgLy8gaXQgY291bGQgYmUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBzZXF1ZW5jZVxuICAgICAgICAgICAgaS0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNUQVRFLkVORDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBkb25lKHRoaXMuX2VuZFVuZXhwZWN0ZWQoKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFDYWxsYmFjaygnaGVhZGVyRmllbGQnKTtcbiAgICBkYXRhQ2FsbGJhY2soJ2hlYWRlclZhbHVlJyk7XG4gICAgZGF0YUNhbGxiYWNrKCdwYXJ0RGF0YScpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG5cbiAgICBkb25lKCk7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyTGVuZ3RoO1xuICB9XG5cbiAgZXhwbGFpbigpIHtcbiAgICByZXR1cm4gYHN0YXRlID0gJHtNdWx0aXBhcnRQYXJzZXIuc3RhdGVUb1N0cmluZyh0aGlzLnN0YXRlKX1gO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuTXVsdGlwYXJ0UGFyc2VyLnN0YXRlVG9TdHJpbmcgPSAoc3RhdGVOdW1iZXIpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBndWFyZC1mb3ItaW5cbiAgZm9yIChjb25zdCBzdGF0ZU5hbWUgaW4gU1RBVEUpIHtcbiAgICBjb25zdCBudW1iZXIgPSBTVEFURVtzdGF0ZU5hbWVdO1xuICAgIGlmIChudW1iZXIgPT09IHN0YXRlTnVtYmVyKSByZXR1cm4gc3RhdGVOYW1lO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKE11bHRpcGFydFBhcnNlciwgeyBTVEFURVMgfSk7XG4iLCAiaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tICdub2RlOnN0cmVhbSc7XG5cbmNsYXNzIE9jdGV0U3RyZWFtUGFyc2VyIGV4dGVuZHMgUGFzc1Rocm91Z2gge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9jdGV0U3RyZWFtUGFyc2VyO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCBPY3RldFN0cmVhbVBhcnNlciBmcm9tICcuLi9wYXJzZXJzL09jdGV0U3RyZWFtLmpzJztcblxuZXhwb3J0IGNvbnN0IG9jdGV0U3RyZWFtVHlwZSA9ICdvY3RldC1zdHJlYW0nO1xuLy8gdGhlIGBvcHRpb25zYCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgLyBgZm9ybWlkYWJsZS5vcHRpb25zYFxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGx1Z2luKGZvcm1pZGFibGUsIG9wdGlvbnMpIHtcbiAgLy8gdGhlIGB0aGlzYCBjb250ZXh0IGlzIGFsd2F5cyBmb3JtaWRhYmxlLCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBwbHVnaW5cbiAgLy8gYnV0IHRoaXMgYWxsb3dzIHVzIHRvIGN1c3RvbWl6ZS90ZXN0IGVhY2ggcGx1Z2luXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3Qgc2VsZiA9IHRoaXMgfHwgZm9ybWlkYWJsZTtcblxuICBpZiAoL29jdGV0LXN0cmVhbS9pLnRlc3Qoc2VsZi5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkpIHtcbiAgICBhd2FpdCBpbml0LmNhbGwoc2VsZiwgc2VsZiwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8vIE5vdGUgdGhhdCBpdCdzIGEgZ29vZCBwcmFjdGljZSAoYnV0IGl0J3MgdXAgdG8geW91KSB0byB1c2UgdGhlIGB0aGlzLm9wdGlvbnNgIGluc3RlYWRcbi8vIG9mIHRoZSBwYXNzZWQgYG9wdGlvbnNgIChzZWNvbmQpIHBhcmFtLCBiZWNhdXNlIHdoZW4geW91IGRlY2lkZVxuLy8gdG8gdGVzdCB0aGUgcGx1Z2luIHlvdSBjYW4gcGFzcyBjdXN0b20gYHRoaXNgIGNvbnRleHQgdG8gaXQgKGFuZCBzbyBgdGhpcy5vcHRpb25zYClcbmFzeW5jIGZ1bmN0aW9uIGluaXQoX3NlbGYsIF9vcHRzKSB7XG4gIHRoaXMudHlwZSA9IG9jdGV0U3RyZWFtVHlwZTtcbiAgY29uc3Qgb3JpZ2luYWxGaWxlbmFtZSA9IHRoaXMuaGVhZGVyc1sneC1maWxlLW5hbWUnXTtcbiAgY29uc3QgbWltZXR5cGUgPSB0aGlzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuXG4gIGNvbnN0IHRoaXNQYXJ0ID0ge1xuICAgIG9yaWdpbmFsRmlsZW5hbWUsXG4gICAgbWltZXR5cGUsXG4gIH07XG4gIGNvbnN0IG5ld0ZpbGVuYW1lID0gdGhpcy5fZ2V0TmV3TmFtZSh0aGlzUGFydCk7XG4gIGNvbnN0IGZpbGVwYXRoID0gdGhpcy5fam9pbkRpcmVjdG9yeU5hbWUobmV3RmlsZW5hbWUpO1xuICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5fbmV3RmlsZSh7XG4gICAgbmV3RmlsZW5hbWUsXG4gICAgZmlsZXBhdGgsXG4gICAgb3JpZ2luYWxGaWxlbmFtZSxcbiAgICBtaW1ldHlwZSxcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdmaWxlQmVnaW4nLCBvcmlnaW5hbEZpbGVuYW1lLCBmaWxlKTtcbiAgZmlsZS5vcGVuKCk7XG4gIHRoaXMub3BlbmVkRmlsZXMucHVzaChmaWxlKTtcbiAgdGhpcy5fZmx1c2hpbmcgKz0gMTtcblxuICB0aGlzLl9wYXJzZXIgPSBuZXcgT2N0ZXRTdHJlYW1QYXJzZXIodGhpcy5vcHRpb25zKTtcblxuICAvLyBLZWVwIHRyYWNrIG9mIHdyaXRlcyB0aGF0IGhhdmVuJ3QgZmluaXNoZWQgc28gd2UgZG9uJ3QgZW1pdCB0aGUgZmlsZSBiZWZvcmUgaXQncyBkb25lIGJlaW5nIHdyaXR0ZW5cbiAgbGV0IG91dHN0YW5kaW5nV3JpdGVzID0gMDtcblxuICB0aGlzLl9wYXJzZXIub24oJ2RhdGEnLCAoYnVmZmVyKSA9PiB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIG91dHN0YW5kaW5nV3JpdGVzICs9IDE7XG5cbiAgICBmaWxlLndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgb3V0c3RhbmRpbmdXcml0ZXMgLT0gMTtcbiAgICAgIHRoaXMucmVzdW1lKCk7XG5cbiAgICAgIGlmICh0aGlzLmVuZGVkKSB7XG4gICAgICAgIHRoaXMuX3BhcnNlci5lbWl0KCdkb25lV3JpdGluZ0ZpbGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5fcGFyc2VyLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgdGhpcy5fZmx1c2hpbmcgLT0gMTtcbiAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBmaWxlLmVuZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnZmlsZScsICdmaWxlJywgZmlsZSk7XG4gICAgICAgIHRoaXMuX21heWJlRW5kKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKG91dHN0YW5kaW5nV3JpdGVzID09PSAwKSB7XG4gICAgICBkb25lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlci5vbmNlKCdkb25lV3JpdGluZ0ZpbGUnLCBkb25lKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ25vZGU6c3RyZWFtJztcblxuLy8gVGhpcyBpcyBhIGJ1ZmZlcmluZyBwYXJzZXIsIGhhdmUgYSBsb29rIGF0IFN0cmVhbWluZ1F1ZXJ5c3RyaW5nLmpzIGZvciBhIHN0cmVhbWluZyBwYXJzZXJcbmNsYXNzIFF1ZXJ5c3RyaW5nUGFyc2VyIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoeyByZWFkYWJsZU9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5idWZmZXIgPSAnJztcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gIH1cblxuICBfdHJhbnNmb3JtKGJ1ZmZlciwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5idWZmZXIgKz0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXIubGVuZ3RoO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBfZmx1c2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBmaWVsZHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRoaXMuYnVmZmVyKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmaWVsZHMpIHtcbiAgICAgIHRoaXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIgPSAnJztcbiAgICBjYWxsYmFjaygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFF1ZXJ5c3RyaW5nUGFyc2VyO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cblxuaW1wb3J0IFF1ZXJ5c3RyaW5nUGFyc2VyIGZyb20gJy4uL3BhcnNlcnMvUXVlcnlzdHJpbmcuanMnO1xuXG5leHBvcnQgY29uc3QgcXVlcnlzdHJpbmdUeXBlID0gJ3VybGVuY29kZWQnO1xuLy8gdGhlIGBvcHRpb25zYCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBgdGhpcy5vcHRpb25zYCAvIGBmb3JtaWRhYmxlLm9wdGlvbnNgXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwbHVnaW4oZm9ybWlkYWJsZSwgb3B0aW9ucykge1xuICAvLyB0aGUgYHRoaXNgIGNvbnRleHQgaXMgYWx3YXlzIGZvcm1pZGFibGUsIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBhIHBsdWdpblxuICAvLyBidXQgdGhpcyBhbGxvd3MgdXMgdG8gY3VzdG9taXplL3Rlc3QgZWFjaCBwbHVnaW5cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdCBzZWxmID0gdGhpcyB8fCBmb3JtaWRhYmxlO1xuXG4gIGlmICgvdXJsZW5jb2RlZC9pLnRlc3Qoc2VsZi5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkpIHtcbiAgICBpbml0LmNhbGwoc2VsZiwgc2VsZiwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBOb3RlIHRoYXQgaXQncyBhIGdvb2QgcHJhY3RpY2UgKGJ1dCBpdCdzIHVwIHRvIHlvdSkgdG8gdXNlIHRoZSBgdGhpcy5vcHRpb25zYCBpbnN0ZWFkXG4vLyBvZiB0aGUgcGFzc2VkIGBvcHRpb25zYCAoc2Vjb25kKSBwYXJhbSwgYmVjYXVzZSB3aGVuIHlvdSBkZWNpZGVcbi8vIHRvIHRlc3QgdGhlIHBsdWdpbiB5b3UgY2FuIHBhc3MgY3VzdG9tIGB0aGlzYCBjb250ZXh0IHRvIGl0IChhbmQgc28gYHRoaXMub3B0aW9uc2ApXG5mdW5jdGlvbiBpbml0KF9zZWxmLCBfb3B0cykge1xuICB0aGlzLnR5cGUgPSBxdWVyeXN0cmluZ1R5cGU7XG5cbiAgY29uc3QgcGFyc2VyID0gbmV3IFF1ZXJ5c3RyaW5nUGFyc2VyKHRoaXMub3B0aW9ucyk7XG5cbiAgcGFyc2VyLm9uKCdkYXRhJywgKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgdGhpcy5lbWl0KCdmaWVsZCcsIGtleSwgdmFsdWUpO1xuICB9KTtcblxuICBwYXJzZXIub25jZSgnZW5kJywgKCkgPT4ge1xuICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgIHRoaXMuX21heWJlRW5kKCk7XG4gIH0pO1xuXG4gIHRoaXMuX3BhcnNlciA9IHBhcnNlcjtcblxuICByZXR1cm4gdGhpcztcbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgeyBTdHJlYW0gfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgTXVsdGlwYXJ0UGFyc2VyIGZyb20gJy4uL3BhcnNlcnMvTXVsdGlwYXJ0LmpzJztcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuLi9Gb3JtaWRhYmxlRXJyb3IuanMnO1xuaW1wb3J0IEZvcm1pZGFibGVFcnJvciBmcm9tICcuLi9Gb3JtaWRhYmxlRXJyb3IuanMnO1xuXG5leHBvcnQgY29uc3QgbXVsdGlwYXJ0VHlwZSA9ICdtdWx0aXBhcnQnO1xuLy8gdGhlIGBvcHRpb25zYCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgLyBgZm9ybWlkYWJsZS5vcHRpb25zYFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGx1Z2luKGZvcm1pZGFibGUsIG9wdGlvbnMpIHtcbiAgLy8gdGhlIGB0aGlzYCBjb250ZXh0IGlzIGFsd2F5cyBmb3JtaWRhYmxlLCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBwbHVnaW5cbiAgLy8gYnV0IHRoaXMgYWxsb3dzIHVzIHRvIGN1c3RvbWl6ZS90ZXN0IGVhY2ggcGx1Z2luXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3Qgc2VsZiA9IHRoaXMgfHwgZm9ybWlkYWJsZTtcblxuICAvLyBOT1RFOiB3ZSAoY3VycmVudGx5KSBzdXBwb3J0IGJvdGggbXVsdGlwYXJ0L2Zvcm0tZGF0YSBhbmQgbXVsdGlwYXJ0L3JlbGF0ZWRcbiAgY29uc3QgbXVsdGlwYXJ0ID0gL211bHRpcGFydC9pLnRlc3Qoc2VsZi5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG5cbiAgaWYgKG11bHRpcGFydCkge1xuICAgIGNvbnN0IG0gPSBzZWxmLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLm1hdGNoKFxuICAgICAgL2JvdW5kYXJ5PSg/OlwiKFteXCJdKylcInwoW147XSspKS9pLFxuICAgICk7XG4gICAgaWYgKG0pIHtcbiAgICAgIGNvbnN0IGluaXRNdWx0aXBhcnQgPSBjcmVhdGVJbml0TXVsdGlwYXJ0KG1bMV0gfHwgbVsyXSk7XG4gICAgICBpbml0TXVsdGlwYXJ0LmNhbGwoc2VsZiwgc2VsZiwgb3B0aW9ucyk7IC8vIGxndG0gW2pzL3N1cGVyZmx1b3VzLXRyYWlsaW5nLWFyZ3VtZW50c11cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgJ2JhZCBjb250ZW50LXR5cGUgaGVhZGVyLCBubyBtdWx0aXBhcnQgYm91bmRhcnknLFxuICAgICAgICBlcnJvcnMubWlzc2luZ011bHRpcGFydEJvdW5kYXJ5LFxuICAgICAgICA0MDAsXG4gICAgICApO1xuICAgICAgc2VsZi5fZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8vIE5vdGUgdGhhdCBpdCdzIGEgZ29vZCBwcmFjdGljZSAoYnV0IGl0J3MgdXAgdG8geW91KSB0byB1c2UgdGhlIGB0aGlzLm9wdGlvbnNgIGluc3RlYWRcbi8vIG9mIHRoZSBwYXNzZWQgYG9wdGlvbnNgIChzZWNvbmQpIHBhcmFtLCBiZWNhdXNlIHdoZW4geW91IGRlY2lkZVxuLy8gdG8gdGVzdCB0aGUgcGx1Z2luIHlvdSBjYW4gcGFzcyBjdXN0b20gYHRoaXNgIGNvbnRleHQgdG8gaXQgKGFuZCBzbyBgdGhpcy5vcHRpb25zYClcbmZ1bmN0aW9uIGNyZWF0ZUluaXRNdWx0aXBhcnQoYm91bmRhcnkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNdWx0aXBhcnQoKSB7XG4gICAgdGhpcy50eXBlID0gbXVsdGlwYXJ0VHlwZTtcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBNdWx0aXBhcnRQYXJzZXIodGhpcy5vcHRpb25zKTtcbiAgICBsZXQgaGVhZGVyRmllbGQ7XG4gICAgbGV0IGhlYWRlclZhbHVlO1xuICAgIGxldCBwYXJ0O1xuXG4gICAgcGFyc2VyLmluaXRXaXRoQm91bmRhcnkoYm91bmRhcnkpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzLCBjb25zaXN0ZW50LXJldHVyblxuICAgIHBhcnNlci5vbignZGF0YScsIGFzeW5jICh7IG5hbWUsIGJ1ZmZlciwgc3RhcnQsIGVuZCB9KSA9PiB7XG4gICAgICBpZiAobmFtZSA9PT0gJ3BhcnRCZWdpbicpIHtcbiAgICAgICAgcGFydCA9IG5ldyBTdHJlYW0oKTtcbiAgICAgICAgcGFydC5yZWFkYWJsZSA9IHRydWU7XG4gICAgICAgIHBhcnQuaGVhZGVycyA9IHt9O1xuICAgICAgICBwYXJ0Lm5hbWUgPSBudWxsO1xuICAgICAgICBwYXJ0Lm9yaWdpbmFsRmlsZW5hbWUgPSBudWxsO1xuICAgICAgICBwYXJ0Lm1pbWV0eXBlID0gbnVsbDtcblxuICAgICAgICBwYXJ0LnRyYW5zZmVyRW5jb2RpbmcgPSB0aGlzLm9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgIHBhcnQudHJhbnNmZXJCdWZmZXIgPSAnJztcblxuICAgICAgICBoZWFkZXJGaWVsZCA9ICcnO1xuICAgICAgICBoZWFkZXJWYWx1ZSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnaGVhZGVyRmllbGQnKSB7XG4gICAgICAgIGhlYWRlckZpZWxkICs9IGJ1ZmZlci50b1N0cmluZyh0aGlzLm9wdGlvbnMuZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnaGVhZGVyVmFsdWUnKSB7XG4gICAgICAgIGhlYWRlclZhbHVlICs9IGJ1ZmZlci50b1N0cmluZyh0aGlzLm9wdGlvbnMuZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnaGVhZGVyRW5kJykge1xuICAgICAgICBoZWFkZXJGaWVsZCA9IGhlYWRlckZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBhcnQuaGVhZGVyc1toZWFkZXJGaWVsZF0gPSBoZWFkZXJWYWx1ZTtcblxuICAgICAgICAvLyBtYXRjaGVzIGVpdGhlciBhIHF1b3RlZC1zdHJpbmcgb3IgYSB0b2tlbiAoUkZDIDI2MTYgc2VjdGlvbiAxOS41LjEpXG4gICAgICAgIGNvbnN0IG0gPSBoZWFkZXJWYWx1ZS5tYXRjaChcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAgICAgICAvXFxibmFtZT0oXCIoW15cIl0qKVwifChbXlxcKFxcKTw+QCw7OlxcXFxcIlxcL1xcW1xcXVxcPz1cXHtcXH1cXHNcXHQvXSspKS9pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaGVhZGVyRmllbGQgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJykge1xuICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICBwYXJ0Lm5hbWUgPSBtWzJdIHx8IG1bM10gfHwgJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydC5vcmlnaW5hbEZpbGVuYW1lID0gdGhpcy5fZ2V0RmlsZU5hbWUoaGVhZGVyVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhlYWRlckZpZWxkID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIHBhcnQubWltZXR5cGUgPSBoZWFkZXJWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChoZWFkZXJGaWVsZCA9PT0gJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnKSB7XG4gICAgICAgICAgcGFydC50cmFuc2ZlckVuY29kaW5nID0gaGVhZGVyVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhlYWRlckZpZWxkID0gJyc7XG4gICAgICAgIGhlYWRlclZhbHVlID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdoZWFkZXJzRW5kJykge1xuICAgICAgICBzd2l0Y2ggKHBhcnQudHJhbnNmZXJFbmNvZGluZykge1xuICAgICAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgICAgY2FzZSAnN2JpdCc6XG4gICAgICAgICAgY2FzZSAnOGJpdCc6XG4gICAgICAgICAgY2FzZSAndXRmLTgnOiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUHJvcGFnYXRpb24gPSAoY3R4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdHgubmFtZSA9PT0gJ3BhcnREYXRhJykge1xuICAgICAgICAgICAgICAgIHBhcnQuZW1pdCgnZGF0YScsIGN0eC5idWZmZXIuc2xpY2UoY3R4LnN0YXJ0LCBjdHguZW5kKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RvcFByb3BhZ2F0aW9uID0gKGN0eCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3R4Lm5hbWUgPT09ICdwYXJ0RW5kJykge1xuICAgICAgICAgICAgICAgIHBhcnQuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICAgICAgcGFyc2VyLm9mZignZGF0YScsIGRhdGFQcm9wYWdhdGlvbik7XG4gICAgICAgICAgICAgICAgcGFyc2VyLm9mZignZGF0YScsIGRhdGFTdG9wUHJvcGFnYXRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcGFyc2VyLm9uKCdkYXRhJywgZGF0YVByb3BhZ2F0aW9uKTtcbiAgICAgICAgICAgIHBhcnNlci5vbignZGF0YScsIGRhdGFTdG9wUHJvcGFnYXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2Jhc2U2NCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQcm9wYWdhdGlvbiA9IChjdHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGN0eC5uYW1lID09PSAncGFydERhdGEnKSB7XG4gICAgICAgICAgICAgICAgcGFydC50cmFuc2ZlckJ1ZmZlciArPSBjdHguYnVmZmVyXG4gICAgICAgICAgICAgICAgICAuc2xpY2UoY3R4LnN0YXJ0LCBjdHguZW5kKVxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCdhc2NpaScpO1xuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgIGZvdXIgYnl0ZXMgKGNoYXJzKSBpbiBiYXNlNjQgY29udmVydHMgdG8gdGhyZWUgYnl0ZXMgaW4gYmluYXJ5XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZy4gU28gd2Ugc2hvdWxkIGFsd2F5cyB3b3JrIHdpdGggYSBudW1iZXIgb2YgYnl0ZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgY2FuIGJlIGRpdmlkZWQgYnkgNCwgaXQgd2lsbCByZXN1bHQgaW4gYSBudW1iZXIgb2YgYnl0ZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgY2FuIGJlIGRpdmlkZWQgdnkgMy5cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VJbnQocGFydC50cmFuc2ZlckJ1ZmZlci5sZW5ndGggLyA0LCAxMCkgKiA0O1xuICAgICAgICAgICAgICAgIHBhcnQuZW1pdChcbiAgICAgICAgICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAgICAgICBwYXJ0LnRyYW5zZmVyQnVmZmVyLnN1YnN0cmluZygwLCBvZmZzZXQpLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZTY0JyxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJ0LnRyYW5zZmVyQnVmZmVyID0gcGFydC50cmFuc2ZlckJ1ZmZlci5zdWJzdHJpbmcob2Zmc2V0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdG9wUHJvcGFnYXRpb24gPSAoY3R4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdHgubmFtZSA9PT0gJ3BhcnRFbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFydC5lbWl0KCdkYXRhJywgQnVmZmVyLmZyb20ocGFydC50cmFuc2ZlckJ1ZmZlciwgJ2Jhc2U2NCcpKTtcbiAgICAgICAgICAgICAgICBwYXJ0LmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgICAgIHBhcnNlci5vZmYoJ2RhdGEnLCBkYXRhUHJvcGFnYXRpb24pO1xuICAgICAgICAgICAgICAgIHBhcnNlci5vZmYoJ2RhdGEnLCBkYXRhU3RvcFByb3BhZ2F0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBhcnNlci5vbignZGF0YScsIGRhdGFQcm9wYWdhdGlvbik7XG4gICAgICAgICAgICBwYXJzZXIub24oJ2RhdGEnLCBkYXRhU3RvcFByb3BhZ2F0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFxuICAgICAgICAgICAgICBuZXcgRm9ybWlkYWJsZUVycm9yKFxuICAgICAgICAgICAgICAgICd1bmtub3duIHRyYW5zZmVyLWVuY29kaW5nJyxcbiAgICAgICAgICAgICAgICBlcnJvcnMudW5rbm93blRyYW5zZmVyRW5jb2RpbmcsXG4gICAgICAgICAgICAgICAgNTAxLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXJzZXIucGF1c2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblBhcnQocGFydCk7XG4gICAgICAgIHRoaXMuX3BhcnNlci5yZXN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX21heWJlRW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wYXJzZXIgPSBwYXJzZXI7XG4gIH07XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cblxuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuXG5jbGFzcyBKU09OUGFyc2VyIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoeyByZWFkYWJsZU9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICB0aGlzLmdsb2JhbE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgfVxuXG4gIF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIHRoaXMuY2h1bmtzLnB1c2goU3RyaW5nKGNodW5rKSk7IC8vIHRvZG8gY29uc2lkZXIgdXNpbmcgYSBzdHJpbmcgZGVjb2RlclxuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBfZmx1c2goY2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZSh0aGlzLmNodW5rcy5qb2luKCcnKSk7XG4gICAgICB0aGlzLnB1c2goZmllbGRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjYWxsYmFjayhlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaHVua3MgPSBudWxsO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSlNPTlBhcnNlcjtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgSlNPTlBhcnNlciBmcm9tICcuLi9wYXJzZXJzL0pTT04uanMnO1xuXG5leHBvcnQgY29uc3QganNvblR5cGUgPSAnanNvbic7XG4vLyB0aGUgYG9wdGlvbnNgIGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIGB0aGlzLm9wdGlvbnNgIC8gYGZvcm1pZGFibGUub3B0aW9uc2BcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBsdWdpbihmb3JtaWRhYmxlLCBvcHRpb25zKSB7XG4gIC8vIHRoZSBgdGhpc2AgY29udGV4dCBpcyBhbHdheXMgZm9ybWlkYWJsZSwgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEgcGx1Z2luXG4gIC8vIGJ1dCB0aGlzIGFsbG93cyB1cyB0byBjdXN0b21pemUvdGVzdCBlYWNoIHBsdWdpblxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGNvbnN0IHNlbGYgPSB0aGlzIHx8IGZvcm1pZGFibGU7XG5cbiAgaWYgKC9qc29uL2kudGVzdChzZWxmLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSkge1xuICAgIGluaXQuY2FsbChzZWxmLCBzZWxmLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufTtcblxuLy8gTm90ZSB0aGF0IGl0J3MgYSBnb29kIHByYWN0aWNlIChidXQgaXQncyB1cCB0byB5b3UpIHRvIHVzZSB0aGUgYHRoaXMub3B0aW9uc2AgaW5zdGVhZFxuLy8gb2YgdGhlIHBhc3NlZCBgb3B0aW9uc2AgKHNlY29uZCkgcGFyYW0sIGJlY2F1c2Ugd2hlbiB5b3UgZGVjaWRlXG4vLyB0byB0ZXN0IHRoZSBwbHVnaW4geW91IGNhbiBwYXNzIGN1c3RvbSBgdGhpc2AgY29udGV4dCB0byBpdCAoYW5kIHNvIGB0aGlzLm9wdGlvbnNgKVxuZnVuY3Rpb24gaW5pdChfc2VsZiwgX29wdHMpIHtcbiAgdGhpcy50eXBlID0ganNvblR5cGU7XG5cbiAgY29uc3QgcGFyc2VyID0gbmV3IEpTT05QYXJzZXIodGhpcy5vcHRpb25zKTtcblxuICBwYXJzZXIub24oJ2RhdGEnLCAoZmllbGRzKSA9PiB7XG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XG4gIH0pO1xuXG4gIHBhcnNlci5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgdGhpcy5fbWF5YmVFbmQoKTtcbiAgfSk7XG5cbiAgdGhpcy5fcGFyc2VyID0gcGFyc2VyO1xufVxuIiwgImltcG9ydCBvY3RldHN0cmVhbSBmcm9tICcuL29jdGV0c3RyZWFtLmpzJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICcuL3F1ZXJ5c3RyaW5nLmpzJztcbmltcG9ydCBtdWx0aXBhcnQgZnJvbSAnLi9tdWx0aXBhcnQuanMnO1xuaW1wb3J0IGpzb24gZnJvbSAnLi9qc29uLmpzJztcblxuZXhwb3J0IHsgb2N0ZXRzdHJlYW0sIHF1ZXJ5c3RyaW5nLCBtdWx0aXBhcnQsIGpzb24gfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgeyBpbml0IGFzIGN1aWQyaW5pdCB9IGZyb20gJ0BwYXJhbGxlbGRyaXZlL2N1aWQyJztcbmltcG9ydCBkZXphbGdvIGZyb20gJ2RlemFsZ28nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuaW1wb3J0IGZzUHJvbWlzZXMgZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU3RyaW5nRGVjb2RlciB9IGZyb20gJ25vZGU6c3RyaW5nX2RlY29kZXInO1xuaW1wb3J0IG9uY2UgZnJvbSAnb25jZSc7XG5pbXBvcnQgRm9ybWlkYWJsZUVycm9yLCAqIGFzIGVycm9ycyBmcm9tICcuL0Zvcm1pZGFibGVFcnJvci5qcyc7XG5pbXBvcnQgUGVyc2lzdGVudEZpbGUgZnJvbSAnLi9QZXJzaXN0ZW50RmlsZS5qcyc7XG5pbXBvcnQgVm9sYXRpbGVGaWxlIGZyb20gJy4vVm9sYXRpbGVGaWxlLmpzJztcbmltcG9ydCBEdW1teVBhcnNlciBmcm9tICcuL3BhcnNlcnMvRHVtbXkuanMnO1xuaW1wb3J0IE11bHRpcGFydFBhcnNlciBmcm9tICcuL3BhcnNlcnMvTXVsdGlwYXJ0LmpzJztcbmltcG9ydCB7IGpzb24sIG11bHRpcGFydCwgb2N0ZXRzdHJlYW0sIHF1ZXJ5c3RyaW5nIH0gZnJvbSAnLi9wbHVnaW5zL2luZGV4LmpzJztcblxuY29uc3QgQ1VJRDJfRklOR0VSUFJJTlQgPSBgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn0tJHtvcy5wbGF0Zm9ybSgpfS0ke29zLmhvc3RuYW1lKCl9YFxuY29uc3QgY3JlYXRlSWQgPSBjdWlkMmluaXQoeyBsZW5ndGg6IDI1LCBmaW5nZXJwcmludDogQ1VJRDJfRklOR0VSUFJJTlQudG9Mb3dlckNhc2UoKSB9KTtcblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xuICBtYXhGaWVsZHM6IDEwMDAsXG4gIG1heEZpZWxkc1NpemU6IDIwICogMTAyNCAqIDEwMjQsXG4gIG1heEZpbGVzOiBJbmZpbml0eSxcbiAgbWF4RmlsZVNpemU6IDIwMCAqIDEwMjQgKiAxMDI0LFxuICBtYXhUb3RhbEZpbGVTaXplOiB1bmRlZmluZWQsXG4gIG1pbkZpbGVTaXplOiAxLFxuICBhbGxvd0VtcHR5RmlsZXM6IGZhbHNlLFxuICBjcmVhdGVEaXJzRnJvbVVwbG9hZHM6IGZhbHNlLFxuICBrZWVwRXh0ZW5zaW9uczogZmFsc2UsXG4gIGVuY29kaW5nOiAndXRmLTgnLFxuICBoYXNoQWxnb3JpdGhtOiBmYWxzZSxcbiAgdXBsb2FkRGlyOiBvcy50bXBkaXIoKSxcbiAgZW5hYmxlZFBsdWdpbnM6IFtvY3RldHN0cmVhbSwgcXVlcnlzdHJpbmcsIG11bHRpcGFydCwganNvbl0sXG4gIGZpbGVXcml0ZVN0cmVhbUhhbmRsZXI6IG51bGwsXG4gIGRlZmF1bHRJbnZhbGlkTmFtZTogJ2ludmFsaWQtbmFtZScsXG4gIGZpbHRlcihfcGFydCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBmaWxlbmFtZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcChvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cblxuXG5jb25zdCBkZWNvcmF0ZUZvcmNlU2VxdWVudGlhbCA9IGZ1bmN0aW9uIChwcm9taXNlQ3JlYXRvcikge1xuICAvKiBmb3JjZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlIHRvIGJlIHNlcXVlbnRpYWxcbiAgdXNlZnVsIGZvciBmcyAgZm9yIGV4YW1wbGUgKi9cbiAgbGV0IGxhc3RQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4ueCkge1xuICAgICAgY29uc3QgcHJvbWlzZVdlQXJlV2FpdGluZ0ZvciA9IGxhc3RQcm9taXNlO1xuICAgICAgbGV0IGN1cnJlbnRQcm9taXNlO1xuICAgICAgbGV0IGNhbGxiYWNrO1xuICAgICAgLy8gd2UgbmVlZCB0byBjaGFuZ2UgbGFzdFByb21pc2UgYmVmb3JlIGF3YWl0IGFueXRoaW5nLFxuICAgICAgLy8gb3RoZXJ3aXNlIDIgY2FsbHMgbWlnaHQgd2FpdCB0aGUgc2FtZSB0aGluZ1xuICAgICAgbGFzdFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZTtcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcHJvbWlzZVdlQXJlV2FpdGluZ0ZvcjtcbiAgICAgIGN1cnJlbnRQcm9taXNlID0gcHJvbWlzZUNyZWF0b3IoLi4ueCk7XG4gICAgICBjdXJyZW50UHJvbWlzZS50aGVuKGNhbGxiYWNrKS5jYXRjaChjYWxsYmFjayk7XG4gICAgICByZXR1cm4gY3VycmVudFByb21pc2U7XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVOZWNlc3NhcnlEaXJlY3Rvcmllc0FzeW5jID0gZGVjb3JhdGVGb3JjZVNlcXVlbnRpYWwoZnVuY3Rpb24gKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGRpcmVjdG9yeW5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICByZXR1cm4gZnNQcm9taXNlcy5ta2RpcihkaXJlY3RvcnluYW1lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn0pO1xuXG5jb25zdCBpbnZhbGlkRXh0ZW5zaW9uQ2hhciA9IChjKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiAhKFxuICAgIGNvZGUgPT09IDQ2IHx8IC8vIC5cbiAgICAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fFxuICAgIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHx8XG4gICAgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpXG4gICk7XG59O1xuXG5jbGFzcyBJbmNvbWluZ0Zvcm0gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5vcHRpb25zID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5tYXhUb3RhbEZpbGVTaXplKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubWF4VG90YWxGaWxlU2l6ZSA9IHRoaXMub3B0aW9ucy5tYXhGaWxlU2l6ZVxuICAgIH1cblxuICAgIGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShcbiAgICAgIHRoaXMub3B0aW9ucy51cGxvYWREaXIgfHwgdGhpcy5vcHRpb25zLnVwbG9hZGRpciB8fCBvcy50bXBkaXIoKSxcbiAgICApO1xuXG4gICAgdGhpcy51cGxvYWRkaXIgPSBkaXI7XG4gICAgdGhpcy51cGxvYWREaXIgPSBkaXI7XG5cbiAgICAvLyBpbml0aWFsaXplIHdpdGggbnVsbFxuICAgIFtcbiAgICAgICdlcnJvcicsXG4gICAgICAnaGVhZGVycycsXG4gICAgICAndHlwZScsXG4gICAgICAnYnl0ZXNFeHBlY3RlZCcsXG4gICAgICAnYnl0ZXNSZWNlaXZlZCcsXG4gICAgICAnX3BhcnNlcicsXG4gICAgICAncmVxJyxcbiAgICBdLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpc1trZXldID0gbnVsbDtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NldFVwUmVuYW1lKCk7XG5cbiAgICB0aGlzLl9mbHVzaGluZyA9IDA7XG4gICAgdGhpcy5fZmllbGRzU2l6ZSA9IDA7XG4gICAgdGhpcy5fdG90YWxGaWxlU2l6ZSA9IDA7XG4gICAgdGhpcy5fcGx1Z2lucyA9IFtdO1xuICAgIHRoaXMub3BlbmVkRmlsZXMgPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucy5lbmFibGVkUGx1Z2lucyA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMub3B0aW9ucy5lbmFibGVkUGx1Z2lucylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgJ2V4cGVjdCBhdCBsZWFzdCAxIGVuYWJsZWQgYnVpbHRpbiBwbHVnaW4sIHNlZSBvcHRpb25zLmVuYWJsZWRQbHVnaW5zJyxcbiAgICAgICAgZXJyb3JzLm1pc3NpbmdQbHVnaW4sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5lbmFibGVkUGx1Z2lucy5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgIHRoaXMudXNlKHBsdWdpbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZXRVcE1heEZpZWxkcygpO1xuICAgIHRoaXMuX3NldFVwTWF4RmlsZXMoKTtcbiAgICB0aGlzLmVuZGVkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVzZShwbHVnaW4pIHtcbiAgICBpZiAodHlwZW9mIHBsdWdpbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgJy51c2U6IGV4cGVjdCBgcGx1Z2luYCB0byBiZSBhIGZ1bmN0aW9uJyxcbiAgICAgICAgZXJyb3JzLnBsdWdpbkZ1bmN0aW9uLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fcGx1Z2lucy5wdXNoKHBsdWdpbi5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZXEucGF1c2UoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZFxuICAgICAgaWYgKCF0aGlzLmVuZGVkKSB7XG4gICAgICAgIC8vIGJlZm9yZSBpdCB3YXMgY29tcGxldGVkLCBjcmFzaCAmIGJ1cm5cbiAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlcS5yZXN1bWUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZFxuICAgICAgaWYgKCF0aGlzLmVuZGVkKSB7XG4gICAgICAgIC8vIGJlZm9yZSBpdCB3YXMgY29tcGxldGVkLCBjcmFzaCAmIGJ1cm5cbiAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHJldHVybnMgYSBwcm9taXNlIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gIGFzeW5jIHBhcnNlKHJlcSwgY2IpIHtcbiAgICB0aGlzLnJlcSA9IHJlcTtcbiAgICBsZXQgcHJvbWlzZTtcblxuICAgIC8vIFNldHVwIGNhbGxiYWNrIGZpcnN0LCBzbyB3ZSBkb24ndCBtaXNzIGFueXRoaW5nIGZyb20gZGF0YSBldmVudHMgZW1pdHRlZCBpbW1lZGlhdGVseS5cbiAgICBpZiAoIWNiKSB7XG4gICAgICBsZXQgcmVzb2x2ZVJlZjtcbiAgICAgIGxldCByZWplY3RSZWY7XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlUmVmID0gcmVzb2x2ZTtcbiAgICAgICAgcmVqZWN0UmVmID0gcmVqZWN0O1xuICAgICAgfSk7XG4gICAgICBjYiA9IChlcnIsIGZpZWxkcywgZmlsZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdFJlZihlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVSZWYoW2ZpZWxkcywgZmlsZXNdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjYWxsYmFjayA9IG9uY2UoZGV6YWxnbyhjYikpO1xuICAgIHRoaXMuZmllbGRzID0ge307XG4gICAgY29uc3QgZmlsZXMgPSB7fTtcblxuICAgIHRoaXMub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnbXVsdGlwYXJ0JyB8fCB0aGlzLnR5cGUgPT09ICd1cmxlbmNvZGVkJykge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcy5maWVsZHMsIG5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5maWVsZHNbbmFtZV0gPSBbdmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmllbGRzW25hbWVdLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpZWxkc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub24oJ2ZpbGUnLCAobmFtZSwgZmlsZSkgPT4ge1xuICAgICAgaWYgKCFoYXNPd25Qcm9wKGZpbGVzLCBuYW1lKSkge1xuICAgICAgICBmaWxlc1tuYW1lXSA9IFtmaWxlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzW25hbWVdLnB1c2goZmlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIsIHRoaXMuZmllbGRzLCBmaWxlcyk7XG4gICAgfSk7XG4gICAgdGhpcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5maWVsZHMsIGZpbGVzKTtcbiAgICB9KTtcblxuICAgIC8vIFBhcnNlIGhlYWRlcnMgYW5kIHNldHVwIHRoZSBwYXJzZXIsIHJlYWR5IHRvIHN0YXJ0IGxpc3RlbmluZyBmb3IgZGF0YS5cbiAgICBhd2FpdCB0aGlzLndyaXRlSGVhZGVycyhyZXEuaGVhZGVycyk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGRhdGEuXG4gICAgcmVxXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydGVkJyk7XG4gICAgICAgIHRoaXMuX2Vycm9yKG5ldyBGb3JtaWRhYmxlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGVycm9ycy5hYm9ydGVkKSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdkYXRhJywgKGJ1ZmZlcikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMud3JpdGUoYnVmZmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy5fcGFyc2VyLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMuX3BhcnNlQ29udGVudExlbmd0aCgpO1xuICAgIGF3YWl0IHRoaXMuX3BhcnNlQ29udGVudFR5cGUoKTtcblxuICAgIGlmICghdGhpcy5fcGFyc2VyKSB7XG4gICAgICB0aGlzLl9lcnJvcihcbiAgICAgICAgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgICAnbm8gcGFyc2VyIGZvdW5kJyxcbiAgICAgICAgICBlcnJvcnMubm9QYXJzZXIsXG4gICAgICAgICAgNDE1LCAvLyBVbnN1cHBvcnRlZCBNZWRpYSBUeXBlXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BhcnNlci5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5fZXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgd3JpdGUoYnVmZmVyKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3BhcnNlcikge1xuICAgICAgdGhpcy5fZXJyb3IoXG4gICAgICAgIG5ldyBGb3JtaWRhYmxlRXJyb3IoJ3VuaW5pdGlhbGl6ZWQgcGFyc2VyJywgZXJyb3JzLnVuaW5pdGlhbGl6ZWRQYXJzZXIpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWNlaXZlZCArPSBidWZmZXIubGVuZ3RoO1xuICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLmJ5dGVzUmVjZWl2ZWQsIHRoaXMuYnl0ZXNFeHBlY3RlZCk7XG5cbiAgICB0aGlzLl9wYXJzZXIud3JpdGUoYnVmZmVyKTtcblxuICAgIHJldHVybiB0aGlzLmJ5dGVzUmVjZWl2ZWQ7XG4gIH1cblxuICBvblBhcnQocGFydCkge1xuICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgdXNlclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVQYXJ0KHBhcnQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVBhcnQocGFydCkge1xuICAgIGlmIChwYXJ0Lm9yaWdpbmFsRmlsZW5hbWUgJiYgdHlwZW9mIHBhcnQub3JpZ2luYWxGaWxlbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2Vycm9yKFxuICAgICAgICBuZXcgRm9ybWlkYWJsZUVycm9yKFxuICAgICAgICAgIGB0aGUgcGFydC5vcmlnaW5hbEZpbGVuYW1lIHNob3VsZCBiZSBzdHJpbmcgd2hlbiBpdCBleGlzdHNgLFxuICAgICAgICAgIGVycm9ycy5maWxlbmFtZU5vdFN0cmluZyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhpcyBNVVNUIGNoZWNrIGV4YWN0bHkgZm9yIHVuZGVmaW5lZC4gWW91IGNhbiBub3QgY2hhbmdlIGl0IHRvICFwYXJ0Lm9yaWdpbmFsRmlsZW5hbWUuXG5cbiAgICAvLyB0b2RvOiB1bmNvbW1lbnQgd2hlbiBzd2l0Y2ggdGVzdHMgdG8gSmVzdFxuICAgIC8vIGNvbnNvbGUubG9nKHBhcnQpO1xuXG4gICAgLy8gPyBOT1RFKEB0dW5uY2tvY29yZSk6IG5vIGl0IGNhbiBiZSBhbnkgZmFsc2V5IHZhbHVlLCBpdCBtb3N0IHByb2JhYmx5IGRlcGVuZHMgb24gd2hhdCdzIHJldHVybmVkXG4gICAgLy8gZnJvbSBzb21ld2hlcmUgZWxzZS4gV2hlcmUgcmVjZW50bHkgSSBjaGFuZ2VkIHRoZSByZXR1cm4gc3RhdGVtZW50c1xuICAgIC8vIGFuZCBzdWNoIHRoaW5nIGJlY2F1c2UgY29kZSBzdHlsZVxuICAgIC8vID8gTk9URShAdHVubmNrb2NvcmUpOiBvciBldmVuIGJldHRlciwgaWYgdGhlcmUgaXMgbm8gbWltZXR5cGUsIHRoZW4gaXQncyBmb3Igc3VyZSBhIGZpZWxkXG4gICAgLy8gPyBOT1RFKEB0dW5uY2tvY29yZSk6IG9yaWdpbmFsRmlsZW5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nIHdoZW4gYSBmaWVsZD9cbiAgICBpZiAoIXBhcnQubWltZXR5cGUpIHtcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFxuICAgICAgICBwYXJ0LnRyYW5zZmVyRW5jb2RpbmcgfHwgdGhpcy5vcHRpb25zLmVuY29kaW5nLFxuICAgICAgKTtcblxuICAgICAgcGFydC5vbignZGF0YScsIChidWZmZXIpID0+IHtcbiAgICAgICAgdGhpcy5fZmllbGRzU2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fZmllbGRzU2l6ZSA+IHRoaXMub3B0aW9ucy5tYXhGaWVsZHNTaXplKSB7XG4gICAgICAgICAgdGhpcy5fZXJyb3IoXG4gICAgICAgICAgICBuZXcgRm9ybWlkYWJsZUVycm9yKFxuICAgICAgICAgICAgICBgb3B0aW9ucy5tYXhGaWVsZHNTaXplICgke3RoaXMub3B0aW9ucy5tYXhGaWVsZHNTaXplfSBieXRlcykgZXhjZWVkZWQsIHJlY2VpdmVkICR7dGhpcy5fZmllbGRzU2l6ZX0gYnl0ZXMgb2YgZmllbGQgZGF0YWAsXG4gICAgICAgICAgICAgIGVycm9ycy5tYXhGaWVsZHNTaXplRXhjZWVkZWQsXG4gICAgICAgICAgICAgIDQxMywgLy8gUGF5bG9hZCBUb28gTGFyZ2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgKz0gZGVjb2Rlci53cml0ZShidWZmZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhcnQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdmaWVsZCcsIHBhcnQubmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZmlsdGVyKHBhcnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hpbmcgKz0gMTtcblxuICAgIGxldCBmaWxlU2l6ZSA9IDA7XG4gICAgY29uc3QgbmV3RmlsZW5hbWUgPSB0aGlzLl9nZXROZXdOYW1lKHBhcnQpO1xuICAgIGNvbnN0IGZpbGVwYXRoID0gdGhpcy5fam9pbkRpcmVjdG9yeU5hbWUobmV3RmlsZW5hbWUpO1xuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0aGlzLl9uZXdGaWxlKHtcbiAgICAgIG5ld0ZpbGVuYW1lLFxuICAgICAgZmlsZXBhdGgsXG4gICAgICBvcmlnaW5hbEZpbGVuYW1lOiBwYXJ0Lm9yaWdpbmFsRmlsZW5hbWUsXG4gICAgICBtaW1ldHlwZTogcGFydC5taW1ldHlwZSxcbiAgICB9KTtcbiAgICBmaWxlLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0KCdmaWxlQmVnaW4nLCBwYXJ0Lm5hbWUsIGZpbGUpO1xuXG4gICAgZmlsZS5vcGVuKCk7XG4gICAgdGhpcy5vcGVuZWRGaWxlcy5wdXNoKGZpbGUpO1xuXG4gICAgcGFydC5vbignZGF0YScsIChidWZmZXIpID0+IHtcbiAgICAgIHRoaXMuX3RvdGFsRmlsZVNpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGZpbGVTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGlmICh0aGlzLl90b3RhbEZpbGVTaXplID4gdGhpcy5vcHRpb25zLm1heFRvdGFsRmlsZVNpemUpIHtcbiAgICAgICAgdGhpcy5fZXJyb3IoXG4gICAgICAgICAgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgICAgIGBvcHRpb25zLm1heFRvdGFsRmlsZVNpemUgKCR7dGhpcy5vcHRpb25zLm1heFRvdGFsRmlsZVNpemV9IGJ5dGVzKSBleGNlZWRlZCwgcmVjZWl2ZWQgJHt0aGlzLl90b3RhbEZpbGVTaXplfSBieXRlcyBvZiBmaWxlIGRhdGFgLFxuICAgICAgICAgICAgZXJyb3JzLmJpZ2dlclRoYW5Ub3RhbE1heEZpbGVTaXplLFxuICAgICAgICAgICAgNDEzLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIGZpbGUud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzdW1lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHBhcnQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93RW1wdHlGaWxlcyAmJiBmaWxlU2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLl9lcnJvcihcbiAgICAgICAgICBuZXcgRm9ybWlkYWJsZUVycm9yKFxuICAgICAgICAgICAgYG9wdGlvbnMuYWxsb3dFbXB0eUZpbGVzIGlzIGZhbHNlLCBmaWxlIHNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwYCxcbiAgICAgICAgICAgIGVycm9ycy5ub0VtcHR5RmlsZXMsXG4gICAgICAgICAgICA0MDAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGZpbGVTaXplIDwgdGhpcy5vcHRpb25zLm1pbkZpbGVTaXplKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yKFxuICAgICAgICAgIG5ldyBGb3JtaWRhYmxlRXJyb3IoXG4gICAgICAgICAgICBgb3B0aW9ucy5taW5GaWxlU2l6ZSAoJHt0aGlzLm9wdGlvbnMubWluRmlsZVNpemV9IGJ5dGVzKSBpbmZlcmlvciwgcmVjZWl2ZWQgJHtmaWxlU2l6ZX0gYnl0ZXMgb2YgZmlsZSBkYXRhYCxcbiAgICAgICAgICAgIGVycm9ycy5zbWFsbGVyVGhhbk1pbkZpbGVTaXplLFxuICAgICAgICAgICAgNDAwLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChmaWxlU2l6ZSA+IHRoaXMub3B0aW9ucy5tYXhGaWxlU2l6ZSkge1xuICAgICAgICB0aGlzLl9lcnJvcihcbiAgICAgICAgICBuZXcgRm9ybWlkYWJsZUVycm9yKFxuICAgICAgICAgICAgYG9wdGlvbnMubWF4RmlsZVNpemUgKCR7dGhpcy5vcHRpb25zLm1heEZpbGVTaXplfSBieXRlcyksIHJlY2VpdmVkICR7ZmlsZVNpemV9IGJ5dGVzIG9mIGZpbGUgZGF0YWAsXG4gICAgICAgICAgICBlcnJvcnMuYmlnZ2VyVGhhbk1heEZpbGVTaXplLFxuICAgICAgICAgICAgNDEzLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5lbmQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9mbHVzaGluZyAtPSAxO1xuICAgICAgICB0aGlzLmVtaXQoJ2ZpbGUnLCBwYXJ0Lm5hbWUsIGZpbGUpO1xuICAgICAgICB0aGlzLl9tYXliZUVuZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgYXN5bmMgX3BhcnNlQ29udGVudFR5cGUoKSB7XG4gICAgaWYgKHRoaXMuYnl0ZXNFeHBlY3RlZCA9PT0gMCkge1xuICAgICAgdGhpcy5fcGFyc2VyID0gbmV3IER1bW15UGFyc2VyKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICB0aGlzLl9lcnJvcihcbiAgICAgICAgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgICAnYmFkIGNvbnRlbnQtdHlwZSBoZWFkZXIsIG5vIGNvbnRlbnQtdHlwZScsXG4gICAgICAgICAgZXJyb3JzLm1pc3NpbmdDb250ZW50VHlwZSxcbiAgICAgICAgICA0MDAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgbmV3IER1bW15UGFyc2VyKHRoaXMsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbiwgaWR4KSA9PiB7XG4gICAgICBsZXQgcGx1Z2luUmV0dXJuID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBsdWdpblJldHVybiA9IGF3YWl0IHBsdWdpbih0aGlzLCB0aGlzLm9wdGlvbnMpIHx8IHRoaXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgdGhyb3cgZnJvbSB0aGUgYGZvcm0ucGFyc2VgIG1ldGhvZDtcbiAgICAgICAgLy8gdGhlcmUgaXMgbm8gb3RoZXIgYmV0dGVyIHdheSwgZXhjZXB0IGEgaGFuZGxlIHRocm91Z2ggb3B0aW9uc1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBGb3JtaWRhYmxlRXJyb3IoXG4gICAgICAgICAgYHBsdWdpbiBvbiBpbmRleCAke2lkeH0gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICBlcnJvcnMucGx1Z2luRmFpbGVkLFxuICAgICAgICAgIDUwMCxcbiAgICAgICAgKTtcbiAgICAgICAgZXJyb3IuaWR4ID0gaWR4O1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGx1Z2luUmV0dXJuKTtcblxuICAgICAgLy8gdG9kbzogdXNlIFNldC9NYXAgYW5kIHBhc3MgcGx1Z2luIG5hbWUgaW5zdGVhZCBvZiB0aGUgYGlkeGAgaW5kZXhcbiAgICAgIHRoaXMuZW1pdCgncGx1Z2luJywgaWR4LCBwbHVnaW5SZXR1cm4pO1xuICAgIH0pKTtcbiAgICB0aGlzLmVtaXQoJ3BsdWdpbnNSZXN1bHRzJywgcmVzdWx0cyk7XG4gIH1cblxuICBfZXJyb3IoZXJyLCBldmVudE5hbWUgPSAnZXJyb3InKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IgfHwgdGhpcy5lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxID0gbnVsbDtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMuZW1pdChldmVudE5hbWUsIGVycik7XG5cbiAgICB0aGlzLm9wZW5lZEZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGZpbGUuZGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3BhcnNlQ29udGVudExlbmd0aCgpIHtcbiAgICB0aGlzLmJ5dGVzUmVjZWl2ZWQgPSAwO1xuICAgIGlmICh0aGlzLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcbiAgICAgIHRoaXMuYnl0ZXNFeHBlY3RlZCA9IHBhcnNlSW50KHRoaXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSwgMTApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYnl0ZXNFeHBlY3RlZCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnl0ZXNFeHBlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMuYnl0ZXNSZWNlaXZlZCwgdGhpcy5ieXRlc0V4cGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBfbmV3UGFyc2VyKCkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0UGFyc2VyKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBfbmV3RmlsZSh7IGZpbGVwYXRoLCBvcmlnaW5hbEZpbGVuYW1lLCBtaW1ldHlwZSwgbmV3RmlsZW5hbWUgfSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsZVdyaXRlU3RyZWFtSGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5ldyBWb2xhdGlsZUZpbGUoe1xuICAgICAgICBuZXdGaWxlbmFtZSxcbiAgICAgICAgZmlsZXBhdGgsXG4gICAgICAgIG9yaWdpbmFsRmlsZW5hbWUsXG4gICAgICAgIG1pbWV0eXBlLFxuICAgICAgICBjcmVhdGVGaWxlV3JpdGVTdHJlYW06IHRoaXMub3B0aW9ucy5maWxlV3JpdGVTdHJlYW1IYW5kbGVyLFxuICAgICAgICBoYXNoQWxnb3JpdGhtOiB0aGlzLm9wdGlvbnMuaGFzaEFsZ29yaXRobSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmNyZWF0ZURpcnNGcm9tVXBsb2Fkcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3JlYXRlTmVjZXNzYXJ5RGlyZWN0b3JpZXNBc3luYyhmaWxlcGF0aCk7XG4gICAgICB9IGNhdGNoIChlcnJvckNyZWF0aW5nRGlyKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yKG5ldyBGb3JtaWRhYmxlRXJyb3IoXG4gICAgICAgICAgYGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5YCxcbiAgICAgICAgICBlcnJvcnMuY2Fubm90Q3JlYXRlRGlyLFxuICAgICAgICAgIDQwOSxcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUGVyc2lzdGVudEZpbGUoe1xuICAgICAgbmV3RmlsZW5hbWUsXG4gICAgICBmaWxlcGF0aCxcbiAgICAgIG9yaWdpbmFsRmlsZW5hbWUsXG4gICAgICBtaW1ldHlwZSxcbiAgICAgIGhhc2hBbGdvcml0aG06IHRoaXMub3B0aW9ucy5oYXNoQWxnb3JpdGhtLFxuICAgIH0pO1xuICB9XG5cbiAgX2dldEZpbGVOYW1lKGhlYWRlclZhbHVlKSB7XG4gICAgLy8gbWF0Y2hlcyBlaXRoZXIgYSBxdW90ZWQtc3RyaW5nIG9yIGEgdG9rZW4gKFJGQyAyNjE2IHNlY3Rpb24gMTkuNS4xKVxuICAgIGNvbnN0IG0gPSBoZWFkZXJWYWx1ZS5tYXRjaChcbiAgICAgIC9cXGJmaWxlbmFtZT0oXCIoLio/KVwifChbXigpPD57fVtcXF1ALDs6XCI/PVxccy9cXHRdKykpKCR8O1xccykvaSxcbiAgICApO1xuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtYXRjaCA9IG1bMl0gfHwgbVszXSB8fCAnJztcbiAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IG1hdGNoLnN1YnN0cihtYXRjaC5sYXN0SW5kZXhPZignXFxcXCcpICsgMSk7XG4gICAgb3JpZ2luYWxGaWxlbmFtZSA9IG9yaWdpbmFsRmlsZW5hbWUucmVwbGFjZSgvJTIyL2csICdcIicpO1xuICAgIG9yaWdpbmFsRmlsZW5hbWUgPSBvcmlnaW5hbEZpbGVuYW1lLnJlcGxhY2UoLyYjKFtcXGRdezR9KTsvZywgKF8sIGNvZGUpID0+XG4gICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxGaWxlbmFtZTtcbiAgfVxuXG4gIC8vIGFibGUgdG8gZ2V0IGNvbXBvc2VkIGV4dGVuc2lvbiB3aXRoIG11bHRpcGxlIGRvdHNcbiAgLy8gXCJhLmIuY1wiIC0+IFwiLmIuY1wiXG4gIC8vIGFzIG9wcG9zZWQgdG8gcGF0aC5leHRuYW1lIC0+IFwiLmNcIlxuICBfZ2V0RXh0ZW5zaW9uKHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHN0cik7XG4gICAgY29uc3QgZmlyc3REb3QgPSBiYXNlbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdERvdCA9IGJhc2VuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgbGV0IHJhd0V4dG5hbWUgPSBwYXRoLmV4dG5hbWUoYmFzZW5hbWUpO1xuXG4gICAgaWYgKGZpcnN0RG90ICE9PSBsYXN0RG90KSB7XG4gICAgICByYXdFeHRuYW1lID0gIGJhc2VuYW1lLnNsaWNlKGZpcnN0RG90KTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWQ7XG4gICAgY29uc3QgZmlyc3RJbnZhbGlkSW5kZXggPSBBcnJheS5mcm9tKHJhd0V4dG5hbWUpLmZpbmRJbmRleChpbnZhbGlkRXh0ZW5zaW9uQ2hhcik7XG4gICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ID09PSAtMSkge1xuICAgICAgZmlsdGVyZWQgPSByYXdFeHRuYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXJlZCA9IHJhd0V4dG5hbWUuc3Vic3RyaW5nKDAsIGZpcnN0SW52YWxpZEluZGV4KTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcmVkID09PSAnLicpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG5cbiAgX2pvaW5EaXJlY3RvcnlOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBuZXdQYXRoID0gcGF0aC5qb2luKHRoaXMudXBsb2FkRGlyLCBuYW1lKTtcblxuICAgIC8vIHByZXZlbnQgZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2tzXG4gICAgaWYgKCFuZXdQYXRoLnN0YXJ0c1dpdGgodGhpcy51cGxvYWREaXIpKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMudXBsb2FkRGlyLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEludmFsaWROYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIF9zZXRVcFJlbmFtZSgpIHtcbiAgICBjb25zdCBoYXNSZW5hbWUgPSB0eXBlb2YgdGhpcy5vcHRpb25zLmZpbGVuYW1lID09PSAnZnVuY3Rpb24nO1xuICAgIGlmIChoYXNSZW5hbWUpIHtcbiAgICAgIHRoaXMuX2dldE5ld05hbWUgPSAocGFydCkgPT4ge1xuICAgICAgICBsZXQgZXh0ID0gJyc7XG4gICAgICAgIGxldCBuYW1lID0gdGhpcy5vcHRpb25zLmRlZmF1bHRJbnZhbGlkTmFtZTtcbiAgICAgICAgaWYgKHBhcnQub3JpZ2luYWxGaWxlbmFtZSkge1xuICAgICAgICAgIC8vIGNhbiBiZSBudWxsXG4gICAgICAgICAgKHsgZXh0LCBuYW1lIH0gPSBwYXRoLnBhcnNlKHBhcnQub3JpZ2luYWxGaWxlbmFtZSkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEV4dGVuc2lvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGV4dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbGVuYW1lLmNhbGwodGhpcywgbmFtZSwgZXh0LCBwYXJ0LCB0aGlzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldE5ld05hbWUgPSAocGFydCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gY3JlYXRlSWQoKTtcblxuICAgICAgICBpZiAocGFydCAmJiB0aGlzLm9wdGlvbnMua2VlcEV4dGVuc2lvbnMpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEZpbGVuYW1lID1cbiAgICAgICAgICAgIHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyA/IHBhcnQgOiBwYXJ0Lm9yaWdpbmFsRmlsZW5hbWU7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLl9nZXRFeHRlbnNpb24ob3JpZ2luYWxGaWxlbmFtZSl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBfc2V0VXBNYXhGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhGaWVsZHMgIT09IEluZmluaXR5KSB7XG4gICAgICBsZXQgZmllbGRzQ291bnQgPSAwO1xuICAgICAgdGhpcy5vbignZmllbGQnLCAoKSA9PiB7XG4gICAgICAgIGZpZWxkc0NvdW50ICs9IDE7XG4gICAgICAgIGlmIChmaWVsZHNDb3VudCA+IHRoaXMub3B0aW9ucy5tYXhGaWVsZHMpIHtcbiAgICAgICAgICB0aGlzLl9lcnJvcihcbiAgICAgICAgICAgIG5ldyBGb3JtaWRhYmxlRXJyb3IoXG4gICAgICAgICAgICAgIGBvcHRpb25zLm1heEZpZWxkcyAoJHt0aGlzLm9wdGlvbnMubWF4RmllbGRzfSkgZXhjZWVkZWRgLFxuICAgICAgICAgICAgICBlcnJvcnMubWF4RmllbGRzRXhjZWVkZWQsXG4gICAgICAgICAgICAgIDQxMyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX3NldFVwTWF4RmlsZXMoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhGaWxlcyAhPT0gSW5maW5pdHkpIHtcbiAgICAgIGxldCBmaWxlQ291bnQgPSAwO1xuICAgICAgdGhpcy5vbignZmlsZUJlZ2luJywgKCkgPT4ge1xuICAgICAgICBmaWxlQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKGZpbGVDb3VudCA+IHRoaXMub3B0aW9ucy5tYXhGaWxlcykge1xuICAgICAgICAgIHRoaXMuX2Vycm9yKFxuICAgICAgICAgICAgbmV3IEZvcm1pZGFibGVFcnJvcihcbiAgICAgICAgICAgICAgYG9wdGlvbnMubWF4RmlsZXMgKCR7dGhpcy5vcHRpb25zLm1heEZpbGVzfSkgZXhjZWVkZWRgLFxuICAgICAgICAgICAgICBlcnJvcnMubWF4RmlsZXNFeGNlZWRlZCxcbiAgICAgICAgICAgICAgNDEzLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfbWF5YmVFbmQoKSB7XG4gICAgaWYgKCF0aGlzLmVuZGVkIHx8IHRoaXMuX2ZsdXNoaW5nIHx8IHRoaXMuZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXEgPSBudWxsO1xuICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW5jb21pbmdGb3JtO1xuZXhwb3J0IHsgREVGQVVMVF9PUFRJT05TIH07XG4iLCAiaW1wb3J0IEpTT05QYXJzZXIgZnJvbSAnLi9KU09OLmpzJztcbmltcG9ydCBEdW1teVBhcnNlciBmcm9tICcuL0R1bW15LmpzJztcbmltcG9ydCBNdWx0aXBhcnRQYXJzZXIgZnJvbSAnLi9NdWx0aXBhcnQuanMnO1xuaW1wb3J0IE9jdGV0U3RyZWFtUGFyc2VyIGZyb20gJy4vT2N0ZXRTdHJlYW0uanMnO1xuaW1wb3J0IFF1ZXJ5U3RyaW5nUGFyc2VyIGZyb20gJy4vUXVlcnlzdHJpbmcuanMnO1xuXG5leHBvcnQge1xuICBKU09OUGFyc2VyLFxuICBEdW1teVBhcnNlcixcbiAgTXVsdGlwYXJ0UGFyc2VyLFxuICBPY3RldFN0cmVhbVBhcnNlcixcbiAgT2N0ZXRTdHJlYW1QYXJzZXIgYXMgT2N0ZXRzdHJlYW1QYXJzZXIsXG4gIFF1ZXJ5U3RyaW5nUGFyc2VyLFxuICBRdWVyeVN0cmluZ1BhcnNlciBhcyBRdWVyeXN0cmluZ1BhcnNlcixcbn07XG4iLCAiaW1wb3J0IFBlcnNpc3RlbnRGaWxlIGZyb20gJy4vUGVyc2lzdGVudEZpbGUuanMnO1xuaW1wb3J0IFZvbGF0aWxlRmlsZSBmcm9tICcuL1ZvbGF0aWxlRmlsZS5qcyc7XG5pbXBvcnQgRm9ybWlkYWJsZSwgeyBERUZBVUxUX09QVElPTlMgfSBmcm9tICcuL0Zvcm1pZGFibGUuanMnO1xuXG5cblxuLy8gbWFrZSBpdCBhdmFpbGFibGUgd2l0aG91dCByZXF1aXJpbmcgdGhlIGBuZXdgIGtleXdvcmRcbi8vIGlmIHlvdSB3YW50IGl0IGFjY2VzcyBgY29uc3QgZm9ybWlkYWJsZS5JbmNvbWluZ0Zvcm1gIGFzIHYxXG5jb25zdCBmb3JtaWRhYmxlID0gKC4uLmFyZ3MpID0+IG5ldyBGb3JtaWRhYmxlKC4uLmFyZ3MpO1xuY29uc3Qge2VuYWJsZWRQbHVnaW5zfSA9IERFRkFVTFRfT1BUSU9OUztcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWlkYWJsZTtcbmV4cG9ydCB7XG4gIFBlcnNpc3RlbnRGaWxlIGFzIEZpbGUsXG4gIFBlcnNpc3RlbnRGaWxlLFxuICBWb2xhdGlsZUZpbGUsXG4gIEZvcm1pZGFibGUsXG4gIC8vIGFsaWFzXG4gIEZvcm1pZGFibGUgYXMgSW5jb21pbmdGb3JtLFxuXG4gIC8vIGFzIG5hbWVkXG4gIGZvcm1pZGFibGUsXG5cblxuICAvLyBtaXNjXG4gIERFRkFVTFRfT1BUSU9OUyBhcyBkZWZhdWx0T3B0aW9ucyxcbiAgZW5hYmxlZFBsdWdpbnMsICBcbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vcGFyc2Vycy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvaW5kZXguanMnO1xuZXhwb3J0ICogYXMgZXJyb3JzIGZyb20gJy4vRm9ybWlkYWJsZUVycm9yLmpzJzsiXSwKICAibWFwcGluZ3MiOiAiK0VBRUEsT0FBT0EsT0FBUSxLQUNmLE9BQU9DLE9BQVksU0FDbkIsT0FBU0MsZ0JBQUFBLE9BQW9CLFNBSjdCLElBTU1DLEdBaUZOQyxHQXZGQUMsR0FBQUMsRUFBQSxrQkFNTUgsR0FBTixjQUE2QkQsRUFBQUEsQ0FON0IsTUFNNkJBLENBQUFBLEVBQUFBLHVCQUMzQixZQUFZLENBQUVLLFNBQUFBLEVBQVVDLFlBQUFBLEVBQWFDLGlCQUFBQSxFQUFrQkMsU0FBQUEsRUFBVUMsY0FBQUEsQ0FBYSxFQUFJLENBQ2hGLE1BQUssRUFFTCxLQUFLQyxpQkFBbUIsS0FDeEJDLE9BQU9DLE9BQU8sS0FBTSxDQUFFUCxTQUFBQSxFQUFVQyxZQUFBQSxFQUFhQyxpQkFBQUEsRUFBa0JDLFNBQUFBLEVBQVVDLGNBQUFBLENBQWMsQ0FBQSxFQUV2RixLQUFLSSxLQUFPLEVBQ1osS0FBS0MsYUFBZSxLQUVoQixPQUFPLEtBQUtMLGVBQWtCLFNBQ2hDLEtBQUtNLEtBQU9oQixHQUFPaUIsV0FBVyxLQUFLUCxhQUFhLEVBRWhELEtBQUtNLEtBQU8sSUFFaEIsQ0FFQUUsTUFBTyxDQUNMLEtBQUtILGFBQWVoQixHQUFHb0Isa0JBQWtCLEtBQUtiLFFBQVEsRUFDdEQsS0FBS1MsYUFBYUssR0FBRyxRQUFVQyxHQUFBQSxDQUM3QixLQUFLQyxLQUFLLFFBQVNELENBQUFBLENBQ3JCLENBQUEsQ0FDRixDQUVBRSxRQUFTLENBQ1AsSUFBTUMsRUFBTyxDQUNYVixLQUFNLEtBQUtBLEtBQ1hSLFNBQVUsS0FBS0EsU0FDZkMsWUFBYSxLQUFLQSxZQUNsQkUsU0FBVSxLQUFLQSxTQUNmZ0IsTUFBTyxLQUFLZCxpQkFDWmUsT0FBUSxLQUFLQSxPQUNibEIsaUJBQWtCLEtBQUtBLGdCQUN6QixFQUNBLE9BQUksS0FBS1EsTUFB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QUFBLENBQ0YsQ0FDRixDQUVBOUcsZ0JBQWlCLENBQ2YsR0FBSSxLQUFLakIsUUFBUTFDLFdBQWFDLElBQVUsQ0FDdEMsSUFBSXlLLEVBQVksRUFDaEIsS0FBSzFGLEdBQUcsWUFBYSxJQUFBLENBQ25CMEYsR0FBYSxFQUNUQSxFQUFZLEtBQUtoSSxRQUFRMUMsVUFDM0IsS0FBS29FLE9BQ0gsSUFBSWQsRUFDRixxQkFBcUIsS0FBS1osUUFBUTFDLFFBQVEsYUFDbkMySyxLQUNQLEdBQUEsQ0FBQSxDQUlSLENBQUEsQ0FDRixDQUNGLENBRUFwRCxXQUFZLENBQ04sQ0FBQyxLQUFLM0QsT0FBUyxLQUFLYixXQUFhLEtBQUsyQyxRQUcxQyxLQUFLeEIsSUFBTSxLQUNYLEtBQUtvQixLQUFLLEtBQUEsRUFDWixDQUNGLEVBRUExRyxHQUFlRCxLQzNxQmYsSUFBQWlNLEdBQUFDLEVBQUEsa0JBQUFDLEtBQ0FDLEtBQ0FDLEtBQ0FDLEtBQ0FDLE9DSkEsSUFRTUMsR0FDQ0MsR0FFUEMsR0FYQUMsR0FBQUMsRUFBQSxLQUFBQyxLQUNBQyxLQUNBQyxLQTJCQUMsS0FDQUMsS0FDQUMsSUF2Qk1WLEdBQWFXLEVBQUEsSUFBSUMsSUFBUyxJQUFJQyxHQUFBQSxHQUFjRCxDQUFBQSxFQUEvQixjQUNiLENBQUNYLGVBQUFBLElBQWtCYSxHQUV6QlosR0FBZUYiLAogICJuYW1lcyI6IFsiZnMiLCAiY3J5cHRvIiwgIkV2ZW50RW1pdHRlciIsICJQZXJzaXN0ZW50RmlsZSIsICJQZXJzaXN0ZW50RmlsZV9kZWZhdWx0IiwgImluaXRfUGVyc2lzdGVudEZpbGUiLCAiX19lc21NaW4iLCAiZmlsZXBhdGgiLCAibmV3RmlsZW5hbWUiLCAib3JpZ2luYWxGaWxlbmFtZSIsICJtaW1ldHlwZSIsICJoYXNoQWxnb3JpdGhtIiwgImxhc3RNb2RpZmllZERhdGUiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJzaXplIiwgIl93cml0ZVN0cmVhbSIsICJoYXNoIiwgImNyZWF0ZUhhc2giLCAib3BlbiIsICJjcmVhdGVXcml0ZVN0cmVhbSIsICJvbiIsICJlcnIiLCAiZW1pdCIsICJ0b0pTT04iLCAianNvbiIsICJtdGltZSIsICJsZW5ndGgiLCAidG9TdHJpbmciLCAid3JpdGUiLCAiYnVmZmVyIiwgImNiIiwgInVwZGF0ZSIsICJjbG9zZWQiLCAiRGF0ZSIsICJlbmQiLCAiZGlnZXN0IiwgImRlc3Ryb3kiLCAic2V0VGltZW91dCIsICJ1bmxpbmsiLCAiY3JlYXRlSGFzaCIsICJFdmVudEVtaXR0ZXIiLCAiVm9sYXRpbGVGaWxlIiwgIlZvbGF0aWxlRmlsZV9kZWZhdWx0IiwgImluaXRfVm9sYXRpbGVGaWxlIiwgIl9fZXNtTWluIiwgImZpbGVwYXRoIiwgIm5ld0ZpbGVuYW1lIiwgIm9yaWdpbmFsRmlsZW5hbWUiLCAibWltZXR5cGUiLCAiaGFzaEFsZ29yaXRobSIsICJjcmVhdGVGaWxlV3JpdGVTdHJlYW0iLCAibGFzdE1vZGlmaWVkRGF0ZSIsICJPYmplY3QiLCAiYXNzaWduIiwgInNpemUiLCAiX3dyaXRlU3RyZWFtIiwgImhhc2giLCAib3BlbiIsICJvbiIsICJlcnIiLCAiZW1pdCIsICJkZXN0cm95IiwgInRvSlNPTiIsICJqc29uIiwgImxlbmd0aCIsICJ0b1N0cmluZyIsICJ3cml0ZSIsICJidWZmZXIiLCAiY2IiLCAidXBkYXRlIiwgImNsb3NlZCIsICJkZXN0cm95ZWQiLCAiZW5kIiwgImRpZ2VzdCIsICJleHBvcnRzIiwgImFkZCIsICJmcm9tQmlnIiwgInNwbGl0IiwgIlUzMl9NQVNLNjQiLCAiXzMybiIsICJuIiwgImxlIiwgIl9fbmFtZSIsICJsc3QiLCAibGVuIiwgIkFoIiwgIkFsIiwgImkiLCAiaCIsICJ0b0JpZyIsICJsIiwgInNoclNIIiwgIl9sIiwgInMiLCAic2hyU0wiLCAicm90clNIIiwgInJvdHJTTCIsICJyb3RyQkgiLCAicm90ckJMIiwgInJvdHIzMkgiLCAiX2giLCAicm90cjMyTCIsICJyb3RsU0giLCAicm90bFNMIiwgInJvdGxCSCIsICJyb3RsQkwiLCAiQmgiLCAiQmwiLCAiYWRkM0wiLCAiQ2wiLCAiYWRkM0giLCAibG93IiwgIkNoIiwgImFkZDRMIiwgIkRsIiwgImFkZDRIIiwgIkRoIiwgImFkZDVMIiwgIkVsIiwgImFkZDVIIiwgIkVoIiwgInU2NCIsICJuYyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiaXNCeXRlcyIsICJhbnVtYmVyIiwgImFieXRlcyIsICJhaGFzaCIsICJhZXhpc3RzIiwgImFvdXRwdXQiLCAidTgiLCAidTMyIiwgImNsZWFuIiwgImNyZWF0ZVZpZXciLCAicm90ciIsICJyb3RsIiwgImJ5dGVTd2FwIiwgImJ5dGVTd2FwMzIiLCAiYnl0ZXNUb0hleCIsICJoZXhUb0J5dGVzIiwgImFzeW5jTG9vcCIsICJ1dGY4VG9CeXRlcyIsICJieXRlc1RvVXRmOCIsICJ0b0J5dGVzIiwgImtkZklucHV0VG9CeXRlcyIsICJjb25jYXRCeXRlcyIsICJjaGVja09wdHMiLCAiY3JlYXRlSGFzaGVyIiwgImNyZWF0ZU9wdEhhc2hlciIsICJjcmVhdGVYT0ZlciIsICJyYW5kb21CeXRlcyIsICJjcnlwdG9fMSIsICJhIiwgIl9fbmFtZSIsICJuIiwgImIiLCAibGVuZ3RocyIsICJoIiwgImluc3RhbmNlIiwgImNoZWNrRmluaXNoZWQiLCAib3V0IiwgIm1pbiIsICJhcnIiLCAiYXJyYXlzIiwgImkiLCAid29yZCIsICJzaGlmdCIsICJ1IiwgImhhc0hleEJ1aWx0aW4iLCAiaGV4ZXMiLCAiXyIsICJieXRlcyIsICJoZXgiLCAiYXNjaWlzIiwgImFzY2lpVG9CYXNlMTYiLCAiY2giLCAiaGwiLCAiYWwiLCAiYXJyYXkiLCAiYWkiLCAiaGkiLCAibjEiLCAibjIiLCAiY2hhciIsICJuZXh0VGljayIsICJpdGVycyIsICJ0aWNrIiwgImNiIiwgInRzIiwgImRpZmYiLCAic3RyIiwgImRhdGEiLCAic3VtIiwgInJlcyIsICJwYWQiLCAiZGVmYXVsdHMiLCAib3B0cyIsICJIYXNoIiwgImhhc2hDb25zIiwgImhhc2hDIiwgIm1zZyIsICJ0bXAiLCAiYnl0ZXNMZW5ndGgiLCAiZXhwb3J0cyIsICJrZWNjYWtQIiwgIl91NjRfdHNfMSIsICJ1dGlsc190c18xIiwgIl8wbiIsICJfMW4iLCAiXzJuIiwgIl83biIsICJfMjU2biIsICJfMHg3MW4iLCAiU0hBM19QSSIsICJTSEEzX1JPVEwiLCAiX1NIQTNfSU9UQSIsICJyb3VuZCIsICJSIiwgIngiLCAieSIsICJ0IiwgImoiLCAiSU9UQVMiLCAiU0hBM19JT1RBX0giLCAiU0hBM19JT1RBX0wiLCAicm90bEgiLCAiX19uYW1lIiwgImgiLCAibCIsICJzIiwgInJvdGxMIiwgInJvdW5kcyIsICJCIiwgImlkeDEiLCAiaWR4MCIsICJCMCIsICJCMSIsICJUaCIsICJUbCIsICJjdXJIIiwgImN1ckwiLCAic2hpZnQiLCAiUEkiLCAiS2VjY2FrIiwgImJsb2NrTGVuIiwgInN1ZmZpeCIsICJvdXRwdXRMZW4iLCAiZW5hYmxlWE9GIiwgImRhdGEiLCAic3RhdGUiLCAibGVuIiwgInBvcyIsICJ0YWtlIiwgImkiLCAib3V0IiwgImJ1ZmZlck91dCIsICJieXRlcyIsICJ0byIsICJnZW4iLCAiZ2VuU2hha2UiLCAib3B0cyIsICJyZXF1aXJlX3NyYyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNoYTNfNTEyIiwgInNoYTMiLCAicmVxdWlyZSIsICJkZWZhdWx0TGVuZ3RoIiwgImJpZ0xlbmd0aCIsICJjcmVhdGVFbnRyb3B5IiwgIl9fbmFtZSIsICJsZW5ndGgiLCAicmFuZG9tIiwgIk1hdGgiLCAiZW50cm9weSIsICJmbG9vciIsICJ0b1N0cmluZyIsICJidWZUb0JpZ0ludCIsICJidWYiLCAiYml0cyIsICJ2YWx1ZSIsICJpIiwgInZhbHVlcyIsICJiaSIsICJCaWdJbnQiLCAiaGFzaCIsICJpbnB1dCIsICJzbGljZSIsICJhbHBoYWJldCIsICJBcnJheSIsICJmcm9tIiwgIngiLCAiU3RyaW5nIiwgImZyb21DaGFyQ29kZSIsICJyYW5kb21MZXR0ZXIiLCAiY3JlYXRlRmluZ2VycHJpbnQiLCAiZ2xvYmFsT2JqIiwgImdsb2JhbCIsICJ3aW5kb3ciLCAiZ2xvYmFscyIsICJPYmplY3QiLCAia2V5cyIsICJzb3VyY2VTdHJpbmciLCAic3Vic3RyaW5nIiwgImNyZWF0ZUNvdW50ZXIiLCAiY291bnQiLCAiaW5pdGlhbENvdW50TWF4IiwgImluaXQiLCAiY291bnRlciIsICJmaW5nZXJwcmludCIsICJjdWlkMiIsICJmaXJzdExldHRlciIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgInNhbHQiLCAiaGFzaElucHV0IiwgImNyZWF0ZUlkIiwgImlzQ3VpZCIsICJpZCIsICJtaW5MZW5ndGgiLCAibWF4TGVuZ3RoIiwgInJlZ2V4IiwgInRlc3QiLCAiZ2V0Q29uc3RhbnRzIiwgInJlcXVpcmVfY3VpZDIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjcmVhdGVJZCIsICJpbml0IiwgImdldENvbnN0YW50cyIsICJpc0N1aWQiLCAicmVxdWlyZSIsICJyZXF1aXJlX3dyYXBweSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndyYXBweSIsICJmbiIsICJjYiIsICJUeXBlRXJyb3IiLCAiT2JqZWN0IiwgImtleXMiLCAiZm9yRWFjaCIsICJrIiwgIndyYXBwZXIiLCAiYXJncyIsICJBcnJheSIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgImkiLCAicmV0IiwgImFwcGx5IiwgInJlcXVpcmVfcmF3IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZG9tYWluIiwgImhhc1NldEltbWVkaWF0ZSIsICJzZXRJbW1lZGlhdGUiLCAicmF3QXNhcCIsICJ0YXNrIiwgInF1ZXVlIiwgImxlbmd0aCIsICJyZXF1ZXN0Rmx1c2giLCAiZmx1c2hpbmciLCAiaW5kZXgiLCAiY2FwYWNpdHkiLCAiZmx1c2giLCAiY3VycmVudEluZGV4IiwgImNhbGwiLCAic2NhbiIsICJuZXdMZW5ndGgiLCAicGFyZW50RG9tYWluIiwgInByb2Nlc3MiLCAicmVxdWlyZSIsICJhY3RpdmUiLCAibmV4dFRpY2siLCAicmVxdWlyZV9hc2FwIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmF3QXNhcCIsICJyZXF1aXJlIiwgImZyZWVUYXNrcyIsICJhc2FwIiwgInRhc2siLCAicmF3VGFzayIsICJsZW5ndGgiLCAicG9wIiwgIlJhd1Rhc2siLCAiZG9tYWluIiwgInByb2Nlc3MiLCAicHJvdG90eXBlIiwgImNhbGwiLCAiZW50ZXIiLCAidGhyZXciLCAiZXhpdCIsICJyZXF1ZXN0Rmx1c2giLCAicHVzaCIsICJyZXF1aXJlX2RlemFsZ28iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3cmFwcHkiLCAicmVxdWlyZSIsICJkZXphbGdvIiwgImFzYXAiLCAiY2IiLCAic3luYyIsICJfX25hbWUiLCAiemFsZ29TYWZlIiwgImFyZ3MiLCAiYXJndW1lbnRzIiwgIm1lIiwgImFwcGx5IiwgInJlcXVpcmVfb25jZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndyYXBweSIsICJyZXF1aXJlIiwgIm9uY2UiLCAic3RyaWN0IiwgIm9uY2VTdHJpY3QiLCAicHJvdG8iLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgIkZ1bmN0aW9uIiwgInByb3RvdHlwZSIsICJ2YWx1ZSIsICJfX25hbWUiLCAiY29uZmlndXJhYmxlIiwgImZuIiwgImYiLCAiY2FsbGVkIiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJFcnJvciIsICJvbmNlRXJyb3IiLCAibmFtZSIsICJGb3JtaWRhYmxlRXJyb3JfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJhYm9ydGVkIiwgImJpZ2dlclRoYW5NYXhGaWxlU2l6ZSIsICJiaWdnZXJUaGFuVG90YWxNYXhGaWxlU2l6ZSIsICJjYW5ub3RDcmVhdGVEaXIiLCAiRm9ybWlkYWJsZUVycm9yX2RlZmF1bHQiLCAiZmlsZW5hbWVOb3RTdHJpbmciLCAibWFsZm9ybWVkTXVsdGlwYXJ0IiwgIm1heEZpZWxkc0V4Y2VlZGVkIiwgIm1heEZpZWxkc1NpemVFeGNlZWRlZCIsICJtYXhGaWxlc0V4Y2VlZGVkIiwgIm1pc3NpbmdDb250ZW50VHlwZSIsICJtaXNzaW5nTXVsdGlwYXJ0Qm91bmRhcnkiLCAibWlzc2luZ1BsdWdpbiIsICJub0VtcHR5RmlsZXMiLCAibm9QYXJzZXIiLCAicGx1Z2luRmFpbGVkIiwgInBsdWdpbkZ1bmN0aW9uIiwgInNtYWxsZXJUaGFuTWluRmlsZVNpemUiLCAidW5pbml0aWFsaXplZFBhcnNlciIsICJ1bmtub3duVHJhbnNmZXJFbmNvZGluZyIsICJGb3JtaWRhYmxlRXJyb3IiLCAiaW5pdF9Gb3JtaWRhYmxlRXJyb3IiLCAiX19lc21NaW4iLCAiRXJyb3IiLCAibWVzc2FnZSIsICJpbnRlcm5hbENvZGUiLCAiaHR0cENvZGUiLCAiY29kZSIsICJUcmFuc2Zvcm0iLCAiRHVtbXlQYXJzZXIiLCAiRHVtbXlfZGVmYXVsdCIsICJpbml0X0R1bW15IiwgIl9fZXNtTWluIiwgImluY29taW5nRm9ybSIsICJvcHRpb25zIiwgImdsb2JhbE9wdGlvbnMiLCAiX2ZsdXNoIiwgImNhbGxiYWNrIiwgImVuZGVkIiwgIl9tYXliZUVuZCIsICJUcmFuc2Zvcm0iLCAibG93ZXIiLCAiYyIsICJzIiwgIlNUQVRFIiwgImYiLCAiRkJPVU5EQVJZIiwgIkxGIiwgIkNSIiwgIlNQQUNFIiwgIkhZUEhFTiIsICJDT0xPTiIsICJBIiwgIloiLCAiU1RBVEVTIiwgIk11bHRpcGFydFBhcnNlciIsICJNdWx0aXBhcnRfZGVmYXVsdCIsICJpbml0X011bHRpcGFydCIsICJfX2VzbU1pbiIsICJpbml0X0Zvcm1pZGFibGVFcnJvciIsICJQQVJTRVJfVU5JTklUSUFMSVpFRCIsICJTVEFSVCIsICJTVEFSVF9CT1VOREFSWSIsICJIRUFERVJfRklFTERfU1RBUlQiLCAiSEVBREVSX0ZJRUxEIiwgIkhFQURFUl9WQUxVRV9TVEFSVCIsICJIRUFERVJfVkFMVUUiLCAiSEVBREVSX1ZBTFVFX0FMTU9TVF9ET05FIiwgIkhFQURFUlNfQUxNT1NUX0RPTkUiLCAiUEFSVF9EQVRBX1NUQVJUIiwgIlBBUlRfREFUQSIsICJQQVJUX0VORCIsICJFTkQiLCAiUEFSVF9CT1VOREFSWSIsICJMQVNUX0JPVU5EQVJZIiwgIk9iamVjdCIsICJrZXlzIiwgImZvckVhY2giLCAic3RhdGVOYW1lIiwgIm9wdGlvbnMiLCAicmVhZGFibGVPYmplY3RNb2RlIiwgImJvdW5kYXJ5IiwgImJvdW5kYXJ5Q2hhcnMiLCAibG9va2JlaGluZCIsICJidWZmZXJMZW5ndGgiLCAic3RhdGUiLCAiZ2xvYmFsT3B0aW9ucyIsICJpbmRleCIsICJmbGFncyIsICJfZW5kVW5leHBlY3RlZCIsICJGb3JtaWRhYmxlRXJyb3IiLCAiZXhwbGFpbiIsICJtYWxmb3JtZWRNdWx0aXBhcnQiLCAiX2ZsdXNoIiwgImRvbmUiLCAibGVuZ3RoIiwgIl9oYW5kbGVDYWxsYmFjayIsICJpbml0V2l0aEJvdW5kYXJ5IiwgInN0ciIsICJCdWZmZXIiLCAiZnJvbSIsICJhbGxvYyIsICJpIiwgIm5hbWUiLCAiYnVmIiwgInN0YXJ0IiwgImVuZCIsICJ1bmRlZmluZWQiLCAicHVzaCIsICJidWZmZXIiLCAiX3RyYW5zZm9ybSIsICJfIiwgInByZXZJbmRleCIsICJib3VuZGFyeUxlbmd0aCIsICJib3VuZGFyeUVuZCIsICJjbCIsICJzZXRNYXJrIiwgIl9fbmFtZSIsICJpZHgiLCAiY2xlYXJNYXJrU3ltYm9sIiwgImRhdGFDYWxsYmFjayIsICJzaG91bGRDbGVhciIsICJtYXJrU3ltYm9sIiwgInN0YXRlVG9TdHJpbmciLCAic3RhdGVOdW1iZXIiLCAiYXNzaWduIiwgIlBhc3NUaHJvdWdoIiwgIk9jdGV0U3RyZWFtUGFyc2VyIiwgIk9jdGV0U3RyZWFtX2RlZmF1bHQiLCAiaW5pdF9PY3RldFN0cmVhbSIsICJfX2VzbU1pbiIsICJvcHRpb25zIiwgImdsb2JhbE9wdGlvbnMiLCAicGx1Z2luIiwgImZvcm1pZGFibGUiLCAib3B0aW9ucyIsICJzZWxmIiwgInRlc3QiLCAiaGVhZGVycyIsICJpbml0IiwgImNhbGwiLCAiX3NlbGYiLCAiX29wdHMiLCAidHlwZSIsICJvY3RldFN0cmVhbVR5cGUiLCAib3JpZ2luYWxGaWxlbmFtZSIsICJtaW1ldHlwZSIsICJ0aGlzUGFydCIsICJuZXdGaWxlbmFtZSIsICJfZ2V0TmV3TmFtZSIsICJmaWxlcGF0aCIsICJfam9pbkRpcmVjdG9yeU5hbWUiLCAiZmlsZSIsICJfbmV3RmlsZSIsICJlbWl0IiwgIm9wZW4iLCAib3BlbmVkRmlsZXMiLCAicHVzaCIsICJfZmx1c2hpbmciLCAiX3BhcnNlciIsICJPY3RldFN0cmVhbVBhcnNlciIsICJvdXRzdGFuZGluZ1dyaXRlcyIsICJvbiIsICJidWZmZXIiLCAicGF1c2UiLCAid3JpdGUiLCAicmVzdW1lIiwgImVuZGVkIiwgImRvbmUiLCAiX19uYW1lIiwgImVuZCIsICJfbWF5YmVFbmQiLCAib25jZSIsICJpbml0X29jdGV0c3RyZWFtIiwgIl9fZXNtTWluIiwgImluaXRfT2N0ZXRTdHJlYW0iLCAiVHJhbnNmb3JtIiwgIlF1ZXJ5c3RyaW5nUGFyc2VyIiwgIlF1ZXJ5c3RyaW5nX2RlZmF1bHQiLCAiaW5pdF9RdWVyeXN0cmluZyIsICJfX2VzbU1pbiIsICJvcHRpb25zIiwgInJlYWRhYmxlT2JqZWN0TW9kZSIsICJnbG9iYWxPcHRpb25zIiwgImJ1ZmZlciIsICJidWZmZXJMZW5ndGgiLCAiX3RyYW5zZm9ybSIsICJlbmNvZGluZyIsICJjYWxsYmFjayIsICJ0b1N0cmluZyIsICJsZW5ndGgiLCAiX2ZsdXNoIiwgImZpZWxkcyIsICJVUkxTZWFyY2hQYXJhbXMiLCAia2V5IiwgInZhbHVlIiwgInB1c2giLCAicGx1Z2luIiwgImZvcm1pZGFibGUiLCAib3B0aW9ucyIsICJzZWxmIiwgInRlc3QiLCAiaGVhZGVycyIsICJpbml0IiwgImNhbGwiLCAiX3NlbGYiLCAiX29wdHMiLCAidHlwZSIsICJxdWVyeXN0cmluZ1R5cGUiLCAicGFyc2VyIiwgIlF1ZXJ5c3RyaW5nUGFyc2VyIiwgIm9uIiwgImtleSIsICJ2YWx1ZSIsICJlbWl0IiwgIm9uY2UiLCAiZW5kZWQiLCAiX21heWJlRW5kIiwgIl9wYXJzZXIiLCAiaW5pdF9xdWVyeXN0cmluZyIsICJfX2VzbU1pbiIsICJpbml0X1F1ZXJ5c3RyaW5nIiwgIlN0cmVhbSIsICJwbHVnaW4iLCAiZm9ybWlkYWJsZSIsICJvcHRpb25zIiwgInNlbGYiLCAidGVzdCIsICJoZWFkZXJzIiwgIm0iLCAibWF0Y2giLCAiY3JlYXRlSW5pdE11bHRpcGFydCIsICJjYWxsIiwgImVyciIsICJGb3JtaWRhYmxlRXJyb3IiLCAibWlzc2luZ011bHRpcGFydEJvdW5kYXJ5IiwgIl9lcnJvciIsICJib3VuZGFyeSIsICJfX25hbWUiLCAiaW5pdE11bHRpcGFydCIsICJ0eXBlIiwgIm11bHRpcGFydFR5cGUiLCAicGFyc2VyIiwgIk11bHRpcGFydFBhcnNlciIsICJoZWFkZXJGaWVsZCIsICJoZWFkZXJWYWx1ZSIsICJwYXJ0IiwgImluaXRXaXRoQm91bmRhcnkiLCAib24iLCAibmFtZSIsICJidWZmZXIiLCAic3RhcnQiLCAiZW5kIiwgInJlYWRhYmxlIiwgIm9yaWdpbmFsRmlsZW5hbWUiLCAibWltZXR5cGUiLCAidHJhbnNmZXJFbmNvZGluZyIsICJlbmNvZGluZyIsICJ0cmFuc2ZlckJ1ZmZlciIsICJ0b1N0cmluZyIsICJ0b0xvd2VyQ2FzZSIsICJfZ2V0RmlsZU5hbWUiLCAiZGF0YVByb3BhZ2F0aW9uIiwgImN0eCIsICJlbWl0IiwgInNsaWNlIiwgImRhdGFTdG9wUHJvcGFnYXRpb24iLCAib2ZmIiwgIm9mZnNldCIsICJwYXJzZUludCIsICJsZW5ndGgiLCAiQnVmZmVyIiwgImZyb20iLCAic3Vic3RyaW5nIiwgInVua25vd25UcmFuc2ZlckVuY29kaW5nIiwgIl9wYXJzZXIiLCAicGF1c2UiLCAib25QYXJ0IiwgInJlc3VtZSIsICJlbmRlZCIsICJfbWF5YmVFbmQiLCAiaW5pdF9tdWx0aXBhcnQiLCAiX19lc21NaW4iLCAiaW5pdF9NdWx0aXBhcnQiLCAiaW5pdF9Gb3JtaWRhYmxlRXJyb3IiLCAiVHJhbnNmb3JtIiwgIkpTT05QYXJzZXIiLCAiSlNPTl9kZWZhdWx0IiwgImluaXRfSlNPTiIsICJfX2VzbU1pbiIsICJvcHRpb25zIiwgInJlYWRhYmxlT2JqZWN0TW9kZSIsICJjaHVua3MiLCAiZ2xvYmFsT3B0aW9ucyIsICJfdHJhbnNmb3JtIiwgImNodW5rIiwgImVuY29kaW5nIiwgImNhbGxiYWNrIiwgInB1c2giLCAiU3RyaW5nIiwgIl9mbHVzaCIsICJmaWVsZHMiLCAiSlNPTiIsICJwYXJzZSIsICJqb2luIiwgImUiLCAicGx1Z2luIiwgImZvcm1pZGFibGUiLCAib3B0aW9ucyIsICJzZWxmIiwgInRlc3QiLCAiaGVhZGVycyIsICJpbml0IiwgImNhbGwiLCAiX3NlbGYiLCAiX29wdHMiLCAidHlwZSIsICJqc29uVHlwZSIsICJwYXJzZXIiLCAiSlNPTlBhcnNlciIsICJvbiIsICJmaWVsZHMiLCAib25jZSIsICJlbmRlZCIsICJfbWF5YmVFbmQiLCAiX3BhcnNlciIsICJpbml0X2pzb24iLCAiX19lc21NaW4iLCAiaW5pdF9KU09OIiwgImluaXRfcGx1Z2lucyIsICJfX2VzbU1pbiIsICJpbml0X29jdGV0c3RyZWFtIiwgImluaXRfcXVlcnlzdHJpbmciLCAiaW5pdF9tdWx0aXBhcnQiLCAiaW5pdF9qc29uIiwgIkV2ZW50RW1pdHRlciIsICJmc1Byb21pc2VzIiwgIm9zIiwgInBhdGgiLCAiU3RyaW5nRGVjb2RlciIsICJoYXNPd25Qcm9wIiwgIm9iaiIsICJrZXkiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgImltcG9ydF9jdWlkMiIsICJpbXBvcnRfZGV6YWxnbyIsICJpbXBvcnRfb25jZSIsICJDVUlEMl9GSU5HRVJQUklOVCIsICJjcmVhdGVJZCIsICJERUZBVUxUX09QVElPTlMiLCAiZGVjb3JhdGVGb3JjZVNlcXVlbnRpYWwiLCAiY3JlYXRlTmVjZXNzYXJ5RGlyZWN0b3JpZXNBc3luYyIsICJpbnZhbGlkRXh0ZW5zaW9uQ2hhciIsICJJbmNvbWluZ0Zvcm0iLCAiRm9ybWlkYWJsZV9kZWZhdWx0IiwgImluaXRfRm9ybWlkYWJsZSIsICJfX2VzbU1pbiIsICJpbml0X0Zvcm1pZGFibGVFcnJvciIsICJpbml0X1BlcnNpc3RlbnRGaWxlIiwgImluaXRfVm9sYXRpbGVGaWxlIiwgImluaXRfRHVtbXkiLCAiaW5pdF9NdWx0aXBhcnQiLCAiaW5pdF9wbHVnaW5zIiwgInByb2Nlc3MiLCAiZW52IiwgIk5PREVfRU5WIiwgInBsYXRmb3JtIiwgImhvc3RuYW1lIiwgImN1aWQyaW5pdCIsICJsZW5ndGgiLCAiZmluZ2VycHJpbnQiLCAidG9Mb3dlckNhc2UiLCAibWF4RmllbGRzIiwgIm1heEZpZWxkc1NpemUiLCAibWF4RmlsZXMiLCAiSW5maW5pdHkiLCAibWF4RmlsZVNpemUiLCAibWF4VG90YWxGaWxlU2l6ZSIsICJ1bmRlZmluZWQiLCAibWluRmlsZVNpemUiLCAiYWxsb3dFbXB0eUZpbGVzIiwgImNyZWF0ZURpcnNGcm9tVXBsb2FkcyIsICJrZWVwRXh0ZW5zaW9ucyIsICJlbmNvZGluZyIsICJoYXNoQWxnb3JpdGhtIiwgInVwbG9hZERpciIsICJ0bXBkaXIiLCAiZW5hYmxlZFBsdWdpbnMiLCAib2N0ZXRzdHJlYW0iLCAicXVlcnlzdHJpbmciLCAibXVsdGlwYXJ0IiwgImpzb24iLCAiZmlsZVdyaXRlU3RyZWFtSGFuZGxlciIsICJkZWZhdWx0SW52YWxpZE5hbWUiLCAiZmlsdGVyIiwgIl9wYXJ0IiwgImZpbGVuYW1lIiwgIl9fbmFtZSIsICJwcm9taXNlQ3JlYXRvciIsICJsYXN0UHJvbWlzZSIsICJQcm9taXNlIiwgInJlc29sdmUiLCAieCIsICJwcm9taXNlV2VBcmVXYWl0aW5nRm9yIiwgImN1cnJlbnRQcm9taXNlIiwgImNhbGxiYWNrIiwgInRoZW4iLCAiY2F0Y2giLCAiZmlsZVBhdGgiLCAiZGlyZWN0b3J5bmFtZSIsICJkaXJuYW1lIiwgIm1rZGlyIiwgInJlY3Vyc2l2ZSIsICJjIiwgImNvZGUiLCAiY2hhckNvZGVBdCIsICJvcHRpb25zIiwgImRpciIsICJ1cGxvYWRkaXIiLCAiZm9yRWFjaCIsICJfc2V0VXBSZW5hbWUiLCAiX2ZsdXNoaW5nIiwgIl9maWVsZHNTaXplIiwgIl90b3RhbEZpbGVTaXplIiwgIl9wbHVnaW5zIiwgIm9wZW5lZEZpbGVzIiwgImNvbmNhdCIsICJCb29sZWFuIiwgIkZvcm1pZGFibGVFcnJvciIsICJtaXNzaW5nUGx1Z2luIiwgInBsdWdpbiIsICJ1c2UiLCAiX3NldFVwTWF4RmllbGRzIiwgIl9zZXRVcE1heEZpbGVzIiwgImVuZGVkIiwgInR5cGUiLCAicGx1Z2luRnVuY3Rpb24iLCAicHVzaCIsICJiaW5kIiwgInBhdXNlIiwgInJlcSIsICJlcnIiLCAiX2Vycm9yIiwgInJlc3VtZSIsICJwYXJzZSIsICJjYiIsICJwcm9taXNlIiwgInJlc29sdmVSZWYiLCAicmVqZWN0UmVmIiwgInJlamVjdCIsICJmaWVsZHMiLCAiZmlsZXMiLCAib25jZSIsICJkZXphbGdvIiwgIm9uIiwgIm5hbWUiLCAidmFsdWUiLCAiZmlsZSIsICJ3cml0ZUhlYWRlcnMiLCAiaGVhZGVycyIsICJlbWl0IiwgImFib3J0ZWQiLCAiYnVmZmVyIiwgIndyaXRlIiwgImVycm9yIiwgIl9wYXJzZXIiLCAiZW5kIiwgIl9wYXJzZUNvbnRlbnRMZW5ndGgiLCAiX3BhcnNlQ29udGVudFR5cGUiLCAibm9QYXJzZXIiLCAiYnl0ZXNSZWNlaXZlZCIsICJieXRlc0V4cGVjdGVkIiwgInVuaW5pdGlhbGl6ZWRQYXJzZXIiLCAib25QYXJ0IiwgInBhcnQiLCAiX2hhbmRsZVBhcnQiLCAib3JpZ2luYWxGaWxlbmFtZSIsICJmaWxlbmFtZU5vdFN0cmluZyIsICJtaW1ldHlwZSIsICJkZWNvZGVyIiwgInRyYW5zZmVyRW5jb2RpbmciLCAibWF4RmllbGRzU2l6ZUV4Y2VlZGVkIiwgImZpbGVTaXplIiwgIm5ld0ZpbGVuYW1lIiwgIl9nZXROZXdOYW1lIiwgImZpbGVwYXRoIiwgIl9qb2luRGlyZWN0b3J5TmFtZSIsICJfbmV3RmlsZSIsICJvcGVuIiwgImJpZ2dlclRoYW5Ub3RhbE1heEZpbGVTaXplIiwgIm5vRW1wdHlGaWxlcyIsICJzbWFsbGVyVGhhbk1pbkZpbGVTaXplIiwgImJpZ2dlclRoYW5NYXhGaWxlU2l6ZSIsICJfbWF5YmVFbmQiLCAiRHVtbXlQYXJzZXIiLCAibWlzc2luZ0NvbnRlbnRUeXBlIiwgInJlc3VsdHMiLCAiYWxsIiwgIm1hcCIsICJpZHgiLCAicGx1Z2luUmV0dXJuIiwgIm1lc3NhZ2UiLCAicGx1Z2luRmFpbGVkIiwgImFzc2lnbiIsICJldmVudE5hbWUiLCAiZGVzdHJveSIsICJwYXJzZUludCIsICJfbmV3UGFyc2VyIiwgIk11bHRpcGFydFBhcnNlciIsICJWb2xhdGlsZUZpbGUiLCAiY3JlYXRlRmlsZVdyaXRlU3RyZWFtIiwgImNhbm5vdENyZWF0ZURpciIsICJQZXJzaXN0ZW50RmlsZSIsICJfZ2V0RmlsZU5hbWUiLCAiaGVhZGVyVmFsdWUiLCAibSIsICJtYXRjaCIsICJzdWJzdHIiLCAibGFzdEluZGV4T2YiLCAicmVwbGFjZSIsICJfIiwgIlN0cmluZyIsICJmcm9tQ2hhckNvZGUiLCAiX2dldEV4dGVuc2lvbiIsICJzdHIiLCAiYmFzZW5hbWUiLCAiZmlyc3REb3QiLCAiaW5kZXhPZiIsICJsYXN0RG90IiwgInJhd0V4dG5hbWUiLCAiZXh0bmFtZSIsICJzbGljZSIsICJmaWx0ZXJlZCIsICJmaXJzdEludmFsaWRJbmRleCIsICJBcnJheSIsICJmcm9tIiwgImZpbmRJbmRleCIsICJzdWJzdHJpbmciLCAibmV3UGF0aCIsICJqb2luIiwgInN0YXJ0c1dpdGgiLCAiZXh0IiwgImZpZWxkc0NvdW50IiwgIm1heEZpZWxkc0V4Y2VlZGVkIiwgImZpbGVDb3VudCIsICJtYXhGaWxlc0V4Y2VlZGVkIiwgImluaXRfcGFyc2VycyIsICJfX2VzbU1pbiIsICJpbml0X0pTT04iLCAiaW5pdF9EdW1teSIsICJpbml0X011bHRpcGFydCIsICJpbml0X09jdGV0U3RyZWFtIiwgImluaXRfUXVlcnlzdHJpbmciLCAiZm9ybWlkYWJsZSIsICJlbmFibGVkUGx1Z2lucyIsICJzcmNfZGVmYXVsdCIsICJpbml0X3NyYyIsICJfX2VzbU1pbiIsICJpbml0X1BlcnNpc3RlbnRGaWxlIiwgImluaXRfVm9sYXRpbGVGaWxlIiwgImluaXRfRm9ybWlkYWJsZSIsICJpbml0X3BhcnNlcnMiLCAiaW5pdF9wbHVnaW5zIiwgImluaXRfRm9ybWlkYWJsZUVycm9yIiwgIl9fbmFtZSIsICJhcmdzIiwgIkZvcm1pZGFibGUiLCAiREVGQVVMVF9PUFRJT05TIl0KfQo=