@codingame/monaco-editor-wrapper 4.0.0-next.3 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/README.md +0 -26
  2. package/dist/_virtual/_commonjsHelpers.js +1 -4
  3. package/dist/_virtual/_monaco-editor.js +1 -1
  4. package/dist/assets/Angular.ng-template-17.1.0.vsix/expression.json +834 -0
  5. package/dist/assets/Angular.ng-template-17.1.0.vsix/inline-styles.json +98 -0
  6. package/dist/assets/Angular.ng-template-17.1.0.vsix/inline-template.json +76 -0
  7. package/dist/assets/Angular.ng-template-17.1.0.vsix/package.json +260 -0
  8. package/dist/assets/Angular.ng-template-17.1.0.vsix/template-blocks.json +83 -0
  9. package/dist/assets/Angular.ng-template-17.1.0.vsix/template.json +195 -0
  10. package/dist/assets/Dart-Code.dart-code-3.81.20240117.vsix/dart-language-configuration.json +29 -0
  11. package/dist/assets/Dart-Code.dart-code-3.81.20240117.vsix/dart.json +526 -0
  12. package/dist/assets/Dart-Code.dart-code-3.81.20240117.vsix/flutter_activity_bar.svg +14 -0
  13. package/dist/assets/Dart-Code.dart-code-3.81.20240117.vsix/package.json +3094 -0
  14. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/codeblock.json +81 -0
  15. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/language-configuration.json +57 -0
  16. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/package.json +279 -0
  17. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/systemverilog.json +349 -0
  18. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/systemverilog.tmLanguage.json +1246 -0
  19. package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/tasks.schema.json +30 -0
  20. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/eex-language-configuration.json +58 -0
  21. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/eex.json +41 -0
  22. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/elixir-language-configuration.json +182 -0
  23. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/elixir.json +2698 -0
  24. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/html-eex.json +25 -0
  25. package/dist/assets/JakeBecker.elixir-ls-0.19.0.vsix/package.json +623 -0
  26. package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/package.json +569 -0
  27. package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity.configuration.json +32 -0
  28. package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity.json +1215 -0
  29. package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity2.json +213 -0
  30. package/dist/assets/REditorSupport.r-2.8.2.vsix/Markdown Redcarpet.json +146 -0
  31. package/dist/assets/REditorSupport.r-2.8.2.vsix/RMarkdown.json +13 -0
  32. package/dist/assets/REditorSupport.r-2.8.2.vsix/Rcpp.json +34 -0
  33. package/dist/assets/REditorSupport.r-2.8.2.vsix/Rd (R Documentation).json +117 -0
  34. package/dist/assets/REditorSupport.r-2.8.2.vsix/Rlogo.svg +14 -0
  35. package/dist/assets/REditorSupport.r-2.8.2.vsix/dcf-configuration.json +24 -0
  36. package/dist/assets/REditorSupport.r-2.8.2.vsix/dcf.json +82 -0
  37. package/dist/assets/REditorSupport.r-2.8.2.vsix/package.json +2156 -0
  38. package/dist/assets/REditorSupport.r-2.8.2.vsix/r-configuration.json +33 -0
  39. package/dist/assets/REditorSupport.r-2.8.2.vsix/r-snippets.json +475 -0
  40. package/dist/assets/REditorSupport.r-2.8.2.vsix/r.json +647 -0
  41. package/dist/assets/REditorSupport.r-2.8.2.vsix/rbuildignore-configuration.json +2 -0
  42. package/dist/assets/REditorSupport.r-2.8.2.vsix/rbuildignore.json +27 -0
  43. package/dist/assets/REditorSupport.r-2.8.2.vsix/rd-configuration.json +27 -0
  44. package/dist/assets/REditorSupport.r-2.8.2.vsix/rmarkdown2.json +459 -0
  45. package/dist/assets/REditorSupport.r-2.8.2.vsix/rmd-configuration.json +27 -0
  46. package/dist/assets/REditorSupport.r-2.8.2.vsix/rnamespace.json +222 -0
  47. package/dist/assets/alefragnani.pascal-9.6.0.vsix/package.json +263 -0
  48. package/dist/assets/alefragnani.pascal-9.6.0.vsix/package.nls.json +24 -0
  49. package/dist/assets/alefragnani.pascal-9.6.0.vsix/package.nls.pt-br.json +24 -0
  50. package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal.configuration.json +32 -0
  51. package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal.json +414 -0
  52. package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal.tmLanguage +243 -0
  53. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/django-html.tmLanguage.json +701 -0
  54. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/django-txt.tmLanguage.json +255 -0
  55. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/filters.json +339 -0
  56. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/language-configuration.json +63 -0
  57. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/package.json +156 -0
  58. package/dist/assets/batisteo.vscode-django-1.15.0.vsix/tags.json +524 -0
  59. package/dist/assets/bitwisecook.tcl-0.4.3.vsix/language-configuration.json +75 -0
  60. package/dist/assets/bitwisecook.tcl-0.4.3.vsix/package.json +102 -0
  61. package/dist/assets/bitwisecook.tcl-0.4.3.vsix/tcl.json +5474 -0
  62. package/dist/assets/bitwisecook.tcl-0.4.3.vsix/tcl2.json +142 -0
  63. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/CICS.tmLanguage.json +66 -0
  64. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/COBOL.tmLanguage.json +165 -0
  65. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/SQL.tmLanguage.json +25 -0
  66. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/lang-config.json +27 -0
  67. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/package.json +513 -0
  68. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/pgm_conf.schema.json +24 -0
  69. package/dist/assets/broadcomMFD.cobol-language-support-2.1.0.vsix/proc_grps.schema.json +55 -0
  70. package/dist/assets/castwide.solargraph-0.24.1.vsix/package.json +295 -0
  71. package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/language-configuration.json +25 -0
  72. package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/package.json +468 -0
  73. package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/pgsql.tmLanguage +413 -0
  74. package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/postgres-explorer.svg +100 -0
  75. package/dist/assets/golang.Go-0.40.3.vsix/go.json +274 -0
  76. package/dist/assets/golang.Go-0.40.3.vsix/go.mod.language-configuration.json +5 -0
  77. package/dist/assets/golang.Go-0.40.3.vsix/go.mod.tmGrammar.json +171 -0
  78. package/dist/assets/golang.Go-0.40.3.vsix/go.sum.tmGrammar.json +44 -0
  79. package/dist/assets/golang.Go-0.40.3.vsix/package.json +2828 -0
  80. package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-directives.json +123 -0
  81. package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-interpolations.json +44 -0
  82. package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-template-language-configuration.json +8 -0
  83. package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/package.json +102 -0
  84. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/C2Hs-configuration.json +29 -0
  85. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/C2Hs.json +23 -0
  86. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/Hsc2Hs-configuration.json +30 -0
  87. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/Hsc2Hs.json +23 -0
  88. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/alex.json +236 -0
  89. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/cabal-configuration.json +6 -0
  90. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/cabal.json +53 -0
  91. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-cabal.json +28 -0
  92. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-haskell.json +28 -0
  93. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-literate-haskell.json +28 -0
  94. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/happy.json +196 -0
  95. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/haskell-configuration.json +29 -0
  96. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/haskell.json +2525 -0
  97. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/literate-haskell-configuration.json +29 -0
  98. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/literateHaskell.json +56 -0
  99. package/dist/assets/justusadam.language-haskell-3.6.0.vsix/package.json +234 -0
  100. package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/Kotlin.tmLanguage +1067 -0
  101. package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/codeblock.json +22 -0
  102. package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/kotlin.configuration.json +35 -0
  103. package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/kotlin.json +107 -0
  104. package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/package.json +100 -0
  105. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/aspnetcorerazor.tmLanguage.json +1812 -0
  106. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/csharp.json +493 -0
  107. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/language-configuration.json +24 -0
  108. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.json +5694 -0
  109. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.cs.json +203 -0
  110. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.de.json +203 -0
  111. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.es.json +203 -0
  112. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.fr.json +203 -0
  113. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.it.json +203 -0
  114. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.ja.json +203 -0
  115. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.json +421 -0
  116. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.ko.json +203 -0
  117. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.pl.json +203 -0
  118. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.pt-br.json +203 -0
  119. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.ru.json +203 -0
  120. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.tr.json +203 -0
  121. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.zh-cn.json +203 -0
  122. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/package.nls.zh-tw.json +203 -0
  123. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/vs2019_dark.json +783 -0
  124. package/dist/assets/ms-dotnettools.csharp-2.16.24.vsix/vs2019_light.json +807 -0
  125. package/dist/assets/ms-python.python-2023.25.10221012.vsix/conda-environment.json +1 -0
  126. package/dist/assets/ms-python.python-2023.25.10221012.vsix/conda-meta.json +1 -0
  127. package/dist/assets/ms-python.python-2023.25.10221012.vsix/condarc.json +1 -0
  128. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.json +1 -0
  129. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.cs.json +1 -0
  130. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.de.json +1 -0
  131. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.es.json +1 -0
  132. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.fr.json +1 -0
  133. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.it.json +1 -0
  134. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.ja.json +1 -0
  135. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.json +1 -0
  136. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.ko.json +1 -0
  137. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.pl.json +1 -0
  138. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.pt-br.json +1 -0
  139. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.qps-ploc.json +1 -0
  140. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.ru.json +1 -0
  141. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.tr.json +1 -0
  142. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.zh-cn.json +1 -0
  143. package/dist/assets/ms-python.python-2023.25.10221012.vsix/package.nls.zh-tw.json +1 -0
  144. package/dist/assets/ms-python.python-2023.25.10221012.vsix/pip-requirements.json +1 -0
  145. package/dist/assets/ms-python.python-2023.25.10221012.vsix/pip-requirements.tmLanguage.json +1 -0
  146. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.json +6383 -0
  147. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.cs.json +441 -0
  148. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.de.json +441 -0
  149. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.es.json +441 -0
  150. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.fr.json +441 -0
  151. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.it.json +441 -0
  152. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.ja.json +441 -0
  153. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.json +1006 -0
  154. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.ko.json +441 -0
  155. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.pl.json +441 -0
  156. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.pt-br.json +441 -0
  157. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.ru.json +441 -0
  158. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.tr.json +441 -0
  159. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.zh-cn.json +441 -0
  160. package/dist/assets/ms-vscode.cpptools-1.19.2.vsix/package.nls.zh-tw.json +441 -0
  161. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/META.json +56 -0
  162. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/META2.json +10 -0
  163. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/atd.json +57 -0
  164. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/cram.json +167 -0
  165. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune-project.json +326 -0
  166. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune-project2.json +26 -0
  167. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune-workspace.json +191 -0
  168. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune.json +2949 -0
  169. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune2.json +20 -0
  170. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/dune3.json +34 -0
  171. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/logo.svg +3 -0
  172. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/menhir-action.json +29 -0
  173. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/menhir.json +349 -0
  174. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/menhir2.json +17 -0
  175. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/merlin.json +73 -0
  176. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/oasis.json +69 -0
  177. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/oasis2.json +6 -0
  178. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocaml-markdown-codeblock.json +24 -0
  179. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocaml.interface.json +161 -0
  180. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocaml.json +654 -0
  181. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocaml2.json +44 -0
  182. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocaml3.json +54 -0
  183. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamlbuild.json +110 -0
  184. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamlbuild2.json +12 -0
  185. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamldoc.json +31 -0
  186. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamlformat.json +239 -0
  187. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamlformat2.json +5 -0
  188. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamllex.json +108 -0
  189. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamllex2.json +14 -0
  190. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/ocamllex3.json +6 -0
  191. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/opam-install.json +23 -0
  192. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/opam-install2.json +8 -0
  193. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/opam.json +111 -0
  194. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/opam2.json +21 -0
  195. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/package.json +1231 -0
  196. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/reason-markdown-codeblock.json +24 -0
  197. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/reason.json +2357 -0
  198. package/dist/assets/ocamllabs.ocaml-platform-1.16.1.vsix/reason2.json +21 -0
  199. package/dist/assets/pgourlain.erlang-0.9.8.vsix/Erlang.plist +2719 -0
  200. package/dist/assets/pgourlain.erlang-0.9.8.vsix/erlang.configuration.json +25 -0
  201. package/dist/assets/pgourlain.erlang-0.9.8.vsix/erlang.json +197 -0
  202. package/dist/assets/pgourlain.erlang-0.9.8.vsix/package.json +305 -0
  203. package/dist/assets/redhat.java-1.27.2024012608.vsix/JavaProperties.tmLanguage.json +103 -0
  204. package/dist/assets/redhat.java-1.27.2024012608.vsix/inline-html.json +44 -0
  205. package/dist/assets/redhat.java-1.27.2024012608.vsix/inline-json.json +44 -0
  206. package/dist/assets/redhat.java-1.27.2024012608.vsix/inline-sql.json +46 -0
  207. package/dist/assets/redhat.java-1.27.2024012608.vsix/inline-xml.json +44 -0
  208. package/dist/assets/redhat.java-1.27.2024012608.vsix/inline-yaml.json +44 -0
  209. package/dist/assets/redhat.java-1.27.2024012608.vsix/java-properties-configuration.json +67 -0
  210. package/dist/assets/redhat.java-1.27.2024012608.vsix/java.tmLanguage.json +1888 -0
  211. package/dist/assets/redhat.java-1.27.2024012608.vsix/kotlin.tmLanguage.json +702 -0
  212. package/dist/assets/redhat.java-1.27.2024012608.vsix/language-configuration.json +92 -0
  213. package/dist/assets/redhat.java-1.27.2024012608.vsix/language-configuration2.json +27 -0
  214. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.json +1819 -0
  215. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.nls.json +30 -0
  216. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.nls.ko.json +27 -0
  217. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.nls.zh-cn.json +28 -0
  218. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.nls.zh-tw.json +27 -0
  219. package/dist/assets/redhat.java-1.27.2024012608.vsix/package.schema.json +48 -0
  220. package/dist/assets/scala-lang.scala-0.5.7.vsix/Scala.tmLanguage.json +1 -0
  221. package/dist/assets/scala-lang.scala-0.5.7.vsix/language-configuration.json +33 -0
  222. package/dist/assets/scala-lang.scala-0.5.7.vsix/package.json +67 -0
  223. package/dist/assets/scalameta.metals-1.27.3.vsix/book-dark.svg +5 -0
  224. package/dist/assets/scalameta.metals-1.27.3.vsix/book-light.svg +1 -0
  225. package/dist/assets/scalameta.metals-1.27.3.vsix/buildtarget.json +37 -0
  226. package/dist/assets/scalameta.metals-1.27.3.vsix/file_type_java.svg +1 -0
  227. package/dist/assets/scalameta.metals-1.27.3.vsix/file_type_scala.svg +1 -0
  228. package/dist/assets/scalameta.metals-1.27.3.vsix/jvm-bytecode-verbose.json +745 -0
  229. package/dist/assets/scalameta.metals-1.27.3.vsix/jvm-bytecode.json +395 -0
  230. package/dist/assets/scalameta.metals-1.27.3.vsix/package.json +1096 -0
  231. package/dist/assets/scalameta.metals-1.27.3.vsix/scalameta-logo.png +0 -0
  232. package/dist/assets/scalameta.metals-1.27.3.vsix/scalameta.svg +11 -0
  233. package/dist/assets/scalameta.metals-1.27.3.vsix/semanticdb.json +37 -0
  234. package/dist/assets/scalameta.metals-1.27.3.vsix/tasty.json +56 -0
  235. package/dist/assets/sumneko.lua-3.7.4.vsix/package.json +3347 -0
  236. package/dist/assets/sumneko.lua-3.7.4.vsix/package.nls.json +231 -0
  237. package/dist/assets/sumneko.lua-3.7.4.vsix/package.nls.pt-br.json +231 -0
  238. package/dist/assets/sumneko.lua-3.7.4.vsix/package.nls.zh-cn.json +231 -0
  239. package/dist/assets/sumneko.lua-3.7.4.vsix/package.nls.zh-tw.json +231 -0
  240. package/dist/assets/sumneko.lua-3.7.4.vsix/schema.json +3423 -0
  241. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/javascript.json +43 -0
  242. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/language-configuration.json +38 -0
  243. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/markdown-svelte-css.json +23 -0
  244. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/markdown-svelte-js.json +23 -0
  245. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/markdown-svelte.json +45 -0
  246. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/package-json-schema.json +9 -0
  247. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/package.json +732 -0
  248. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/postcss.json +377 -0
  249. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/prettier-options-schema.json +112 -0
  250. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/pug-svelte-dotblock.json +55 -0
  251. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/pug-svelte-tags.json +201 -0
  252. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/pug-svelte.json +293 -0
  253. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/svelte.json +26 -0
  254. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/svelte.tmLanguage.json +1171 -0
  255. package/dist/assets/svelte.svelte-vscode-108.2.1.vsix/typescript.json +37 -0
  256. package/dist/assets/webfreak.code-d-0.23.2.vsix/d.json +3163 -0
  257. package/dist/assets/webfreak.code-d-0.23.2.vsix/d2.json +90 -0
  258. package/dist/assets/webfreak.code-d-0.23.2.vsix/diet.json +742 -0
  259. package/dist/assets/webfreak.code-d-0.23.2.vsix/diet2.json +92 -0
  260. package/dist/assets/webfreak.code-d-0.23.2.vsix/diet3.json +87 -0
  261. package/dist/assets/webfreak.code-d-0.23.2.vsix/dml.json +157 -0
  262. package/dist/assets/webfreak.code-d-0.23.2.vsix/dub.schema.json +377 -0
  263. package/dist/assets/webfreak.code-d-0.23.2.vsix/general.json +84 -0
  264. package/dist/assets/webfreak.code-d-0.23.2.vsix/package.json +1306 -0
  265. package/dist/assets/webfreak.code-d-0.23.2.vsix/sdl.json +149 -0
  266. package/dist/configuration/index.d.ts +1 -1
  267. package/dist/configuration/index.js +2 -2
  268. package/dist/editor/cobol.js +1 -1
  269. package/dist/extensions/Angular.ng-template-17.1.0.vsix.js +20 -0
  270. package/dist/extensions/Dart-Code.dart-code-3.81.20240117.vsix.js +16 -0
  271. package/dist/extensions/IMCTradingBV.svlangserver-0.4.1.vsix.js +14 -12
  272. package/dist/extensions/JakeBecker.elixir-ls-0.19.0.vsix.js +20 -0
  273. package/dist/extensions/JuanBlanco.solidity-0.0.165.vsix.js +16 -0
  274. package/dist/extensions/REditorSupport.r-2.8.2.vsix.js +44 -0
  275. package/dist/extensions/alefragnani.pascal-9.6.0.vsix.js +16 -9
  276. package/dist/extensions/batisteo.vscode-django-1.15.0.vsix.js +20 -0
  277. package/dist/extensions/bitwisecook.tcl-0.4.3.vsix.js +12 -9
  278. package/dist/extensions/broadcomMFD.cobol-language-support-2.1.0.vsix.js +22 -0
  279. package/dist/extensions/castwide.solargraph-0.24.1.vsix.js +10 -0
  280. package/dist/extensions/ckolkman.vscode-postgres-1.4.3.vsix.js +16 -0
  281. package/dist/extensions/golang.Go-0.40.3.vsix.js +18 -0
  282. package/dist/extensions/johnsoncodehk.vscode-angular-1.0.22.vsix.js +12 -9
  283. package/dist/extensions/justusadam.language-haskell-3.6.0.vsix.js +24 -25
  284. package/dist/extensions/mathiasfrohlich.Kotlin-1.7.1.vsix.js +13 -10
  285. package/dist/extensions/ms-dotnettools.csharp-2.16.24.vsix.js +48 -0
  286. package/dist/extensions/ms-python.python-2023.25.10221012.vsix.js +50 -0
  287. package/dist/extensions/ms-vscode.cpptools-1.19.2.vsix.js +38 -0
  288. package/dist/extensions/ocamllabs.ocaml-platform-1.16.1.vsix.js +84 -0
  289. package/dist/extensions/pgourlain.erlang-0.9.8.vsix.js +16 -0
  290. package/dist/extensions/redhat.java-1.27.2024012608.vsix.js +42 -0
  291. package/dist/extensions/scala-lang.scala-0.5.7.vsix.js +14 -0
  292. package/dist/extensions/scalameta.metals-1.27.3.vsix.js +32 -0
  293. package/dist/extensions/sumneko.lua-3.7.4.vsix.js +20 -0
  294. package/dist/extensions/svelte.svelte-vscode-108.2.1.vsix.js +38 -0
  295. package/dist/extensions/webfreak.code-d-0.23.2.vsix.js +18 -18
  296. package/dist/extensions.d.ts +35 -35
  297. package/dist/features/debug.js +1 -2
  298. package/dist/features/extensionHostWorker.d.ts +1 -0
  299. package/dist/features/extensionHostWorker.js +11 -0
  300. package/dist/features/search.d.ts +1 -1
  301. package/dist/features/search.js +3 -3
  302. package/dist/features/viewPanels.d.ts +1 -1
  303. package/dist/features/viewPanels.js +7 -4
  304. package/dist/features/views.d.ts +4 -4
  305. package/dist/features/views.js +19 -9
  306. package/dist/index.d.ts +2 -1
  307. package/dist/keybindings/index.js +1 -1
  308. package/dist/keybindings/vim.js +1 -1
  309. package/dist/languages/index.js +1 -1
  310. package/dist/main.js +3 -2
  311. package/dist/monaco.d.ts +1 -3
  312. package/dist/monaco.js +61 -60
  313. package/dist/node_modules/monaco-vim/lib/cm_adapter.js +7 -3
  314. package/dist/services.d.ts +3 -1
  315. package/dist/services.js +56 -26
  316. package/dist/tools/EditorOpenHandlerRegistry.d.ts +1 -1
  317. package/dist/tools/EditorOpenHandlerRegistry.js +3 -3
  318. package/dist/tools/FakeWorker.d.ts +5 -0
  319. package/dist/tools/FakeWorker.js +8 -0
  320. package/dist/tools/crossOriginWorker.d.ts +9 -0
  321. package/dist/tools/crossOriginWorker.js +35 -0
  322. package/dist/tools.js +1 -1
  323. package/dist/worker.d.ts +1 -0
  324. package/dist/worker.js +9 -2
  325. package/package.json +113 -39
  326. package/stats.html +32 -28
  327. package/dist/_virtual/Angular.ng-template-15.2.1.vsix_package.json.vsjson.js +0 -3
  328. package/dist/_virtual/C2Hs-configuration.json.raw.js +0 -3
  329. package/dist/_virtual/C2Hs.json.raw.js +0 -3
  330. package/dist/_virtual/COBOL.tmLanguage.json.raw.js +0 -3
  331. package/dist/_virtual/Dart-Code.dart-code-3.63.20230419.vsix_package.json.vsjson.js +0 -3
  332. package/dist/_virtual/Erlang.plist.raw.js +0 -3
  333. package/dist/_virtual/Hsc2Hs-configuration.json.raw.js +0 -3
  334. package/dist/_virtual/Hsc2Hs.json.raw.js +0 -3
  335. package/dist/_virtual/IMCTradingBV.svlangserver-0.4.1.vsix_package.json.vsjson.js +0 -3
  336. package/dist/_virtual/JakeBecker.elixir-ls-0.14.5.vsix_package.json.vsjson.js +0 -3
  337. package/dist/_virtual/JavaProperties.tmLanguage.json.raw.js +0 -3
  338. package/dist/_virtual/JuanBlanco.solidity-0.0.152.vsix_package.json.vsjson.js +0 -3
  339. package/dist/_virtual/Kotlin.tmLanguage.raw.js +0 -3
  340. package/dist/_virtual/META.json.raw.js +0 -3
  341. package/dist/_virtual/META.json.raw2.js +0 -3
  342. package/dist/_virtual/Markdown Redcarpet.json.raw.js +0 -3
  343. package/dist/_virtual/REditorSupport.r-2.7.2.vsix_package.json.vsjson.js +0 -3
  344. package/dist/_virtual/RMarkdown.json.raw.js +0 -3
  345. package/dist/_virtual/Rcpp.json.raw.js +0 -3
  346. package/dist/_virtual/Rd (R Documentation).json.raw.js +0 -3
  347. package/dist/_virtual/Rlogo.svg.raw.js +0 -3
  348. package/dist/_virtual/Scala.tmLanguage.json.raw.js +0 -3
  349. package/dist/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -31
  350. package/dist/_virtual/alefragnani.pascal-9.6.0.vsix_package.json.vsjson.js +0 -3
  351. package/dist/_virtual/alex.json.raw.js +0 -3
  352. package/dist/_virtual/angular-directives.json.raw.js +0 -3
  353. package/dist/_virtual/angular-interpolations.json.raw.js +0 -3
  354. package/dist/_virtual/angular-template-language-configuration.json.raw.js +0 -3
  355. package/dist/_virtual/aspnetcorerazor.tmLanguage.json.raw.js +0 -3
  356. package/dist/_virtual/atd.json.raw.js +0 -3
  357. package/dist/_virtual/batisteo.vscode-django-1.10.0.vsix_package.json.vsjson.js +0 -3
  358. package/dist/_virtual/bitwisecook.tcl-0.4.3.vsix_package.json.vsjson.js +0 -3
  359. package/dist/_virtual/book-dark.svg.raw.js +0 -3
  360. package/dist/_virtual/book-light.svg.raw.js +0 -3
  361. package/dist/_virtual/broadcomMFD.cobol-language-support-1.2.1.vsix_package.json.vsjson.js +0 -3
  362. package/dist/_virtual/buildtarget.json.raw.js +0 -3
  363. package/dist/_virtual/cabal-configuration.json.raw.js +0 -3
  364. package/dist/_virtual/cabal.json.raw.js +0 -3
  365. package/dist/_virtual/castwide.solargraph-0.24.0.vsix_package.json.vsjson.js +0 -3
  366. package/dist/_virtual/ckolkman.vscode-postgres-1.4.2.vsix_package.json.vsjson.js +0 -3
  367. package/dist/_virtual/codeblock-cabal.json.raw.js +0 -3
  368. package/dist/_virtual/codeblock-haskell.json.raw.js +0 -3
  369. package/dist/_virtual/codeblock-literate-haskell.json.raw.js +0 -3
  370. package/dist/_virtual/codeblock.json.raw.js +0 -3
  371. package/dist/_virtual/codeblock.json.raw2.js +0 -3
  372. package/dist/_virtual/conda-environment.json.raw.js +0 -3
  373. package/dist/_virtual/conda-meta.json.raw.js +0 -3
  374. package/dist/_virtual/condarc.json.raw.js +0 -3
  375. package/dist/_virtual/cram.json.raw.js +0 -3
  376. package/dist/_virtual/csharp.json.raw.js +0 -3
  377. package/dist/_virtual/css.worker.js +0 -6
  378. package/dist/_virtual/d.json.raw.js +0 -3
  379. package/dist/_virtual/d.json.raw2.js +0 -3
  380. package/dist/_virtual/dart-language-configuration.json.raw.js +0 -3
  381. package/dist/_virtual/dart.json.raw.js +0 -3
  382. package/dist/_virtual/dcf-configuration.json.raw.js +0 -3
  383. package/dist/_virtual/dcf.json.raw.js +0 -3
  384. package/dist/_virtual/diet.json.raw.js +0 -3
  385. package/dist/_virtual/diet.json.raw2.js +0 -3
  386. package/dist/_virtual/diet.json.raw3.js +0 -3
  387. package/dist/_virtual/django-html.tmLanguage.json.raw.js +0 -3
  388. package/dist/_virtual/django-txt.tmLanguage.json.raw.js +0 -3
  389. package/dist/_virtual/dml.json.raw.js +0 -3
  390. package/dist/_virtual/dub.schema.json.raw.js +0 -3
  391. package/dist/_virtual/dune-project.json.raw.js +0 -3
  392. package/dist/_virtual/dune-project.json.raw2.js +0 -3
  393. package/dist/_virtual/dune-workspace.json.raw.js +0 -3
  394. package/dist/_virtual/dune.json.raw.js +0 -3
  395. package/dist/_virtual/dune.json.raw2.js +0 -3
  396. package/dist/_virtual/dune.json.raw3.js +0 -3
  397. package/dist/_virtual/editor.worker.js +0 -6
  398. package/dist/_virtual/eex-language-configuration.json.raw.js +0 -3
  399. package/dist/_virtual/eex.json.raw.js +0 -3
  400. package/dist/_virtual/elixir-language-configuration.json.raw.js +0 -3
  401. package/dist/_virtual/elixir.json.raw.js +0 -3
  402. package/dist/_virtual/erlang.configuration.json.raw.js +0 -3
  403. package/dist/_virtual/erlang.json.raw.js +0 -3
  404. package/dist/_virtual/expression.json.raw.js +0 -3
  405. package/dist/_virtual/file_type_java.svg.raw.js +0 -3
  406. package/dist/_virtual/file_type_scala.svg.raw.js +0 -3
  407. package/dist/_virtual/filters.json.raw.js +0 -3
  408. package/dist/_virtual/flutter_activity_bar.svg.raw.js +0 -3
  409. package/dist/_virtual/general.json.raw.js +0 -3
  410. package/dist/_virtual/go.json.raw.js +0 -3
  411. package/dist/_virtual/go.mod.language-configuration.json.raw.js +0 -3
  412. package/dist/_virtual/go.mod.tmGrammar.json.raw.js +0 -3
  413. package/dist/_virtual/go.sum.tmGrammar.json.raw.js +0 -3
  414. package/dist/_virtual/golang.Go-0.38.0.vsix_package.json.vsjson.js +0 -3
  415. package/dist/_virtual/govulncheck.tmGrammar.json.raw.js +0 -3
  416. package/dist/_virtual/happy.json.raw.js +0 -3
  417. package/dist/_virtual/haskell-configuration.json.raw.js +0 -3
  418. package/dist/_virtual/haskell.json.raw.js +0 -3
  419. package/dist/_virtual/html-eex.json.raw.js +0 -3
  420. package/dist/_virtual/html.worker.js +0 -6
  421. package/dist/_virtual/inline-styles.json.raw.js +0 -3
  422. package/dist/_virtual/inline-template.json.raw.js +0 -3
  423. package/dist/_virtual/java-properties-configuration.json.raw.js +0 -3
  424. package/dist/_virtual/java.json.raw.js +0 -3
  425. package/dist/_virtual/javascript.json.raw.js +0 -3
  426. package/dist/_virtual/johnsoncodehk.vscode-angular-1.0.22.vsix_package.json.vsjson.js +0 -3
  427. package/dist/_virtual/json.worker.js +0 -6
  428. package/dist/_virtual/justusadam.language-haskell-3.6.0.vsix_package.json.vsjson.js +0 -3
  429. package/dist/_virtual/jvm-bytecode-verbose.json.raw.js +0 -3
  430. package/dist/_virtual/jvm-bytecode.json.raw.js +0 -3
  431. package/dist/_virtual/kotlin.configuration.json.raw.js +0 -3
  432. package/dist/_virtual/kotlin.json.raw.js +0 -3
  433. package/dist/_virtual/lang-config.json.raw.js +0 -3
  434. package/dist/_virtual/language-configuration.json.raw.js +0 -3
  435. package/dist/_virtual/language-configuration.json.raw2.js +0 -3
  436. package/dist/_virtual/language-configuration.json.raw3.js +0 -3
  437. package/dist/_virtual/language-configuration.json.raw4.js +0 -3
  438. package/dist/_virtual/language-configuration.json.raw5.js +0 -3
  439. package/dist/_virtual/language-configuration.json.raw6.js +0 -3
  440. package/dist/_virtual/language-configuration.json.raw7.js +0 -3
  441. package/dist/_virtual/language-configuration.json.raw8.js +0 -3
  442. package/dist/_virtual/literate-haskell-configuration.json.raw.js +0 -3
  443. package/dist/_virtual/literateHaskell.json.raw.js +0 -3
  444. package/dist/_virtual/logo.svg.raw.js +0 -3
  445. package/dist/_virtual/markdown-svelte-css.json.raw.js +0 -3
  446. package/dist/_virtual/markdown-svelte-js.json.raw.js +0 -3
  447. package/dist/_virtual/markdown-svelte.json.raw.js +0 -3
  448. package/dist/_virtual/mathiasfrohlich.Kotlin-1.7.1.vsix_package.json.vsjson.js +0 -3
  449. package/dist/_virtual/menhir-action.json.raw.js +0 -3
  450. package/dist/_virtual/menhir.json.raw.js +0 -3
  451. package/dist/_virtual/menhir.json.raw2.js +0 -3
  452. package/dist/_virtual/merlin.json.raw.js +0 -3
  453. package/dist/_virtual/ms-dotnettools.csharp-1.25.4.vsix_package.json.vsjson.js +0 -3
  454. package/dist/_virtual/ms-python.python-2023.7.11111009.vsix_package.json.vsjson.js +0 -3
  455. package/dist/_virtual/ms-vscode.cpptools-1.15.2.vsix_package.json.vsjson.js +0 -3
  456. package/dist/_virtual/oasis.json.raw.js +0 -3
  457. package/dist/_virtual/oasis.json.raw2.js +0 -3
  458. package/dist/_virtual/ocaml-markdown-codeblock.json.raw.js +0 -3
  459. package/dist/_virtual/ocaml.interface.json.raw.js +0 -3
  460. package/dist/_virtual/ocaml.json.raw.js +0 -3
  461. package/dist/_virtual/ocaml.json.raw2.js +0 -3
  462. package/dist/_virtual/ocaml.json.raw3.js +0 -3
  463. package/dist/_virtual/ocamlbuild.json.raw.js +0 -3
  464. package/dist/_virtual/ocamlbuild.json.raw2.js +0 -3
  465. package/dist/_virtual/ocamldoc.json.raw.js +0 -3
  466. package/dist/_virtual/ocamlformat.json.raw.js +0 -3
  467. package/dist/_virtual/ocamlformat.json.raw2.js +0 -3
  468. package/dist/_virtual/ocamllabs.ocaml-platform-1.12.2.vsix_package.json.vsjson.js +0 -3
  469. package/dist/_virtual/ocamllex.json.raw.js +0 -3
  470. package/dist/_virtual/ocamllex.json.raw2.js +0 -3
  471. package/dist/_virtual/ocamllex.json.raw3.js +0 -3
  472. package/dist/_virtual/opam-install.json.raw.js +0 -3
  473. package/dist/_virtual/opam-install.json.raw2.js +0 -3
  474. package/dist/_virtual/opam.json.raw.js +0 -3
  475. package/dist/_virtual/opam.json.raw2.js +0 -3
  476. package/dist/_virtual/package-json-schema.json.raw.js +0 -3
  477. package/dist/_virtual/package.schema.json.raw.js +0 -3
  478. package/dist/_virtual/pascal.configuration.json.raw.js +0 -3
  479. package/dist/_virtual/pascal.json.raw.js +0 -3
  480. package/dist/_virtual/pascal.tmLanguage.raw.js +0 -3
  481. package/dist/_virtual/pgourlain.erlang-0.8.8.vsix_package.json.vsjson.js +0 -3
  482. package/dist/_virtual/pgsql.tmLanguage.raw.js +0 -3
  483. package/dist/_virtual/pip-requirements.json.raw.js +0 -3
  484. package/dist/_virtual/pip-requirements.tmLanguage.json.raw.js +0 -3
  485. package/dist/_virtual/postcss.json.raw.js +0 -3
  486. package/dist/_virtual/postgres-explorer.svg.raw.js +0 -3
  487. package/dist/_virtual/prettier-options-schema.json.raw.js +0 -3
  488. package/dist/_virtual/pug-svelte-dotblock.json.raw.js +0 -3
  489. package/dist/_virtual/pug-svelte-tags.json.raw.js +0 -3
  490. package/dist/_virtual/pug-svelte.json.raw.js +0 -3
  491. package/dist/_virtual/r-configuration.json.raw.js +0 -3
  492. package/dist/_virtual/r-snippets.json.raw.js +0 -3
  493. package/dist/_virtual/r.json.raw.js +0 -3
  494. package/dist/_virtual/rbuildignore-configuration.json.raw.js +0 -3
  495. package/dist/_virtual/rbuildignore.json.raw.js +0 -3
  496. package/dist/_virtual/rd-configuration.json.raw.js +0 -3
  497. package/dist/_virtual/reason-markdown-codeblock.json.raw.js +0 -3
  498. package/dist/_virtual/reason.json.raw.js +0 -3
  499. package/dist/_virtual/reason.json.raw2.js +0 -3
  500. package/dist/_virtual/redhat.java-1.18.2023042204.vsix_package.json.vsjson.js +0 -3
  501. package/dist/_virtual/rmarkdown.json.raw2.js +0 -3
  502. package/dist/_virtual/rmd-configuration.json.raw.js +0 -3
  503. package/dist/_virtual/rnamespace-configuration.json.raw.js +0 -3
  504. package/dist/_virtual/rnamespace.json.raw.js +0 -3
  505. package/dist/_virtual/scala-lang.scala-0.5.6.vsix_package.json.vsjson.js +0 -3
  506. package/dist/_virtual/scalameta-logo.png.raw.js +0 -3
  507. package/dist/_virtual/scalameta.metals-1.23.0.vsix_package.json.vsjson.js +0 -3
  508. package/dist/_virtual/scalameta.svg.raw.js +0 -3
  509. package/dist/_virtual/schema.json.raw.js +0 -3
  510. package/dist/_virtual/sdl.json.raw.js +0 -3
  511. package/dist/_virtual/semanticdb.json.raw.js +0 -3
  512. package/dist/_virtual/solidity.configuration.json.raw.js +0 -3
  513. package/dist/_virtual/solidity.json.raw.js +0 -3
  514. package/dist/_virtual/solidity.json.raw2.js +0 -3
  515. package/dist/_virtual/sumneko.lua-3.6.18.vsix_package.json.vsjson.js +0 -3
  516. package/dist/_virtual/svelte.json.raw.js +0 -3
  517. package/dist/_virtual/svelte.svelte-vscode-107.3.0.vsix_package.json.vsjson.js +0 -3
  518. package/dist/_virtual/svelte.tmLanguage.json.raw.js +0 -3
  519. package/dist/_virtual/systemverilog.json.raw.js +0 -3
  520. package/dist/_virtual/systemverilog.tmLanguage.json.raw.js +0 -3
  521. package/dist/_virtual/tags.json.raw.js +0 -3
  522. package/dist/_virtual/tasks.schema.json.raw.js +0 -3
  523. package/dist/_virtual/tasty.json.raw.js +0 -3
  524. package/dist/_virtual/tcl.json.raw.js +0 -3
  525. package/dist/_virtual/tcl.json.raw2.js +0 -3
  526. package/dist/_virtual/template.json.raw.js +0 -3
  527. package/dist/_virtual/ts.worker.js +0 -6
  528. package/dist/_virtual/typescript.json.raw.js +0 -3
  529. package/dist/_virtual/vs2019_dark.json.raw.js +0 -3
  530. package/dist/_virtual/vs2019_light.json.raw.js +0 -3
  531. package/dist/_virtual/webfreak.code-d-0.23.2.vsix_package.json.vsjson.js +0 -3
  532. package/dist/extensions/Angular.ng-template-15.2.1.vsix.js +0 -15
  533. package/dist/extensions/Dart-Code.dart-code-3.63.20230419.vsix.js +0 -14
  534. package/dist/extensions/JakeBecker.elixir-ls-0.14.5.vsix.js +0 -18
  535. package/dist/extensions/JuanBlanco.solidity-0.0.152.vsix.js +0 -13
  536. package/dist/extensions/REditorSupport.r-2.7.2.vsix.js +0 -47
  537. package/dist/extensions/batisteo.vscode-django-1.10.0.vsix.js +0 -17
  538. package/dist/extensions/broadcomMFD.cobol-language-support-1.2.1.vsix.js +0 -11
  539. package/dist/extensions/castwide.solargraph-0.24.0.vsix.js +0 -8
  540. package/dist/extensions/ckolkman.vscode-postgres-1.4.2.vsix.js +0 -14
  541. package/dist/extensions/golang.Go-0.38.0.vsix.js +0 -17
  542. package/dist/extensions/ms-dotnettools.csharp-1.25.4.vsix.js +0 -17
  543. package/dist/extensions/ms-python.python-2023.7.11111009.vsix.js +0 -20
  544. package/dist/extensions/ms-vscode.cpptools-1.15.2.vsix.js +0 -8
  545. package/dist/extensions/ocamllabs.ocaml-platform-1.12.2.vsix.js +0 -92
  546. package/dist/extensions/pgourlain.erlang-0.8.8.vsix.js +0 -13
  547. package/dist/extensions/redhat.java-1.18.2023042204.vsix.js +0 -19
  548. package/dist/extensions/scala-lang.scala-0.5.6.vsix.js +0 -11
  549. package/dist/extensions/scalameta.metals-1.23.0.vsix.js +0 -34
  550. package/dist/extensions/sumneko.lua-3.6.18.vsix.js +0 -10
  551. package/dist/extensions/svelte.svelte-vscode-107.3.0.vsix.js +0 -37
  552. package/dist/features/cssContribution.d.ts +0 -1
  553. package/dist/features/cssContribution.js +0 -6
  554. package/dist/features/htmlContribution.d.ts +0 -4
  555. package/dist/features/htmlContribution.js +0 -102
  556. package/dist/features/jsonContribution.d.ts +0 -4
  557. package/dist/features/jsonContribution.js +0 -22
  558. package/dist/features/typescriptContribution.d.ts +0 -1
  559. package/dist/features/typescriptContribution.js +0 -44
  560. package/dist/node_modules/@types/node/console.d.js +0 -3
  561. package/dist/node_modules/@types/node/globals.d.js +0 -3
  562. package/dist/node_modules/@types/node/process.d.js +0 -3
  563. package/dist/node_modules/tslib/tslib.es6.js +0 -77
@@ -1,6 +0,0 @@
1
- import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
2
-
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihhLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgYShlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHIpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09aSYmZS5tZXNzYWdlPT09aX0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTphLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3QgaT0iQ2FuY2VsZWQiO2NsYXNzIHIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKGkpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIGEgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKGUpe2lmKGUgaW5zdGFuY2VvZiBhKXJldHVybiBlO2NvbnN0IHQ9bmV3IGE7cmV0dXJuIHQubWVzc2FnZT1lLm1lc3NhZ2UsdC5zdGFjaz1lLnN0YWNrLHR9c3RhdGljIGlzRXJyb3JOb1RlbGVtZXRyeShlKXtyZXR1cm4iQ29kZUV4cGVjdGVkRXJyb3IiPT09ZS5uYW1lfX1jbGFzcyBvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZXx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG8ucHJvdG90eXBlKX19ZnVuY3Rpb24gcyhlKXtjb25zdCB0PXRoaXM7bGV0IG4saT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaXx8KGk9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIGw7ZnVuY3Rpb24gYyhlKXtpZihsLmlzKGUpKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2goZSl7dC5wdXNoKGUpfWlmKDE9PT10Lmxlbmd0aCl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHQsIkVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gaChlKXtyZXR1cm57ZGlzcG9zZTpzKCgoKT0+e2UoKX0pKX19IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbippKGUpe3lpZWxkIGV9ZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBufSxlLnNpbmdsZT1pLGUud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gdChlKT9lOmkoZSl9LGUuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8bn0sZS5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxlLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LGUuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4hMDtyZXR1cm4hMX0sZS5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlpZih0KG4pKXJldHVybiBufSxlLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgbiBvZiBlKXQobikmJih5aWVsZCBuKX0sZS5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgaSBvZiBlKXlpZWxkIHQoaSxuKyspfSxlLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgaT1uO2Zvcihjb25zdCBuIG9mIGUpaT10KGksbik7cmV0dXJuIGl9LGUuc2xpY2U9ZnVuY3Rpb24qKGUsdCxuPWUubGVuZ3RoKXtmb3IodDwwJiYodCs9ZS5sZW5ndGgpLG48MD9uKz1lLmxlbmd0aDpuPmUubGVuZ3RoJiYobj1lLmxlbmd0aCk7dDxuO3QrKyl5aWVsZCBlW3RdfSxlLmNvbnN1bWU9ZnVuY3Rpb24odCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3QgaT1bXTtpZigwPT09bilyZXR1cm5baSx0XTtjb25zdCByPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IHQ9ci5uZXh0KCk7aWYodC5kb25lKXJldHVybltpLGUuZW1wdHkoKV07aS5wdXNoKHQudmFsdWUpfXJldHVybltpLHtbU3ltYm9sLml0ZXJhdG9yXTooKT0+cn1dfX0obHx8KGw9e30pKTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYoMCE9PXRoaXMuX3RvRGlzcG9zZS5zaXplKXRyeXtjKHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/ZC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1kLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyB1e2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGQsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX11Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBte2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319bGV0IHA9Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5leHQ9ZS5VbmRlZmluZWQsdGhpcy5wcmV2PWUuVW5kZWZpbmVkfX07cC5VbmRlZmluZWQ9bmV3IHAodm9pZCAwKTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9cC5VbmRlZmluZWQsdGhpcy5fbGFzdD1wLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuX2ZpcnN0PT09cC5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1wLlVuZGVmaW5lZDspe2NvbnN0IHQ9ZS5uZXh0O2UucHJldj1wLlVuZGVmaW5lZCxlLm5leHQ9cC5VbmRlZmluZWQsZT10fXRoaXMuX2ZpcnN0PXAuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9cC5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfXVuc2hpZnQoZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCExKX1wdXNoKGUpe3JldHVybiB0aGlzLl9pbnNlcnQoZSwhMCl9X2luc2VydChlLHQpe2NvbnN0IG49bmV3IHAoZSk7aWYodGhpcy5fZmlyc3Q9PT1wLlVuZGVmaW5lZCl0aGlzLl9maXJzdD1uLHRoaXMuX2xhc3Q9bjtlbHNlIGlmKHQpe2NvbnN0IGU9dGhpcy5fbGFzdDt0aGlzLl9sYXN0PW4sbi5wcmV2PWUsZS5uZXh0PW59ZWxzZXtjb25zdCBlPXRoaXMuX2ZpcnN0O3RoaXMuX2ZpcnN0PW4sbi5uZXh0PWUsZS5wcmV2PW59dGhpcy5fc2l6ZSs9MTtsZXQgaT0hMTtyZXR1cm4oKT0+e2l8fChpPSEwLHRoaXMuX3JlbW92ZShuKSl9fXNoaWZ0KCl7aWYodGhpcy5fZmlyc3QhPT1wLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9maXJzdC5lbGVtZW50O3JldHVybiB0aGlzLl9yZW1vdmUodGhpcy5fZmlyc3QpLGV9fXBvcCgpe2lmKHRoaXMuX2xhc3QhPT1wLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9sYXN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9sYXN0KSxlfX1fcmVtb3ZlKGUpe2lmKGUucHJldiE9PXAuVW5kZWZpbmVkJiZlLm5leHQhPT1wLlVuZGVmaW5lZCl7Y29uc3QgdD1lLnByZXY7dC5uZXh0PWUubmV4dCxlLm5leHQucHJldj10fWVsc2UgZS5wcmV2PT09cC5VbmRlZmluZWQmJmUubmV4dD09PXAuVW5kZWZpbmVkPyh0aGlzLl9maXJzdD1wLlVuZGVmaW5lZCx0aGlzLl9sYXN0PXAuVW5kZWZpbmVkKTplLm5leHQ9PT1wLlVuZGVmaW5lZD8odGhpcy5fbGFzdD10aGlzLl9sYXN0LnByZXYsdGhpcy5fbGFzdC5uZXh0PXAuVW5kZWZpbmVkKTplLnByZXY9PT1wLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj1wLlVuZGVmaW5lZCk7dGhpcy5fc2l6ZS09MX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1wLlVuZGVmaW5lZDspeWllbGQgZS5lbGVtZW50LGU9ZS5uZXh0fX1sZXQgZz0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5sb2NhdGlvbiYmZG9jdW1lbnQubG9jYXRpb24uaGFzaC5pbmRleE9mKCJwc2V1ZG89dHJ1ZSIpPj0wO3ZhciBiO2NvbnN0IF89ImVuIjtsZXQgdix3LHksVD0hMSxrPSExLFM9ITEseD0hMSxMPV8sQz1fO2NvbnN0IEU9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOnt9O2xldCBBO3ZvaWQgMCE9PUUudnNjb2RlJiZ2b2lkIDAhPT1FLnZzY29kZS5wcm9jZXNzP0E9RS52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJihBPXByb2Nlc3MpO2NvbnN0IE09InN0cmluZyI9PXR5cGVvZihudWxsPT09KGI9bnVsbD09QT92b2lkIDA6QS52ZXJzaW9ucyl8fHZvaWQgMD09PWI/dm9pZCAwOmIuZWxlY3Ryb24pJiYicmVuZGVyZXIiPT09KG51bGw9PUE/dm9pZCAwOkEudHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fE0paWYoIm9iamVjdCI9PXR5cGVvZiBBKXtUPSJ3aW4zMiI9PT1BLnBsYXRmb3JtLGs9ImRhcndpbiI9PT1BLnBsYXRmb3JtLFM9ImxpbnV4Ij09PUEucGxhdGZvcm0sUyYmQS5lbnYuU05BUCYmQS5lbnYuU05BUF9SRVZJU0lPTixBLmVudi5DSXx8QS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLHY9XyxMPV87Y29uc3QgZT1BLmVudi5WU0NPREVfTkxTX0NPTkZJRztpZihlKXRyeXtjb25zdCB0PUpTT04ucGFyc2UoZSksbj10LmF2YWlsYWJsZUxhbmd1YWdlc1siKiJdO3Y9dC5sb2NhbGUsQz10Lm9zTG9jYWxlLEw9bnx8Xyx3PXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2UgeT1uYXZpZ2F0b3IudXNlckFnZW50LFQ9eS5pbmRleE9mKCJXaW5kb3dzIik+PTAsaz15LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh5LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx5LmluZGV4T2YoImlQYWQiKT49MHx8eS5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLFM9eS5pbmRleE9mKCJMaW51eCIpPj0wLG51bGw9PXl8fHkuaW5kZXhPZigiTW9iaSIpLHg9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCBpPW5bMF0scj10W2ldO2xldCBhPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByP2E9cjoibnVtYmVyIiE9dHlwZW9mIHImJiJib29sZWFuIiE9dHlwZW9mIHImJm51bGwhPXJ8fChhPVN0cmluZyhyKSksYX0pKSxnJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHY9XyxMPXYsQz1uYXZpZ2F0b3IubGFuZ3VhZ2U7Y29uc3QgUj1ULE49azt4JiZFLmltcG9ydFNjcmlwdHM7Y29uc3QgST15LFU9ImZ1bmN0aW9uIj09dHlwZW9mIEUucG9zdE1lc3NhZ2UmJiFFLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoVSl7Y29uc3QgZT1bXTtFLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPWVbbl07aWYoaS5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIGkuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IGk9Kyt0O2UucHVzaCh7aWQ6aSxjYWxsYmFjazpufSksRS5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6aX0sIioiKX19fSkoKTtjb25zdCBIPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFIJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IHo9RS5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEUucGVyZm9ybWFuY2Uubm93O2NsYXNzIER7c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IEQoZSl9Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249eiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9FLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBXOyFmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybih0LG49bnVsbCxpKT0+e2xldCByLGE9ITE7cmV0dXJuIHI9ZSgoZT0+e2lmKCFhKXJldHVybiByP3IuZGlzcG9zZSgpOmE9ITAsdC5jYWxsKG4sZSl9KSxudWxsLGkpLGEmJnIuZGlzcG9zZSgpLHJ9fWZ1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBvKCgobixpPW51bGwscik9PmUoKGU9Pm4uY2FsbChpLHQoZSkpKSxudWxsLHIpKSxuKX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gbygoKG4saT1udWxsLHIpPT5lKChlPT57dChlKSxuLmNhbGwoaSxlKX0pLG51bGwscikpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBvKCgobixpPW51bGwscik9PmUoKGU9PnQoZSkmJm4uY2FsbChpLGUpKSxudWxsLHIpKSxuKX1mdW5jdGlvbiBhKGUsdCxpLHIpe2xldCBhPWk7cmV0dXJuIG4oZSwoZT0+KGE9dChhLGUpLGEpKSxyKX1mdW5jdGlvbiBvKGUsdCl7bGV0IG47Y29uc3QgaT1uZXcgQih7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe249ZShpLmZpcmUsaSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7bnVsbD09bnx8bi5kaXNwb3NlKCl9fSk7cmV0dXJuIG51bGw9PXR8fHQuYWRkKGkpLGkuZXZlbnR9ZnVuY3Rpb24gcyhlLHQsbj0xMDAsaT0hMSxyPSExLGEsbyl7bGV0IHMsbCxjLGgsZD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmEsb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe3M9ZSgoZT0+e2QrKyxsPXQobCxlKSxpJiYhYyYmKHUuZmlyZShsKSxsPXZvaWQgMCksaD0oKT0+e2NvbnN0IGU9bDtsPXZvaWQgMCxjPXZvaWQgMCwoIWl8fGQ+MSkmJnUuZmlyZShlKSxkPTB9LCJudW1iZXIiPT10eXBlb2Ygbj8oY2xlYXJUaW1lb3V0KGMpLGM9c2V0VGltZW91dChoLG4pKTp2b2lkIDA9PT1jJiYoYz0wLHF1ZXVlTWljcm90YXNrKGgpKX0pKX0sb25XaWxsUmVtb3ZlTGlzdGVuZXIoKXtyJiZkPjAmJihudWxsPT1ofHxoKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe2g9dm9pZCAwLHMuZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT1vfHxvLmFkZCh1KSx1LmV2ZW50fWZ1bmN0aW9uIGwoZSx0PSgoZSx0KT0+ZT09PXQpLG4pe2xldCBpLGE9ITA7cmV0dXJuIHIoZSwoZT0+e2NvbnN0IG49YXx8IXQoZSxpKTtyZXR1cm4gYT0hMSxpPWUsbn0pLG4pfWUuTm9uZT0oKT0+dS5Ob25lLGUuZGVmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLCgoKT0+e30pLDAsdm9pZCAwLCEwLHZvaWQgMCx0KX0sZS5vbmNlPXQsZS5tYXA9bixlLmZvckVhY2g9aSxlLmZpbHRlcj1yLGUuc2lnbmFsPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxlLmFueT1mdW5jdGlvbiguLi5lKXtyZXR1cm4odCxuPW51bGwsaSk9PmZ1bmN0aW9uKC4uLmUpe3JldHVybiBoKCgoKT0+YyhlKSkpfSguLi5lLm1hcCgoZT0+ZSgoZT0+dC5jYWxsKG4sZSkpLG51bGwsaSkpKSl9LGUucmVkdWNlPWEsZS5kZWJvdW5jZT1zLGUuYWNjdW11bGF0ZT1mdW5jdGlvbih0LG49MCxpKXtyZXR1cm4gZS5kZWJvdW5jZSh0LCgoZSx0KT0+ZT8oZS5wdXNoKHQpLGUpOlt0XSksbix2b2lkIDAsITAsdm9pZCAwLGkpfSxlLmxhdGNoPWwsZS5zcGxpdD1mdW5jdGlvbih0LG4saSl7cmV0dXJuW2UuZmlsdGVyKHQsbixpKSxlLmZpbHRlcih0LChlPT4hbihlKSksaSldfSxlLmJ1ZmZlcj1mdW5jdGlvbihlLHQ9ITEsbj1bXSl7bGV0IGk9bi5zbGljZSgpLHI9ZSgoZT0+e2k/aS5wdXNoKGUpOm8uZmlyZShlKX0pKTtjb25zdCBhPSgpPT57bnVsbD09aXx8aS5mb3JFYWNoKChlPT5vLmZpcmUoZSkpKSxpPW51bGx9LG89bmV3IEIoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtyfHwocj1lKChlPT5vLmZpcmUoZSkpKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe2kmJih0P3NldFRpbWVvdXQoYSk6YSgpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtyJiZyLmRpc3Bvc2UoKSxyPW51bGx9fSk7cmV0dXJuIG8uZXZlbnR9O2NsYXNzIG17Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGR9bWFwKGUpe3JldHVybiBuZXcgbShuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IG0oaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IG0ocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgbShhKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgbShsKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEsaT0hMSxyKXtyZXR1cm4gbmV3IG0ocyh0aGlzLmV2ZW50LGUsdCxuLGkscix0aGlzLmRpc3Bvc2FibGVzKSl9b24oZSx0LG4pe3JldHVybiB0aGlzLmV2ZW50KGUsdCxuKX1vbmNlKGUsbixpKXtyZXR1cm4gdCh0aGlzLmV2ZW50KShlLG4saSl9ZGlzcG9zZSgpe3RoaXMuZGlzcG9zYWJsZXMuZGlzcG9zZSgpfX1lLmNoYWluPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX0sZS5mcm9tTm9kZUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IGk9KC4uLmUpPT5yLmZpcmUobiguLi5lKSkscj1uZXcgQih7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+ZS5vbih0LGkpLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT5lLnJlbW92ZUxpc3RlbmVyKHQsaSl9KTtyZXR1cm4gci5ldmVudH0sZS5mcm9tRE9NRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3QgaT0oLi4uZSk9PnIuZmlyZShuKC4uLmUpKSxyPW5ldyBCKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxpKSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsaSl9KTtyZXR1cm4gci5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiBpKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGQsdChlLG4pfWkodm9pZCAwKTtjb25zdCByPWUoKGU9PmkoZSkpKTtyZXR1cm4gaCgoKCk9PntyLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgcHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX29ic2VydmFibGU9ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBuPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZVBvc3NpYmxlQ2hhbmdlKGUpe31oYW5kbGVDaGFuZ2UoZSx0KXt0aGlzLl9oYXNDaGFuZ2VkPSEwfWVuZFVwZGF0ZShlKXt0aGlzLl9jb3VudGVyLS0sMD09PXRoaXMuX2NvdW50ZXImJih0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKSx0aGlzLl9oYXNDaGFuZ2VkJiYodGhpcy5faGFzQ2hhbmdlZD0hMSx0aGlzLmVtaXR0ZXIuZmlyZSh0aGlzLl9vYnNlcnZhYmxlLmdldCgpKSkpfX1lLmZyb21PYnNlcnZhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBwKGUsdCkuZW1pdHRlci5ldmVudH0sZS5mcm9tT2JzZXJ2YWJsZUxpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiB0PT57bGV0IG49MCxpPSExO2NvbnN0IHI9e2JlZ2luVXBkYXRlKCl7bisrfSxlbmRVcGRhdGUoKXtuLS0sMD09PW4mJihlLnJlcG9ydENoYW5nZXMoKSxpJiYoaT0hMSx0KCkpKX0saGFuZGxlUG9zc2libGVDaGFuZ2UoKXt9LGhhbmRsZUNoYW5nZSgpe2k9ITB9fTtyZXR1cm4gZS5hZGRPYnNlcnZlcihyKSx7ZGlzcG9zZSgpe2UucmVtb3ZlT2JzZXJ2ZXIocil9fX19fShXfHwoVz17fSkpO2NsYXNzIE97Y29uc3RydWN0b3IoZSl7dGhpcy5saXN0ZW5lckNvdW50PTAsdGhpcy5pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLmVsYXBzZWRPdmVyYWxsPTAsdGhpcy5kdXJhdGlvbnM9W10sdGhpcy5uYW1lPWAke2V9XyR7Ty5faWRQb29sKyt9YCxPLmFsbC5hZGQodGhpcyl9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBEKCEwKSx0aGlzLmxpc3RlbmVyQ291bnQ9ZX1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCBlPXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaChlKSx0aGlzLmVsYXBzZWRPdmVyYWxsKz1lLHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1PLmFsbD1uZXcgU2V0LE8uX2lkUG9vbD0wO2NsYXNzIFB7Y29uc3RydWN0b3IoZSx0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTgpLnNsaWNlKDIsNSkpe3RoaXMudGhyZXNob2xkPWUsdGhpcy5uYW1lPXQsdGhpcy5fd2FybkNvdW50ZG93bj0wfWRpc3Bvc2UoKXt2YXIgZTtudWxsPT09KGU9dGhpcy5fc3RhY2tzKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcigpfWNoZWNrKGUsdCl7Y29uc3Qgbj10aGlzLnRocmVzaG9sZDtpZihuPD0wfHx0PG4pcmV0dXJuO3RoaXMuX3N0YWNrc3x8KHRoaXMuX3N0YWNrcz1uZXcgTWFwKTtjb25zdCBpPXRoaXMuX3N0YWNrcy5nZXQoZS52YWx1ZSl8fDA7aWYodGhpcy5fc3RhY2tzLnNldChlLnZhbHVlLGkrMSksdGhpcy5fd2FybkNvdW50ZG93bi09MSx0aGlzLl93YXJuQ291bnRkb3duPD0wKXtsZXQgZTt0aGlzLl93YXJuQ291bnRkb3duPS41Km47bGV0IGk9MDtmb3IoY29uc3RbdCxuXW9mIHRoaXMuX3N0YWNrcykoIWV8fGk8bikmJihlPXQsaT1uKTtjb25zb2xlLndhcm4oYFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHt0fSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHtpfSk6YCksY29uc29sZS53YXJuKGUpfXJldHVybigpPT57Y29uc3QgdD10aGlzLl9zdGFja3MuZ2V0KGUudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQoZS52YWx1ZSx0LTEpfX19Y2xhc3MgcXtzdGF0aWMgY3JlYXRlKCl7dmFyIGU7cmV0dXJuIG5ldyBxKG51bGwhPT0oZT0obmV3IEVycm9yKS5zdGFjaykmJnZvaWQgMCE9PWU/ZToiIil9Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIEZ7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgbX1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG4saSxyLGE7dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZWFrV2FybmluZ1RocmVzaG9sZCk/bmV3IFAobnVsbCE9PShpPW51bGw9PT0obj10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09bj92b2lkIDA6bi5sZWFrV2FybmluZ1RocmVzaG9sZCkmJnZvaWQgMCE9PWk/aTotMSk6dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0ocj10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09cj92b2lkIDA6ci5fcHJvZk5hbWUpP25ldyBPKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KGE9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLGk7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0oaT10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09aXx8aS5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgaSxyLGE7aWYodGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBmKSx0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9saXN0ZW5lcnMuc2l6ZT4zKnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKXJldHVybiBjb25zb2xlLndhcm4oYFske3RoaXMuX2xlYWthZ2VNb24ubmFtZX1dIFJFRlVTRVMgdG8gYWNjZXB0IG5ldyBsaXN0ZW5lcnMgYmVjYXVzZSBpdCBleGNlZWRlZCBpdHMgdGhyZXNob2xkIGJ5IGZhcmApLHUuTm9uZTtjb25zdCBvPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsbDtvJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIpJiZ0aGlzLl9vcHRpb25zLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIodGhpcyksdGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fbGlzdGVuZXJzLnNpemU+PU1hdGguY2VpbCguMip0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCkmJihsPXEuY3JlYXRlKCkscz10aGlzLl9sZWFrYWdlTW9uLmNoZWNrKGwsdGhpcy5fbGlzdGVuZXJzLnNpemUrMSkpO2NvbnN0IGM9bmV3IEYoZSx0LGwpLGg9dGhpcy5fbGlzdGVuZXJzLnB1c2goYyk7byYmKG51bGw9PT0ocj10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09cj92b2lkIDA6ci5vbkRpZEFkZEZpcnN0TGlzdGVuZXIpJiZ0aGlzLl9vcHRpb25zLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcih0aGlzKSwobnVsbD09PShhPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9uRGlkQWRkTGlzdGVuZXIpJiZ0aGlzLl9vcHRpb25zLm9uRGlkQWRkTGlzdGVuZXIodGhpcyxlLHQpO2NvbnN0IG09Yy5zdWJzY3JpcHRpb24uc2V0KCgoKT0+e3ZhciBlLHQ7aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKG51bGw9PT0odD1udWxsPT09KGU9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUub25XaWxsUmVtb3ZlTGlzdGVuZXIpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSx0aGlzKSxoKCksdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcikpe3RoaXMuX2xpc3RlbmVycyYmIXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCl8fHRoaXMuX29wdGlvbnMub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIodGhpcyl9fSkpO3JldHVybiBuIGluc3RhbmNlb2YgZD9uLmFkZChtKTpBcnJheS5pc0FycmF5KG4pJiZuLnB1c2gobSksbX0pLHRoaXMuX2V2ZW50fWZpcmUoZSl7dmFyIHQsbixpO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IEsobnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGlzdGVuZXJFcnJvcikpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0oaT10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09aXx8aS5zdG9wKCl9fWhhc0xpc3RlbmVycygpe3JldHVybiEhdGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKX19Y2xhc3MgVntjb25zdHJ1Y3RvcihlPXQpe3RoaXMuX29uTGlzdGVuZXJFcnJvcj1lLHRoaXMuX3F1ZXVlPW5ldyBmfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3F1ZXVlLnNpemV9cHVzaChlLHQsbil7dGhpcy5fcXVldWUucHVzaChuZXcgaihlLHQsbikpfWNsZWFyKGUpe2NvbnN0IHQ9bmV3IGY7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fcXVldWUpbi5lbWl0dGVyIT09ZSYmdC5wdXNoKG4pO3RoaXMuX3F1ZXVlPXR9ZGVsaXZlcigpe2Zvcig7dGhpcy5fcXVldWUuc2l6ZT4wOyl7Y29uc3QgZT10aGlzLl9xdWV1ZS5zaGlmdCgpO3RyeXtlLmxpc3RlbmVyLmludm9rZShlLmV2ZW50KX1jYXRjaChlKXt0aGlzLl9vbkxpc3RlbmVyRXJyb3IoZSl9fX19Y2xhc3MgSyBleHRlbmRzIFZ7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3Mgantjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gRyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWNsYXNzICR7Y29uc3RydWN0b3IoZSl7dGhpcy5leGVjdXRvcj1lLHRoaXMuX2RpZFJ1bj0hMX1nZXQgdmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2goZSl7dGhpcy5fZXJyb3I9ZX1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX12YXIgSjtmdW5jdGlvbiBYKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gWShlKXtyZXR1cm4gNTUyOTY8PWUmJmU8PTU2MzE5fWZ1bmN0aW9uIFEoZSx0LG4pe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KG4pO2lmKFkoaSkmJm4rMTx0KXtjb25zdCB0PWUuY2hhckNvZGVBdChuKzEpO2lmKGZ1bmN0aW9uKGUpe3JldHVybiA1NjMyMDw9ZSYmZTw9NTczNDN9KHQpKXJldHVybiB0LTU2MzIwKyhpLTU1Mjk2PDwxMCkrNjU1MzZ9cmV0dXJuIGl9Y29uc3QgWj0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2NsYXNzIGVle3N0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gZWUuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIGVlLl9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1KPWVlLGVlLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3ICQoKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjUsMTE5ODQ2LDEwOV0sIl9kZWZhdWx0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImNzIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJkZSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZXMiOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSwxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZnIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiaXQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImphIjpbODIxMSw0NSw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyOTIsNDQsNjUzMDcsNTldLCJrbyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicGwiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicHQtQlIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicXBzLXBsb2MiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicnUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDMwNSwxMDUsOTIxLDczLDEwMDksMTEyLDIxNSwxMjAsNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ0ciI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ6aC1oYW5zIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1Mjg4LDQwLDY1Mjg5LDQxXSwiemgtaGFudCI6WzgyMTEsNDUsNjUzNzQsMTI2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTMwNyw1OV19JykpKSxlZS5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5mbj1lLHRoaXMubGFzdENhY2hlPXZvaWQgMCx0aGlzLmxhc3RBcmdLZXk9dm9pZCAwfWdldChlKXtjb25zdCB0PUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT10JiYodGhpcy5sYXN0QXJnS2V5PXQsdGhpcy5sYXN0Q2FjaGU9dGhpcy5mbihlKSksdGhpcy5sYXN0Q2FjaGV9fSgoZT0+e2Z1bmN0aW9uIHQoZSl7Y29uc3QgdD1uZXcgTWFwO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9Mil0LnNldChlW25dLGVbbisxXSk7cmV0dXJuIHR9ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXJldHVybiB0O2NvbnN0IG49bmV3IE1hcDtmb3IoY29uc3RbaSxyXW9mIGUpdC5oYXMoaSkmJm4uc2V0KGkscik7cmV0dXJuIG59Y29uc3QgaT1KLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IHIsYT1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIGkpKTswPT09YS5sZW5ndGgmJihhPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2YgYSl7cj1uKHIsdChpW2VdKSl9Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxpXW9mIHQpbi5zZXQoZSxpKTtyZXR1cm4gbn0odChpLl9jb21tb24pLHIpO3JldHVybiBuZXcgZWUobyl9KSksZWUuX2xvY2FsZXM9bmV3ICQoKCgpPT5PYmplY3Qua2V5cyhlZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLnZhbHVlKS5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpKSk7Y2xhc3MgdGV7c3RhdGljIGdldFJhd0RhdGEoKXtyZXR1cm4gSlNPTi5wYXJzZSgiWzksMTAsMTEsMTIsMTMsMzIsMTI3LDE2MCwxNzMsODQ3LDE1NjQsNDQ0Nyw0NDQ4LDYwNjgsNjA2OSw2MTU1LDYxNTYsNjE1Nyw2MTU4LDczNTUsNzM1Niw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIwMyw4MjA0LDgyMDUsODIwNiw4MjA3LDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyODcsODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYsODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsODMwMywxMDI0MCwxMjI4OCwxMjY0NCw2NTAyNCw2NTAyNSw2NTAyNiw2NTAyNyw2NTAyOCw2NTAyOSw2NTAzMCw2NTAzMSw2NTAzMiw2NTAzMyw2NTAzNCw2NTAzNSw2NTAzNiw2NTAzNyw2NTAzOCw2NTAzOSw2NTI3OSw2NTQ0MCw2NTUyMCw2NTUyMSw2NTUyMiw2NTUyMyw2NTUyNCw2NTUyNSw2NTUyNiw2NTUyNyw2NTUyOCw2NTUzMiw3ODg0NCwxMTkxNTUsMTE5MTU2LDExOTE1NywxMTkxNTgsMTE5MTU5LDExOTE2MCwxMTkxNjEsMTE5MTYyLDkxNzUwNCw5MTc1MDUsOTE3NTA2LDkxNzUwNyw5MTc1MDgsOTE3NTA5LDkxNzUxMCw5MTc1MTEsOTE3NTEyLDkxNzUxMyw5MTc1MTQsOTE3NTE1LDkxNzUxNiw5MTc1MTcsOTE3NTE4LDkxNzUxOSw5MTc1MjAsOTE3NTIxLDkxNzUyMiw5MTc1MjMsOTE3NTI0LDkxNzUyNSw5MTc1MjYsOTE3NTI3LDkxNzUyOCw5MTc1MjksOTE3NTMwLDkxNzUzMSw5MTc1MzIsOTE3NTMzLDkxNzUzNCw5MTc1MzUsOTE3NTM2LDkxNzUzNyw5MTc1MzgsOTE3NTM5LDkxNzU0MCw5MTc1NDEsOTE3NTQyLDkxNzU0Myw5MTc1NDQsOTE3NTQ1LDkxNzU0Niw5MTc1NDcsOTE3NTQ4LDkxNzU0OSw5MTc1NTAsOTE3NTUxLDkxNzU1Miw5MTc1NTMsOTE3NTU0LDkxNzU1NSw5MTc1NTYsOTE3NTU3LDkxNzU1OCw5MTc1NTksOTE3NTYwLDkxNzU2MSw5MTc1NjIsOTE3NTYzLDkxNzU2NCw5MTc1NjUsOTE3NTY2LDkxNzU2Nyw5MTc1NjgsOTE3NTY5LDkxNzU3MCw5MTc1NzEsOTE3NTcyLDkxNzU3Myw5MTc1NzQsOTE3NTc1LDkxNzU3Niw5MTc1NzcsOTE3NTc4LDkxNzU3OSw5MTc1ODAsOTE3NTgxLDkxNzU4Miw5MTc1ODMsOTE3NTg0LDkxNzU4NSw5MTc1ODYsOTE3NTg3LDkxNzU4OCw5MTc1ODksOTE3NTkwLDkxNzU5MSw5MTc1OTIsOTE3NTkzLDkxNzU5NCw5MTc1OTUsOTE3NTk2LDkxNzU5Nyw5MTc1OTgsOTE3NTk5LDkxNzYwMCw5MTc2MDEsOTE3NjAyLDkxNzYwMyw5MTc2MDQsOTE3NjA1LDkxNzYwNiw5MTc2MDcsOTE3NjA4LDkxNzYwOSw5MTc2MTAsOTE3NjExLDkxNzYxMiw5MTc2MTMsOTE3NjE0LDkxNzYxNSw5MTc2MTYsOTE3NjE3LDkxNzYxOCw5MTc2MTksOTE3NjIwLDkxNzYyMSw5MTc2MjIsOTE3NjIzLDkxNzYyNCw5MTc2MjUsOTE3NjI2LDkxNzYyNyw5MTc2MjgsOTE3NjI5LDkxNzYzMCw5MTc2MzEsOTE3NzYwLDkxNzc2MSw5MTc3NjIsOTE3NzYzLDkxNzc2NCw5MTc3NjUsOTE3NzY2LDkxNzc2Nyw5MTc3NjgsOTE3NzY5LDkxNzc3MCw5MTc3NzEsOTE3NzcyLDkxNzc3Myw5MTc3NzQsOTE3Nzc1LDkxNzc3Niw5MTc3NzcsOTE3Nzc4LDkxNzc3OSw5MTc3ODAsOTE3NzgxLDkxNzc4Miw5MTc3ODMsOTE3Nzg0LDkxNzc4NSw5MTc3ODYsOTE3Nzg3LDkxNzc4OCw5MTc3ODksOTE3NzkwLDkxNzc5MSw5MTc3OTIsOTE3NzkzLDkxNzc5NCw5MTc3OTUsOTE3Nzk2LDkxNzc5Nyw5MTc3OTgsOTE3Nzk5LDkxNzgwMCw5MTc4MDEsOTE3ODAyLDkxNzgwMyw5MTc4MDQsOTE3ODA1LDkxNzgwNiw5MTc4MDcsOTE3ODA4LDkxNzgwOSw5MTc4MTAsOTE3ODExLDkxNzgxMiw5MTc4MTMsOTE3ODE0LDkxNzgxNSw5MTc4MTYsOTE3ODE3LDkxNzgxOCw5MTc4MTksOTE3ODIwLDkxNzgyMSw5MTc4MjIsOTE3ODIzLDkxNzgyNCw5MTc4MjUsOTE3ODI2LDkxNzgyNyw5MTc4MjgsOTE3ODI5LDkxNzgzMCw5MTc4MzEsOTE3ODMyLDkxNzgzMyw5MTc4MzQsOTE3ODM1LDkxNzgzNiw5MTc4MzcsOTE3ODM4LDkxNzgzOSw5MTc4NDAsOTE3ODQxLDkxNzg0Miw5MTc4NDMsOTE3ODQ0LDkxNzg0NSw5MTc4NDYsOTE3ODQ3LDkxNzg0OCw5MTc4NDksOTE3ODUwLDkxNzg1MSw5MTc4NTIsOTE3ODUzLDkxNzg1NCw5MTc4NTUsOTE3ODU2LDkxNzg1Nyw5MTc4NTgsOTE3ODU5LDkxNzg2MCw5MTc4NjEsOTE3ODYyLDkxNzg2Myw5MTc4NjQsOTE3ODY1LDkxNzg2Niw5MTc4NjcsOTE3ODY4LDkxNzg2OSw5MTc4NzAsOTE3ODcxLDkxNzg3Miw5MTc4NzMsOTE3ODc0LDkxNzg3NSw5MTc4NzYsOTE3ODc3LDkxNzg3OCw5MTc4NzksOTE3ODgwLDkxNzg4MSw5MTc4ODIsOTE3ODgzLDkxNzg4NCw5MTc4ODUsOTE3ODg2LDkxNzg4Nyw5MTc4ODgsOTE3ODg5LDkxNzg5MCw5MTc4OTEsOTE3ODkyLDkxNzg5Myw5MTc4OTQsOTE3ODk1LDkxNzg5Niw5MTc4OTcsOTE3ODk4LDkxNzg5OSw5MTc5MDAsOTE3OTAxLDkxNzkwMiw5MTc5MDMsOTE3OTA0LDkxNzkwNSw5MTc5MDYsOTE3OTA3LDkxNzkwOCw5MTc5MDksOTE3OTEwLDkxNzkxMSw5MTc5MTIsOTE3OTEzLDkxNzkxNCw5MTc5MTUsOTE3OTE2LDkxNzkxNyw5MTc5MTgsOTE3OTE5LDkxNzkyMCw5MTc5MjEsOTE3OTIyLDkxNzkyMyw5MTc5MjQsOTE3OTI1LDkxNzkyNiw5MTc5MjcsOTE3OTI4LDkxNzkyOSw5MTc5MzAsOTE3OTMxLDkxNzkzMiw5MTc5MzMsOTE3OTM0LDkxNzkzNSw5MTc5MzYsOTE3OTM3LDkxNzkzOCw5MTc5MzksOTE3OTQwLDkxNzk0MSw5MTc5NDIsOTE3OTQzLDkxNzk0NCw5MTc5NDUsOTE3OTQ2LDkxNzk0Nyw5MTc5NDgsOTE3OTQ5LDkxNzk1MCw5MTc5NTEsOTE3OTUyLDkxNzk1Myw5MTc5NTQsOTE3OTU1LDkxNzk1Niw5MTc5NTcsOTE3OTU4LDkxNzk1OSw5MTc5NjAsOTE3OTYxLDkxNzk2Miw5MTc5NjMsOTE3OTY0LDkxNzk2NSw5MTc5NjYsOTE3OTY3LDkxNzk2OCw5MTc5NjksOTE3OTcwLDkxNzk3MSw5MTc5NzIsOTE3OTczLDkxNzk3NCw5MTc5NzUsOTE3OTc2LDkxNzk3Nyw5MTc5NzgsOTE3OTc5LDkxNzk4MCw5MTc5ODEsOTE3OTgyLDkxNzk4Myw5MTc5ODQsOTE3OTg1LDkxNzk4Niw5MTc5ODcsOTE3OTg4LDkxNzk4OSw5MTc5OTAsOTE3OTkxLDkxNzk5Miw5MTc5OTMsOTE3OTk0LDkxNzk5NSw5MTc5OTYsOTE3OTk3LDkxNzk5OCw5MTc5OTldIil9c3RhdGljIGdldERhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YXx8KHRoaXMuX2RhdGE9bmV3IFNldCh0ZS5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3RlcihlKXtyZXR1cm4gdGUuZ2V0RGF0YSgpLmhhcyhlKX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gdGUuZ2V0RGF0YSgpfX10ZS5fZGF0YT12b2lkIDA7Y2xhc3MgbmV7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5tZXRob2Q9bix0aGlzLmFyZ3M9aSx0aGlzLnR5cGU9MH19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy52c1dvcmtlcj1lLHRoaXMuc2VxPXQsdGhpcy5yZXM9bix0aGlzLmVycj1pLHRoaXMudHlwZT0xfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihlLHQsbixpKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50TmFtZT1uLHRoaXMuYXJnPWksdGhpcy50eXBlPTJ9fWNsYXNzIGFle2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50PW4sdGhpcy50eXBlPTN9fWNsYXNzIG9le2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy50eXBlPTR9fWNsYXNzIHNle2NvbnN0cnVjdG9yKGUpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9ZSx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKGUpe3RoaXMuX3dvcmtlcklkPWV9c2VuZE1lc3NhZ2UoZSx0KXtjb25zdCBuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKChpLHIpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbbl09e3Jlc29sdmU6aSxyZWplY3Q6cn0sdGhpcy5fc2VuZChuZXcgbmUodGhpcy5fd29ya2VySWQsbixlLHQpKX0pKX1saXN0ZW4oZSx0KXtsZXQgbj1udWxsO2NvbnN0IGk9bmV3IEIoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnMuc2V0KG4saSksdGhpcy5fc2VuZChuZXcgcmUodGhpcy5fd29ya2VySWQsbixlLHQpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuZGVsZXRlKG4pLHRoaXMuX3NlbmQobmV3IG9lKHRoaXMuX3dvcmtlcklkLG4pKSxuPW51bGx9fSk7cmV0dXJuIGkuZXZlbnR9aGFuZGxlTWVzc2FnZShlKXtlJiZlLnZzV29ya2VyJiYoLTEhPT10aGlzLl93b3JrZXJJZCYmZS52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKGUpKX1faGFuZGxlTWVzc2FnZShlKXtzd2l0Y2goZS50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZShlKTtjYXNlIDA6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpO2Nhc2UgMjpyZXR1cm4gdGhpcy5faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpO2Nhc2UgMzpyZXR1cm4gdGhpcy5faGFuZGxlRXZlbnRNZXNzYWdlKGUpO2Nhc2UgNDpyZXR1cm4gdGhpcy5faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl9fV9oYW5kbGVSZXBseU1lc3NhZ2UoZSl7aWYoIXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSlyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO2NvbnN0IHQ9dGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdO2lmKGRlbGV0ZSB0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0sZS5lcnIpe2xldCBuPWUuZXJyO3JldHVybiBlLmVyci4kaXNFcnJvciYmKG49bmV3IEVycm9yLG4ubmFtZT1lLmVyci5uYW1lLG4ubWVzc2FnZT1lLmVyci5tZXNzYWdlLG4uc3RhY2s9ZS5lcnIuc3RhY2spLHZvaWQgdC5yZWplY3Qobil9dC5yZXNvbHZlKGUucmVzKX1faGFuZGxlUmVxdWVzdE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcTt0aGlzLl9oYW5kbGVyLmhhbmRsZU1lc3NhZ2UoZS5tZXRob2QsZS5hcmdzKS50aGVuKChlPT57dGhpcy5fc2VuZChuZXcgaWUodGhpcy5fd29ya2VySWQsdCxlLHZvaWQgMCkpfSksKGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9bihlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IGllKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLG4oZSkpKX0pKX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXEsbj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KGUuZXZlbnROYW1lLGUuYXJnKSgoZT0+e3RoaXMuX3NlbmQobmV3IGFlKHRoaXMuX3dvcmtlcklkLHQsZSkpfSkpO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsbil9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZChlKXtjb25zdCB0PVtdO2lmKDA9PT1lLnR5cGUpZm9yKGxldCBuPTA7bjxlLmFyZ3MubGVuZ3RoO24rKyllLmFyZ3Nbbl1pbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5hcmdzW25dKTtlbHNlIDE9PT1lLnR5cGUmJmUucmVzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChlLnJlcyk7dGhpcy5faGFuZGxlci5zZW5kTWVzc2FnZShlLHQpfX1mdW5jdGlvbiBsZShlKXtyZXR1cm4ibyI9PT1lWzBdJiYibiI9PT1lWzFdJiZYKGUuY2hhckNvZGVBdCgyKSl9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuL15vbkR5bmFtaWMvLnRlc3QoZSkmJlgoZS5jaGFyQ29kZUF0KDkpKX1jbGFzcyBoZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT10LHRoaXMuX3JlcXVlc3RIYW5kbGVyPW51bGwsdGhpcy5fcHJvdG9jb2w9bmV3IHNlKHtzZW5kTWVzc2FnZToodCxuKT0+e2UodCxuKX0saGFuZGxlTWVzc2FnZTooZSx0KT0+dGhpcy5faGFuZGxlTWVzc2FnZShlLHQpLGhhbmRsZUV2ZW50OihlLHQpPT50aGlzLl9oYW5kbGVFdmVudChlLHQpfSl9b25tZXNzYWdlKGUpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UoZSl9X2hhbmRsZU1lc3NhZ2UoZSx0KXtpZigiJGluaXRpYWxpemUiPT09ZSlyZXR1cm4gdGhpcy5pbml0aWFsaXplKHRbMF0sdFsxXSx0WzJdLHRbM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK2UpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcix0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX1faGFuZGxlRXZlbnQoZSx0KXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoY2UoZSkpe2NvbnN0IG49dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcix0KTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke2V9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gbn1pZihsZShlKSl7Y29uc3QgdD10aGlzLl9yZXF1ZXN0SGFuZGxlcltlXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke2V9YCl9aW5pdGlhbGl6ZShlLHQsbixpKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZChlKTtjb25zdCByPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCBpPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX0scj1lPT5mdW5jdGlvbih0KXtyZXR1cm4gbihlLHQpfSxhPXt9O2Zvcihjb25zdCB0IG9mIGUpY2UodCk/YVt0XT1yKHQpOmxlKHQpP2FbdF09bih0LHZvaWQgMCk6YVt0XT1pKHQpO3JldHVybiBhfShpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wuc2VuZE1lc3NhZ2UoZSx0KSksKChlLHQpPT50aGlzLl9wcm90b2NvbC5saXN0ZW4oZSx0KSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk/KHRoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeShyKSxQcm9taXNlLnJlc29sdmUoRyh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToodCYmKHZvaWQgMCE9PXQuYmFzZVVybCYmZGVsZXRlIHQuYmFzZVVybCx2b2lkIDAhPT10LnBhdGhzJiZ2b2lkIDAhPT10LnBhdGhzLnZzJiZkZWxldGUgdC5wYXRocy52cyx2b2lkIDAhPT10eXBlb2YgdC50cnVzdGVkVHlwZXNQb2xpY3kmJmRlbGV0ZSB0LnRydXN0ZWRUeXBlc1BvbGljeSx0LmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyh0KSksbmV3IFByb21pc2UoKChlLHQpPT57KDAsZ2xvYmFsVGhpcy5yZXF1aXJlKShbbl0sKG49Pnt0aGlzLl9yZXF1ZXN0SGFuZGxlcj1uLmNyZWF0ZShyKSx0aGlzLl9yZXF1ZXN0SGFuZGxlcj9lKEcodGhpcy5fcmVxdWVzdEhhbmRsZXIpKTp0KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpfSksdCl9KSkpfX1jbGFzcyBkZXtjb25zdHJ1Y3RvcihlLHQsbixpKXt0aGlzLm9yaWdpbmFsU3RhcnQ9ZSx0aGlzLm9yaWdpbmFsTGVuZ3RoPXQsdGhpcy5tb2RpZmllZFN0YXJ0PW4sdGhpcy5tb2RpZmllZExlbmd0aD1pfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiB1ZShlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiBtZShlLHQpe3Q9dWUoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl0PXVlKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1jbGFzcyBwZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNvdXJjZT1lfWdldEVsZW1lbnRzKCl7Y29uc3QgZT10aGlzLnNvdXJjZSx0PW5ldyBJbnQzMkFycmF5KGUubGVuZ3RoKTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspdFtuXT1lLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9fWZ1bmN0aW9uIGZlKGUsdCxuKXtyZXR1cm4gbmV3IHZlKG5ldyBwZShlKSxuZXcgcGUodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgZ2V7c3RhdGljIEFzc2VydChlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0KX19Y2xhc3MgYmV7c3RhdGljIENvcHkoZSx0LG4saSxyKXtmb3IobGV0IGE9MDthPHI7YSsrKW5baSthXT1lW3QrYV19c3RhdGljIENvcHkyKGUsdCxuLGkscil7Zm9yKGxldCBhPTA7YTxyO2ErKyluW2krYV09ZVt0K2FdfX1jbGFzcyBfZXtjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IGRlKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyB2ZXtjb25zdHJ1Y3RvcihlLHQsbj1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1uLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9ZSx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPXQ7Y29uc3RbaSxyLGFdPXZlLl9nZXRFbGVtZW50cyhlKSxbbyxzLGxdPXZlLl9nZXRFbGVtZW50cyh0KTt0aGlzLl9oYXNTdHJpbmdzPWEmJmwsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1pLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9cix0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPW8sdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1zLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KGUpe3JldHVybiBlLmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIGVbMF19c3RhdGljIF9nZXRFbGVtZW50cyhlKXtjb25zdCB0PWUuZ2V0RWxlbWVudHMoKTtpZih2ZS5faXNTdHJpbmdBcnJheSh0KSl7Y29uc3QgZT1uZXcgSW50MzJBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKWVbbl09bWUodFtuXSwwKTtyZXR1cm5bdCxlLCEwXX1yZXR1cm4gdCBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLHQsITFdOltbXSxuZXcgSW50MzJBcnJheSh0KSwhMV19RWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XSl9RWxlbWVudHNBcmVTdHJpY3RFcXVhbChlLHQpe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSx0KSlyZXR1cm4hMTtyZXR1cm4gdmUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fb3JpZ2luYWxTZXF1ZW5jZSxlKT09PXZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX21vZGlmaWVkU2VxdWVuY2UsdCl9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KGUsdCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0U3RyaWN0RWxlbWVudD9lLmdldFN0cmljdEVsZW1lbnQodCk6bnVsbH1PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfU1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XSl9Q29tcHV0ZURpZmYoZSl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsZSl9X0NvbXB1dGVEaWZmKGUsdCxuLGkscil7Y29uc3QgYT1bITFdO2xldCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4saSxhKTtyZXR1cm4gciYmKG89dGhpcy5QcmV0dGlmeUNoYW5nZXMobykpLHtxdWl0RWFybHk6YVswXSxjaGFuZ2VzOm99fUNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLGkscil7Zm9yKHJbMF09ITE7ZTw9dCYmbjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsbik7KWUrKyxuKys7Zm9yKDt0Pj1lJiZpPj1uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxpKTspdC0tLGktLTtpZihlPnR8fG4+aSl7bGV0IHI7cmV0dXJuIG48PWk/KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxyPVtuZXcgZGUoZSwwLG4saS1uKzEpXSk6ZTw9dD8oZ2UuQXNzZXJ0KG49PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLHI9W25ldyBkZShlLHQtZSsxLG4sMCldKTooZ2UuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGdlLkFzc2VydChuPT09aSsxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxyPVtdKSxyfWNvbnN0IGE9WzBdLG89WzBdLHM9dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4saSxhLG8sciksbD1hWzBdLGM9b1swXTtpZihudWxsIT09cylyZXR1cm4gcztpZighclswXSl7Y29uc3QgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsbCxuLGMscik7bGV0IG89W107cmV0dXJuIG89clswXT9bbmV3IGRlKGwrMSx0LShsKzEpKzEsYysxLGktKGMrMSkrMSldOnRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUobCsxLHQsYysxLGksciksdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoYSxvKX1yZXR1cm5bbmV3IGRlKGUsdC1lKzEsbixpLW4rMSldfVdBTEtUUkFDRShlLHQsbixpLHIsYSxvLHMsbCxjLGgsZCx1LG0scCxmLGcsYil7bGV0IF89bnVsbCx2PW51bGwsdz1uZXcgX2UseT10LFQ9bixrPXVbMF0tZlswXS1pLFM9LTEwNzM3NDE4MjQseD10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97Y29uc3QgdD1rK2U7dD09PXl8fHQ8VCYmbFt0LTFdPGxbdCsxXT8obT0oaD1sW3QrMV0pLWstaSxoPFMmJncuTWFya05leHRDaGFuZ2UoKSxTPWgsdy5BZGRNb2RpZmllZEVsZW1lbnQoaCsxLG0pLGs9dCsxLWUpOihtPShoPWxbdC0xXSsxKS1rLWksaDxTJiZ3Lk1hcmtOZXh0Q2hhbmdlKCksUz1oLTEsdy5BZGRPcmlnaW5hbEVsZW1lbnQoaCxtKzEpLGs9dC0xLWUpLHg+PTAmJihlPShsPXRoaXMubV9mb3J3YXJkSGlzdG9yeVt4XSlbMF0seT0xLFQ9bC5sZW5ndGgtMSl9d2hpbGUoLS14Pj0tMSk7aWYoXz13LmdldFJldmVyc2VDaGFuZ2VzKCksYlswXSl7bGV0IGU9dVswXSsxLHQ9ZlswXSsxO2lmKG51bGwhPT1fJiZfLmxlbmd0aD4wKXtjb25zdCBuPV9bXy5sZW5ndGgtMV07ZT1NYXRoLm1heChlLG4uZ2V0T3JpZ2luYWxFbmQoKSksdD1NYXRoLm1heCh0LG4uZ2V0TW9kaWZpZWRFbmQoKSl9dj1bbmV3IGRlKGUsZC1lKzEsdCxwLXQrMSldfWVsc2V7dz1uZXcgX2UseT1hLFQ9byxrPXVbMF0tZlswXS1zLFM9MTA3Mzc0MTgyNCx4PWc/dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0xOnRoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMjtkb3tjb25zdCBlPWsrcjtlPT09eXx8ZTxUJiZjW2UtMV0+PWNbZSsxXT8obT0oaD1jW2UrMV0tMSktay1zLGg+UyYmdy5NYXJrTmV4dENoYW5nZSgpLFM9aCsxLHcuQWRkT3JpZ2luYWxFbGVtZW50KGgrMSxtKzEpLGs9ZSsxLXIpOihtPShoPWNbZS0xXSktay1zLGg+UyYmdy5NYXJrTmV4dENoYW5nZSgpLFM9aCx3LkFkZE1vZGlmaWVkRWxlbWVudChoKzEsbSsxKSxrPWUtMS1yKSx4Pj0wJiYocj0oYz10aGlzLm1fcmV2ZXJzZUhpc3RvcnlbeF0pWzBdLHk9MSxUPWMubGVuZ3RoLTEpfXdoaWxlKC0teD49LTEpO3Y9dy5nZXRDaGFuZ2VzKCl9cmV0dXJuIHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKF8sdil9Q29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLGkscixhLG8pe2xldCBzPTAsbD0wLGM9MCxoPTAsZD0wLHU9MDtlLS0sbi0tLHJbMF09MCxhWzBdPTAsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXTtjb25zdCBtPXQtZSsoaS1uKSxwPW0rMSxmPW5ldyBJbnQzMkFycmF5KHApLGc9bmV3IEludDMyQXJyYXkocCksYj1pLW4sXz10LWUsdj1lLW4sdz10LWkseT0oXy1iKSUyPT0wO2ZbYl09ZSxnW19dPXQsb1swXT0hMTtmb3IobGV0IFQ9MTtUPD1tLzIrMTtUKyspe2xldCBtPTAsaz0wO2M9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChiLVQsVCxiLHApLGg9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChiK1QsVCxiLHApO2ZvcihsZXQgZT1jO2U8PWg7ZSs9Mil7cz1lPT09Y3x8ZTxoJiZmW2UtMV08ZltlKzFdP2ZbZSsxXTpmW2UtMV0rMSxsPXMtKGUtYiktdjtjb25zdCBuPXM7Zm9yKDtzPHQmJmw8aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHMrMSxsKzEpOylzKyssbCsrO2lmKGZbZV09cyxzK2w+bStrJiYobT1zLGs9bCksIXkmJk1hdGguYWJzKGUtXyk8PVQtMSYmcz49Z1tlXSlyZXR1cm4gclswXT1zLGFbMF09bCxuPD1nW2VdJiZUPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsYyxoLHYsXyxkLHUsdyxmLGcscyx0LHIsbCxpLGEseSxvKTpudWxsfWNvbnN0IFM9KG0tZSsoay1uKS1UKS8yO2lmKG51bGwhPT10aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZSYmIXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlKG0sUykpcmV0dXJuIG9bMF09ITAsclswXT1tLGFbMF09ayxTPjAmJlQ8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixjLGgsdixfLGQsdSx3LGYsZyxzLHQscixsLGksYSx5LG8pOihlKyssbisrLFtuZXcgZGUoZSx0LWUrMSxuLGktbisxKV0pO2Q9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfLVQsVCxfLHApLHU9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfK1QsVCxfLHApO2ZvcihsZXQgbT1kO208PXU7bSs9Mil7cz1tPT09ZHx8bTx1JiZnW20tMV0+PWdbbSsxXT9nW20rMV0tMTpnW20tMV0sbD1zLShtLV8pLXc7Y29uc3QgcD1zO2Zvcig7cz5lJiZsPm4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzLGwpOylzLS0sbC0tO2lmKGdbbV09cyx5JiZNYXRoLmFicyhtLWIpPD1UJiZzPD1mW21dKXJldHVybiByWzBdPXMsYVswXT1sLHA+PWZbbV0mJlQ8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixjLGgsdixfLGQsdSx3LGYsZyxzLHQscixsLGksYSx5LG8pOm51bGx9aWYoVDw9MTQ0Nyl7bGV0IGU9bmV3IEludDMyQXJyYXkoaC1jKzIpO2VbMF09Yi1jKzEsYmUuQ29weTIoZixjLGUsMSxoLWMrMSksdGhpcy5tX2ZvcndhcmRIaXN0b3J5LnB1c2goZSksZT1uZXcgSW50MzJBcnJheSh1LWQrMiksZVswXT1fLWQrMSxiZS5Db3B5MihnLGQsZSwxLHUtZCsxKSx0aGlzLm1fcmV2ZXJzZUhpc3RvcnkucHVzaChlKX19cmV0dXJuIHRoaXMuV0FMS1RSQUNFKGIsYyxoLHYsXyxkLHUsdyxmLGcscyx0LHIsbCxpLGEseSxvKX1QcmV0dGlmeUNoYW5nZXMoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XSxpPXQ8ZS5sZW5ndGgtMT9lW3QrMV0ub3JpZ2luYWxTdGFydDp0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxyPXQ8ZS5sZW5ndGgtMT9lW3QrMV0ubW9kaWZpZWRTdGFydDp0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxhPW4ub3JpZ2luYWxMZW5ndGg+MCxvPW4ubW9kaWZpZWRMZW5ndGg+MDtmb3IoO24ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoPGkmJm4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoPHImJighYXx8dGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSkmJighb3x8dGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwobi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSk7KXtjb25zdCBlPXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpJiYhZSlicmVhaztuLm9yaWdpbmFsU3RhcnQrKyxuLm1vZGlmaWVkU3RhcnQrK31jb25zdCBzPVtudWxsXTt0PGUubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0XSxlW3QrMV0scykmJihlW3RdPXNbMF0sZS5zcGxpY2UodCsxLDEpLHQtLSl9Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IG49ZVt0XTtsZXQgaT0wLHI9MDtpZih0PjApe2NvbnN0IG49ZVt0LTFdO2k9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgscj1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aH1jb25zdCBhPW4ub3JpZ2luYWxMZW5ndGg+MCxvPW4ubW9kaWZpZWRMZW5ndGg+MDtsZXQgcz0wLGw9dGhpcy5fYm91bmRhcnlTY29yZShuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBlPTE7O2UrKyl7Y29uc3QgdD1uLm9yaWdpbmFsU3RhcnQtZSxjPW4ubW9kaWZpZWRTdGFydC1lO2lmKHQ8aXx8YzxyKWJyZWFrO2lmKGEmJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0LHQrbi5vcmlnaW5hbExlbmd0aCkpYnJlYWs7aWYobyYmIXRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGMsYytuLm1vZGlmaWVkTGVuZ3RoKSlicmVhaztjb25zdCBoPSh0PT09aSYmYz09PXI/NTowKSt0aGlzLl9ib3VuZGFyeVNjb3JlKHQsbi5vcmlnaW5hbExlbmd0aCxjLG4ubW9kaWZpZWRMZW5ndGgpO2g+bCYmKGw9aCxzPWUpfW4ub3JpZ2luYWxTdGFydC09cyxuLm1vZGlmaWVkU3RhcnQtPXM7Y29uc3QgYz1bbnVsbF07dD4wJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdC0xXSxlW3RdLGMpJiYoZVt0LTFdPWNbMF0sZS5zcGxpY2UodCwxKSx0KyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCB0PTEsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWVbdC0xXSxpPWVbdF0scj1pLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxMZW5ndGgsYT1uLm9yaWdpbmFsU3RhcnQsbz1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCxzPW8tYSxsPW4ubW9kaWZpZWRTdGFydCxjPWkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoLGg9Yy1sO2lmKHI8NSYmczwyMCYmaDwyMCl7Y29uc3QgZT10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGEscyxsLGgscik7aWYoZSl7Y29uc3RbdCxhXT1lO3Q9PT1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCYmYT09PW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofHwobi5vcmlnaW5hbExlbmd0aD10LW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPWEtbi5tb2RpZmllZFN0YXJ0LGkub3JpZ2luYWxTdGFydD10K3IsaS5tb2RpZmllZFN0YXJ0PWErcixpLm9yaWdpbmFsTGVuZ3RoPW8taS5vcmlnaW5hbFN0YXJ0LGkubW9kaWZpZWRMZW5ndGg9Yy1pLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIGV9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UoZSx0LG4saSxyKXtpZih0PHJ8fGk8cilyZXR1cm4gbnVsbDtjb25zdCBhPWUrdC1yKzEsbz1uK2ktcisxO2xldCBzPTAsbD0wLGM9MDtmb3IobGV0IHQ9ZTt0PGE7dCsrKWZvcihsZXQgZT1uO2U8bztlKyspe2NvbnN0IG49dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLHIpO24+MCYmbj5zJiYocz1uLGw9dCxjPWUpfXJldHVybiBzPjA/W2wsY106bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUoZSx0LG4pe2xldCBpPTA7Zm9yKGxldCByPTA7cjxuO3IrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlK3IsdCtyKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2Urcl0ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQsbixpKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KG4saSk/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXtjb25zdCBuPVtdO2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiB0Lmxlbmd0aD4wP3Q6ZTtpZih0aGlzLkNoYW5nZXNPdmVybGFwKGVbZS5sZW5ndGgtMV0sdFswXSxuKSl7Y29uc3QgaT1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgtMSk7cmV0dXJuIGJlLkNvcHkoZSwwLGksMCxlLmxlbmd0aC0xKSxpW2UubGVuZ3RoLTFdPW5bMF0sYmUuQ29weSh0LDEsaSxlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpfXtjb25zdCBuPW5ldyBBcnJheShlLmxlbmd0aCt0Lmxlbmd0aCk7cmV0dXJuIGJlLkNvcHkoZSwwLG4sMCxlLmxlbmd0aCksYmUuQ29weSh0LDAsbixlLmxlbmd0aCx0Lmxlbmd0aCksbn19Q2hhbmdlc092ZXJsYXAoZSx0LG4pe2lmKGdlLkFzc2VydChlLm9yaWdpbmFsU3RhcnQ8PXQub3JpZ2luYWxTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxnZS5Bc3NlcnQoZS5tb2RpZmllZFN0YXJ0PD10Lm1vZGlmaWVkU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydHx8ZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGg+PXQubW9kaWZpZWRTdGFydCl7Y29uc3QgaT1lLm9yaWdpbmFsU3RhcnQ7bGV0IHI9ZS5vcmlnaW5hbExlbmd0aDtjb25zdCBhPWUubW9kaWZpZWRTdGFydDtsZXQgbz1lLm1vZGlmaWVkTGVuZ3RoO3JldHVybiBlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aD49dC5vcmlnaW5hbFN0YXJ0JiYocj10Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC1lLm9yaWdpbmFsU3RhcnQpLGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQmJihvPXQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLWUubW9kaWZpZWRTdGFydCksblswXT1uZXcgZGUoaSxyLGEsbyksITB9cmV0dXJuIG5bMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZChlLHQsbixpKXtpZihlPj0wJiZlPGkpcmV0dXJuIGU7Y29uc3Qgcj10JTI9PTA7aWYoZTwwKXtyZXR1cm4gcj09PShuJTI9PTApPzA6MX1yZXR1cm4gcj09PSgoaS1uLTEpJTI9PTApP2ktMTppLTJ9fWxldCB3ZTtpZih2b2lkIDAhPT1FLnZzY29kZSYmdm9pZCAwIT09RS52c2NvZGUucHJvY2Vzcyl7Y29uc3QgZT1FLnZzY29kZS5wcm9jZXNzO3dlPXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gZS5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gZS5hcmNofSxnZXQgZW52KCl7cmV0dXJuIGUuZW52fSxjd2Q6KCk9PmUuY3dkKCl9fWVsc2Ugd2U9InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzP3tnZXQgcGxhdGZvcm0oKXtyZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gcHJvY2Vzcy5hcmNofSxnZXQgZW52KCl7cmV0dXJuIHByb2Nlc3MuZW52fSxjd2Q6KCk9PnByb2Nlc3MuZW52LlZTQ09ERV9DV0R8fHByb2Nlc3MuY3dkKCl9OntnZXQgcGxhdGZvcm0oKXtyZXR1cm4gUj8id2luMzIiOk4/ImRhcndpbiI6ImxpbnV4In0sZ2V0IGFyY2goKXt9LGdldCBlbnYoKXtyZXR1cm57fX0sY3dkOigpPT4iLyJ9O2NvbnN0IHllPXdlLmN3ZCxUZT13ZS5lbnYsa2U9d2UucGxhdGZvcm0sU2U9NDYseGU9NDcsTGU9OTIsQ2U9NTg7Y2xhc3MgRWUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQsbil7bGV0IGk7InN0cmluZyI9PXR5cGVvZiB0JiYwPT09dC5pbmRleE9mKCJub3QgIik/KGk9Im11c3Qgbm90IGJlIix0PXQucmVwbGFjZSgvXm5vdCAvLCIiKSk6aT0ibXVzdCBiZSI7Y29uc3Qgcj0tMSE9PWUuaW5kZXhPZigiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtsZXQgYT1gVGhlICIke2V9IiAke3J9ICR7aX0gb2YgdHlwZSAke3R9YDthKz0iLiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIG4sc3VwZXIoYSksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIEFlKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFZSh0LCJzdHJpbmciLGUpfWNvbnN0IE1lPSJ3aW4zMiI9PT1rZTtmdW5jdGlvbiBSZShlKXtyZXR1cm4gZT09PXhlfHxlPT09TGV9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGU9PT14ZX1mdW5jdGlvbiBJZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIFVlKGUsdCxuLGkpe2xldCByPSIiLGE9MCxvPS0xLHM9MCxsPTA7Zm9yKGxldCBjPTA7Yzw9ZS5sZW5ndGg7KytjKXtpZihjPGUubGVuZ3RoKWw9ZS5jaGFyQ29kZUF0KGMpO2Vsc2V7aWYoaShsKSlicmVhaztsPXhlfWlmKGkobCkpe2lmKG89PT1jLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihyLmxlbmd0aDwyfHwyIT09YXx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpIT09U2V8fHIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSE9PVNlKXtpZihyLmxlbmd0aD4yKXtjb25zdCBlPXIubGFzdEluZGV4T2Yobik7LTE9PT1lPyhyPSIiLGE9MCk6KHI9ci5zbGljZSgwLGUpLGE9ci5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKG4pKSxvPWMscz0wO2NvbnRpbnVlfWlmKDAhPT1yLmxlbmd0aCl7cj0iIixhPTAsbz1jLHM9MDtjb250aW51ZX19dCYmKHIrPXIubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixhPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz1gJHtufSR7ZS5zbGljZShvKzEsYyl9YDpyPWUuc2xpY2UobysxLGMpLGE9Yy1vLTE7bz1jLHM9MH1lbHNlIGw9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiByfWZ1bmN0aW9uIEhlKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgRWUodCwiT2JqZWN0IixlKX0odCwicGF0aE9iamVjdCIpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxpPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke2l9YDpgJHtufSR7ZX0ke2l9YDppfWNvbnN0IHplPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIsaT0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMTtyLS0pe2xldCBhO2lmKHI+PTApe2lmKGE9ZVtyXSxBZShhLCJwYXRoIiksMD09PWEubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP2E9eWUoKTooYT1UZVtgPSR7dH1gXXx8eWUoKSwodm9pZCAwPT09YXx8YS5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJmEuY2hhckNvZGVBdCgyKT09PUxlKSYmKGE9YCR7dH1cXGApKTtjb25zdCBvPWEubGVuZ3RoO2xldCBzPTAsbD0iIixjPSExO2NvbnN0IGg9YS5jaGFyQ29kZUF0KDApO2lmKDE9PT1vKVJlKGgpJiYocz0xLGM9ITApO2Vsc2UgaWYoUmUoaCkpaWYoYz0hMCxSZShhLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8byYmIVJlKGEuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG8mJmUhPT10KXtjb25zdCBuPWEuc2xpY2UodCxlKTtmb3IodD1lO2U8byYmUmUoYS5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8byYmZSE9PXQpe2Zvcih0PWU7ZTxvJiYhUmUoYS5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1vJiZlPT09dHx8KGw9YFxcXFwke259XFwke2Euc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIEllKGgpJiZhLmNoYXJDb2RlQXQoMSk9PT1DZSYmKGw9YS5zbGljZSgwLDIpLHM9MixvPjImJlJlKGEuY2hhckNvZGVBdCgyKSkmJihjPSEwLHM9MykpO2lmKGwubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYobC50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1sO2lmKGkpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke2Euc2xpY2Uocyl9XFwke259YCxpPWMsYyYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1VZShuLCFpLCJcXCIsUmUpLGk/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe0FlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixpPTAscj0hMTtjb25zdCBhPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gTmUoYSk/IlxcIjplO2lmKFJlKGEpKWlmKHI9ITAsUmUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IHI9MixhPXI7Zm9yKDtyPHQmJiFSZShlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjx0JiZyIT09YSl7Y29uc3Qgbz1lLnNsaWNlKGEscik7Zm9yKGE9cjtyPHQmJlJlKGUuY2hhckNvZGVBdChyKSk7KXIrKztpZihyPHQmJnIhPT1hKXtmb3IoYT1yO3I8dCYmIVJlKGUuY2hhckNvZGVBdChyKSk7KXIrKztpZihyPT09dClyZXR1cm5gXFxcXCR7b31cXCR7ZS5zbGljZShhKX1cXGA7ciE9PWEmJihuPWBcXFxcJHtvfVxcJHtlLnNsaWNlKGEscil9YCxpPXIpfX19ZWxzZSBpPTE7ZWxzZSBJZShhKSYmZS5jaGFyQ29kZUF0KDEpPT09Q2UmJihuPWUuc2xpY2UoMCwyKSxpPTIsdD4yJiZSZShlLmNoYXJDb2RlQXQoMikpJiYocj0hMCxpPTMpKTtsZXQgbz1pPHQ/VWUoZS5zbGljZShpKSwhciwiXFwiLFJlKToiIjtyZXR1cm4gMCE9PW8ubGVuZ3RofHxyfHwobz0iLiIpLG8ubGVuZ3RoPjAmJlJlKGUuY2hhckNvZGVBdCh0LTEpKSYmKG8rPSJcXCIpLHZvaWQgMD09PW4/cj9gXFwke299YDpvOnI/YCR7bn1cXCR7b31gOmAke259JHtvfWB9LGlzQWJzb2x1dGUoZSl7QWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFJlKG4pfHx0PjImJkllKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT1DZSYmUmUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDsrK2kpe2NvbnN0IHI9ZVtpXTtBZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPXI6dCs9YFxcJHtyfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCBpPSEwLHI9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJlJlKG4uY2hhckNvZGVBdCgwKSkpeysrcjtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmUmUobi5jaGFyQ29kZUF0KDEpKSYmKCsrcixlPjImJihSZShuLmNoYXJDb2RlQXQoMikpPysrcjppPSExKSl9aWYoaSl7Zm9yKDtyPHQubGVuZ3RoJiZSZSh0LmNoYXJDb2RlQXQocikpOylyKys7cj49MiYmKHQ9YFxcJHt0LnNsaWNlKHIpfWApfXJldHVybiB6ZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoQWUoZSwiZnJvbSIpLEFlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj16ZS5yZXNvbHZlKGUpLGk9emUucmVzb2x2ZSh0KTtpZihuPT09aSlyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9aS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09TGU7KXIrKztsZXQgYT1lLmxlbmd0aDtmb3IoO2EtMT5yJiZlLmNoYXJDb2RlQXQoYS0xKT09PUxlOylhLS07Y29uc3Qgbz1hLXI7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUxlOylzKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+cyYmdC5jaGFyQ29kZUF0KGwtMSk9PT1MZTspbC0tO2NvbnN0IGM9bC1zLGg9bzxjP286YztsZXQgZD0tMSx1PTA7Zm9yKDt1PGg7dSsrKXtjb25zdCBuPWUuY2hhckNvZGVBdChyK3UpO2lmKG4hPT10LmNoYXJDb2RlQXQocyt1KSlicmVhaztuPT09TGUmJihkPXUpfWlmKHUhPT1oKXtpZigtMT09PWQpcmV0dXJuIGl9ZWxzZXtpZihjPmgpe2lmKHQuY2hhckNvZGVBdChzK3UpPT09TGUpcmV0dXJuIGkuc2xpY2Uocyt1KzEpO2lmKDI9PT11KXJldHVybiBpLnNsaWNlKHMrdSl9bz5oJiYoZS5jaGFyQ29kZUF0KHIrdSk9PT1MZT9kPXU6Mj09PXUmJihkPTMpKSwtMT09PWQmJihkPTApfWxldCBtPSIiO2Zvcih1PXIrZCsxO3U8PWE7Kyt1KXUhPT1hJiZlLmNoYXJDb2RlQXQodSkhPT1MZXx8KG0rPTA9PT1tLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWQsbS5sZW5ndGg+MD9gJHttfSR7aS5zbGljZShzLGwpfWA6KGkuY2hhckNvZGVBdChzKT09PUxlJiYrK3MsaS5zbGljZShzLGwpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aClyZXR1cm4gZTtjb25zdCB0PXplLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYodC5jaGFyQ29kZUF0KDApPT09TGUpe2lmKHQuY2hhckNvZGVBdCgxKT09PUxlKXtjb25zdCBlPXQuY2hhckNvZGVBdCgyKTtpZig2MyE9PWUmJmUhPT1TZSlyZXR1cm5gXFxcXD9cXFVOQ1xcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoSWUodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09Q2UmJnQuY2hhckNvZGVBdCgyKT09PUxlKXJldHVybmBcXFxcP1xcJHt0fWA7cmV0dXJuIGV9LGRpcm5hbWUoZSl7QWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIi4iO2xldCBuPS0xLGk9MDtjb25zdCByPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gUmUocik/ZToiLiI7aWYoUmUocikpe2lmKG49aT0xLFJlKGUuY2hhckNvZGVBdCgxKSkpe2xldCByPTIsYT1yO2Zvcig7cjx0JiYhUmUoZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8dCYmciE9PWEpe2ZvcihhPXI7cjx0JiZSZShlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjx0JiZyIT09YSl7Zm9yKGE9cjtyPHQmJiFSZShlLmNoYXJDb2RlQXQocikpOylyKys7aWYocj09PXQpcmV0dXJuIGU7ciE9PWEmJihuPWk9cisxKX19fX1lbHNlIEllKHIpJiZlLmNoYXJDb2RlQXQoMSk9PT1DZSYmKG49dD4yJiZSZShlLmNoYXJDb2RlQXQoMikpPzM6MixpPW4pO2xldCBhPS0xLG89ITA7Zm9yKGxldCBuPXQtMTtuPj1pOy0tbilpZihSZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7YT1uO2JyZWFrfX1lbHNlIG89ITE7aWYoLTE9PT1hKXtpZigtMT09PW4pcmV0dXJuIi4iO2E9bn1yZXR1cm4gZS5zbGljZSgwLGEpfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJkFlKHQsImV4dCIpLEFlKGUsInBhdGgiKTtsZXQgbixpPTAscj0tMSxhPSEwO2lmKGUubGVuZ3RoPj0yJiZJZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1DZSYmKGk9Miksdm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgbz10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj1pOy0tbil7Y29uc3QgbD1lLmNoYXJDb2RlQXQobik7aWYoUmUobCkpe2lmKCFhKXtpPW4rMTticmVha319ZWxzZS0xPT09cyYmKGE9ITEscz1uKzEpLG8+PTAmJihsPT09dC5jaGFyQ29kZUF0KG8pPy0xPT0tLW8mJihyPW4pOihvPS0xLHI9cykpfXJldHVybiBpPT09cj9yPXM6LTE9PT1yJiYocj1lLmxlbmd0aCksZS5zbGljZShpLHIpfWZvcihuPWUubGVuZ3RoLTE7bj49aTstLW4paWYoUmUoZS5jaGFyQ29kZUF0KG4pKSl7aWYoIWEpe2k9bisxO2JyZWFrfX1lbHNlLTE9PT1yJiYoYT0hMSxyPW4rMSk7cmV0dXJuLTE9PT1yPyIiOmUuc2xpY2UoaSxyKX0sZXh0bmFtZShlKXtBZShlLCJwYXRoIik7bGV0IHQ9MCxuPS0xLGk9MCxyPS0xLGE9ITAsbz0wO2UubGVuZ3RoPj0yJiZlLmNoYXJDb2RlQXQoMSk9PT1DZSYmSWUoZS5jaGFyQ29kZUF0KDApKSYmKHQ9aT0yKTtmb3IobGV0IHM9ZS5sZW5ndGgtMTtzPj10Oy0tcyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQocyk7aWYoUmUodCkpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09ciYmKGE9ITEscj1zKzEpLHQ9PT1TZT8tMT09PW4/bj1zOjEhPT1vJiYobz0xKTotMSE9PW4mJihvPS0xKX1yZXR1cm4tMT09PW58fC0xPT09cnx8MD09PW98fDE9PT1vJiZuPT09ci0xJiZuPT09aSsxPyIiOmUuc2xpY2UobixyKX0sZm9ybWF0OkhlLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtBZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IGk9MCxyPWUuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4gUmUocik/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoUmUocikpe2lmKGk9MSxSZShlLmNoYXJDb2RlQXQoMSkpKXtsZXQgdD0yLHI9dDtmb3IoO3Q8biYmIVJlKGUuY2hhckNvZGVBdCh0KSk7KXQrKztpZih0PG4mJnQhPT1yKXtmb3Iocj10O3Q8biYmUmUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PXIpe2ZvcihyPXQ7dDxuJiYhUmUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO3Q9PT1uP2k9dDp0IT09ciYmKGk9dCsxKX19fX1lbHNlIGlmKEllKHIpJiZlLmNoYXJDb2RlQXQoMSk9PT1DZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihpPTIsUmUoZS5jaGFyQ29kZUF0KDIpKSl7aWYoMz09PW4pcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7aT0zfX1pPjAmJih0LnJvb3Q9ZS5zbGljZSgwLGkpKTtsZXQgYT0tMSxvPWkscz0tMSxsPSEwLGM9ZS5sZW5ndGgtMSxoPTA7Zm9yKDtjPj1pOy0tYylpZihyPWUuY2hhckNvZGVBdChjKSxSZShyKSl7aWYoIWwpe289YysxO2JyZWFrfX1lbHNlLTE9PT1zJiYobD0hMSxzPWMrMSkscj09PVNlPy0xPT09YT9hPWM6MSE9PWgmJihoPTEpOi0xIT09YSYmKGg9LTEpO3JldHVybi0xIT09cyYmKC0xPT09YXx8MD09PWh8fDE9PT1oJiZhPT09cy0xJiZhPT09bysxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShvLHMpOih0Lm5hbWU9ZS5zbGljZShvLGEpLHQuYmFzZT1lLnNsaWNlKG8scyksdC5leHQ9ZS5zbGljZShhLHMpKSksdC5kaXI9bz4wJiZvIT09aT9lLnNsaWNlKDAsby0xKTp0LnJvb3QsdH0sc2VwOiJcXCIsZGVsaW1pdGVyOiI7Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LERlPSgoKT0+e2lmKE1lKXtjb25zdCBlPS9cXC9nO3JldHVybigpPT57Y29uc3QgdD15ZSgpLnJlcGxhY2UoZSwiLyIpO3JldHVybiB0LnNsaWNlKHQuaW5kZXhPZigiLyIpKX19cmV0dXJuKCk9PnllKCl9KSgpLFdlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTEmJiFuO2ktLSl7Y29uc3Qgcj1pPj0wP2VbaV06RGUoKTtBZShyLCJwYXRoIiksMCE9PXIubGVuZ3RoJiYodD1gJHtyfS8ke3R9YCxuPXIuY2hhckNvZGVBdCgwKT09PXhlKX1yZXR1cm4gdD1VZSh0LCFuLCIvIixOZSksbj9gLyR7dH1gOnQubGVuZ3RoPjA/dDoiLiJ9LG5vcm1hbGl6ZShlKXtpZihBZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PXhlLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09eGU7cmV0dXJuIDA9PT0oZT1VZShlLCF0LCIvIixOZSkpLmxlbmd0aD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGU6ZT0+KEFlKGUsInBhdGgiKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT14ZSksam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCBpPWVbbl07QWUoaSwicGF0aCIpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT10P3Q9aTp0Kz1gLyR7aX1gKX1yZXR1cm4gdm9pZCAwPT09dD8iLiI6V2Uubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKEFlKGUsImZyb20iKSxBZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2lmKChlPVdlLnJlc29sdmUoZSkpPT09KHQ9V2UucmVzb2x2ZSh0KSkpcmV0dXJuIiI7Y29uc3Qgbj1lLmxlbmd0aCxpPW4tMSxyPXQubGVuZ3RoLTEsYT1pPHI/aTpyO2xldCBvPS0xLHM9MDtmb3IoO3M8YTtzKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KDErcyk7aWYobiE9PXQuY2hhckNvZGVBdCgxK3MpKWJyZWFrO249PT14ZSYmKG89cyl9aWYocz09PWEpaWYocj5hKXtpZih0LmNoYXJDb2RlQXQoMStzKT09PXhlKXJldHVybiB0LnNsaWNlKDErcysxKTtpZigwPT09cylyZXR1cm4gdC5zbGljZSgxK3MpfWVsc2UgaT5hJiYoZS5jaGFyQ29kZUF0KDErcyk9PT14ZT9vPXM6MD09PXMmJihvPTApKTtsZXQgbD0iIjtmb3Iocz0xK28rMTtzPD1uOysrcylzIT09biYmZS5jaGFyQ29kZUF0KHMpIT09eGV8fChsKz0wPT09bC5sZW5ndGg/Ii4uIjoiLy4uIik7cmV0dXJuYCR7bH0ke3Quc2xpY2UoMStvKX1gfSx0b05hbWVzcGFjZWRQYXRoOmU9PmUsZGlybmFtZShlKXtpZihBZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PXhlO2xldCBuPS0xLGk9ITA7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MTstLXQpaWYoZS5jaGFyQ29kZUF0KHQpPT09eGUpe2lmKCFpKXtuPXQ7YnJlYWt9fWVsc2UgaT0hMTtyZXR1cm4tMT09PW4/dD8iLyI6Ii4iOnQmJjE9PT1uPyIvLyI6ZS5zbGljZSgwLG4pfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJkFlKHQsImV4dCIpLEFlKGUsInBhdGgiKTtsZXQgbixpPTAscj0tMSxhPSEwO2lmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IG89dC5sZW5ndGgtMSxzPS0xO2ZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pe2NvbnN0IGw9ZS5jaGFyQ29kZUF0KG4pO2lmKGw9PT14ZSl7aWYoIWEpe2k9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYoYT0hMSxzPW4rMSksbz49MCYmKGw9PT10LmNoYXJDb2RlQXQobyk/LTE9PS0tbyYmKHI9bik6KG89LTEscj1zKSl9cmV0dXJuIGk9PT1yP3I9czotMT09PXImJihyPWUubGVuZ3RoKSxlLnNsaWNlKGkscil9Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpZihlLmNoYXJDb2RlQXQobik9PT14ZSl7aWYoIWEpe2k9bisxO2JyZWFrfX1lbHNlLTE9PT1yJiYoYT0hMSxyPW4rMSk7cmV0dXJuLTE9PT1yPyIiOmUuc2xpY2UoaSxyKX0sZXh0bmFtZShlKXtBZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLGk9LTEscj0hMCxhPTA7Zm9yKGxldCBvPWUubGVuZ3RoLTE7bz49MDstLW8pe2NvbnN0IHM9ZS5jaGFyQ29kZUF0KG8pO2lmKHMhPT14ZSktMT09PWkmJihyPSExLGk9bysxKSxzPT09U2U/LTE9PT10P3Q9bzoxIT09YSYmKGE9MSk6LTEhPT10JiYoYT0tMSk7ZWxzZSBpZighcil7bj1vKzE7YnJlYWt9fXJldHVybi0xPT09dHx8LTE9PT1pfHwwPT09YXx8MT09PWEmJnQ9PT1pLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LGkpfSxmb3JtYXQ6SGUuYmluZChudWxsLCIvIikscGFyc2UoZSl7QWUoZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtjb25zdCBuPWUuY2hhckNvZGVBdCgwKT09PXhlO2xldCBpO24/KHQucm9vdD0iLyIsaT0xKTppPTA7bGV0IHI9LTEsYT0wLG89LTEscz0hMCxsPWUubGVuZ3RoLTEsYz0wO2Zvcig7bD49aTstLWwpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KGwpO2lmKHQhPT14ZSktMT09PW8mJihzPSExLG89bCsxKSx0PT09U2U/LTE9PT1yP3I9bDoxIT09YyYmKGM9MSk6LTEhPT1yJiYoYz0tMSk7ZWxzZSBpZighcyl7YT1sKzE7YnJlYWt9fWlmKC0xIT09byl7Y29uc3QgaT0wPT09YSYmbj8xOmE7LTE9PT1yfHwwPT09Y3x8MT09PWMmJnI9PT1vLTEmJnI9PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGksbyk6KHQubmFtZT1lLnNsaWNlKGksciksdC5iYXNlPWUuc2xpY2UoaSxvKSx0LmV4dD1lLnNsaWNlKHIsbykpfXJldHVybiBhPjA/dC5kaXI9ZS5zbGljZSgwLGEtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07V2Uud2luMzI9emUud2luMzI9emUsV2UucG9zaXg9emUucG9zaXg9V2UsTWU/emUubm9ybWFsaXplOldlLm5vcm1hbGl6ZSxNZT96ZS5yZXNvbHZlOldlLnJlc29sdmUsTWU/emUucmVsYXRpdmU6V2UucmVsYXRpdmUsTWU/emUuZGlybmFtZTpXZS5kaXJuYW1lLE1lP3plLmJhc2VuYW1lOldlLmJhc2VuYW1lLE1lP3plLmV4dG5hbWU6V2UuZXh0bmFtZSxNZT96ZS5zZXA6V2Uuc2VwO2NvbnN0IE9lPS9eXHdbXHdcZCsuLV0qJC8sUGU9L15cLy8scWU9L15cL1wvLztjb25zdCBGZT0iIixCZT0iLyIsVmU9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IEtlPWNsYXNzIGV7c3RhdGljIGlzVXJpKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8ISF0JiYoInN0cmluZyI9PXR5cGVvZiB0LmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmInN0cmluZyI9PXR5cGVvZiB0LnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIHQuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIHQuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b1N0cmluZyl9Y29uc3RydWN0b3IoZSx0LG4saSxyLGE9ITEpeyJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fEZlLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHxGZSx0aGlzLnBhdGg9ZS5wYXRofHxGZSx0aGlzLnF1ZXJ5PWUucXVlcnl8fEZlLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8RmUpOih0aGlzLnNjaGVtZT1mdW5jdGlvbihlLHQpe3JldHVybiBlfHx0P2U6ImZpbGUifShlLGEpLHRoaXMuYXV0aG9yaXR5PXR8fEZlLHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09QmUmJih0PUJlK3QpOnQ9QmV9cmV0dXJuIHR9KHRoaXMuc2NoZW1lLG58fEZlKSx0aGlzLnF1ZXJ5PWl8fEZlLHRoaXMuZnJhZ21lbnQ9cnx8RmUsZnVuY3Rpb24oZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7ZS5hdXRob3JpdHl9IiwgcGF0aDogIiR7ZS5wYXRofSIsIHF1ZXJ5OiAiJHtlLnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtlLmZyYWdtZW50fSJ9YCk7aWYoZS5zY2hlbWUmJiFPZS50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighUGUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYocWUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfSh0aGlzLGEpKX1nZXQgZnNQYXRoKCl7cmV0dXJuIFllKHRoaXMsITEpfXdpdGgoZSl7aWYoIWUpcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTp0LGF1dGhvcml0eTpuLHBhdGg6aSxxdWVyeTpyLGZyYWdtZW50OmF9PWU7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9RmUpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49RmUpLHZvaWQgMD09PWk/aT10aGlzLnBhdGg6bnVsbD09PWkmJihpPUZlKSx2b2lkIDA9PT1yP3I9dGhpcy5xdWVyeTpudWxsPT09ciYmKHI9RmUpLHZvaWQgMD09PWE/YT10aGlzLmZyYWdtZW50Om51bGw9PT1hJiYoYT1GZSksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJmk9PT10aGlzLnBhdGgmJnI9PT10aGlzLnF1ZXJ5JiZhPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBHZSh0LG4saSxyLGEpfXN0YXRpYyBwYXJzZShlLHQ9ITEpe2NvbnN0IG49VmUuZXhlYyhlKTtyZXR1cm4gbj9uZXcgR2UoblsyXXx8RmUsdHQobls0XXx8RmUpLHR0KG5bNV18fEZlKSx0dChuWzddfHxGZSksdHQobls5XXx8RmUpLHQpOm5ldyBHZShGZSxGZSxGZSxGZSxGZSl9c3RhdGljIGZpbGUoZSl7bGV0IHQ9RmU7aWYoUiYmKGU9ZS5yZXBsYWNlKC9cXC9nLEJlKSksZVswXT09PUJlJiZlWzFdPT09QmUpe2NvbnN0IG49ZS5pbmRleE9mKEJlLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPUJlKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fEJlKX1yZXR1cm4gbmV3IEdlKCJmaWxlIix0LGUsRmUsRmUpfXN0YXRpYyBmcm9tKGUsdCl7cmV0dXJuIG5ldyBHZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50LHQpfXN0YXRpYyBqb2luUGF0aCh0LC4uLm4pe2lmKCF0LnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IGk7cmV0dXJuIGk9UiYmImZpbGUiPT09dC5zY2hlbWU/ZS5maWxlKHplLmpvaW4oWWUodCwhMCksLi4ubikpLnBhdGg6V2Uuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOml9KX10b1N0cmluZyhlPSExKXtyZXR1cm4gUWUodGhpcyxlKX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe3ZhciBuLGk7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IEdlKHQpO3JldHVybiBlLl9mb3JtYXR0ZWQ9bnVsbCE9PShuPXQuZXh0ZXJuYWwpJiZ2b2lkIDAhPT1uP246bnVsbCxlLl9mc1BhdGg9dC5fc2VwPT09amUmJm51bGwhPT0oaT10LmZzUGF0aCkmJnZvaWQgMCE9PWk/aTpudWxsLGV9fXJldHVybiB0fX07Y29uc3QgamU9Uj8xOnZvaWQgMDtjbGFzcyBHZSBleHRlbmRzIEtle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1ZZSh0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGU9ITEpe3JldHVybiBlP1FlKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9UWUodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1qZSksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9fWNvbnN0ICRlPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gSmUoZSx0LG4pe2xldCBpLHI9LTE7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGEpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW98fG4mJjkxPT09b3x8biYmOTM9PT1vfHxuJiY1OD09PW8pLTEhPT1yJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsYSkpLHI9LTEpLHZvaWQgMCE9PWkmJihpKz1lLmNoYXJBdChhKSk7ZWxzZXt2b2lkIDA9PT1pJiYoaT1lLnN1YnN0cigwLGEpKTtjb25zdCB0PSRlW29dO3ZvaWQgMCE9PXQ/KC0xIT09ciYmKGkrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGEpKSxyPS0xKSxpKz10KTotMT09PXImJihyPWEpfX1yZXR1cm4tMSE9PXImJihpKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1pP2k6ZX1mdW5jdGlvbiBYZShlKXtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobik7MzU9PT1pfHw2Mz09PWk/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPSRlW2ldKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIFllKGUsdCl7bGV0IG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/YC8vJHtlLmF1dGhvcml0eX0ke2UucGF0aH1gOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsUiYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFFlKGUsdCl7Y29uc3Qgbj10P1hlOkplO2xldCBpPSIiLHtzY2hlbWU6cixhdXRob3JpdHk6YSxwYXRoOm8scXVlcnk6cyxmcmFnbWVudDpsfT1lO2lmKHImJihpKz1yLGkrPSI6IiksKGF8fCJmaWxlIj09PXIpJiYoaSs9QmUsaSs9QmUpLGEpe2xldCBlPWEuaW5kZXhPZigiQCIpO2lmKC0xIT09ZSl7Y29uc3QgdD1hLnN1YnN0cigwLGUpO2E9YS5zdWJzdHIoZSsxKSxlPXQubGFzdEluZGV4T2YoIjoiKSwtMT09PWU/aSs9bih0LCExLCExKTooaSs9bih0LnN1YnN0cigwLGUpLCExLCExKSxpKz0iOiIsaSs9bih0LnN1YnN0cihlKzEpLCExLCEwKSksaSs9IkAifWE9YS50b0xvd2VyQ2FzZSgpLGU9YS5sYXN0SW5kZXhPZigiOiIpLC0xPT09ZT9pKz1uKGEsITEsITApOihpKz1uKGEuc3Vic3RyKDAsZSksITEsITApLGkrPWEuc3Vic3RyKGUpKX1pZihvKXtpZihvLmxlbmd0aD49MyYmNDc9PT1vLmNoYXJDb2RlQXQoMCkmJjU4PT09by5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPW8uY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihvPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke28uc3Vic3RyKDMpfWApfWVsc2UgaWYoby5sZW5ndGg+PTImJjU4PT09by5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPW8uY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihvPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7by5zdWJzdHIoMil9YCl9aSs9bihvLCEwLCExKX1yZXR1cm4gcyYmKGkrPSI/IixpKz1uKHMsITEsITEpKSxsJiYoaSs9IiMiLGkrPXQ/bDpKZShsLCExLCExKSksaX1mdW5jdGlvbiBaZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1plKGUuc3Vic3RyKDMpKTplfX1jb25zdCBldD0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiB0dChlKXtyZXR1cm4gZS5tYXRjaChldCk/ZS5yZXBsYWNlKGV0LChlPT5aZShlKSkpOmV9bGV0IG50PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBlKHQsbil9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHModCl7cmV0dXJuIGUuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISFlJiYhIXQmJmUubGluZU51bWJlcj09PXQubGluZU51bWJlciYmZS5jb2x1bW49PT10LmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gZS5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGUuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLGk9MHx0LmxpbmVOdW1iZXI7aWYobj09PWkpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4taX1jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fSxpdD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLGkpe2U+bnx8ZT09PW4mJnQ+aT8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPWksdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPWkpfWlzRW1wdHkoKXtyZXR1cm4gZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIGUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj5lLmVuZENvbHVtbikpfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+PWUuZW5kQ29sdW1uKSl9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UodCl7cmV0dXJuIGUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCBpLHIsYSxvO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8oaT1uLnN0YXJ0TGluZU51bWJlcixyPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KGk9bi5zdGFydExpbmVOdW1iZXIscj1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKTooaT10LnN0YXJ0TGluZU51bWJlcixyPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KGE9bi5lbmRMaW5lTnVtYmVyLG89bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8oYT1uLmVuZExpbmVOdW1iZXIsbz1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihhPXQuZW5kTGluZU51bWJlcixvPXQuZW5kQ29sdW1uKSxuZXcgZShpLHIsYSxvKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIGUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCBpPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbixhPXQuZW5kTGluZU51bWJlcixvPXQuZW5kQ29sdW1uO2NvbnN0IHM9bi5zdGFydExpbmVOdW1iZXIsbD1uLnN0YXJ0Q29sdW1uLGM9bi5lbmRMaW5lTnVtYmVyLGg9bi5lbmRDb2x1bW47cmV0dXJuIGk8cz8oaT1zLHI9bCk6aT09PXMmJihyPU1hdGgubWF4KHIsbCkpLGE+Yz8oYT1jLG89aCk6YT09PWMmJihvPU1hdGgubWluKG8saCkpLGk+YXx8aT09PWEmJnI+bz9udWxsOm5ldyBlKGkscixhLG8pfWVxdWFsc1JhbmdlKHQpe3JldHVybiBlLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PXQuc3RhcnRDb2x1bW4mJmUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBlLmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IG50KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBlLmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBudChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IGUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IGUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbil9Y29sbGFwc2VUb1N0YXJ0KCl7cmV0dXJuIGUuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQodCl7cmV0dXJuIG5ldyBlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9Y29sbGFwc2VUb0VuZCgpe3JldHVybiBlLmNvbGxhcHNlVG9FbmQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9FbmQodCl7cmV0dXJuIG5ldyBlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWRlbHRhKHQpe3JldHVybiBuZXcgZSh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuc3RhcnRDb2x1bW4sdGhpcy5lbmRMaW5lTnVtYmVyK3QsdGhpcy5lbmRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXtpZihlJiZ0KXtjb25zdCBuPTB8ZS5zdGFydExpbmVOdW1iZXIsaT0wfHQuc3RhcnRMaW5lTnVtYmVyO2lmKG49PT1pKXtjb25zdCBuPTB8ZS5zdGFydENvbHVtbixpPTB8dC5zdGFydENvbHVtbjtpZihuPT09aSl7Y29uc3Qgbj0wfGUuZW5kTGluZU51bWJlcixpPTB8dC5lbmRMaW5lTnVtYmVyO2lmKG49PT1pKXtyZXR1cm4oMHxlLmVuZENvbHVtbiktKDB8dC5lbmRDb2x1bW4pfXJldHVybiBuLWl9cmV0dXJuIG4taX1yZXR1cm4gbi1pfXJldHVybihlPzE6MCktKHQ/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyhlLHQpe3JldHVybiBlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/ZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbj9lLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyP2Uuc3RhcnRDb2x1bW4tdC5zdGFydENvbHVtbjplLnN0YXJ0TGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcjplLmVuZENvbHVtbi10LmVuZENvbHVtbjplLmVuZExpbmVOdW1iZXItdC5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXMoZSl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj5lLnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O3ZhciBydDtmdW5jdGlvbiBhdChlKXtyZXR1cm4gZTwwPzA6ZT4yNTU/MjU1OjB8ZX1mdW5jdGlvbiBvdChlKXtyZXR1cm4gZTwwPzA6ZT40Mjk0OTY3Mjk1PzQyOTQ5NjcyOTU6MHxlfSFmdW5jdGlvbihlKXtlLmlzTGVzc1RoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MH0sZS5pc0dyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiBlPjB9LGUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfShydHx8KHJ0PXt9KSk7Y2xhc3Mgc3R7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT1vdChlKTtjb25zdCBuPXRoaXMudmFsdWVzLGk9dGhpcy5wcmVmaXhTdW0scj10Lmxlbmd0aDtyZXR1cm4gMCE9PXImJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgrciksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlKSxlK3IpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChpLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT1vdChlKSx0PW90KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPW90KGUpLHQ9b3QodCk7Y29uc3Qgbj10aGlzLnZhbHVlcyxpPXRoaXMucHJlZml4U3VtO2lmKGU+PW4ubGVuZ3RoKXJldHVybiExO2NvbnN0IHI9bi5sZW5ndGgtZTtyZXR1cm4gdD49ciYmKHQ9ciksMCE9PXQmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChpLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT1vdChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0oZSl7aWYoZTw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVtlXTtsZXQgdD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09dCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHQrKyksZT49dGhpcy52YWx1ZXMubGVuZ3RoJiYoZT10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBuPXQ7bjw9ZTtuKyspdGhpcy5wcmVmaXhTdW1bbl09dGhpcy5wcmVmaXhTdW1bbi0xXSt0aGlzLnZhbHVlc1tuXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSxlKSx0aGlzLnByZWZpeFN1bVtlXX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxuPXRoaXMudmFsdWVzLmxlbmd0aC0xLGk9MCxyPTAsYT0wO2Zvcig7dDw9bjspaWYoaT10KyhuLXQpLzJ8MCxyPXRoaXMucHJlZml4U3VtW2ldLGE9ci10aGlzLnZhbHVlc1tpXSxlPGEpbj1pLTE7ZWxzZXtpZighKGU+PXIpKWJyZWFrO3Q9aSsxfXJldHVybiBuZXcgbHQoaSxlLWEpfX1jbGFzcyBsdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNsYXNzIGN0e2NvbnN0cnVjdG9yKGUsdCxuLGkpe3RoaXMuX3VyaT1lLHRoaXMuX2xpbmVzPXQsdGhpcy5fZW9sPW4sdGhpcy5fdmVyc2lvbklkPWksdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiBudWxsPT09dGhpcy5fY2FjaGVkVGV4dFZhbHVlJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKGUpe2UuZW9sJiZlLmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD1lLmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2NvbnN0IHQ9ZS5jaGFuZ2VzO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UoZS5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgbnQoZS5yYW5nZS5zdGFydExpbmVOdW1iZXIsZS5yYW5nZS5zdGFydENvbHVtbiksZS50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9ZS52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgZT10aGlzLl9lb2wubGVuZ3RoLHQ9dGhpcy5fbGluZXMubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KHQpO2ZvcihsZXQgaT0wO2k8dDtpKyspbltpXT10aGlzLl9saW5lc1tpXS5sZW5ndGgrZTt0aGlzLl9saW5lU3RhcnRzPW5ldyBzdChuKX19X3NldExpbmVUZXh0KGUsdCl7dGhpcy5fbGluZXNbZV09dCx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKGUsdGhpcy5fbGluZXNbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZShlKXtpZihlLnN0YXJ0TGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcil0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXMoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKTtlbHNle2lmKGUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQoZS5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSl9fV9hY2NlcHRJbnNlcnRUZXh0KGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBuPXQuc3BsaXQoL1xyXG58XHJ8XG4vKTtpZigxPT09bi5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5fc2V0TGluZVRleHQoZS5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuY29sdW1uLTEpK25bMF0rdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSk7bltuLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSk7Y29uc3QgaT1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtMSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0KyspdGhpcy5fbGluZXMuc3BsaWNlKGUubGluZU51bWJlcit0LTEsMCxuW3RdKSxpW3QtMV09blt0XS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyhlLmxpbmVOdW1iZXIsaSl9fWNvbnN0IGh0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IGR0PW5ldyBmO2Z1bmN0aW9uIHV0KGUsdCxuLGkscil7aWYocnx8KHI9bC5maXJzdChkdCkpLG4ubGVuZ3RoPnIubWF4TGVuKXtsZXQgYT1lLXIubWF4TGVuLzI7cmV0dXJuIGE8MD9hPTA6aSs9YSx1dChlLHQsbj1uLnN1YnN0cmluZyhhLGUrci5tYXhMZW4vMiksaSxyKX1jb25zdCBhPURhdGUubm93KCksbz1lLTEtaTtsZXQgcz0tMSxjPW51bGw7Zm9yKGxldCBlPTE7IShEYXRlLm5vdygpLWE+PXIudGltZUJ1ZGdldCk7ZSsrKXtjb25zdCBpPW8tci53aW5kb3dTaXplKmU7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxpKTtjb25zdCBhPW10KHQsbixvLHMpO2lmKCFhJiZjKWJyZWFrO2lmKGM9YSxpPD0wKWJyZWFrO3M9aX1pZihjKXtjb25zdCBlPXt3b3JkOmNbMF0sc3RhcnRDb2x1bW46aSsxK2MuaW5kZXgsZW5kQ29sdW1uOmkrMStjLmluZGV4K2NbMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCxlfXJldHVybiBudWxsfWZ1bmN0aW9uIG10KGUsdCxuLGkpe2xldCByO2Zvcig7cj1lLmV4ZWModCk7KXtjb25zdCB0PXIuaW5kZXh8fDA7aWYodDw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIHI7aWYoaT4wJiZ0PmkpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9ZHQudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1hdChlKTt0aGlzLl9kZWZhdWx0VmFsdWU9dCx0aGlzLl9hc2NpaU1hcD1wdC5fY3JlYXRlQXNjaWlNYXAodCksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcChlKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KDI1Nik7cmV0dXJuIHQuZmlsbChlKSx0fXNldChlLHQpe2NvbnN0IG49YXQodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9Y2xlYXIoKXt0aGlzLl9hc2NpaU1hcC5maWxsKHRoaXMuX2RlZmF1bHRWYWx1ZSksdGhpcy5fbWFwLmNsZWFyKCl9fWNsYXNzIGZ0e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCByPTAsYT1lKnQ7cjxhO3IrKylpW3JdPW47dGhpcy5fZGF0YT1pLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyBndHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2NvbnN0W3IsYSxvXT1lW2ldO2E+dCYmKHQ9YSkscj5uJiYobj1yKSxvPm4mJihuPW8pfXQrKyxuKys7Y29uc3QgaT1uZXcgZnQobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixyLGFdPWVbdF07aS5zZXQobixyLGEpfXRoaXMuX3N0YXRlcz1pLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBidD1udWxsO2xldCBfdD1udWxsO2NsYXNzIHZ0e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixpLHIpe2xldCBhPXItMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChhKTtpZigyIT09ZS5nZXQobikpYnJlYWs7YS0tfXdoaWxlKGE+aSk7aWYoaT4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChpLTEpLG49dC5jaGFyQ29kZUF0KGEpOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZhLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjppKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjphKzJ9LHVybDp0LnN1YnN0cmluZyhpLGErMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1idCYmKGJ0PW5ldyBndChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksYnR9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09X3Qpe190PW5ldyBwdCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspX3Quc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylfdC5zZXQodC5jaGFyQ29kZUF0KGUpLDIpfXJldHVybiBfdH0oKSxpPVtdO2ZvcihsZXQgcj0xLGE9ZS5nZXRMaW5lQ291bnQoKTtyPD1hO3IrKyl7Y29uc3QgYT1lLmdldExpbmVDb250ZW50KHIpLG89YS5sZW5ndGg7bGV0IHM9MCxsPTAsYz0wLGg9MSxkPSExLHU9ITEsbT0hMSxwPSExO2Zvcig7czxvOyl7bGV0IGU9ITE7Y29uc3Qgbz1hLmNoYXJDb2RlQXQocyk7aWYoMTM9PT1oKXtsZXQgdDtzd2l0Y2gobyl7Y2FzZSA0MDpkPSEwLHQ9MDticmVhaztjYXNlIDQxOnQ9ZD8wOjE7YnJlYWs7Y2FzZSA5MTptPSEwLHU9ITAsdD0wO2JyZWFrO2Nhc2UgOTM6bT0hMSx0PXU/MDoxO2JyZWFrO2Nhc2UgMTIzOnA9ITAsdD0wO2JyZWFrO2Nhc2UgMTI1OnQ9cD8wOjE7YnJlYWs7Y2FzZSAzOTpjYXNlIDM0OmNhc2UgOTY6dD1jPT09bz8xOjM5PT09Y3x8MzQ9PT1jfHw5Nj09PWM/MDoxO2JyZWFrO2Nhc2UgNDI6dD00Mj09PWM/MTowO2JyZWFrO2Nhc2UgMTI0OnQ9MTI0PT09Yz8xOjA7YnJlYWs7Y2FzZSAzMjp0PW0/MDoxO2JyZWFrO2RlZmF1bHQ6dD1uLmdldChvKX0xPT09dCYmKGkucHVzaCh2dC5fY3JlYXRlTGluayhuLGEscixsLHMpKSxlPSEwKX1lbHNlIGlmKDEyPT09aCl7bGV0IHQ7OTE9PT1vPyh1PSEwLHQ9MCk6dD1uLmdldChvKSwxPT09dD9lPSEwOmg9MTN9ZWxzZSBoPXQubmV4dFN0YXRlKGgsbyksMD09PWgmJihlPSEwKTtlJiYoaD0xLGQ9ITEsdT0hMSxwPSExLGw9cysxLGM9bykscysrfTEzPT09aCYmaS5wdXNoKHZ0Ll9jcmVhdGVMaW5rKG4sYSxyLGwsbykpfXJldHVybiBpfX1jbGFzcyB3dHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLGkscil7aWYoZSYmdCl7Y29uc3Qgbj10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldCh0LHIpO2lmKG4pcmV0dXJue3JhbmdlOmUsdmFsdWU6bn19aWYobiYmaSl7Y29uc3QgZT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChpLHIpO2lmKGUpcmV0dXJue3JhbmdlOm4sdmFsdWU6ZX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KGUsdCl7Y29uc3Qgbj10aGlzLm51bWJlclJlcGxhY2UoZSx0KTtyZXR1cm4gbnVsbCE9PW4/bjp0aGlzLnRleHRSZXBsYWNlKGUsdCl9bnVtYmVyUmVwbGFjZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsZS5sZW5ndGgtKGUubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IGk9TnVtYmVyKGUpO2NvbnN0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4oaSl8fGlzTmFOKHIpfHxpIT09cj9udWxsOjAhPT1pfHx0PyhpPU1hdGguZmxvb3IoaSpuKSxpKz10P246LW4sU3RyaW5nKGkvbikpOm51bGx9dGV4dFJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCxlLHQpfXZhbHVlU2V0c1JlcGxhY2UoZSx0LG4pe2xldCBpPW51bGw7Zm9yKGxldCByPTAsYT1lLmxlbmd0aDtudWxsPT09aSYmcjxhO3IrKylpPXRoaXMudmFsdWVTZXRSZXBsYWNlKGVbcl0sdCxuKTtyZXR1cm4gaX12YWx1ZVNldFJlcGxhY2UoZSx0LG4pe2xldCBpPWUuaW5kZXhPZih0KTtyZXR1cm4gaT49MD8oaSs9bj8xOi0xLGk8MD9pPWUubGVuZ3RoLTE6aSU9ZS5sZW5ndGgsZVtpXSk6bnVsbH19d3QuSU5TVEFOQ0U9bmV3IHd0O2NvbnN0IHl0PU9iamVjdC5mcmVlemUoKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSkpO3ZhciBUdDshZnVuY3Rpb24oZSl7ZS5pc0NhbmNlbGxhdGlvblRva2VuPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5Ob25lfHx0PT09ZS5DYW5jZWxsZWR8fCh0IGluc3RhbmNlb2Yga3R8fCEoIXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCkpfSxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6Vy5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6eXR9KX0oVHR8fChUdD17fSkpO2NsYXNzIGt0e2NvbnN0cnVjdG9yKCl7dGhpcy5faXNDYW5jZWxsZWQ9ITEsdGhpcy5fZW1pdHRlcj1udWxsfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD95dDoodGhpcy5fZW1pdHRlcnx8KHRoaXMuX2VtaXR0ZXI9bmV3IEIpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgU3R7Y29uc3RydWN0b3IoZSl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj1lJiZlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBrdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBrdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49VHQuQ2FuY2VsbGVkfWRpc3Bvc2UoZT0hMSl7dmFyIHQ7ZSYmdGhpcy5jYW5jZWwoKSxudWxsPT09KHQ9dGhpcy5fcGFyZW50TGlzdGVuZXIpfHx2b2lkIDA9PT10fHx0LmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIGt0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49VHQuTm9uZX19Y2xhc3MgeHR7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBMdD1uZXcgeHQsQ3Q9bmV3IHh0LEV0PW5ldyB4dCxBdD1uZXcgQXJyYXkoMjMwKSxNdD1PYmplY3QuY3JlYXRlKG51bGwpLFJ0PU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIE50OyFmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMSwxLCJIeXBlciIsMCxlLDAsZSxlLGVdLFsxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMSw0LCJGbkxvY2siLDAsZSwwLGUsZSxlXSxbMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzEsNywiVHVyYm8iLDAsZSwwLGUsZSxlXSxbMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFsxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFswLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFswLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFswLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFswLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFswLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFswLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFswLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFswLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFswLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFswLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFswLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFswLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzEsNDYsIkVudGVyIiwzLCJFbnRlciIsMTMsIlZLX1JFVFVSTiIsZSxlXSxbMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsxLDQ5LCJUYWIiLDIsIlRhYiIsOSwiVktfVEFCIixlLGVdLFsxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLGUsZV0sWzAsNTEsIk1pbnVzIiw4OCwiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzAsNTIsIkVxdWFsIiw4NiwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFswLDUzLCJCcmFja2V0TGVmdCIsOTIsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbMCw1NCwiQnJhY2tldFJpZ2h0Iiw5NCwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFswLDU1LCJCYWNrc2xhc2giLDkzLCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbMCw1NywiU2VtaWNvbG9uIiw4NSwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFswLDU4LCJRdW90ZSIsOTUsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbMCw1OSwiQmFja3F1b3RlIiw5MSwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFswLDYwLCJDb21tYSIsODcsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFswLDYxLCJQZXJpb2QiLDg5LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFswLDYyLCJTbGFzaCIsOTAsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMSw3NiwiUHJpbnRTY3JlZW4iLDAsZSwwLGUsZSxlXSxbMSw3NywiU2Nyb2xsTG9jayIsODQsIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIixlLGVdLFsxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzEsODksIk51bUxvY2siLDgzLCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEsOTAsIk51bXBhZERpdmlkZSIsMTEzLCJOdW1QYWRfRGl2aWRlIiwxMTEsIlZLX0RJVklERSIsZSxlXSxbMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwOCwiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTExLCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEsOTMsIk51bXBhZEFkZCIsMTA5LCJOdW1QYWRfQWRkIiwxMDcsIlZLX0FERCIsZSxlXSxbMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbMSw5NSwiTnVtcGFkMSIsOTksIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFsxLDk2LCJOdW1wYWQyIiwxMDAsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFsxLDk3LCJOdW1wYWQzIiwxMDEsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIixlLGVdLFsxLDk4LCJOdW1wYWQ0IiwxMDIsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbMSw5OSwiTnVtcGFkNSIsMTAzLCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzEsMTAwLCJOdW1wYWQ2IiwxMDQsIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsZSxlXSxbMSwxMDEsIk51bXBhZDciLDEwNSwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxLDEwMiwiTnVtcGFkOCIsMTA2LCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEsMTAzLCJOdW1wYWQ5IiwxMDcsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsZSxlXSxbMSwxMDQsIk51bXBhZDAiLDk4LCJOdW1QYWQwIiw5NiwiVktfTlVNUEFEMCIsZSxlXSxbMSwxMDUsIk51bXBhZERlY2ltYWwiLDExMiwiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbMCwxMDYsIkludGxCYWNrc2xhc2giLDk3LCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzEsMTA4LCJQb3dlciIsMCxlLDAsZSxlLGVdLFsxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFsxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFsxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzEsMTE3LCJGMjAiLDc4LCJGMjAiLDEzMSwiVktfRjIwIixlLGVdLFsxLDExOCwiRjIxIiw3OSwiRjIxIiwxMzIsIlZLX0YyMSIsZSxlXSxbMSwxMTksIkYyMiIsODAsIkYyMiIsMTMzLCJWS19GMjIiLGUsZV0sWzEsMTIwLCJGMjMiLDgxLCJGMjMiLDEzNCwiVktfRjIzIixlLGVdLFsxLDEyMSwiRjI0Iiw4MiwiRjI0IiwxMzUsIlZLX0YyNCIsZSxlXSxbMSwxMjIsIk9wZW4iLDAsZSwwLGUsZSxlXSxbMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFsxLDEyNSwiQWdhaW4iLDAsZSwwLGUsZSxlXSxbMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFsxLDEyOCwiQ29weSIsMCxlLDAsZSxlLGVdLFsxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTE3LCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLGUsZV0sWzEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTgsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFsxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTksIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMSwxMzQsIk51bXBhZENvbW1hIiwxMTAsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFswLDEzNSwiSW50bFJvIiwxMTUsIkFCTlRfQzEiLDE5MywiVktfQUJOVF9DMSIsZSxlXSxbMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzEsMTM4LCJDb252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFsxLDE0MSwiTGFuZzIiLDAsZSwwLGUsZSxlXSxbMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFsxLDE0NCwiTGFuZzUiLDAsZSwwLGUsZSxlXSxbMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFsxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLGUsMCxlLGUsZV0sWzEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLGUsMCxlLGUsZV0sWzEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsZSwwLGUsZSxlXSxbMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzEsMTU1LCJOdW1wYWRDbGVhciIsMTMxLCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFsxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCxlLDAsZSxlLGVdLFsxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbMSwwLGUsNiwiQWx0IiwxOCwiVktfTUVOVSIsZSxlXSxbMSwwLGUsNTcsIk1ldGEiLDkxLCJWS19DT01NQU5EIixlLGVdLFsxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbMSwxNTgsIlNoaWZ0TGVmdCIsNCxlLDAsIlZLX0xTSElGVCIsZSxlXSxbMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbMSwxNjIsIlNoaWZ0UmlnaHQiLDQsZSwwLCJWS19SU0hJRlQiLGUsZV0sWzEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFsxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMSwxNjYsIkJyaWdodG5lc3NEb3duIiwwLGUsMCxlLGUsZV0sWzEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzEsMTY5LCJNZWRpYUZhc3RGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxLDE3MSwiTWVkaWFUcmFja05leHQiLDEyNCwiTWVkaWFUcmFja05leHQiLDE3NiwiVktfTUVESUFfTkVYVF9UUkFDSyIsZSxlXSxbMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTI1LCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMSwxNzMsIk1lZGlhU3RvcCIsMTI2LCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTI3LCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFsxLDE3NiwiTWVkaWFTZWxlY3QiLDEyOCwiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMSwxNzcsIkxhdW5jaE1haWwiLDEyOSwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsZSxlXSxbMSwxNzgsIkxhdW5jaEFwcDIiLDEzMCwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMSwxODAsIlNlbGVjdFRhc2siLDAsZSwwLGUsZSxlXSxbMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMjAsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzEsMTgzLCJCcm93c2VySG9tZSIsMTIxLCJCcm93c2VySG9tZSIsMTcyLCJWS19CUk9XU0VSX0hPTUUiLGUsZV0sWzEsMTg0LCJCcm93c2VyQmFjayIsMTIyLCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTIzLCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMSwxODcsIkJyb3dzZXJSZWZyZXNoIiwwLGUsMCwiVktfQlJPV1NFUl9SRUZSRVNIIixlLGVdLFsxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFsxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFsxLDE5MCwiTWFpbFJlcGx5IiwwLGUsMCxlLGUsZV0sWzEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMSwwLGUsMTE0LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxLDAsZSwxMTYsIkFCTlRfQzIiLDE5NCwiVktfQUJOVF9DMiIsZSxlXSxbMSwwLGUsOTYsIk9FTV84IiwyMjMsIlZLX09FTV84IixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0pVTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkpJIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BQ0NFUFQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJJTlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IRUxQIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQUNLRVQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BVFROIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VSRU9GIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05BTUUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10saT1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LHIsYSxvLHMsbCxjLGgsZF09ZTtpZihpW3JdfHwoaVtyXT0hMCxNdFthXT1yLFJ0W2EudG9Mb3dlckNhc2UoKV09ciksIW5bb10pe2lmKG5bb109ITAsIXMpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtvfSBhcm91bmQgc2NhbiBjb2RlICR7YX1gKTtMdC5kZWZpbmUobyxzKSxDdC5kZWZpbmUobyxofHxzKSxFdC5kZWZpbmUobyxkfHxofHxzKX1sJiYoQXRbbF09byl9fSgpLGZ1bmN0aW9uKGUpe2UudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEx0LmtleUNvZGVUb1N0cihlKX0sZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBMdC5zdHJUb0tleUNvZGUoZSl9LGUudG9Vc2VyU2V0dGluZ3NVUz1mdW5jdGlvbihlKXtyZXR1cm4gQ3Qua2V5Q29kZVRvU3RyKGUpfSxlLnRvVXNlclNldHRpbmdzR2VuZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gRXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21Vc2VyU2V0dGluZ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIEN0LnN0clRvS2V5Q29kZShlKXx8RXQuc3RyVG9LZXlDb2RlKGUpfSxlLnRvRWxlY3Ryb25BY2NlbGVyYXRvcj1mdW5jdGlvbihlKXtpZihlPj05OCYmZTw9MTEzKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBMdC5rZXlDb2RlVG9TdHIoZSl9fShOdHx8KE50PXt9KSk7Y2xhc3MgSXQgZXh0ZW5kcyBpdHtjb25zdHJ1Y3RvcihlLHQsbixpKXtzdXBlcihlLHQsbixpKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj1lLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49dCx0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1uLHRoaXMucG9zaXRpb25Db2x1bW49aX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbihlKXtyZXR1cm4gSXQuc2VsZWN0aW9uc0VxdWFsKHRoaXMsZSl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbChlLHQpe3JldHVybiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZlLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dC5zZWxlY3Rpb25TdGFydENvbHVtbiYmZS5wb3NpdGlvbkxpbmVOdW1iZXI9PT10LnBvc2l0aW9uTGluZU51bWJlciYmZS5wb3NpdGlvbkNvbHVtbj09PXQucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgSXQodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpOm5ldyBJdChlLHQsdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IG50KHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyBudCh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBJdChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgSXQodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLGUsdCl9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgSXQoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGZyb21SYW5nZShlLHQpe3JldHVybiAwPT09dD9uZXcgSXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm5ldyBJdChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24oZSl7cmV0dXJuIG5ldyBJdChlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcixlLnNlbGVjdGlvblN0YXJ0Q29sdW1uLGUucG9zaXRpb25MaW5lTnVtYmVyLGUucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwoZSx0KXtpZihlJiYhdHx8IWUmJnQpcmV0dXJuITE7aWYoIWUmJiF0KXJldHVybiEwO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbChlW25dLHRbbl0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uQ29sdW1ufXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKGUsdCxuLGkscil7cmV0dXJuIDA9PT1yP25ldyBJdChlLHQsbixpKTpuZXcgSXQobixpLGUsdCl9fWNvbnN0IFV0PU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gSHQoZSx0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2NvbnN0IG49VXRbdF07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcmVmZXJlbmNlcyBhbiB1bmtub3duIGNvZGljb246ICR7dH1gKTt0PW59cmV0dXJuIFV0W2VdPXQse2lkOmV9fWNvbnN0IHp0PXthZGQ6SHQoImFkZCIsNmU0KSxwbHVzOkh0KCJwbHVzIiw2ZTQpLGdpc3ROZXc6SHQoImdpc3QtbmV3Iiw2ZTQpLHJlcG9DcmVhdGU6SHQoInJlcG8tY3JlYXRlIiw2ZTQpLGxpZ2h0YnVsYjpIdCgibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOkh0KCJsaWdodC1idWxiIiw2MDAwMSkscmVwbzpIdCgicmVwbyIsNjAwMDIpLHJlcG9EZWxldGU6SHQoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6SHQoImdpc3QtZm9yayIsNjAwMDMpLHJlcG9Gb3JrZWQ6SHQoInJlcG8tZm9ya2VkIiw2MDAwMyksZ2l0UHVsbFJlcXVlc3Q6SHQoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDpIdCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLDYwMDA0KSxyZWNvcmRLZXlzOkh0KCJyZWNvcmQta2V5cyIsNjAwMDUpLGtleWJvYXJkOkh0KCJrZXlib2FyZCIsNjAwMDUpLHRhZzpIdCgidGFnIiw2MDAwNiksdGFnQWRkOkh0KCJ0YWctYWRkIiw2MDAwNiksdGFnUmVtb3ZlOkh0KCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOkh0KCJwZXJzb24iLDYwMDA3KSxwZXJzb25Gb2xsb3c6SHQoInBlcnNvbi1mb2xsb3ciLDYwMDA3KSxwZXJzb25PdXRsaW5lOkh0KCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDpIdCgicGVyc29uLWZpbGxlZCIsNjAwMDcpLGdpdEJyYW5jaDpIdCgiZ2l0LWJyYW5jaCIsNjAwMDgpLGdpdEJyYW5jaENyZWF0ZTpIdCgiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6SHQoImdpdC1icmFuY2gtZGVsZXRlIiw2MDAwOCksc291cmNlQ29udHJvbDpIdCgic291cmNlLWNvbnRyb2wiLDYwMDA4KSxtaXJyb3I6SHQoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzpIdCgibWlycm9yLXB1YmxpYyIsNjAwMDkpLHN0YXI6SHQoInN0YXIiLDYwMDEwKSxzdGFyQWRkOkh0KCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6SHQoInN0YXItZGVsZXRlIiw2MDAxMCksc3RhckVtcHR5Okh0KCJzdGFyLWVtcHR5Iiw2MDAxMCksY29tbWVudDpIdCgiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6SHQoImNvbW1lbnQtYWRkIiw2MDAxMSksYWxlcnQ6SHQoImFsZXJ0Iiw2MDAxMiksd2FybmluZzpIdCgid2FybmluZyIsNjAwMTIpLHNlYXJjaDpIdCgic2VhcmNoIiw2MDAxMyksc2VhcmNoU2F2ZTpIdCgic2VhcmNoLXNhdmUiLDYwMDEzKSxsb2dPdXQ6SHQoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0Okh0KCJzaWduLW91dCIsNjAwMTQpLGxvZ0luOkh0KCJsb2ctaW4iLDYwMDE1KSxzaWduSW46SHQoInNpZ24taW4iLDYwMDE1KSxleWU6SHQoImV5ZSIsNjAwMTYpLGV5ZVVud2F0Y2g6SHQoImV5ZS11bndhdGNoIiw2MDAxNiksZXllV2F0Y2g6SHQoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDpIdCgiY2lyY2xlLWZpbGxlZCIsNjAwMTcpLHByaW1pdGl2ZURvdDpIdCgicHJpbWl0aXZlLWRvdCIsNjAwMTcpLGNsb3NlRGlydHk6SHQoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50Okh0KCJkZWJ1Zy1icmVha3BvaW50Iiw2MDAxNyksZGVidWdCcmVha3BvaW50RGlzYWJsZWQ6SHQoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLDYwMDE3KSxkZWJ1Z0hpbnQ6SHQoImRlYnVnLWhpbnQiLDYwMDE3KSxwcmltaXRpdmVTcXVhcmU6SHQoInByaW1pdGl2ZS1zcXVhcmUiLDYwMDE4KSxlZGl0Okh0KCJlZGl0Iiw2MDAxOSkscGVuY2lsOkh0KCJwZW5jaWwiLDYwMDE5KSxpbmZvOkh0KCJpbmZvIiw2MDAyMCksaXNzdWVPcGVuZWQ6SHQoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOkh0KCJnaXN0LXByaXZhdGUiLDYwMDIxKSxnaXRGb3JrUHJpdmF0ZTpIdCgiZ2l0LWZvcmstcHJpdmF0ZSIsNjAwMjEpLGxvY2s6SHQoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOkh0KCJtaXJyb3ItcHJpdmF0ZSIsNjAwMjEpLGNsb3NlOkh0KCJjbG9zZSIsNjAwMjIpLHJlbW92ZUNsb3NlOkh0KCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4Okh0KCJ4Iiw2MDAyMikscmVwb1N5bmM6SHQoInJlcG8tc3luYyIsNjAwMjMpLHN5bmM6SHQoInN5bmMiLDYwMDIzKSxjbG9uZTpIdCgiY2xvbmUiLDYwMDI0KSxkZXNrdG9wRG93bmxvYWQ6SHQoImRlc2t0b3AtZG93bmxvYWQiLDYwMDI0KSxiZWFrZXI6SHQoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6SHQoIm1pY3Jvc2NvcGUiLDYwMDI1KSx2bTpIdCgidm0iLDYwMDI2KSxkZXZpY2VEZXNrdG9wOkh0KCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6SHQoImZpbGUiLDYwMDI3KSxmaWxlVGV4dDpIdCgiZmlsZS10ZXh0Iiw2MDAyNyksbW9yZTpIdCgibW9yZSIsNjAwMjgpLGVsbGlwc2lzOkh0KCJlbGxpcHNpcyIsNjAwMjgpLGtlYmFiSG9yaXpvbnRhbDpIdCgia2ViYWItaG9yaXpvbnRhbCIsNjAwMjgpLG1haWxSZXBseTpIdCgibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5Okh0KCJyZXBseSIsNjAwMjkpLG9yZ2FuaXphdGlvbjpIdCgib3JnYW5pemF0aW9uIiw2MDAzMCksb3JnYW5pemF0aW9uRmlsbGVkOkh0KCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTpIdCgib3JnYW5pemF0aW9uLW91dGxpbmUiLDYwMDMwKSxuZXdGaWxlOkh0KCJuZXctZmlsZSIsNjAwMzEpLGZpbGVBZGQ6SHQoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOkh0KCJuZXctZm9sZGVyIiw2MDAzMiksZmlsZURpcmVjdG9yeUNyZWF0ZTpIdCgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIiw2MDAzMiksdHJhc2g6SHQoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46SHQoInRyYXNoY2FuIiw2MDAzMyksaGlzdG9yeTpIdCgiaGlzdG9yeSIsNjAwMzQpLGNsb2NrOkh0KCJjbG9jayIsNjAwMzQpLGZvbGRlcjpIdCgiZm9sZGVyIiw2MDAzNSksZmlsZURpcmVjdG9yeTpIdCgiZmlsZS1kaXJlY3RvcnkiLDYwMDM1KSxzeW1ib2xGb2xkZXI6SHQoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOkh0KCJsb2dvLWdpdGh1YiIsNjAwMzYpLG1hcmtHaXRodWI6SHQoIm1hcmstZ2l0aHViIiw2MDAzNiksZ2l0aHViOkh0KCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDpIdCgidGVybWluYWwiLDYwMDM3KSxjb25zb2xlOkh0KCJjb25zb2xlIiw2MDAzNykscmVwbDpIdCgicmVwbCIsNjAwMzcpLHphcDpIdCgiemFwIiw2MDAzOCksc3ltYm9sRXZlbnQ6SHQoInN5bWJvbC1ldmVudCIsNjAwMzgpLGVycm9yOkh0KCJlcnJvciIsNjAwMzkpLHN0b3A6SHQoInN0b3AiLDYwMDM5KSx2YXJpYWJsZTpIdCgidmFyaWFibGUiLDYwMDQwKSxzeW1ib2xWYXJpYWJsZTpIdCgic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6SHQoImFycmF5Iiw2MDA0Miksc3ltYm9sQXJyYXk6SHQoInN5bWJvbC1hcnJheSIsNjAwNDIpLHN5bWJvbE1vZHVsZTpIdCgic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6SHQoInN5bWJvbC1wYWNrYWdlIiw2MDA0Myksc3ltYm9sTmFtZXNwYWNlOkh0KCJzeW1ib2wtbmFtZXNwYWNlIiw2MDA0Myksc3ltYm9sT2JqZWN0Okh0KCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOkh0KCJzeW1ib2wtbWV0aG9kIiw2MDA0NCksc3ltYm9sRnVuY3Rpb246SHQoInN5bWJvbC1mdW5jdGlvbiIsNjAwNDQpLHN5bWJvbENvbnN0cnVjdG9yOkh0KCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOkh0KCJzeW1ib2wtYm9vbGVhbiIsNjAwNDcpLHN5bWJvbE51bGw6SHQoInN5bWJvbC1udWxsIiw2MDA0Nyksc3ltYm9sTnVtZXJpYzpIdCgic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6SHQoInN5bWJvbC1udW1iZXIiLDYwMDQ4KSxzeW1ib2xTdHJ1Y3R1cmU6SHQoInN5bWJvbC1zdHJ1Y3R1cmUiLDYwMDQ5KSxzeW1ib2xTdHJ1Y3Q6SHQoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6SHQoInN5bWJvbC1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xUeXBlUGFyYW1ldGVyOkh0KCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xLZXk6SHQoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0Okh0KCJzeW1ib2wtdGV4dCIsNjAwNTEpLHN5bWJvbFJlZmVyZW5jZTpIdCgic3ltYm9sLXJlZmVyZW5jZSIsNjAwNTIpLGdvVG9GaWxlOkh0KCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTpIdCgic3ltYm9sLWVudW0iLDYwMDUzKSxzeW1ib2xWYWx1ZTpIdCgic3ltYm9sLXZhbHVlIiw2MDA1Myksc3ltYm9sUnVsZXI6SHQoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6SHQoInN5bWJvbC11bml0Iiw2MDA1NCksYWN0aXZhdGVCcmVha3BvaW50czpIdCgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLDYwMDU1KSxhcmNoaXZlOkh0KCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOkh0KCJhcnJvdy1ib3RoIiw2MDA1NyksYXJyb3dEb3duOkh0KCJhcnJvdy1kb3duIiw2MDA1OCksYXJyb3dMZWZ0Okh0KCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDpIdCgiYXJyb3ctcmlnaHQiLDYwMDYwKSxhcnJvd1NtYWxsRG93bjpIdCgiYXJyb3ctc21hbGwtZG93biIsNjAwNjEpLGFycm93U21hbGxMZWZ0Okh0KCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0Okh0KCJhcnJvdy1zbWFsbC1yaWdodCIsNjAwNjMpLGFycm93U21hbGxVcDpIdCgiYXJyb3ctc21hbGwtdXAiLDYwMDY0KSxhcnJvd1VwOkh0KCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6SHQoImJlbGwiLDYwMDY2KSxib2xkOkh0KCJib2xkIiw2MDA2NyksYm9vazpIdCgiYm9vayIsNjAwNjgpLGJvb2ttYXJrOkh0KCJib29rbWFyayIsNjAwNjkpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZDpIdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIiw2MDA3MCksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw6SHQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOkh0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIiw2MDA3MSksZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ6SHQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIiw2MDA3MiksZGVidWdCcmVha3BvaW50RGF0YTpIdCgiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOkh0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkOkh0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIiw2MDA3NCksZGVidWdCcmVha3BvaW50TG9nOkh0KCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOkh0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIsNjAwNzUpLGJyaWVmY2FzZTpIdCgiYnJpZWZjYXNlIiw2MDA3NiksYnJvYWRjYXN0Okh0KCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOkh0KCJicm93c2VyIiw2MDA3OCksYnVnOkh0KCJidWciLDYwMDc5KSxjYWxlbmRhcjpIdCgiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOkh0KCJjYXNlLXNlbnNpdGl2ZSIsNjAwODEpLGNoZWNrOkh0KCJjaGVjayIsNjAwODIpLGNoZWNrbGlzdDpIdCgiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246SHQoImNoZXZyb24tZG93biIsNjAwODQpLGRyb3BEb3duQnV0dG9uOkh0KCJkcm9wLWRvd24tYnV0dG9uIiw2MDA4NCksY2hldnJvbkxlZnQ6SHQoImNoZXZyb24tbGVmdCIsNjAwODUpLGNoZXZyb25SaWdodDpIdCgiY2hldnJvbi1yaWdodCIsNjAwODYpLGNoZXZyb25VcDpIdCgiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOkh0KCJjaHJvbWUtY2xvc2UiLDYwMDg4KSxjaHJvbWVNYXhpbWl6ZTpIdCgiY2hyb21lLW1heGltaXplIiw2MDA4OSksY2hyb21lTWluaW1pemU6SHQoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6SHQoImNocm9tZS1yZXN0b3JlIiw2MDA5MSksY2lyY2xlOkh0KCJjaXJjbGUiLDYwMDkyKSxjaXJjbGVPdXRsaW5lOkh0KCJjaXJjbGUtb3V0bGluZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6SHQoImRlYnVnLWJyZWFrcG9pbnQtdW52ZXJpZmllZCIsNjAwOTIpLGNpcmNsZVNsYXNoOkh0KCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6SHQoImNpcmN1aXQtYm9hcmQiLDYwMDk0KSxjbGVhckFsbDpIdCgiY2xlYXItYWxsIiw2MDA5NSksY2xpcHB5Okh0KCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDpIdCgiY2xvc2UtYWxsIiw2MDA5NyksY2xvdWREb3dubG9hZDpIdCgiY2xvdWQtZG93bmxvYWQiLDYwMDk4KSxjbG91ZFVwbG9hZDpIdCgiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTpIdCgiY29kZSIsNjAxMDApLGNvbGxhcHNlQWxsOkh0KCJjb2xsYXBzZS1hbGwiLDYwMTAxKSxjb2xvck1vZGU6SHQoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjpIdCgiY29tbWVudC1kaXNjdXNzaW9uIiw2MDEwMyksY29tcGFyZUNoYW5nZXM6SHQoImNvbXBhcmUtY2hhbmdlcyIsNjAxNTcpLGNyZWRpdENhcmQ6SHQoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDpIdCgiZGFzaCIsNjAxMDgpLGRhc2hib2FyZDpIdCgiZGFzaGJvYXJkIiw2MDEwOSksZGF0YWJhc2U6SHQoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTpIdCgiZGVidWctY29udGludWUiLDYwMTExKSxkZWJ1Z0Rpc2Nvbm5lY3Q6SHQoImRlYnVnLWRpc2Nvbm5lY3QiLDYwMTEyKSxkZWJ1Z1BhdXNlOkh0KCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDpIdCgiZGVidWctcmVzdGFydCIsNjAxMTQpLGRlYnVnU3RhcnQ6SHQoImRlYnVnLXN0YXJ0Iiw2MDExNSksZGVidWdTdGVwSW50bzpIdCgiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0Okh0KCJkZWJ1Zy1zdGVwLW91dCIsNjAxMTcpLGRlYnVnU3RlcE92ZXI6SHQoImRlYnVnLXN0ZXAtb3ZlciIsNjAxMTgpLGRlYnVnU3RvcDpIdCgiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOkh0KCJkZWJ1ZyIsNjAxMjApLGRldmljZUNhbWVyYVZpZGVvOkh0KCJkZXZpY2UtY2FtZXJhLXZpZGVvIiw2MDEyMSksZGV2aWNlQ2FtZXJhOkh0KCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOkh0KCJkZXZpY2UtbW9iaWxlIiw2MDEyMyksZGlmZkFkZGVkOkh0KCJkaWZmLWFkZGVkIiw2MDEyNCksZGlmZklnbm9yZWQ6SHQoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDpIdCgiZGlmZi1tb2RpZmllZCIsNjAxMjYpLGRpZmZSZW1vdmVkOkh0KCJkaWZmLXJlbW92ZWQiLDYwMTI3KSxkaWZmUmVuYW1lZDpIdCgiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjpIdCgiZGlmZiIsNjAxMjkpLGRpc2NhcmQ6SHQoImRpc2NhcmQiLDYwMTMwKSxlZGl0b3JMYXlvdXQ6SHQoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzpIdCgiZW1wdHktd2luZG93Iiw2MDEzMiksZXhjbHVkZTpIdCgiZXhjbHVkZSIsNjAxMzMpLGV4dGVuc2lvbnM6SHQoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6SHQoImV5ZS1jbG9zZWQiLDYwMTM1KSxmaWxlQmluYXJ5Okh0KCJmaWxlLWJpbmFyeSIsNjAxMzYpLGZpbGVDb2RlOkh0KCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6SHQoImZpbGUtbWVkaWEiLDYwMTM4KSxmaWxlUGRmOkh0KCJmaWxlLXBkZiIsNjAxMzkpLGZpbGVTdWJtb2R1bGU6SHQoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6SHQoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLDYwMTQxKSxmaWxlU3ltbGlua0ZpbGU6SHQoImZpbGUtc3ltbGluay1maWxlIiw2MDE0MiksZmlsZVppcDpIdCgiZmlsZS16aXAiLDYwMTQzKSxmaWxlczpIdCgiZmlsZXMiLDYwMTQ0KSxmaWx0ZXI6SHQoImZpbHRlciIsNjAxNDUpLGZsYW1lOkh0KCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOkh0KCJmb2xkLWRvd24iLDYwMTQ3KSxmb2xkVXA6SHQoImZvbGQtdXAiLDYwMTQ4KSxmb2xkOkh0KCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOkh0KCJmb2xkZXItYWN0aXZlIiw2MDE1MCksZm9sZGVyT3BlbmVkOkh0KCJmb2xkZXItb3BlbmVkIiw2MDE1MSksZ2VhcjpIdCgiZ2VhciIsNjAxNTIpLGdpZnQ6SHQoImdpZnQiLDYwMTUzKSxnaXN0U2VjcmV0Okh0KCJnaXN0LXNlY3JldCIsNjAxNTQpLGdpc3Q6SHQoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6SHQoImdpdC1jb21taXQiLDYwMTU2KSxnaXRDb21wYXJlOkh0KCJnaXQtY29tcGFyZSIsNjAxNTcpLGdpdE1lcmdlOkh0KCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246SHQoImdpdGh1Yi1hY3Rpb24iLDYwMTU5KSxnaXRodWJBbHQ6SHQoImdpdGh1Yi1hbHQiLDYwMTYwKSxnbG9iZTpIdCgiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOkh0KCJncmFiYmVyIiw2MDE2MiksZ3JhcGg6SHQoImdyYXBoIiw2MDE2MyksZ3JpcHBlcjpIdCgiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0Okh0KCJoZWFydCIsNjAxNjUpLGhvbWU6SHQoImhvbWUiLDYwMTY2KSxob3Jpem9udGFsUnVsZTpIdCgiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6SHQoImh1Ym90Iiw2MDE2OCksaW5ib3g6SHQoImluYm94Iiw2MDE2OSksaXNzdWVDbG9zZWQ6SHQoImlzc3VlLWNsb3NlZCIsNjAzMjQpLGlzc3VlUmVvcGVuZWQ6SHQoImlzc3VlLXJlb3BlbmVkIiw2MDE3MSksaXNzdWVzOkh0KCJpc3N1ZXMiLDYwMTcyKSxpdGFsaWM6SHQoIml0YWxpYyIsNjAxNzMpLGplcnNleTpIdCgiamVyc2V5Iiw2MDE3NCksanNvbjpIdCgianNvbiIsNjAxNzUpLGJyYWNrZXQ6SHQoImJyYWNrZXQiLDYwMTc1KSxrZWJhYlZlcnRpY2FsOkh0KCJrZWJhYi12ZXJ0aWNhbCIsNjAxNzYpLGtleTpIdCgia2V5Iiw2MDE3NyksbGF3Okh0KCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4Okh0KCJsaWdodGJ1bGItYXV0b2ZpeCIsNjAxNzkpLGxpbmtFeHRlcm5hbDpIdCgibGluay1leHRlcm5hbCIsNjAxODApLGxpbms6SHQoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDpIdCgibGlzdC1vcmRlcmVkIiw2MDE4MiksbGlzdFVub3JkZXJlZDpIdCgibGlzdC11bm9yZGVyZWQiLDYwMTgzKSxsaXZlU2hhcmU6SHQoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOkh0KCJsb2FkaW5nIiw2MDE4NSksbG9jYXRpb246SHQoImxvY2F0aW9uIiw2MDE4NiksbWFpbFJlYWQ6SHQoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6SHQoIm1haWwiLDYwMTg4KSxtYXJrZG93bjpIdCgibWFya2Rvd24iLDYwMTg5KSxtZWdhcGhvbmU6SHQoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246SHQoIm1lbnRpb24iLDYwMTkxKSxtaWxlc3RvbmU6SHQoIm1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOkh0KCJtb3J0YXItYm9hcmQiLDYwMTkzKSxtb3ZlOkh0KCJtb3ZlIiw2MDE5NCksbXVsdGlwbGVXaW5kb3dzOkh0KCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTpIdCgibXV0ZSIsNjAxOTYpLG5vTmV3bGluZTpIdCgibm8tbmV3bGluZSIsNjAxOTcpLG5vdGU6SHQoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTpIdCgib2N0b2ZhY2UiLDYwMTk5KSxvcGVuUHJldmlldzpIdCgib3Blbi1wcmV2aWV3Iiw2MDIwMCkscGFja2FnZV86SHQoInBhY2thZ2UiLDYwMjAxKSxwYWludGNhbjpIdCgicGFpbnRjYW4iLDYwMjAyKSxwaW46SHQoInBpbiIsNjAyMDMpLHBsYXk6SHQoInBsYXkiLDYwMjA0KSxydW46SHQoInJ1biIsNjAyMDQpLHBsdWc6SHQoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6SHQoInByZXNlcnZlLWNhc2UiLDYwMjA2KSxwcmV2aWV3Okh0KCJwcmV2aWV3Iiw2MDIwNykscHJvamVjdDpIdCgicHJvamVjdCIsNjAyMDgpLHB1bHNlOkh0KCJwdWxzZSIsNjAyMDkpLHF1ZXN0aW9uOkh0KCJxdWVzdGlvbiIsNjAyMTApLHF1b3RlOkh0KCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6SHQoInJhZGlvLXRvd2VyIiw2MDIxMikscmVhY3Rpb25zOkh0KCJyZWFjdGlvbnMiLDYwMjEzKSxyZWZlcmVuY2VzOkh0KCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDpIdCgicmVmcmVzaCIsNjAyMTUpLHJlZ2V4Okh0KCJyZWdleCIsNjAyMTYpLHJlbW90ZUV4cGxvcmVyOkh0KCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6SHQoInJlbW90ZSIsNjAyMTgpLHJlbW92ZTpIdCgicmVtb3ZlIiw2MDIxOSkscmVwbGFjZUFsbDpIdCgicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOkh0KCJyZXBsYWNlIiw2MDIyMSkscmVwb0Nsb25lOkh0KCJyZXBvLWNsb25lIiw2MDIyMikscmVwb0ZvcmNlUHVzaDpIdCgicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6SHQoInJlcG8tcHVsbCIsNjAyMjQpLHJlcG9QdXNoOkh0KCJyZXBvLXB1c2giLDYwMjI1KSxyZXBvcnQ6SHQoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOkh0KCJyZXF1ZXN0LWNoYW5nZXMiLDYwMjI3KSxyb2NrZXQ6SHQoInJvY2tldCIsNjAyMjgpLHJvb3RGb2xkZXJPcGVuZWQ6SHQoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6SHQoInJvb3QtZm9sZGVyIiw2MDIzMCkscnNzOkh0KCJyc3MiLDYwMjMxKSxydWJ5Okh0KCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDpIdCgic2F2ZS1hbGwiLDYwMjMzKSxzYXZlQXM6SHQoInNhdmUtYXMiLDYwMjM0KSxzYXZlOkh0KCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDpIdCgic2NyZWVuLWZ1bGwiLDYwMjM2KSxzY3JlZW5Ob3JtYWw6SHQoInNjcmVlbi1ub3JtYWwiLDYwMjM3KSxzZWFyY2hTdG9wOkh0KCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjpIdCgic2VydmVyIiw2MDI0MCksc2V0dGluZ3NHZWFyOkh0KCJzZXR0aW5ncy1nZWFyIiw2MDI0MSksc2V0dGluZ3M6SHQoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOkh0KCJzaGllbGQiLDYwMjQzKSxzbWlsZXk6SHQoInNtaWxleSIsNjAyNDQpLHNvcnRQcmVjZWRlbmNlOkh0KCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6SHQoInNwbGl0LWhvcml6b250YWwiLDYwMjQ2KSxzcGxpdFZlcnRpY2FsOkh0KCJzcGxpdC12ZXJ0aWNhbCIsNjAyNDcpLHNxdWlycmVsOkh0KCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOkh0KCJzdGFyLWZ1bGwiLDYwMjQ5KSxzdGFySGFsZjpIdCgic3Rhci1oYWxmIiw2MDI1MCksc3ltYm9sQ2xhc3M6SHQoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOkh0KCJzeW1ib2wtY29sb3IiLDYwMjUyKSxzeW1ib2xDdXN0b21Db2xvcjpIdCgic3ltYm9sLWN1c3RvbWNvbG9yIiw2MDI1Miksc3ltYm9sQ29uc3RhbnQ6SHQoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6SHQoInN5bWJvbC1lbnVtLW1lbWJlciIsNjAyNTQpLHN5bWJvbEZpZWxkOkh0KCJzeW1ib2wtZmllbGQiLDYwMjU1KSxzeW1ib2xGaWxlOkh0KCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTpIdCgic3ltYm9sLWludGVyZmFjZSIsNjAyNTcpLHN5bWJvbEtleXdvcmQ6SHQoInN5bWJvbC1rZXl3b3JkIiw2MDI1OCksc3ltYm9sTWlzYzpIdCgic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjpIdCgic3ltYm9sLW9wZXJhdG9yIiw2MDI2MCksc3ltYm9sUHJvcGVydHk6SHQoInN5bWJvbC1wcm9wZXJ0eSIsNjAyNjEpLHdyZW5jaDpIdCgid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOkh0KCJ3cmVuY2gtc3ViYWN0aW9uIiw2MDI2MSksc3ltYm9sU25pcHBldDpIdCgic3ltYm9sLXNuaXBwZXQiLDYwMjYyKSx0YXNrbGlzdDpIdCgidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6SHQoInRlbGVzY29wZSIsNjAyNjQpLHRleHRTaXplOkh0KCJ0ZXh0LXNpemUiLDYwMjY1KSx0aHJlZUJhcnM6SHQoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOkh0KCJ0aHVtYnNkb3duIiw2MDI2NyksdGh1bWJzdXA6SHQoInRodW1ic3VwIiw2MDI2OCksdG9vbHM6SHQoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOkh0KCJ0cmlhbmdsZS1kb3duIiw2MDI3MCksdHJpYW5nbGVMZWZ0Okh0KCJ0cmlhbmdsZS1sZWZ0Iiw2MDI3MSksdHJpYW5nbGVSaWdodDpIdCgidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOkh0KCJ0cmlhbmdsZS11cCIsNjAyNzMpLHR3aXR0ZXI6SHQoInR3aXR0ZXIiLDYwMjc0KSx1bmZvbGQ6SHQoInVuZm9sZCIsNjAyNzUpLHVubG9jazpIdCgidW5sb2NrIiw2MDI3NiksdW5tdXRlOkh0KCJ1bm11dGUiLDYwMjc3KSx1bnZlcmlmaWVkOkh0KCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6SHQoInZlcmlmaWVkIiw2MDI3OSksdmVyc2lvbnM6SHQoInZlcnNpb25zIiw2MDI4MCksdm1BY3RpdmU6SHQoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTpIdCgidm0tb3V0bGluZSIsNjAyODIpLHZtUnVubmluZzpIdCgidm0tcnVubmluZyIsNjAyODMpLHdhdGNoOkh0KCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6SHQoIndoaXRlc3BhY2UiLDYwMjg1KSx3aG9sZVdvcmQ6SHQoIndob2xlLXdvcmQiLDYwMjg2KSx3aW5kb3c6SHQoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOkh0KCJ3b3JkLXdyYXAiLDYwMjg4KSx6b29tSW46SHQoInpvb20taW4iLDYwMjg5KSx6b29tT3V0Okh0KCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6SHQoImxpc3QtZmlsdGVyIiw2MDI5MSksbGlzdEZsYXQ6SHQoImxpc3QtZmxhdCIsNjAyOTIpLGxpc3RTZWxlY3Rpb246SHQoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOkh0KCJzZWxlY3Rpb24iLDYwMjkzKSxsaXN0VHJlZTpIdCgibGlzdC10cmVlIiw2MDI5NCksZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkOkh0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjpIdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIsNjAyOTYpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ6SHQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLDYwMjk2KSxkZWJ1Z1N0YWNrZnJhbWVBY3RpdmU6SHQoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6SHQoImNpcmNsZS1zbWFsbC1maWxsZWQiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWVEb3Q6SHQoImRlYnVnLXN0YWNrZnJhbWUtZG90Iiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOkh0KCJkZWJ1Zy1zdGFja2ZyYW1lIiw2MDI5OSksZGVidWdTdGFja2ZyYW1lRm9jdXNlZDpIdCgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIiw2MDI5OSksZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ6SHQoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6SHQoInN5bWJvbC1zdHJpbmciLDYwMzAxKSxkZWJ1Z1JldmVyc2VDb250aW51ZTpIdCgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIsNjAzMDIpLGRlYnVnU3RlcEJhY2s6SHQoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOkh0KCJkZWJ1Zy1yZXN0YXJ0LWZyYW1lIiw2MDMwNCksY2FsbEluY29taW5nOkh0KCJjYWxsLWluY29taW5nIiw2MDMwNiksY2FsbE91dGdvaW5nOkh0KCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTpIdCgibWVudSIsNjAzMDgpLGV4cGFuZEFsbDpIdCgiZXhwYW5kLWFsbCIsNjAzMDkpLGZlZWRiYWNrOkh0KCJmZWVkYmFjayIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOkh0KCJncm91cC1ieS1yZWYtdHlwZSIsNjAzMTEpLHVuZ3JvdXBCeVJlZlR5cGU6SHQoInVuZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzEyKSxhY2NvdW50Okh0KCJhY2NvdW50Iiw2MDMxMyksYmVsbERvdDpIdCgiYmVsbC1kb3QiLDYwMzE0KSxkZWJ1Z0NvbnNvbGU6SHQoImRlYnVnLWNvbnNvbGUiLDYwMzE1KSxsaWJyYXJ5Okh0KCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0Okh0KCJvdXRwdXQiLDYwMzE3KSxydW5BbGw6SHQoInJ1bi1hbGwiLDYwMzE4KSxzeW5jSWdub3JlZDpIdCgic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOkh0KCJwaW5uZWQiLDYwMzIwKSxnaXRodWJJbnZlcnRlZDpIdCgiZ2l0aHViLWludmVydGVkIiw2MDMyMSksZGVidWdBbHQ6SHQoImRlYnVnLWFsdCIsNjAzMDUpLHNlcnZlclByb2Nlc3M6SHQoInNlcnZlci1wcm9jZXNzIiw2MDMyMiksc2VydmVyRW52aXJvbm1lbnQ6SHQoInNlcnZlci1lbnZpcm9ubWVudCIsNjAzMjMpLHBhc3M6SHQoInBhc3MiLDYwMzI0KSxzdG9wQ2lyY2xlOkh0KCJzdG9wLWNpcmNsZSIsNjAzMjUpLHBsYXlDaXJjbGU6SHQoInBsYXktY2lyY2xlIiw2MDMyNikscmVjb3JkOkh0KCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOkh0KCJkZWJ1Zy1hbHQtc21hbGwiLDYwMzI4KSx2bUNvbm5lY3Q6SHQoInZtLWNvbm5lY3QiLDYwMzI5KSxjbG91ZDpIdCgiY2xvdWQiLDYwMzMwKSxtZXJnZTpIdCgibWVyZ2UiLDYwMzMxKSxleHBvcnRJY29uOkh0KCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6SHQoImdyYXBoLWxlZnQiLDYwMzMzKSxtYWduZXQ6SHQoIm1hZ25ldCIsNjAzMzQpLG5vdGVib29rOkh0KCJub3RlYm9vayIsNjAzMzUpLHJlZG86SHQoInJlZG8iLDYwMzM2KSxjaGVja0FsbDpIdCgiY2hlY2stYWxsIiw2MDMzNykscGlubmVkRGlydHk6SHQoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6SHQoInBhc3MtZmlsbGVkIiw2MDMzOSksY2lyY2xlTGFyZ2VGaWxsZWQ6SHQoImNpcmNsZS1sYXJnZS1maWxsZWQiLDYwMzQwKSxjaXJjbGVMYXJnZTpIdCgiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOkh0KCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIsNjAzNDEpLGNvbWJpbmU6SHQoImNvbWJpbmUiLDYwMzQyKSxnYXRoZXI6SHQoImdhdGhlciIsNjAzNDIpLHRhYmxlOkh0KCJ0YWJsZSIsNjAzNDMpLHZhcmlhYmxlR3JvdXA6SHQoInZhcmlhYmxlLWdyb3VwIiw2MDM0NCksdHlwZUhpZXJhcmNoeTpIdCgidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOkh0KCJ0eXBlLWhpZXJhcmNoeS1zdWIiLDYwMzQ2KSx0eXBlSGllcmFyY2h5U3VwZXI6SHQoInR5cGUtaGllcmFyY2h5LXN1cGVyIiw2MDM0NyksZ2l0UHVsbFJlcXVlc3RDcmVhdGU6SHQoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6SHQoInJ1bi1hYm92ZSIsNjAzNDkpLHJ1bkJlbG93Okh0KCJydW4tYmVsb3ciLDYwMzUwKSxub3RlYm9va1RlbXBsYXRlOkh0KCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46SHQoImRlYnVnLXJlcnVuIiw2MDM1Miksd29ya3NwYWNlVHJ1c3RlZDpIdCgid29ya3NwYWNlLXRydXN0ZWQiLDYwMzUzKSx3b3Jrc3BhY2VVbnRydXN0ZWQ6SHQoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbnNwZWNpZmllZDpIdCgid29ya3NwYWNlLXVuc3BlY2lmaWVkIiw2MDM1NSksdGVybWluYWxDbWQ6SHQoInRlcm1pbmFsLWNtZCIsNjAzNTYpLHRlcm1pbmFsRGViaWFuOkh0KCJ0ZXJtaW5hbC1kZWJpYW4iLDYwMzU3KSx0ZXJtaW5hbExpbnV4Okh0KCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDpIdCgidGVybWluYWwtcG93ZXJzaGVsbCIsNjAzNTkpLHRlcm1pbmFsVG11eDpIdCgidGVybWluYWwtdG11eCIsNjAzNjApLHRlcm1pbmFsVWJ1bnR1Okh0KCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6SHQoInRlcm1pbmFsLWJhc2giLDYwMzYyKSxhcnJvd1N3YXA6SHQoImFycm93LXN3YXAiLDYwMzYzKSxjb3B5Okh0KCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOkh0KCJwZXJzb24tYWRkIiw2MDM2NSksZmlsdGVyRmlsbGVkOkh0KCJmaWx0ZXItZmlsbGVkIiw2MDM2Niksd2FuZDpIdCgid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTpIdCgiZGVidWctbGluZS1ieS1saW5lIiw2MDM2OCksaW5zcGVjdDpIdCgiaW5zcGVjdCIsNjAzNjkpLGxheWVyczpIdCgibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90Okh0KCJsYXllcnMtZG90Iiw2MDM3MSksbGF5ZXJzQWN0aXZlOkh0KCJsYXllcnMtYWN0aXZlIiw2MDM3MiksY29tcGFzczpIdCgiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6SHQoImNvbXBhc3MtZG90Iiw2MDM3NCksY29tcGFzc0FjdGl2ZTpIdCgiY29tcGFzcy1hY3RpdmUiLDYwMzc1KSxhenVyZTpIdCgiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0Okh0KCJpc3N1ZS1kcmFmdCIsNjAzNzcpLGdpdFB1bGxSZXF1ZXN0Q2xvc2VkOkh0KCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIsNjAzNzgpLGdpdFB1bGxSZXF1ZXN0RHJhZnQ6SHQoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDpIdCgiZGVidWctYWxsIiw2MDM4MCksZGVidWdDb3ZlcmFnZTpIdCgiZGVidWctY292ZXJhZ2UiLDYwMzgxKSxydW5FcnJvcnM6SHQoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5Okh0KCJmb2xkZXItbGlicmFyeSIsNjAzODMpLGRlYnVnQ29udGludWVTbWFsbDpIdCgiZGVidWctY29udGludWUtc21hbGwiLDYwMzg0KSxiZWFrZXJTdG9wOkh0KCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTpIdCgiZ3JhcGgtbGluZSIsNjAzODYpLGdyYXBoU2NhdHRlcjpIdCgiZ3JhcGgtc2NhdHRlciIsNjAzODcpLHBpZUNoYXJ0Okh0KCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0RG90Okh0KCJicmFja2V0LWRvdCIsNjAzODkpLGJyYWNrZXRFcnJvcjpIdCgiYnJhY2tldC1lcnJvciIsNjAzOTApLGxvY2tTbWFsbDpIdCgibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOkh0KCJhenVyZS1kZXZvcHMiLDYwMzkyKSx2ZXJpZmllZEZpbGxlZDpIdCgidmVyaWZpZWQtZmlsbGVkIiw2MDM5MyksbmV3TGluZTpIdCgibmV3bGluZSIsNjAzOTQpLGxheW91dDpIdCgibGF5b3V0Iiw2MDM5NSksbGF5b3V0QWN0aXZpdHliYXJMZWZ0Okh0KCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIsNjAzOTYpLGxheW91dEFjdGl2aXR5YmFyUmlnaHQ6SHQoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDpIdCgibGF5b3V0LXBhbmVsLWxlZnQiLDYwMzk4KSxsYXlvdXRQYW5lbENlbnRlcjpIdCgibGF5b3V0LXBhbmVsLWNlbnRlciIsNjAzOTkpLGxheW91dFBhbmVsSnVzdGlmeTpIdCgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0Okh0KCJsYXlvdXQtcGFuZWwtcmlnaHQiLDYwNDAxKSxsYXlvdXRQYW5lbDpIdCgibGF5b3V0LXBhbmVsIiw2MDQwMiksbGF5b3V0U2lkZWJhckxlZnQ6SHQoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6SHQoImxheW91dC1zaWRlYmFyLXJpZ2h0Iiw2MDQwNCksbGF5b3V0U3RhdHVzYmFyOkh0KCJsYXlvdXQtc3RhdHVzYmFyIiw2MDQwNSksbGF5b3V0TWVudWJhcjpIdCgibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDpIdCgibGF5b3V0LWNlbnRlcmVkIiw2MDQwNyksbGF5b3V0U2lkZWJhclJpZ2h0T2ZmOkh0KCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjpIdCgibGF5b3V0LXBhbmVsLW9mZiIsNjA0MTcpLGxheW91dFNpZGViYXJMZWZ0T2ZmOkh0KCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIsNjA0MTgpLHRhcmdldDpIdCgidGFyZ2V0Iiw2MDQwOCksaW5kZW50Okh0KCJpbmRlbnQiLDYwNDA5KSxyZWNvcmRTbWFsbDpIdCgicmVjb3JkLXNtYWxsIiw2MDQxMCksZXJyb3JTbWFsbDpIdCgiZXJyb3Itc21hbGwiLDYwNDExKSxhcnJvd0NpcmNsZURvd246SHQoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0Okh0KCJhcnJvdy1jaXJjbGUtbGVmdCIsNjA0MTMpLGFycm93Q2lyY2xlUmlnaHQ6SHQoImFycm93LWNpcmNsZS1yaWdodCIsNjA0MTQpLGFycm93Q2lyY2xlVXA6SHQoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGhlYXJ0RmlsbGVkOkh0KCJoZWFydC1maWxsZWQiLDYwNDIwKSxtYXA6SHQoIm1hcCIsNjA0MjEpLG1hcEZpbGxlZDpIdCgibWFwLWZpbGxlZCIsNjA0MjIpLGNpcmNsZVNtYWxsOkh0KCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6SHQoImJlbGwtc2xhc2giLDYwNDI0KSxiZWxsU2xhc2hEb3Q6SHQoImJlbGwtc2xhc2gtZG90Iiw2MDQyNSksY29tbWVudFVucmVzb2x2ZWQ6SHQoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6SHQoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIsNjA0MjcpLGdpdFB1bGxSZXF1ZXN0TmV3Q2hhbmdlczpIdCgiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIsNjA0MjgpLHNlYXJjaEZ1enp5Okh0KCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6SHQoImNvbW1lbnQtZHJhZnQiLDYwNDMwKSxzZW5kOkh0KCJzZW5kIiw2MDQzMSksc3BhcmtsZTpIdCgic3BhcmtsZSIsNjA0MzIpLGluc2VydDpIdCgiaW5zZXJ0Iiw2MDQzMyksZGlhbG9nRXJyb3I6SHQoImRpYWxvZy1lcnJvciIsImVycm9yIiksZGlhbG9nV2FybmluZzpIdCgiZGlhbG9nLXdhcm5pbmciLCJ3YXJuaW5nIiksZGlhbG9nSW5mbzpIdCgiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6SHQoImRpYWxvZy1jbG9zZSIsImNsb3NlIiksdHJlZUl0ZW1FeHBhbmRlZDpIdCgidHJlZS1pdGVtLWV4cGFuZGVkIiwiY2hldnJvbi1kb3duIiksdHJlZUZpbHRlck9uVHlwZU9uOkh0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOkh0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsImxpc3Qtc2VsZWN0aW9uIiksdHJlZUZpbHRlckNsZWFyOkh0KCJ0cmVlLWZpbHRlci1jbGVhciIsImNsb3NlIiksdHJlZUl0ZW1Mb2FkaW5nOkh0KCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOkh0KCJtZW51LXNlbGVjdGlvbiIsImNoZWNrIiksbWVudVN1Ym1lbnU6SHQoIm1lbnUtc3VibWVudSIsImNoZXZyb24tcmlnaHQiKSxtZW51QmFyTW9yZTpIdCgibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6SHQoInNjcm9sbGJhci1idXR0b24tbGVmdCIsInRyaWFuZ2xlLWxlZnQiKSxzY3JvbGxiYXJCdXR0b25SaWdodDpIdCgic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsInRyaWFuZ2xlLXJpZ2h0Iiksc2Nyb2xsYmFyQnV0dG9uVXA6SHQoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246SHQoInNjcm9sbGJhci1idXR0b24tZG93biIsInRyaWFuZ2xlLWRvd24iKSx0b29sQmFyTW9yZTpIdCgidG9vbGJhci1tb3JlIiwibW9yZSIpLHF1aWNrSW5wdXRCYWNrOkh0KCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpfTt2YXIgRHQsV3QsT3QsUHQscXQsRnQsQnQsVnQsS3QsanQsR3QsJHQsSnQsWHQsWXQsUXQsWnQsZW4sdG4sbm4scm4sYW4sb24sc24sbG4sY24saG4sZG4sdW4sbW4scG4sZm4sZ24sYm4sX24sdm4sd24seW4sVG4sa24sU24seG4sTG4sQ24sRW4sQW4sTW4sUm4sTm4sSW4sVW49ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsYSl7ZnVuY3Rpb24gbyhlKXt0cnl7bChpLm5leHQoZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2woaS50aHJvdyhlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gbChlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4obyxzKX1sKChpPWkuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NsYXNzIEhuIGV4dGVuZHMgdXtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9bix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9cmVzb2x2ZSgpe3JldHVybiBVbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX0pKX1fY3JlYXRlKCl7cmV0dXJuIFVuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCxlJiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCxlKSl9KSl9fWNsYXNzIHpue2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9bix0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fSFmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCx6dC5zeW1ib2xNZXRob2QpLHQuc2V0KDEsenQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDIsenQuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsenQuc3ltYm9sRmllbGQpLHQuc2V0KDQsenQuc3ltYm9sVmFyaWFibGUpLHQuc2V0KDUsenQuc3ltYm9sQ2xhc3MpLHQuc2V0KDYsenQuc3ltYm9sU3RydWN0KSx0LnNldCg3LHp0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoOCx6dC5zeW1ib2xNb2R1bGUpLHQuc2V0KDksenQuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLHp0LnN5bWJvbEV2ZW50KSx0LnNldCgxMSx6dC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsenQuc3ltYm9sVW5pdCksdC5zZXQoMTMsenQuc3ltYm9sVmFsdWUpLHQuc2V0KDE1LHp0LnN5bWJvbEVudW0pLHQuc2V0KDE0LHp0LnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSx6dC5zeW1ib2xFbnVtKSx0LnNldCgxNix6dC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyx6dC5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyx6dC5zeW1ib2xTbmlwcGV0KSx0LnNldCgxOCx6dC5zeW1ib2xUZXh0KSx0LnNldCgxOSx6dC5zeW1ib2xDb2xvciksdC5zZXQoMjAsenQuc3ltYm9sRmlsZSksdC5zZXQoMjEsenQuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMix6dC5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsenQuc3ltYm9sRm9sZGVyKSx0LnNldCgyNCx6dC5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSx6dC5hY2NvdW50KSx0LnNldCgyNix6dC5pc3N1ZXMpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSxuPXp0LnN5bWJvbFByb3BlcnR5KSxufTtjb25zdCBuPW5ldyBNYXA7bi5zZXQoIm1ldGhvZCIsMCksbi5zZXQoImZ1bmN0aW9uIiwxKSxuLnNldCgiY29uc3RydWN0b3IiLDIpLG4uc2V0KCJmaWVsZCIsMyksbi5zZXQoInZhcmlhYmxlIiw0KSxuLnNldCgiY2xhc3MiLDUpLG4uc2V0KCJzdHJ1Y3QiLDYpLG4uc2V0KCJpbnRlcmZhY2UiLDcpLG4uc2V0KCJtb2R1bGUiLDgpLG4uc2V0KCJwcm9wZXJ0eSIsOSksbi5zZXQoImV2ZW50IiwxMCksbi5zZXQoIm9wZXJhdG9yIiwxMSksbi5zZXQoInVuaXQiLDEyKSxuLnNldCgidmFsdWUiLDEzKSxuLnNldCgiY29uc3RhbnQiLDE0KSxuLnNldCgiZW51bSIsMTUpLG4uc2V0KCJlbnVtLW1lbWJlciIsMTYpLG4uc2V0KCJlbnVtTWVtYmVyIiwxNiksbi5zZXQoImtleXdvcmQiLDE3KSxuLnNldCgic25pcHBldCIsMjcpLG4uc2V0KCJ0ZXh0IiwxOCksbi5zZXQoImNvbG9yIiwxOSksbi5zZXQoImZpbGUiLDIwKSxuLnNldCgicmVmZXJlbmNlIiwyMSksbi5zZXQoImN1c3RvbWNvbG9yIiwyMiksbi5zZXQoImZvbGRlciIsMjMpLG4uc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLG4uc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksbi5zZXQoImFjY291bnQiLDI1KSxuLnNldCgiaXNzdWUiLDI2KSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgaT1uLmdldChlKTtyZXR1cm4gdm9pZCAwIT09aXx8dHx8KGk9OSksaX19KER0fHwoRHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShXdHx8KFd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShPdHx8KE90PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oUHR8fChQdD17fSkpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLHp0LnN5bWJvbEZpbGUpLHQuc2V0KDEsenQuc3ltYm9sTW9kdWxlKSx0LnNldCgyLHp0LnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyx6dC5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LHp0LnN5bWJvbENsYXNzKSx0LnNldCg1LHp0LnN5bWJvbE1ldGhvZCksdC5zZXQoNix6dC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyx6dC5zeW1ib2xGaWVsZCksdC5zZXQoOCx6dC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSx6dC5zeW1ib2xFbnVtKSx0LnNldCgxMCx6dC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDExLHp0LnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMix6dC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsenQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE0LHp0LnN5bWJvbFN0cmluZyksdC5zZXQoMTUsenQuc3ltYm9sTnVtYmVyKSx0LnNldCgxNix6dC5zeW1ib2xCb29sZWFuKSx0LnNldCgxNyx6dC5zeW1ib2xBcnJheSksdC5zZXQoMTgsenQuc3ltYm9sT2JqZWN0KSx0LnNldCgxOSx6dC5zeW1ib2xLZXkpLHQuc2V0KDIwLHp0LnN5bWJvbE51bGwpLHQuc2V0KDIxLHp0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLHp0LnN5bWJvbFN0cnVjdCksdC5zZXQoMjMsenQuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LHp0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSx6dC5zeW1ib2xUeXBlUGFyYW1ldGVyKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLG49enQuc3ltYm9sUHJvcGVydHkpLG59fShxdHx8KHF0PXt9KSksZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfX0oRnR8fChGdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShCdHx8KEJ0PXt9KSksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQix0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9aGFuZGxlQ2hhbmdlKGUpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6ZSxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3RlcihlLHQpe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5zZXQoZSx0KSx0aGlzLmhhbmRsZUNoYW5nZShbZV0pLGgoKCgpPT57dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KGUpPT09dCYmKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmRlbGV0ZShlKSx0aGlzLmhhbmRsZUNoYW5nZShbZV0pKX0pKX1nZXQoZSl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldChlKXx8bnVsbH1yZWdpc3RlckZhY3RvcnkoZSx0KXt2YXIgbjtudWxsPT09KG49dGhpcy5fZmFjdG9yaWVzLmdldChlKSl8fHZvaWQgMD09PW58fG4uZGlzcG9zZSgpO2NvbnN0IGk9bmV3IEhuKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldChlLGkpLGgoKCgpPT57Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3QmJnQ9PT1pJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZShlKSx0LmRpc3Bvc2UoKSl9KSl9Z2V0T3JDcmVhdGUoZSl7cmV0dXJuIFVuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0IG49dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hbnx8bi5pc1Jlc29sdmVkP251bGw6KHlpZWxkIG4ucmVzb2x2ZSgpLHRoaXMuZ2V0KGUpKX0pKX1pc1Jlc29sdmVkKGUpe2lmKHRoaXMuZ2V0KGUpKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hKHQmJiF0LmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKGUpe3RoaXMuX2NvbG9yTWFwPWUsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSxmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkRpc2FibGVkPTFdPSJEaXNhYmxlZCIsZVtlLkVuYWJsZWQ9Ml09IkVuYWJsZWQifShWdHx8KFZ0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuQXV0bz0yXT0iQXV0byJ9KEt0fHwoS3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXBXaGl0ZXNwYWNlPTFdPSJLZWVwV2hpdGVzcGFjZSIsZVtlLkluc2VydEFzU25pcHBldD00XT0iSW5zZXJ0QXNTbmlwcGV0In0oanR8fChqdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5NZXRob2Q9MF09Ik1ldGhvZCIsZVtlLkZ1bmN0aW9uPTFdPSJGdW5jdGlvbiIsZVtlLkNvbnN0cnVjdG9yPTJdPSJDb25zdHJ1Y3RvciIsZVtlLkZpZWxkPTNdPSJGaWVsZCIsZVtlLlZhcmlhYmxlPTRdPSJWYXJpYWJsZSIsZVtlLkNsYXNzPTVdPSJDbGFzcyIsZVtlLlN0cnVjdD02XT0iU3RydWN0IixlW2UuSW50ZXJmYWNlPTddPSJJbnRlcmZhY2UiLGVbZS5Nb2R1bGU9OF09Ik1vZHVsZSIsZVtlLlByb3BlcnR5PTldPSJQcm9wZXJ0eSIsZVtlLkV2ZW50PTEwXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0xMV09Ik9wZXJhdG9yIixlW2UuVW5pdD0xMl09IlVuaXQiLGVbZS5WYWx1ZT0xM109IlZhbHVlIixlW2UuQ29uc3RhbnQ9MTRdPSJDb25zdGFudCIsZVtlLkVudW09MTVdPSJFbnVtIixlW2UuRW51bU1lbWJlcj0xNl09IkVudW1NZW1iZXIiLGVbZS5LZXl3b3JkPTE3XT0iS2V5d29yZCIsZVtlLlRleHQ9MThdPSJUZXh0IixlW2UuQ29sb3I9MTldPSJDb2xvciIsZVtlLkZpbGU9MjBdPSJGaWxlIixlW2UuUmVmZXJlbmNlPTIxXT0iUmVmZXJlbmNlIixlW2UuQ3VzdG9tY29sb3I9MjJdPSJDdXN0b21jb2xvciIsZVtlLkZvbGRlcj0yM109IkZvbGRlciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjRdPSJUeXBlUGFyYW1ldGVyIixlW2UuVXNlcj0yNV09IlVzZXIiLGVbZS5Jc3N1ZT0yNl09Iklzc3VlIixlW2UuU25pcHBldD0yN109IlNuaXBwZXQifShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifSgkdHx8KCR0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0xXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnM9Ml09IlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnMifShKdHx8KEp0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVYQUNUPTBdPSJFWEFDVCIsZVtlLkFCT1ZFPTFdPSJBQk9WRSIsZVtlLkJFTE9XPTJdPSJCRUxPVyJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTm90U2V0PTBdPSJOb3RTZXQiLGVbZS5Db250ZW50Rmx1c2g9MV09IkNvbnRlbnRGbHVzaCIsZVtlLlJlY292ZXJGcm9tTWFya2Vycz0yXT0iUmVjb3ZlckZyb21NYXJrZXJzIixlW2UuRXhwbGljaXQ9M109IkV4cGxpY2l0IixlW2UuUGFzdGU9NF09IlBhc3RlIixlW2UuVW5kbz01XT0iVW5kbyIsZVtlLlJlZG89Nl09IlJlZG8ifShZdHx8KFl0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oWnR8fChadD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcD0xXT0iS2VlcCIsZVtlLkJyYWNrZXRzPTJdPSJCcmFja2V0cyIsZVtlLkFkdmFuY2VkPTNdPSJBZHZhbmNlZCIsZVtlLkZ1bGw9NF09IkZ1bGwifShlbnx8KGVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3Rlcj0wXT0iYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyIixlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXI9MV09ImFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyIixlW2UuYWNjZXNzaWJpbGl0eVN1cHBvcnQ9Ml09ImFjY2Vzc2liaWxpdHlTdXBwb3J0IixlW2UuYWNjZXNzaWJpbGl0eVBhZ2VTaXplPTNdPSJhY2Nlc3NpYmlsaXR5UGFnZVNpemUiLGVbZS5hcmlhTGFiZWw9NF09ImFyaWFMYWJlbCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9NV09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5zY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb249Nl09InNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbiIsZVtlLmF1dG9DbG9zaW5nRGVsZXRlPTddPSJhdXRvQ2xvc2luZ0RlbGV0ZSIsZVtlLmF1dG9DbG9zaW5nT3ZlcnR5cGU9OF09ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz05XT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEwXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xMV09ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xMl09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTEzXT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTRdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xNV09ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE2XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xN109ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MThdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0xOV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIwXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjFdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIyXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yM109ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjRdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI1XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNl09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yN109ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjhdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yOV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zMV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzJdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMzXT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNF09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzVdPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzZdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzddPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT0zOF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9MzldPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDBdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDFdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQyXT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00M109ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00NF09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ1XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ2XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00N109ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz00OF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz00OV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01MF09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01MV09ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01Ml09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01M109ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTRdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01NV09ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU2XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01N109ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj01OF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTU5XT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02MF09ImlubGluZVN1Z2dlc3QiLGVbZS5sZXR0ZXJTcGFjaW5nPTYxXT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj02Ml09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTYzXT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTY0XT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTY1XT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTY2XT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NjddPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NjhdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NjldPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD03MF09Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTcxXT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT03Ml09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTczXT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzRdPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTc1XT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzZdPSJtdWx0aUN1cnNvclBhc3RlIixlW2UubXVsdGlDdXJzb3JMaW1pdD03N109Im11bHRpQ3Vyc29yTGltaXQiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD03OF09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj03OV09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9ODBdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTgxXT0icGFkZGluZyIsZVtlLnBhc3RlQXM9ODJdPSJwYXN0ZUFzIixlW2UucGFyYW1ldGVySGludHM9ODNdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9ODRdPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04NV09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTg2XT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT04N109InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTg4XT0icmVhZE9ubHkiLGVbZS5yZW5hbWVPblR5cGU9ODldPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05MF09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTkxXT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05Ml09InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05M109InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk0XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT05NV09InJlbmRlcldoaXRlc3BhY2UiLGVbZS5yZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nPTk2XT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249OTddPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTk4XT0icnVsZXJzIixlW2Uuc2Nyb2xsYmFyPTk5XT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj0xMDBdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9MTAxXT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9MTAyXT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTEwM109InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD0xMDRdPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwNV09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTEwNl09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwN109InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTA4XT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTA5XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTEwXT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5U2Nyb2xsPTExMV09InN0aWNreVNjcm9sbCIsZVtlLnN0aWNreVRhYlN0b3BzPTExMl09InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMTNdPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMTRdPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTExNV09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTExNl09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTE3XT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTExOF09InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTExOV09InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMjBdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTIxXT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTIyXT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMjNdPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMjRdPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRCcmVhaz0xMjVdPSJ3b3JkQnJlYWsiLGVbZS53b3JkU2VwYXJhdG9ycz0xMjZdPSJ3b3JkU2VwYXJhdG9ycyIsZVtlLndvcmRXcmFwPTEyN109IndvcmRXcmFwIixlW2Uud29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycz0xMjhdPSJ3b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnM9MTI5XT0id29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcENvbHVtbj0xMzBdPSJ3b3JkV3JhcENvbHVtbiIsZVtlLndvcmRXcmFwT3ZlcnJpZGUxPTEzMV09IndvcmRXcmFwT3ZlcnJpZGUxIixlW2Uud29yZFdyYXBPdmVycmlkZTI9MTMyXT0id29yZFdyYXBPdmVycmlkZTIiLGVbZS53cmFwcGluZ0luZGVudD0xMzNdPSJ3cmFwcGluZ0luZGVudCIsZVtlLndyYXBwaW5nU3RyYXRlZ3k9MTM0XT0id3JhcHBpbmdTdHJhdGVneSIsZVtlLnNob3dEZXByZWNhdGVkPTEzNV09InNob3dEZXByZWNhdGVkIixlW2UuaW5sYXlIaW50cz0xMzZdPSJpbmxheUhpbnRzIixlW2UuZWRpdG9yQ2xhc3NOYW1lPTEzN109ImVkaXRvckNsYXNzTmFtZSIsZVtlLnBpeGVsUmF0aW89MTM4XT0icGl4ZWxSYXRpbyIsZVtlLnRhYkZvY3VzTW9kZT0xMzldPSJ0YWJGb2N1c01vZGUiLGVbZS5sYXlvdXRJbmZvPTE0MF09ImxheW91dEluZm8iLGVbZS53cmFwcGluZ0luZm89MTQxXT0id3JhcHBpbmdJbmZvIixlW2UuZGVmYXVsdENvbG9yRGVjb3JhdG9ycz0xNDJdPSJkZWZhdWx0Q29sb3JEZWNvcmF0b3JzIn0odG58fCh0bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0obm58fChubj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuUmlnaHQ9Ml09IlJpZ2h0In0oYW58fChhbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KG9ufHwob249e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShsbnx8KGxuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0oY258fChjbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5GMjA9NzhdPSJGMjAiLGVbZS5GMjE9NzldPSJGMjEiLGVbZS5GMjI9ODBdPSJGMjIiLGVbZS5GMjM9ODFdPSJGMjMiLGVbZS5GMjQ9ODJdPSJGMjQiLGVbZS5OdW1Mb2NrPTgzXT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9ODRdPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTg1XT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODZdPSJFcXVhbCIsZVtlLkNvbW1hPTg3XT0iQ29tbWEiLGVbZS5NaW51cz04OF09Ik1pbnVzIixlW2UuUGVyaW9kPTg5XT0iUGVyaW9kIixlW2UuU2xhc2g9OTBdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT05MV09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTkyXT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9OTNdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9OTRdPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05NV09IlF1b3RlIixlW2UuT0VNXzg9OTZdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTddPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05OF09Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk5XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9MTAwXT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9MTAxXT0iTnVtcGFkMyIsZVtlLk51bXBhZDQ9MTAyXT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9MTAzXT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9MTA0XT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTA1XT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTA2XT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTA3XT0iTnVtcGFkOSIsZVtlLk51bXBhZE11bHRpcGx5PTEwOF09Ik51bXBhZE11bHRpcGx5IixlW2UuTnVtcGFkQWRkPTEwOV09Ik51bXBhZEFkZCIsZVtlLk5VTVBBRF9TRVBBUkFUT1I9MTEwXT0iTlVNUEFEX1NFUEFSQVRPUiIsZVtlLk51bXBhZFN1YnRyYWN0PTExMV09Ik51bXBhZFN1YnRyYWN0IixlW2UuTnVtcGFkRGVjaW1hbD0xMTJdPSJOdW1wYWREZWNpbWFsIixlW2UuTnVtcGFkRGl2aWRlPTExM109Ik51bXBhZERpdmlkZSIsZVtlLktFWV9JTl9DT01QT1NJVElPTj0xMTRdPSJLRVlfSU5fQ09NUE9TSVRJT04iLGVbZS5BQk5UX0MxPTExNV09IkFCTlRfQzEiLGVbZS5BQk5UX0MyPTExNl09IkFCTlRfQzIiLGVbZS5BdWRpb1ZvbHVtZU11dGU9MTE3XT0iQXVkaW9Wb2x1bWVNdXRlIixlW2UuQXVkaW9Wb2x1bWVVcD0xMThdPSJBdWRpb1ZvbHVtZVVwIixlW2UuQXVkaW9Wb2x1bWVEb3duPTExOV09IkF1ZGlvVm9sdW1lRG93biIsZVtlLkJyb3dzZXJTZWFyY2g9MTIwXT0iQnJvd3NlclNlYXJjaCIsZVtlLkJyb3dzZXJIb21lPTEyMV09IkJyb3dzZXJIb21lIixlW2UuQnJvd3NlckJhY2s9MTIyXT0iQnJvd3NlckJhY2siLGVbZS5Ccm93c2VyRm9yd2FyZD0xMjNdPSJCcm93c2VyRm9yd2FyZCIsZVtlLk1lZGlhVHJhY2tOZXh0PTEyNF09Ik1lZGlhVHJhY2tOZXh0IixlW2UuTWVkaWFUcmFja1ByZXZpb3VzPTEyNV09Ik1lZGlhVHJhY2tQcmV2aW91cyIsZVtlLk1lZGlhU3RvcD0xMjZdPSJNZWRpYVN0b3AiLGVbZS5NZWRpYVBsYXlQYXVzZT0xMjddPSJNZWRpYVBsYXlQYXVzZSIsZVtlLkxhdW5jaE1lZGlhUGxheWVyPTEyOF09IkxhdW5jaE1lZGlhUGxheWVyIixlW2UuTGF1bmNoTWFpbD0xMjldPSJMYXVuY2hNYWlsIixlW2UuTGF1bmNoQXBwMj0xMzBdPSJMYXVuY2hBcHAyIixlW2UuQ2xlYXI9MTMxXT0iQ2xlYXIiLGVbZS5NQVhfVkFMVUU9MTMyXT0iTUFYX1ZBTFVFIn0oaG58fChobj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaW50PTFdPSJIaW50IixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9NF09Ildhcm5pbmciLGVbZS5FcnJvcj04XT0iRXJyb3IifShkbnx8KGRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQifSh1bnx8KHVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShtbnx8KG1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifShwbnx8KHBuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KGdufHwoZ249e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUiLGVbZS5MZWZ0T2ZJbmplY3RlZFRleHQ9M109IkxlZnRPZkluamVjdGVkVGV4dCIsZVtlLlJpZ2h0T2ZJbmplY3RlZFRleHQ9NF09IlJpZ2h0T2ZJbmplY3RlZFRleHQifShibnx8KGJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk9mZj0wXT0iT2ZmIixlW2UuT249MV09Ik9uIixlW2UuUmVsYXRpdmU9Ml09IlJlbGF0aXZlIixlW2UuSW50ZXJ2YWw9M109IkludGVydmFsIixlW2UuQ3VzdG9tPTRdPSJDdXN0b20ifShfbnx8KF9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5UZXh0PTFdPSJUZXh0IixlW2UuQmxvY2tzPTJdPSJCbG9ja3MifSh2bnx8KHZuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNtb290aD0wXT0iU21vb3RoIixlW2UuSW1tZWRpYXRlPTFdPSJJbW1lZGlhdGUifSh3bnx8KHduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG89MV09IkF1dG8iLGVbZS5IaWRkZW49Ml09IkhpZGRlbiIsZVtlLlZpc2libGU9M109IlZpc2libGUifSh5bnx8KHluPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxUUj0wXT0iTFRSIixlW2UuUlRMPTFdPSJSVEwifShUbnx8KFRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShrbnx8KGtuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkZpbGU9MF09IkZpbGUiLGVbZS5Nb2R1bGU9MV09Ik1vZHVsZSIsZVtlLk5hbWVzcGFjZT0yXT0iTmFtZXNwYWNlIixlW2UuUGFja2FnZT0zXT0iUGFja2FnZSIsZVtlLkNsYXNzPTRdPSJDbGFzcyIsZVtlLk1ldGhvZD01XT0iTWV0aG9kIixlW2UuUHJvcGVydHk9Nl09IlByb3BlcnR5IixlW2UuRmllbGQ9N109IkZpZWxkIixlW2UuQ29uc3RydWN0b3I9OF09IkNvbnN0cnVjdG9yIixlW2UuRW51bT05XT0iRW51bSIsZVtlLkludGVyZmFjZT0xMF09IkludGVyZmFjZSIsZVtlLkZ1bmN0aW9uPTExXT0iRnVuY3Rpb24iLGVbZS5WYXJpYWJsZT0xMl09IlZhcmlhYmxlIixlW2UuQ29uc3RhbnQ9MTNdPSJDb25zdGFudCIsZVtlLlN0cmluZz0xNF09IlN0cmluZyIsZVtlLk51bWJlcj0xNV09Ik51bWJlciIsZVtlLkJvb2xlYW49MTZdPSJCb29sZWFuIixlW2UuQXJyYXk9MTddPSJBcnJheSIsZVtlLk9iamVjdD0xOF09Ik9iamVjdCIsZVtlLktleT0xOV09IktleSIsZVtlLk51bGw9MjBdPSJOdWxsIixlW2UuRW51bU1lbWJlcj0yMV09IkVudW1NZW1iZXIiLGVbZS5TdHJ1Y3Q9MjJdPSJTdHJ1Y3QiLGVbZS5FdmVudD0yM109IkV2ZW50IixlW2UuT3BlcmF0b3I9MjRdPSJPcGVyYXRvciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjVdPSJUeXBlUGFyYW1ldGVyIn0oU258fChTbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oeG58fCh4bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaWRkZW49MF09IkhpZGRlbiIsZVtlLkJsaW5rPTFdPSJCbGluayIsZVtlLlNtb290aD0yXT0iU21vb3RoIixlW2UuUGhhc2U9M109IlBoYXNlIixlW2UuRXhwYW5kPTRdPSJFeHBhbmQiLGVbZS5Tb2xpZD01XT0iU29saWQifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5CbG9jaz0yXT0iQmxvY2siLGVbZS5VbmRlcmxpbmU9M109IlVuZGVybGluZSIsZVtlLkxpbmVUaGluPTRdPSJMaW5lVGhpbiIsZVtlLkJsb2NrT3V0bGluZT01XT0iQmxvY2tPdXRsaW5lIixlW2UuVW5kZXJsaW5lVGhpbj02XT0iVW5kZXJsaW5lVGhpbiJ9KENufHwoQ249e30pKSxmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0oRW58fChFbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KEFufHwoQW49e30pKTtjbGFzcyBEbntzdGF0aWMgY2hvcmQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4oZXwoNjU1MzUmdCk8PDE2Pj4+MCk+Pj4wfShlLHQpfX1mdW5jdGlvbiBXbihlLHQsbixpLHIpe3JldHVybiBmdW5jdGlvbihlLHQsbixpLHIpe2lmKDA9PT1pKXJldHVybiEwO2NvbnN0IGE9dC5jaGFyQ29kZUF0KGktMSk7aWYoMCE9PWUuZ2V0KGEpKXJldHVybiEwO2lmKDEzPT09YXx8MTA9PT1hKXJldHVybiEwO2lmKHI+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQoaSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsMCxpLHIpJiZmdW5jdGlvbihlLHQsbixpLHIpe2lmKGkrcj09PW4pcmV0dXJuITA7Y29uc3QgYT10LmNoYXJDb2RlQXQoaStyKTtpZigwIT09ZS5nZXQoYSkpcmV0dXJuITA7aWYoMTM9PT1hfHwxMD09PWEpcmV0dXJuITA7aWYocj4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChpK3ItMSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsbixpLHIpfURuLkN0cmxDbWQ9MjA0OCxEbi5TaGlmdD0xMDI0LERuLkFsdD01MTIsRG4uV2luQ3RybD0yNTYsZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5SaWdodD0yXT0iUmlnaHQifShSbnx8KFJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShObnx8KE5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KElufHwoSW49e30pKTtjbGFzcyBPbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZihuPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSksIW4pcmV0dXJuIG51bGw7Y29uc3QgaT1uLmluZGV4LHI9blswXS5sZW5ndGg7aWYoaT09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJnI9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKDA9PT1yKXtRKGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1pLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1yLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8V24odGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LGkscikpcmV0dXJuIG59d2hpbGUobik7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFBuKGUsdD0iVW5yZWFjaGFibGUiKXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gcW4oZSl7ZSgpfHwoZSgpLHQobmV3IG8oIkFzc2VydGlvbiBGYWlsZWQiKSkpfWZ1bmN0aW9uIEZuKGUsdCl7bGV0IG49MDtmb3IoO248ZS5sZW5ndGgtMTspe2lmKCF0KGVbbl0sZVtuKzFdKSlyZXR1cm4hMTtuKyt9cmV0dXJuITB9Y2xhc3MgQm57c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7Y29uc3QgaT1uP24uc3RhcnRMaW5lTnVtYmVyOjEscj1uP24uZW5kTGluZU51bWJlcjplLmdldExpbmVDb3VudCgpLGE9bmV3IFZuKHQpLG89YS5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHM7dmFyIGwsYztzPSJhbGxOb25CYXNpY0FzY2lpIj09PW8/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cCgiIisobD1BcnJheS5mcm9tKG8pLGBbJHtjPWwubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGMucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCksImciKTtjb25zdCBoPW5ldyBPbihudWxsLHMpLGQ9W107bGV0IHUsbT0hMSxwPTAsZj0wLGc9MDtlOmZvcihsZXQgdD1pLG49cjt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLGk9bi5sZW5ndGg7aC5yZXNldCgwKTtkb3tpZih1PWgubmV4dChuKSx1KXtsZXQgZT11LmluZGV4LHI9dS5pbmRleCt1WzBdLmxlbmd0aDtpZihlPjApe1kobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS19aWYocisxPGkpe1kobi5jaGFyQ29kZUF0KHItMSkpJiZyKyt9Y29uc3Qgbz1uLnN1YnN0cmluZyhlLHIpO2xldCBzPXV0KGUrMSxodCxuLDApO3MmJnMuZW5kQ29sdW1uPD1lKzEmJihzPW51bGwpO2NvbnN0IGw9YS5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKG8scz9zLndvcmQ6bnVsbCk7aWYoMCE9PWwpezM9PT1sP3ArKzoyPT09bD9mKys6MT09PWw/ZysrOlBuKCk7Y29uc3Qgbj0xZTM7aWYoZC5sZW5ndGg+PW4pe209ITA7YnJlYWsgZX1kLnB1c2gobmV3IGl0KHQsZSsxLHQscisxKSl9fX13aGlsZSh1KX1yZXR1cm57cmFuZ2VzOmQsaGFzTW9yZTptLGFtYmlndW91c0NoYXJhY3RlckNvdW50OnAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Zixub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6Z319c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKGUsdCl7Y29uc3Qgbj1uZXcgVm4odCk7c3dpdGNoKG4uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3QgaT1lLmNvZGVQb2ludEF0KDApLHI9bi5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKGkpLGE9ZWUuZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IWVlLmdldEluc3RhbmNlKG5ldyBTZXQoWy4uLnQuYWxsb3dlZExvY2FsZXMsZV0pKS5pc0FtYmlndW91cyhpKSkpO3JldHVybntraW5kOjAsY29uZnVzYWJsZVdpdGg6U3RyaW5nLmZyb21Db2RlUG9pbnQociksbm90QW1iaWd1b3VzSW5Mb2NhbGVzOmF9fWNhc2UgMTpyZXR1cm57a2luZDoyfX19fWNsYXNzIFZue2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldChlLmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9ZWUuZ2V0SW5zdGFuY2UobmV3IFNldChlLmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCBlPW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IHQgb2YgdGUuY29kZVBvaW50cylLbihTdHJpbmcuZnJvbUNvZGVQb2ludCh0KSl8fGUuYWRkKHQpO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKWUuYWRkKHQpO2Zvcihjb25zdCB0IG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpZS5kZWxldGUodCk7cmV0dXJuIGV9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLHQpe2NvbnN0IG49ZS5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhuKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgaT0hMSxyPSExO2lmKHQpZm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1lLmNvZGVQb2ludEF0KDApLG49KGE9ZSxaLnRlc3QoYSkpO2k9aXx8bixufHx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXModCl8fHRlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpfHwocj0hMCl9dmFyIGE7cmV0dXJuIWkmJnI/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIUtuKGUpJiZ0ZS5pc0ludmlzaWJsZUNoYXJhY3RlcihuKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobik/MzowfX1mdW5jdGlvbiBLbihlKXtyZXR1cm4iICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWV9Y2xhc3Mgam57c3RhdGljIGZyb21SYW5nZShlKXtyZXR1cm4gbmV3IGpuKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlcil9c3RhdGljIGpvaW5NYW55KGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTtsZXQgdD1lWzBdO2ZvcihsZXQgbj0xO248ZS5sZW5ndGg7bisrKXQ9dGhpcy5qb2luKHQsZVtuXSk7cmV0dXJuIHR9c3RhdGljIGpvaW4oZSx0KXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49W107bGV0IGk9MCxyPTAsYT1udWxsO2Zvcig7aTxlLmxlbmd0aHx8cjx0Lmxlbmd0aDspe2xldCBvPW51bGw7aWYoaTxlLmxlbmd0aCYmcjx0Lmxlbmd0aCl7Y29uc3Qgbj1lW2ldLGE9dFtyXTtuLnN0YXJ0TGluZU51bWJlcjxhLnN0YXJ0TGluZU51bWJlcj8obz1uLGkrKyk6KG89YSxyKyspfWVsc2UgaTxlLmxlbmd0aD8obz1lW2ldLGkrKyk6KG89dFtyXSxyKyspO251bGw9PT1hP2E9bzphLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PW8uc3RhcnRMaW5lTnVtYmVyP2E9bmV3IGpuKGEuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWF4KGEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxvLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKToobi5wdXNoKGEpLGE9byl9cmV0dXJuIG51bGwhPT1hJiZuLnB1c2goYSksbn1zdGF0aWMgb2ZMZW5ndGgoZSx0KXtyZXR1cm4gbmV3IGpuKGUsZSt0KX1jb25zdHJ1Y3RvcihlLHQpe2lmKGU+dCl0aHJvdyBuZXcgbyhgc3RhcnRMaW5lTnVtYmVyICR7ZX0gY2Fubm90IGJlIGFmdGVyIGVuZExpbmVOdW1iZXJFeGNsdXNpdmUgJHt0fWApO3RoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPXR9Y29udGFpbnMoZSl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD1lJiZlPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1kZWx0YShlKXtyZXR1cm4gbmV3IGpuKHRoaXMuc3RhcnRMaW5lTnVtYmVyK2UsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK2UpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4oZSl7cmV0dXJuIG5ldyBqbihNYXRoLm1pbih0aGlzLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0TGluZU51bWJlciksTWF0aC5tYXgodGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGUuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpfXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnRMaW5lTnVtYmVyfSwke3RoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX0pYH1pbnRlcnNlY3QoZSl7Y29uc3QgdD1NYXRoLm1heCh0aGlzLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0TGluZU51bWJlciksbj1NYXRoLm1pbih0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtpZih0PD1uKXJldHVybiBuZXcgam4odCxuKX1pbnRlcnNlY3RzU3RyaWN0KGUpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjxlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmUuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaChlKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PWUuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmZS5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHMoZSl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWUuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyBpdCh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyBpdCh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKX19Y2xhc3MgR257Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNoYW5nZXM9ZSx0aGlzLmhpdFRpbWVvdXQ9dH19Y2xhc3MgJG57c3RhdGljIGludmVyc2UoZSx0LG4pe2NvbnN0IGk9W107bGV0IHI9MSxhPTE7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT1uZXcgJG4obmV3IGpuKHIsdC5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlciksbmV3IGpuKGEsdC5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlciksdm9pZCAwKTtlLm1vZGlmaWVkUmFuZ2UuaXNFbXB0eXx8aS5wdXNoKGUpLHI9dC5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYT10Lm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBvPW5ldyAkbihuZXcgam4ocix0KzEpLG5ldyBqbihhLG4rMSksdm9pZCAwKTtyZXR1cm4gby5tb2RpZmllZFJhbmdlLmlzRW1wdHl8fGkucHVzaChvKSxpfWNvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLm9yaWdpbmFsUmFuZ2U9ZSx0aGlzLm1vZGlmaWVkUmFuZ2U9dCx0aGlzLmlubmVyQ2hhbmdlcz1ufXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWxSYW5nZS50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkUmFuZ2UudG9TdHJpbmcoKX19YH1nZXQgY2hhbmdlZExpbmVDb3VudCgpe3JldHVybiBNYXRoLm1heCh0aGlzLm9yaWdpbmFsUmFuZ2UubGVuZ3RoLHRoaXMubW9kaWZpZWRSYW5nZS5sZW5ndGgpfX1jbGFzcyBKbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMub3JpZ2luYWxSYW5nZT1lLHRoaXMubW9kaWZpZWRSYW5nZT10fXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWxSYW5nZS50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkUmFuZ2UudG9TdHJpbmcoKX19YH19ZnVuY3Rpb24gWG4oZSx0LG4saSl7cmV0dXJuIG5ldyB2ZShlLHQsbikuQ29tcHV0ZURpZmYoaSl9bGV0IFluPWNsYXNze2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspdFtpXT1uaShlW2ldLDEpLG5baV09aWkoZVtpXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3QgaT1bXSxyPVtdLGE9W107bGV0IG89MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLGw9ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxjPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1sO2U8YztlKyspaVtvXT10LmNoYXJDb2RlQXQoZS0xKSxyW29dPXMrMSxhW29dPWUsbysrOyFlJiZzPG4mJihpW29dPTEwLHJbb109cysxLGFbb109dC5sZW5ndGgrMSxvKyspfXJldHVybiBuZXcgUW4oaSxyLGEpfX07Y2xhc3MgUW57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX2NoYXJDb2Rlcz1lLHRoaXMuX2xpbmVOdW1iZXJzPXQsdGhpcy5fY29sdW1ucz1ufXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKChlLHQpPT4oMTA9PT1lPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbdF19LCR7dGhpcy5fY29sdW1uc1t0XX0pYCkpLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleChlLHQpe2lmKGU8MHx8ZT49dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcihlLTEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4tMT09PWU/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIoZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9saW5lTnVtYmVycyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/dGhpcy5fbGluZU51bWJlcnNbZV0rMTp0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0U3RhcnRDb2x1bW4oZSl7cmV0dXJuIGU+MCYmZT09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1tlXSl9Z2V0RW5kQ29sdW1uKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0Q29sdW1uKGUrMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/MTp0aGlzLl9jb2x1bW5zW2VdKzEpfX1jbGFzcyBabntjb25zdHJ1Y3RvcihlLHQsbixpLHIsYSxvLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49aSx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPXIsdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPWEsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9byx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPXN9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKGUsdCxuKXtjb25zdCBpPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCkscj10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksYT10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksbz10LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCksbD1uLmdldFN0YXJ0Q29sdW1uKGUubW9kaWZpZWRTdGFydCksYz1uLmdldEVuZExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSksaD1uLmdldEVuZENvbHVtbihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IFpuKGkscixhLG8scyxsLGMsaCl9fWNsYXNzIGVpe2NvbnN0cnVjdG9yKGUsdCxuLGkscil7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5jaGFyQ2hhbmdlcz1yfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdChlLHQsbixpLHIsYSxvKXtsZXQgcyxsLGMsaCxkO2lmKDA9PT10Lm9yaWdpbmFsTGVuZ3RoPyhzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCktMSxsPTApOihzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksbD1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkpLDA9PT10Lm1vZGlmaWVkTGVuZ3RoPyhjPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCktMSxoPTApOihjPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksaD1pLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSkpLGEmJnQub3JpZ2luYWxMZW5ndGg+MCYmdC5vcmlnaW5hbExlbmd0aDwyMCYmdC5tb2RpZmllZExlbmd0aD4wJiZ0Lm1vZGlmaWVkTGVuZ3RoPDIwJiZyKCkpe2NvbnN0IGE9bi5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkscz1pLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQubW9kaWZpZWRTdGFydCx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtpZihhLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJnMuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IGU9WG4oYSxzLHIsITApLmNoYW5nZXM7byYmKGU9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IGk9MSxyPWUubGVuZ3RoO2k8cjtpKyspe2NvbnN0IHI9ZVtpXSxhPXIub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLG89ci5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxvKTwzPyhuLm9yaWdpbmFsTGVuZ3RoPXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPXIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChyKSxuPXIpfXJldHVybiB0fShlKSksZD1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspZC5wdXNoKFpuLmNyZWF0ZUZyb21EaWZmQ2hhbmdlKGVbdF0sYSxzKSl9fXJldHVybiBuZXcgZWkocyxsLGMsaCxkKX19Y2xhc3MgdGl7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPW4uc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1uLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1uLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9bi5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9ZSx0aGlzLm1vZGlmaWVkTGluZXM9dCx0aGlzLm9yaWdpbmFsPW5ldyBZbihlKSx0aGlzLm1vZGlmaWVkPW5ldyBZbih0KSx0aGlzLmNvbnRpbnVlTGluZURpZmY9cmkobi5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1yaSgwPT09bi5tYXhDb21wdXRhdGlvblRpbWU/MDpNYXRoLm1pbihuLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKDE9PT10aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoKXJldHVybiAxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6dm9pZCAwfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6dm9pZCAwfV19O2NvbnN0IGU9WG4odGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSx0PWUuY2hhbmdlcyxuPWUucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IGU9W107Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKWUucHVzaChlaS5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRbbl0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczplfX1jb25zdCBpPVtdO2xldCByPTAsYT0wO2ZvcihsZXQgZT0tMSxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG89ZSsxPG4/dFtlKzFdOm51bGwscz1vP28ub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGw9bz9vLm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO3I8cyYmYTxsOyl7Y29uc3QgZT10aGlzLm9yaWdpbmFsTGluZXNbcl0sdD10aGlzLm1vZGlmaWVkTGluZXNbYV07aWYoZSE9PXQpe3tsZXQgbj1uaShlLDEpLG89bmkodCwxKTtmb3IoO24+MSYmbz4xOyl7aWYoZS5jaGFyQ29kZUF0KG4tMikhPT10LmNoYXJDb2RlQXQoby0yKSlicmVhaztuLS0sby0tfShuPjF8fG8+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoaSxyKzEsMSxuLGErMSwxLG8pfXtsZXQgbj1paShlLDEpLG89aWkodCwxKTtjb25zdCBzPWUubGVuZ3RoKzEsbD10Lmxlbmd0aCsxO2Zvcig7bjxzJiZvPGw7KXtpZihlLmNoYXJDb2RlQXQobi0xKSE9PWUuY2hhckNvZGVBdChvLTEpKWJyZWFrO24rKyxvKyt9KG48c3x8bzxsKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShpLHIrMSxuLHMsYSsxLG8sbCl9fXIrKyxhKyt9byYmKGkucHVzaChlaS5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLG8sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxyKz1vLm9yaWdpbmFsTGVuZ3RoLGErPW8ubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOml9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLGkscixhLG8pe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLGkscixhLG8pKXJldHVybjtsZXQgczt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKHM9W25ldyBabih0LG4sdCxpLHIsYSxyLG8pXSksZS5wdXNoKG5ldyBlaSh0LHQscixyLHMpKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4saSxyLGEsbyl7Y29uc3Qgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm4hMTtjb25zdCBsPWVbcy0xXTtyZXR1cm4gMCE9PWwub3JpZ2luYWxFbmRMaW5lTnVtYmVyJiYwIT09bC5tb2RpZmllZEVuZExpbmVOdW1iZXImJihsLm9yaWdpbmFsRW5kTGluZU51bWJlcj09PXQmJmwubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09cj8odGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMucHVzaChuZXcgWm4odCxuLHQsaSxyLGEscixvKSksITApOmwub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZsLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09ciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBabih0LG4sdCxpLHIsYSxyLG8pKSwhMCkpfX1mdW5jdGlvbiBuaShlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWUuY2hhckNvZGVBdCh0KTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiB0fXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzF9ZnVuY3Rpb24gaWkoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7aWYoMzIhPT10JiY5IT09dClyZXR1cm4gbn1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisyfWZ1bmN0aW9uIHJpKGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWNsYXNzIGFpe3N0YXRpYyBhZGRSYW5nZShlLHQpe2xldCBuPTA7Zm9yKDtuPHQubGVuZ3RoJiZ0W25dLmVuZEV4Y2x1c2l2ZTxlLnN0YXJ0OyluKys7bGV0IGk9bjtmb3IoO2k8dC5sZW5ndGgmJnRbaV0uc3RhcnQ8PWUuZW5kRXhjbHVzaXZlOylpKys7aWYobj09PWkpdC5zcGxpY2UobiwwLGUpO2Vsc2V7Y29uc3Qgcj1NYXRoLm1pbihlLnN0YXJ0LHRbbl0uc3RhcnQpLGE9TWF0aC5tYXgoZS5lbmRFeGNsdXNpdmUsdFtpLTFdLmVuZEV4Y2x1c2l2ZSk7dC5zcGxpY2UobixpLW4sbmV3IGFpKHIsYSkpfX1zdGF0aWMgdHJ5Q3JlYXRlKGUsdCl7aWYoIShlPnQpKXJldHVybiBuZXcgYWkoZSx0KX1jb25zdHJ1Y3RvcihlLHQpe2lmKHRoaXMuc3RhcnQ9ZSx0aGlzLmVuZEV4Y2x1c2l2ZT10LGU+dCl0aHJvdyBuZXcgbyhgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKGUpe3JldHVybiBuZXcgYWkodGhpcy5zdGFydCtlLHRoaXMuZW5kRXhjbHVzaXZlK2UpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmUtdGhpcy5zdGFydH10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0fSwgJHt0aGlzLmVuZEV4Y2x1c2l2ZX0pYH1lcXVhbHMoZSl7cmV0dXJuIHRoaXMuc3RhcnQ9PT1lLnN0YXJ0JiZ0aGlzLmVuZEV4Y2x1c2l2ZT09PWUuZW5kRXhjbHVzaXZlfWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIHRoaXMuc3RhcnQ8PWUuc3RhcnQmJmUuZW5kRXhjbHVzaXZlPD10aGlzLmVuZEV4Y2x1c2l2ZX1qb2luKGUpe3JldHVybiBuZXcgYWkoTWF0aC5taW4odGhpcy5zdGFydCxlLnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSxlLmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdChlKXtjb25zdCB0PU1hdGgubWF4KHRoaXMuc3RhcnQsZS5zdGFydCksbj1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSxlLmVuZEV4Y2x1c2l2ZSk7aWYodDw9bilyZXR1cm4gbmV3IGFpKHQsbil9fWNsYXNzIG9pe3N0YXRpYyB0cml2aWFsKGUsdCl7cmV0dXJuIG5ldyBvaShbbmV3IHNpKG5ldyBhaSgwLGUubGVuZ3RoKSxuZXcgYWkoMCx0Lmxlbmd0aCkpXSwhMSl9c3RhdGljIHRyaXZpYWxUaW1lZE91dChlLHQpe3JldHVybiBuZXcgb2koW25ldyBzaShuZXcgYWkoMCxlLmxlbmd0aCksbmV3IGFpKDAsdC5sZW5ndGgpKV0sITApfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5kaWZmcz1lLHRoaXMuaGl0VGltZW91dD10fX1jbGFzcyBzaXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc2VxMVJhbmdlPWUsdGhpcy5zZXEyUmFuZ2U9dH1yZXZlcnNlKCl7cmV0dXJuIG5ldyBzaSh0aGlzLnNlcTJSYW5nZSx0aGlzLnNlcTFSYW5nZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNlcTFSYW5nZX0gPC0+ICR7dGhpcy5zZXEyUmFuZ2V9YH1qb2luKGUpe3JldHVybiBuZXcgc2kodGhpcy5zZXExUmFuZ2Uuam9pbihlLnNlcTFSYW5nZSksdGhpcy5zZXEyUmFuZ2Uuam9pbihlLnNlcTJSYW5nZSkpfX1jbGFzcyBsaXtpc1ZhbGlkKCl7cmV0dXJuITB9fWxpLmluc3RhbmNlPW5ldyBsaTtjbGFzcyBjaXtjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnRpbWVvdXQ9ZSx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsZTw9MCl0aHJvdyBuZXcgbygidGltZW91dCBtdXN0IGJlIHBvc2l0aXZlIil9aXNWYWxpZCgpe3JldHVybiEoRGF0ZS5ub3coKS10aGlzLnN0YXJ0VGltZTx0aGlzLnRpbWVvdXQpJiZ0aGlzLnZhbGlkJiYodGhpcy52YWxpZD0hMSksdGhpcy52YWxpZH19Y2xhc3MgaGl7Y29uc3RydWN0b3IoZSx0KXt0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9dCx0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KGUqdCl9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuYXJyYXlbZSt0KnRoaXMud2lkdGhdfXNldChlLHQsbil7dGhpcy5hcnJheVtlK3QqdGhpcy53aWR0aF09bn19Y2xhc3MgZGl7Y29tcHV0ZShlLHQsbj1saS5pbnN0YW5jZSxpKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gb2kudHJpdmlhbChlLHQpO2NvbnN0IHI9bmV3IGhpKGUubGVuZ3RoLHQubGVuZ3RoKSxhPW5ldyBoaShlLmxlbmd0aCx0Lmxlbmd0aCksbz1uZXcgaGkoZS5sZW5ndGgsdC5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCsrKXtpZighbi5pc1ZhbGlkKCkpcmV0dXJuIG9pLnRyaXZpYWxUaW1lZE91dChlLHQpO2NvbnN0IGM9MD09PXM/MDpyLmdldChzLTEsbCksaD0wPT09bD8wOnIuZ2V0KHMsbC0xKTtsZXQgZDtlLmdldEVsZW1lbnQocyk9PT10LmdldEVsZW1lbnQobCk/KGQ9MD09PXN8fDA9PT1sPzA6ci5nZXQocy0xLGwtMSkscz4wJiZsPjAmJjM9PT1hLmdldChzLTEsbC0xKSYmKGQrPW8uZ2V0KHMtMSxsLTEpKSxkKz1pP2kocyxsKToxKTpkPS0xO2NvbnN0IHU9TWF0aC5tYXgoYyxoLGQpO2lmKHU9PT1kKXtjb25zdCBlPXM+MCYmbD4wP28uZ2V0KHMtMSxsLTEpOjA7by5zZXQocyxsLGUrMSksYS5zZXQocyxsLDMpfWVsc2UgdT09PWM/KG8uc2V0KHMsbCwwKSxhLnNldChzLGwsMSkpOnU9PT1oJiYoby5zZXQocyxsLDApLGEuc2V0KHMsbCwyKSk7ci5zZXQocyxsLHUpfWNvbnN0IHM9W107bGV0IGw9ZS5sZW5ndGgsYz10Lmxlbmd0aDtmdW5jdGlvbiBoKGUsdCl7ZSsxPT09bCYmdCsxPT09Y3x8cy5wdXNoKG5ldyBzaShuZXcgYWkoZSsxLGwpLG5ldyBhaSh0KzEsYykpKSxsPWUsYz10fWxldCBkPWUubGVuZ3RoLTEsdT10Lmxlbmd0aC0xO2Zvcig7ZD49MCYmdT49MDspMz09PWEuZ2V0KGQsdSk/KGgoZCx1KSxkLS0sdS0tKToxPT09YS5nZXQoZCx1KT9kLS06dS0tO3JldHVybiBoKC0xLC0xKSxzLnJldmVyc2UoKSxuZXcgb2kocywhMSl9fWZ1bmN0aW9uIHVpKGUsdCxuKXtsZXQgaT1uO3JldHVybiBpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCBpPVtdO24ubGVuZ3RoPjAmJmkucHVzaChuWzBdKTtmb3IobGV0IGU9MTtlPG4ubGVuZ3RoO2UrKyl7Y29uc3Qgcj1pW2kubGVuZ3RoLTFdLGE9bltlXTtpZihhLnNlcTFSYW5nZS5pc0VtcHR5KXtsZXQgZT0hMDtjb25zdCBuPWEuc2VxMVJhbmdlLnN0YXJ0LXIuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTtmb3IobGV0IGk9MTtpPD1uO2krKylpZih0LmdldEVsZW1lbnQoYS5zZXEyUmFuZ2Uuc3RhcnQtaSkhPT10LmdldEVsZW1lbnQoYS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWkpKXtlPSExO2JyZWFrfWlmKGUpe2lbaS5sZW5ndGgtMV09bmV3IHNpKHIuc2VxMVJhbmdlLG5ldyBhaShyLnNlcTJSYW5nZS5zdGFydCxhLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtbikpO2NvbnRpbnVlfX1pLnB1c2goYSl9cmV0dXJuIGl9KDAsdCxpKSxpPWZ1bmN0aW9uKGUsdCxuKXtpZighZS5nZXRCb3VuZGFyeVNjb3JlfHwhdC5nZXRCb3VuZGFyeVNjb3JlKXJldHVybiBuO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtjb25zdCByPW5baV07aWYoci5zZXExUmFuZ2UuaXNFbXB0eSl7Y29uc3QgYT1pPjA/bltpLTFdLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU6LTEsbz1pKzE8bi5sZW5ndGg/bltpKzFdLnNlcTJSYW5nZS5zdGFydDp0Lmxlbmd0aDtuW2ldPW1pKHIsZSx0LG8sYSl9ZWxzZSBpZihyLnNlcTJSYW5nZS5pc0VtcHR5KXtjb25zdCBhPWk+MD9uW2ktMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTotMSxvPWkrMTxuLmxlbmd0aD9uW2krMV0uc2VxMVJhbmdlLnN0YXJ0OmUubGVuZ3RoO25baV09bWkoci5yZXZlcnNlKCksdCxlLG8sYSkucmV2ZXJzZSgpfX1yZXR1cm4gbn0oZSx0LGkpLGl9ZnVuY3Rpb24gbWkoZSx0LG4saSxyKXtsZXQgYT0xO2Zvcig7ZS5zZXEyUmFuZ2Uuc3RhcnQtYT5yJiZuLmdldEVsZW1lbnQoZS5zZXEyUmFuZ2Uuc3RhcnQtYSk9PT1uLmdldEVsZW1lbnQoZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWEpJiZhPDIwOylhKys7YS0tO2xldCBvPTA7Zm9yKDtlLnNlcTJSYW5nZS5zdGFydCtvPGkmJm4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5zdGFydCtvKT09PW4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbykmJm88MjA7KW8rKztpZigwPT09YSYmMD09PW8pcmV0dXJuIGU7bGV0IHM9MCxsPS0xO2ZvcihsZXQgaT0tYTtpPD1vO2krKyl7Y29uc3Qgcj1lLnNlcTJSYW5nZS5zdGFydCtpLGE9ZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2ksbz1lLnNlcTFSYW5nZS5zdGFydCtpLGM9dC5nZXRCb3VuZGFyeVNjb3JlKG8pK24uZ2V0Qm91bmRhcnlTY29yZShyKStuLmdldEJvdW5kYXJ5U2NvcmUoYSk7Yz5sJiYobD1jLHM9aSl9cmV0dXJuIDAhPT1zP25ldyBzaShlLnNlcTFSYW5nZS5kZWx0YShzKSxlLnNlcTJSYW5nZS5kZWx0YShzKSk6ZX1jbGFzcyBwaXtjb21wdXRlKGUsdCxuPWxpLmluc3RhbmNlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gb2kudHJpdmlhbChlLHQpO2Z1bmN0aW9uIGkobixpKXtmb3IoO248ZS5sZW5ndGgmJmk8dC5sZW5ndGgmJmUuZ2V0RWxlbWVudChuKT09PXQuZ2V0RWxlbWVudChpKTspbisrLGkrKztyZXR1cm4gbn1sZXQgcj0wO2NvbnN0IGE9bmV3IGdpO2Euc2V0KDAsaSgwLDApKTtjb25zdCBvPW5ldyBiaTtvLnNldCgwLDA9PT1hLmdldCgwKT9udWxsOm5ldyBmaShudWxsLDAsMCxhLmdldCgwKSkpO2xldCBzPTA7ZTpmb3IoOzspZm9yKHIrKyxzPS1yO3M8PXI7cys9Mil7aWYoIW4uaXNWYWxpZCgpKXJldHVybiBvaS50cml2aWFsVGltZWRPdXQoZSx0KTtjb25zdCBsPXM9PT1yPy0xOmEuZ2V0KHMrMSksYz1zPT09LXI/LTE6YS5nZXQocy0xKSsxLGg9TWF0aC5taW4oTWF0aC5tYXgobCxjKSxlLmxlbmd0aCksZD1oLXMsdT1pKGgsZCk7YS5zZXQocyx1KTtjb25zdCBtPWg9PT1sP28uZ2V0KHMrMSk6by5nZXQocy0xKTtpZihvLnNldChzLHUhPT1oP25ldyBmaShtLGgsZCx1LWgpOm0pLGEuZ2V0KHMpPT09ZS5sZW5ndGgmJmEuZ2V0KHMpLXM9PT10Lmxlbmd0aClicmVhayBlfWxldCBsPW8uZ2V0KHMpO2NvbnN0IGM9W107bGV0IGg9ZS5sZW5ndGgsZD10Lmxlbmd0aDtmb3IoOzspe2NvbnN0IGU9bD9sLngrbC5sZW5ndGg6MCx0PWw/bC55K2wubGVuZ3RoOjA7aWYoZT09PWgmJnQ9PT1kfHxjLnB1c2gobmV3IHNpKG5ldyBhaShlLGgpLG5ldyBhaSh0LGQpKSksIWwpYnJlYWs7aD1sLngsZD1sLnksbD1sLnByZXZ9cmV0dXJuIGMucmV2ZXJzZSgpLG5ldyBvaShjLCExKX19Y2xhc3MgZml7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy5wcmV2PWUsdGhpcy54PXQsdGhpcy55PW4sdGhpcy5sZW5ndGg9aX19Y2xhc3MgZ2l7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKSx0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKX1nZXQoZSl7cmV0dXJuIGU8MD8oZT0tZS0xLHRoaXMubmVnYXRpdmVBcnJbZV0pOnRoaXMucG9zaXRpdmVBcnJbZV19c2V0KGUsdCl7aWYoZTwwKXtpZigoZT0tZS0xKT49dGhpcy5uZWdhdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGU9dGhpcy5uZWdhdGl2ZUFycjt0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDIqZS5sZW5ndGgpLHRoaXMubmVnYXRpdmVBcnIuc2V0KGUpfXRoaXMubmVnYXRpdmVBcnJbZV09dH1lbHNle2lmKGU+PXRoaXMucG9zaXRpdmVBcnIubGVuZ3RoKXtjb25zdCBlPXRoaXMucG9zaXRpdmVBcnI7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheSgyKmUubGVuZ3RoKSx0aGlzLnBvc2l0aXZlQXJyLnNldChlKX10aGlzLnBvc2l0aXZlQXJyW2VdPXR9fX1jbGFzcyBiaXtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9W10sdGhpcy5uZWdhdGl2ZUFycj1bXX1nZXQoZSl7cmV0dXJuIGU8MD8oZT0tZS0xLHRoaXMubmVnYXRpdmVBcnJbZV0pOnRoaXMucG9zaXRpdmVBcnJbZV19c2V0KGUsdCl7ZTwwPyhlPS1lLTEsdGhpcy5uZWdhdGl2ZUFycltlXT10KTp0aGlzLnBvc2l0aXZlQXJyW2VdPXR9fWNsYXNzIF9pe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmltbWVkSGFzaD1lLHRoaXMubGluZXM9dH1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW2VdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZShlKXtyZXR1cm4gMWUzLSgoMD09PWU/MDp2aSh0aGlzLmxpbmVzW2UtMV0pKSsoZT09PXRoaXMubGluZXMubGVuZ3RoPzA6dmkodGhpcy5saW5lc1tlXSkpKX19ZnVuY3Rpb24gdmkoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJigzMj09PWUuY2hhckNvZGVBdCh0KXx8OT09PWUuY2hhckNvZGVBdCh0KSk7KXQrKztyZXR1cm4gdH1jbGFzcyB3aXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5saW5lcz1lLHRoaXMuY29uc2lkZXJXaGl0ZXNwYWNlQ2hhbmdlcz1uLHRoaXMuZWxlbWVudHM9W10sdGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZT1bXSx0aGlzLm9mZnNldEJ5TGluZT1bXTtsZXQgaT0hMTt0LnN0YXJ0PjAmJnQuZW5kRXhjbHVzaXZlPj1lLmxlbmd0aCYmKHQ9bmV3IGFpKHQuc3RhcnQtMSx0LmVuZEV4Y2x1c2l2ZSksaT0hMCksdGhpcy5saW5lUmFuZ2U9dDtmb3IobGV0IHQ9dGhpcy5saW5lUmFuZ2Uuc3RhcnQ7dDx0aGlzLmxpbmVSYW5nZS5lbmRFeGNsdXNpdmU7dCsrKXtsZXQgcj1lW3RdLGE9MDtpZihpKWE9ci5sZW5ndGgscj0iIixpPSExO2Vsc2UgaWYoIW4pe2NvbnN0IGU9ci50cmltU3RhcnQoKTthPXIubGVuZ3RoLWUubGVuZ3RoLHI9ZS50cmltRW5kKCl9dGhpcy5vZmZzZXRCeUxpbmUucHVzaChhKTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyl0aGlzLmVsZW1lbnRzLnB1c2goci5jaGFyQ29kZUF0KGUpKTt0PGUubGVuZ3RoLTEmJih0aGlzLmVsZW1lbnRzLnB1c2goIlxuIi5jaGFyQ29kZUF0KDApKSx0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZU1pbnVzT25lW3QtdGhpcy5saW5lUmFuZ2Uuc3RhcnRdPXRoaXMuZWxlbWVudHMubGVuZ3RoKX10aGlzLm9mZnNldEJ5TGluZS5wdXNoKDApfXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm5bLi4udGhpcy5lbGVtZW50c10ubWFwKChlPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkuam9pbigiIil9Z2V0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5lbGVtZW50c1tlXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZWxlbWVudHMubGVuZ3RofWdldEJvdW5kYXJ5U2NvcmUoZSl7Y29uc3QgdD1TaShlPjA/dGhpcy5lbGVtZW50c1tlLTFdOi0xKSxuPVNpKGU8dGhpcy5lbGVtZW50cy5sZW5ndGg/dGhpcy5lbGVtZW50c1tlXTotMSk7aWYoNj09PXQmJjc9PT1uKXJldHVybiAwO2xldCBpPTA7cmV0dXJuIHQhPT1uJiYoaSs9MTAsMT09PW4mJihpKz0xKSksaSs9a2kodCksaSs9a2kobiksaX10cmFuc2xhdGVPZmZzZXQoZSl7aWYodGhpcy5saW5lUmFuZ2UuaXNFbXB0eSlyZXR1cm4gbmV3IG50KHRoaXMubGluZVJhbmdlLnN0YXJ0KzEsMSk7bGV0IHQ9MCxuPXRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lTWludXNPbmUubGVuZ3RoO2Zvcig7dDxuOyl7Y29uc3QgaT1NYXRoLmZsb29yKCh0K24pLzIpO3RoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lTWludXNPbmVbaV0+ZT9uPWk6dD1pKzF9Y29uc3QgaT0wPT09dD8wOnRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lTWludXNPbmVbdC0xXTtyZXR1cm4gbmV3IG50KHRoaXMubGluZVJhbmdlLnN0YXJ0K3QrMSxlLWkrMSt0aGlzLm9mZnNldEJ5TGluZVt0XSl9dHJhbnNsYXRlUmFuZ2UoZSl7cmV0dXJuIGl0LmZyb21Qb3NpdGlvbnModGhpcy50cmFuc2xhdGVPZmZzZXQoZS5zdGFydCksdGhpcy50cmFuc2xhdGVPZmZzZXQoZS5lbmRFeGNsdXNpdmUpKX1maW5kV29yZENvbnRhaW5pbmcoZSl7aWYoZTwwfHxlPj10aGlzLmVsZW1lbnRzLmxlbmd0aClyZXR1cm47aWYoIXlpKHRoaXMuZWxlbWVudHNbZV0pKXJldHVybjtsZXQgdD1lO2Zvcig7dD4wJiZ5aSh0aGlzLmVsZW1lbnRzW3QtMV0pOyl0LS07bGV0IG49ZTtmb3IoO248dGhpcy5lbGVtZW50cy5sZW5ndGgmJnlpKHRoaXMuZWxlbWVudHNbbl0pOyluKys7cmV0dXJuIG5ldyBhaSh0LG4pfX1mdW5jdGlvbiB5aShlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgVGk9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6Myw2OjEwLDc6MTB9O2Z1bmN0aW9uIGtpKGUpe3JldHVybiBUaVtlXX1mdW5jdGlvbiBTaShlKXtyZXR1cm4gMTA9PT1lPzc6MTM9PT1lPzY6ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV9KGUpPzU6ZT49OTcmJmU8PTEyMj8wOmU+PTY1JiZlPD05MD8xOmU+PTQ4JiZlPD01Nz8yOi0xPT09ZT8zOjR9Y29uc3QgeGk9e2xlZ2FjeTpuZXcgY2xhc3N7Y29tcHV0ZURpZmYoZSx0LG4pe3ZhciBpO2NvbnN0IHI9bmV3IHRpKGUsdCx7bWF4Q29tcHV0YXRpb25UaW1lOm4ubWF4Q29tcHV0YXRpb25UaW1lTXMsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bi5pZ25vcmVUcmltV2hpdGVzcGFjZSxzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMH0pLmNvbXB1dGVEaWZmKCksYT1bXTtsZXQgbz1udWxsO2Zvcihjb25zdCBlIG9mIHIuY2hhbmdlcyl7bGV0IHQsbjt0PTA9PT1lLm9yaWdpbmFsRW5kTGluZU51bWJlcj9uZXcgam4oZS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxLGUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSk6bmV3IGpuKGUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMSksbj0wPT09ZS5tb2RpZmllZEVuZExpbmVOdW1iZXI/bmV3IGpuKGUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSxlLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEpOm5ldyBqbihlLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzEpO2xldCByPW5ldyAkbih0LG4sbnVsbD09PShpPWUuY2hhckNoYW5nZXMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm1hcCgoZT0+bmV3IEpuKG5ldyBpdChlLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyLGUub3JpZ2luYWxTdGFydENvbHVtbixlLm9yaWdpbmFsRW5kTGluZU51bWJlcixlLm9yaWdpbmFsRW5kQ29sdW1uKSxuZXcgaXQoZS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixlLm1vZGlmaWVkU3RhcnRDb2x1bW4sZS5tb2RpZmllZEVuZExpbmVOdW1iZXIsZS5tb2RpZmllZEVuZENvbHVtbikpKSkpO28mJihvLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSE9PXIubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXImJm8ub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09ci5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcnx8KHI9bmV3ICRuKG8ub3JpZ2luYWxSYW5nZS5qb2luKHIub3JpZ2luYWxSYW5nZSksby5tb2RpZmllZFJhbmdlLmpvaW4oci5tb2RpZmllZFJhbmdlKSxvLmlubmVyQ2hhbmdlcyYmci5pbm5lckNoYW5nZXM/by5pbm5lckNoYW5nZXMuY29uY2F0KHIuaW5uZXJDaGFuZ2VzKTp2b2lkIDApLGEucG9wKCkpKSxhLnB1c2gociksbz1yfXJldHVybiBxbigoKCk9PkZuKGEsKChlLHQpPT50Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT10Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx0Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx0Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSkpKSxuZXcgR24oYSxyLnF1aXRFYXJseSl9fSxhZHZhbmNlZDpuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmc9bmV3IGRpLHRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtPW5ldyBwaX1jb21wdXRlRGlmZihlLHQsbil7Y29uc3QgaT0wPT09bi5tYXhDb21wdXRhdGlvblRpbWVNcz9saS5pbnN0YW5jZTpuZXcgY2kobi5tYXhDb21wdXRhdGlvblRpbWVNcykscj0hbi5pZ25vcmVUcmltV2hpdGVzcGFjZSxhPW5ldyBNYXA7ZnVuY3Rpb24gbyhlKXtsZXQgdD1hLmdldChlKTtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9YS5zaXplLGEuc2V0KGUsdCkpLHR9Y29uc3Qgcz1lLm1hcCgoZT0+byhlLnRyaW0oKSkpKSxsPXQubWFwKChlPT5vKGUudHJpbSgpKSkpLGM9bmV3IF9pKHMsZSksaD1uZXcgX2kobCx0KSxkPSgoKT0+Yy5sZW5ndGgraC5sZW5ndGg8MTUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShjLGgsaSwoKG4saSk9PmVbbl09PT10W2ldPzA9PT10W2ldLmxlbmd0aD8uMToxK01hdGgubG9nKDErdFtpXS5sZW5ndGgpOi45OSkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYyxoKSkoKTtsZXQgdT1kLmRpZmZzLG09ZC5oaXRUaW1lb3V0O3U9dWkoYyxoLHUpO2NvbnN0IHA9W10sZj1uPT57aWYocilmb3IobGV0IGE9MDthPG47YSsrKXtjb25zdCBuPWcrYSxvPWIrYTtpZihlW25dIT09dFtvXSl7Y29uc3QgYT10aGlzLnJlZmluZURpZmYoZSx0LG5ldyBzaShuZXcgYWkobixuKzEpLG5ldyBhaShvLG8rMSkpLGkscik7Zm9yKGNvbnN0IGUgb2YgYS5tYXBwaW5ncylwLnB1c2goZSk7YS5oaXRUaW1lb3V0JiYobT0hMCl9fX07bGV0IGc9MCxiPTA7Zm9yKGNvbnN0IG4gb2YgdSl7cW4oKCgpPT5uLnNlcTFSYW5nZS5zdGFydC1nPT1uLnNlcTJSYW5nZS5zdGFydC1iKSk7ZihuLnNlcTFSYW5nZS5zdGFydC1nKSxnPW4uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxiPW4uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTtjb25zdCBhPXRoaXMucmVmaW5lRGlmZihlLHQsbixpLHIpO2EuaGl0VGltZW91dCYmKG09ITApO2Zvcihjb25zdCBlIG9mIGEubWFwcGluZ3MpcC5wdXNoKGUpfWYoZS5sZW5ndGgtZyk7Y29uc3QgXz1mdW5jdGlvbihlLHQsbil7Y29uc3QgaT1bXTtmb3IoY29uc3QgciBvZiBmdW5jdGlvbiooZSx0KXtsZXQgbixpO2Zvcihjb25zdCByIG9mIGUpdm9pZCAwIT09aSYmdChpLHIpP24ucHVzaChyKToobiYmKHlpZWxkIG4pLG49W3JdKSxpPXI7biYmKHlpZWxkIG4pfShlLm1hcCgoZT0+ZnVuY3Rpb24oZSx0LG4pe2xldCBpPTAscj0wO2UubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbi0xPj1uW2UubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4tMT49dFtlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmKGk9MSk7MT09PWUubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW4mJjE9PT1lLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyJiYocj0tMSk7Y29uc3QgYT1uZXcgam4oZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcitpLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyKzErciksbz1uZXcgam4oZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitpLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyKzErcik7cmV0dXJuIG5ldyAkbihhLG8sW2VdKX0oZSx0LG4pKSksKChlLHQpPT5lLm9yaWdpbmFsUmFuZ2Uub3ZlcmxhcE9yVG91Y2godC5vcmlnaW5hbFJhbmdlKXx8ZS5tb2RpZmllZFJhbmdlLm92ZXJsYXBPclRvdWNoKHQubW9kaWZpZWRSYW5nZSkpKSl7Y29uc3QgZT1yWzBdLHQ9cltyLmxlbmd0aC0xXTtpLnB1c2gobmV3ICRuKGUub3JpZ2luYWxSYW5nZS5qb2luKHQub3JpZ2luYWxSYW5nZSksZS5tb2RpZmllZFJhbmdlLmpvaW4odC5tb2RpZmllZFJhbmdlKSxyLm1hcCgoZT0+ZS5pbm5lckNoYW5nZXNbMF0pKSkpfXJldHVybiBxbigoKCk9PkZuKGksKChlLHQpPT50Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT10Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx0Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx0Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSkpKSxpfShwLGUsdCk7cmV0dXJuIG5ldyBHbihfLG0pfXJlZmluZURpZmYoZSx0LG4saSxyKXtjb25zdCBhPW5ldyB3aShlLG4uc2VxMVJhbmdlLHIpLG89bmV3IHdpKHQsbi5zZXEyUmFuZ2Uscikscz1hLmxlbmd0aCtvLmxlbmd0aDw1MDA/dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nLmNvbXB1dGUoYSxvLGkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYSxvLGkpO2xldCBsPXMuZGlmZnM7bD11aShhLG8sbCksbD1mdW5jdGlvbihlLHQsbil7Y29uc3QgaT1bXTtsZXQgcjtmdW5jdGlvbiBhKCl7aWYoIXIpcmV0dXJuO2NvbnN0IGU9ci5zMVJhbmdlLmxlbmd0aC1yLmRlbGV0ZWQ7ci5zMlJhbmdlLmxlbmd0aCxyLmFkZGVkLE1hdGgubWF4KHIuZGVsZXRlZCxyLmFkZGVkKSsoci5jb3VudC0xKT5lJiZpLnB1c2gobmV3IHNpKHIuczFSYW5nZSxyLnMyUmFuZ2UpKSxyPXZvaWQgMH1mb3IoY29uc3QgbyBvZiBuKXtmdW5jdGlvbiBzKGUsdCl7dmFyIG4saSxzLGw7aWYoIXJ8fCFyLnMxUmFuZ2UuY29udGFpbnNSYW5nZShlKXx8IXIuczJSYW5nZS5jb250YWluc1JhbmdlKHQpKWlmKCFyfHxyLnMxUmFuZ2UuZW5kRXhjbHVzaXZlPGUuc3RhcnQmJnIuczJSYW5nZS5lbmRFeGNsdXNpdmU8dC5zdGFydClhKCkscj17YWRkZWQ6MCxkZWxldGVkOjAsY291bnQ6MCxzMVJhbmdlOmUsczJSYW5nZTp0fTtlbHNle2NvbnN0IGE9YWkudHJ5Q3JlYXRlKHIuczFSYW5nZS5lbmRFeGNsdXNpdmUsZS5zdGFydCksbz1haS50cnlDcmVhdGUoci5zMlJhbmdlLmVuZEV4Y2x1c2l2ZSx0LnN0YXJ0KTtyLmRlbGV0ZWQrPW51bGwhPT0obj1udWxsPT1hP3ZvaWQgMDphLmxlbmd0aCkmJnZvaWQgMCE9PW4/bjowLHIuYWRkZWQrPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLmxlbmd0aCkmJnZvaWQgMCE9PWk/aTowLHIuczFSYW5nZT1yLnMxUmFuZ2Uuam9pbihlKSxyLnMyUmFuZ2U9ci5zMlJhbmdlLmpvaW4odCl9Y29uc3QgYz1lLmludGVyc2VjdChvLnNlcTFSYW5nZSksaD10LmludGVyc2VjdChvLnNlcTJSYW5nZSk7ci5jb3VudCsrLHIuZGVsZXRlZCs9bnVsbCE9PShzPW51bGw9PWM/dm9pZCAwOmMubGVuZ3RoKSYmdm9pZCAwIT09cz9zOjAsci5hZGRlZCs9bnVsbCE9PShsPW51bGw9PWg/dm9pZCAwOmgubGVuZ3RoKSYmdm9pZCAwIT09bD9sOjB9Y29uc3QgbD1lLmZpbmRXb3JkQ29udGFpbmluZyhvLnNlcTFSYW5nZS5zdGFydC0xKSxjPXQuZmluZFdvcmRDb250YWluaW5nKG8uc2VxMlJhbmdlLnN0YXJ0LTEpLGg9ZS5maW5kV29yZENvbnRhaW5pbmcoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKSxkPXQuZmluZFdvcmRDb250YWluaW5nKG8uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSk7bCYmaCYmYyYmZCYmbC5lcXVhbHMoaCkmJmMuZXF1YWxzKGQpP3MobCxjKToobCYmYyYmcyhsLGMpLGgmJmQmJnMoaCxkKSl9YSgpO3JldHVybiBmdW5jdGlvbihlLHQpe2NvbnN0IG49W107Zm9yKDtlLmxlbmd0aD4wfHx0Lmxlbmd0aD4wOyl7Y29uc3QgaT1lWzBdLHI9dFswXTtsZXQgYTthPWkmJighcnx8aS5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP2Uuc2hpZnQoKTp0LnNoaWZ0KCksbi5sZW5ndGg+MCYmbltuLmxlbmd0aC0xXS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj1hLnNlcTFSYW5nZS5zdGFydD9uW24ubGVuZ3RoLTFdPW5bbi5sZW5ndGgtMV0uam9pbihhKTpuLnB1c2goYSl9cmV0dXJuIG59KG4saSl9KGEsbyxsKSxsPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCBpPVtdO2Zvcihjb25zdCBlIG9mIG4pe2NvbnN0IHQ9aVtpLmxlbmd0aC0xXTt0JiYoZS5zZXExUmFuZ2Uuc3RhcnQtdC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPD0yfHxlLnNlcTJSYW5nZS5zdGFydC10LnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PTIpP2lbaS5sZW5ndGgtMV09bmV3IHNpKHQuc2VxMVJhbmdlLmpvaW4oZS5zZXExUmFuZ2UpLHQuc2VxMlJhbmdlLmpvaW4oZS5zZXEyUmFuZ2UpKTppLnB1c2goZSl9cmV0dXJuIGl9KDAsMCxsKTtyZXR1cm57bWFwcGluZ3M6bC5tYXAoKGU9Pm5ldyBKbihhLnRyYW5zbGF0ZVJhbmdlKGUuc2VxMVJhbmdlKSxvLnRyYW5zbGF0ZVJhbmdlKGUuc2VxMlJhbmdlKSkpKSxoaXRUaW1lb3V0OnMuaGl0VGltZW91dH19fX07ZnVuY3Rpb24gTGkoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnJvdW5kKGUqbikvbn1jbGFzcyBDaXtjb25zdHJ1Y3RvcihlLHQsbixpPTEpe3RoaXMuX3JnYmFCcmFuZD12b2lkIDAsdGhpcy5yPTB8TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsZSkpLHRoaXMuZz0wfE1hdGgubWluKDI1NSxNYXRoLm1heCgwLHQpKSx0aGlzLmI9MHxNYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxuKSksdGhpcy5hPUxpKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlLnI9PT10LnImJmUuZz09PXQuZyYmZS5iPT09dC5iJiZlLmE9PT10LmF9fWNsYXNzIEVpe2NvbnN0cnVjdG9yKGUsdCxuLGkpe3RoaXMuX2hzbGFCcmFuZD12b2lkIDAsdGhpcy5oPTB8TWF0aC5tYXgoTWF0aC5taW4oMzYwLGUpLDApLHRoaXMucz1MaShNYXRoLm1heChNYXRoLm1pbigxLHQpLDApLDMpLHRoaXMubD1MaShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMuYT1MaShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4gZS5oPT09dC5oJiZlLnM9PT10LnMmJmUubD09PXQubCYmZS5hPT09dC5hfXN0YXRpYyBmcm9tUkdCQShlKXtjb25zdCB0PWUuci8yNTUsbj1lLmcvMjU1LGk9ZS5iLzI1NSxyPWUuYSxhPU1hdGgubWF4KHQsbixpKSxvPU1hdGgubWluKHQsbixpKTtsZXQgcz0wLGw9MDtjb25zdCBjPShvK2EpLzIsaD1hLW87aWYoaD4wKXtzd2l0Y2gobD1NYXRoLm1pbihjPD0uNT9oLygyKmMpOmgvKDItMipjKSwxKSxhKXtjYXNlIHQ6cz0obi1pKS9oKyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS10KS9oKzI7YnJlYWs7Y2FzZSBpOnM9KHQtbikvaCs0fXMqPTYwLHM9TWF0aC5yb3VuZChzKX1yZXR1cm4gbmV3IEVpKHMsbCxjLHIpfXN0YXRpYyBfaHVlMnJnYihlLHQsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P2UrNioodC1lKSpuOm48LjU/dDpuPDIvMz9lKyh0LWUpKigyLzMtbikqNjplfXN0YXRpYyB0b1JHQkEoZSl7Y29uc3QgdD1lLmgvMzYwLHtzOm4sbDppLGE6cn09ZTtsZXQgYSxvLHM7aWYoMD09PW4pYT1vPXM9aTtlbHNle2NvbnN0IGU9aTwuNT9pKigxK24pOmkrbi1pKm4scj0yKmktZTthPUVpLl9odWUycmdiKHIsZSx0KzEvMyksbz1FaS5faHVlMnJnYihyLGUsdCkscz1FaS5faHVlMnJnYihyLGUsdC0xLzMpfXJldHVybiBuZXcgQ2koTWF0aC5yb3VuZCgyNTUqYSksTWF0aC5yb3VuZCgyNTUqbyksTWF0aC5yb3VuZCgyNTUqcykscil9fWNsYXNzIEFpe2NvbnN0cnVjdG9yKGUsdCxuLGkpe3RoaXMuX2hzdmFCcmFuZD12b2lkIDAsdGhpcy5oPTB8TWF0aC5tYXgoTWF0aC5taW4oMzYwLGUpLDApLHRoaXMucz1MaShNYXRoLm1heChNYXRoLm1pbigxLHQpLDApLDMpLHRoaXMudj1MaShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMuYT1MaShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4gZS5oPT09dC5oJiZlLnM9PT10LnMmJmUudj09PXQudiYmZS5hPT09dC5hfXN0YXRpYyBmcm9tUkdCQShlKXtjb25zdCB0PWUuci8yNTUsbj1lLmcvMjU1LGk9ZS5iLzI1NSxyPU1hdGgubWF4KHQsbixpKSxhPXItTWF0aC5taW4odCxuLGkpLG89MD09PXI/MDphL3I7bGV0IHM7cmV0dXJuIHM9MD09PWE/MDpyPT09dD8oKG4taSkvYSU2KzYpJTY6cj09PW4/KGktdCkvYSsyOih0LW4pL2ErNCxuZXcgQWkoTWF0aC5yb3VuZCg2MCpzKSxvLHIsZS5hKX1zdGF0aWMgdG9SR0JBKGUpe2NvbnN0e2g6dCxzOm4sdjppLGE6cn09ZSxhPWkqbixvPWEqKDEtTWF0aC5hYnModC82MCUyLTEpKSxzPWktYTtsZXRbbCxjLGhdPVswLDAsMF07cmV0dXJuIHQ8NjA/KGw9YSxjPW8pOnQ8MTIwPyhsPW8sYz1hKTp0PDE4MD8oYz1hLGg9byk6dDwyNDA/KGM9byxoPWEpOnQ8MzAwPyhsPW8saD1hKTp0PD0zNjAmJihsPWEsaD1vKSxsPU1hdGgucm91bmQoMjU1KihsK3MpKSxjPU1hdGgucm91bmQoMjU1KihjK3MpKSxoPU1hdGgucm91bmQoMjU1KihoK3MpKSxuZXcgQ2kobCxjLGgscil9fWxldCBNaT1jbGFzcyBle3N0YXRpYyBmcm9tSGV4KHQpe3JldHVybiBlLkZvcm1hdC5DU1MucGFyc2VIZXgodCl8fGUucmVkfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEoIWV8fCF0KSYmZS5lcXVhbHModCl9Z2V0IGhzbGEoKXtyZXR1cm4gdGhpcy5faHNsYT90aGlzLl9oc2xhOkVpLmZyb21SR0JBKHRoaXMucmdiYSl9Z2V0IGhzdmEoKXtyZXR1cm4gdGhpcy5faHN2YT90aGlzLl9oc3ZhOkFpLmZyb21SR0JBKHRoaXMucmdiYSl9Y29uc3RydWN0b3IoZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJDb2xvciBuZWVkcyBhIHZhbHVlIik7aWYoZSBpbnN0YW5jZW9mIENpKXRoaXMucmdiYT1lO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEVpKXRoaXMuX2hzbGE9ZSx0aGlzLnJnYmE9RWkudG9SR0JBKGUpO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgQWkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7dGhpcy5faHN2YT1lLHRoaXMucmdiYT1BaS50b1JHQkEoZSl9fWVxdWFscyhlKXtyZXR1cm4hIWUmJkNpLmVxdWFscyh0aGlzLnJnYmEsZS5yZ2JhKSYmRWkuZXF1YWxzKHRoaXMuaHNsYSxlLmhzbGEpJiZBaS5lcXVhbHModGhpcy5oc3ZhLGUuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtyZXR1cm4gTGkoLjIxMjYqZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLnIpKy43MTUyKmUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSsuMDcyMiplLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuYiksNCl9c3RhdGljIF9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudChlKXtjb25zdCB0PWUvMjU1O3JldHVybiB0PD0uMDM5Mjg/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWlzTGlnaHRlcigpe3JldHVybigyOTkqdGhpcy5yZ2JhLnIrNTg3KnRoaXMucmdiYS5nKzExNCp0aGlzLnJnYmEuYikvMWUzPj0xMjh9aXNMaWdodGVyVGhhbihlKXtyZXR1cm4gdGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpPmUuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKX1pc0RhcmtlclRoYW4oZSl7cmV0dXJuIHRoaXMuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKTxlLmdldFJlbGF0aXZlTHVtaW5hbmNlKCl9bGlnaHRlbih0KXtyZXR1cm4gbmV3IGUobmV3IEVpKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sK3RoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX1kYXJrZW4odCl7cmV0dXJuIG5ldyBlKG5ldyBFaSh0aGlzLmhzbGEuaCx0aGlzLmhzbGEucyx0aGlzLmhzbGEubC10aGlzLmhzbGEubCp0LHRoaXMuaHNsYS5hKSl9dHJhbnNwYXJlbnQodCl7Y29uc3R7cjpuLGc6aSxiOnIsYTphfT10aGlzLnJnYmE7cmV0dXJuIG5ldyBlKG5ldyBDaShuLGkscixhKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIDA9PT10aGlzLnJnYmEuYX1pc09wYXF1ZSgpe3JldHVybiAxPT09dGhpcy5yZ2JhLmF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IGUobmV3IENpKDI1NS10aGlzLnJnYmEuciwyNTUtdGhpcy5yZ2JhLmcsMjU1LXRoaXMucmdiYS5iLHRoaXMucmdiYS5hKSl9bWFrZU9wYXF1ZSh0KXtpZih0aGlzLmlzT3BhcXVlKCl8fDEhPT10LnJnYmEuYSlyZXR1cm4gdGhpcztjb25zdHtyOm4sZzppLGI6cixhOmF9PXRoaXMucmdiYTtyZXR1cm4gbmV3IGUobmV3IENpKHQucmdiYS5yLWEqKHQucmdiYS5yLW4pLHQucmdiYS5nLWEqKHQucmdiYS5nLWkpLHQucmdiYS5iLWEqKHQucmdiYS5iLXIpLDEpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl90b1N0cmluZ3x8KHRoaXMuX3RvU3RyaW5nPWUuRm9ybWF0LkNTUy5mb3JtYXQodGhpcykpLHRoaXMuX3RvU3RyaW5nfXN0YXRpYyBnZXRMaWdodGVyQ29sb3IoZSx0LG4pe2lmKGUuaXNMaWdodGVyVGhhbih0KSlyZXR1cm4gZTtuPW58fC41O2NvbnN0IGk9ZS5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPW4qKHItaSkvcixlLmxpZ2h0ZW4obil9c3RhdGljIGdldERhcmtlckNvbG9yKGUsdCxuKXtpZihlLmlzRGFya2VyVGhhbih0KSlyZXR1cm4gZTtuPW58fC41O2NvbnN0IGk9ZS5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPW4qKGktdC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpKS9pLGUuZGFya2VuKG4pfX07ZnVuY3Rpb24gUmkoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPU51bWJlcihuKTsoZXx8MD09PWUmJiIiIT09bi5yZXBsYWNlKC9ccy9nLCIiKSkmJnQucHVzaChlKX1yZXR1cm4gdH1mdW5jdGlvbiBOaShlLHQsbixpKXtyZXR1cm57cmVkOmUvMjU1LGJsdWU6bi8yNTUsZ3JlZW46dC8yNTUsYWxwaGE6aX19ZnVuY3Rpb24gSWkoZSx0KXtjb25zdCBuPXQuaW5kZXgsaT10WzBdLmxlbmd0aDtpZighbilyZXR1cm47Y29uc3Qgcj1lLnBvc2l0aW9uQXQobik7cmV0dXJue3N0YXJ0TGluZU51bWJlcjpyLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46ci5jb2x1bW4sZW5kTGluZU51bWJlcjpyLmxpbmVOdW1iZXIsZW5kQ29sdW1uOnIuY29sdW1uK2l9fWZ1bmN0aW9uIFVpKGUsdCl7aWYoIWUpcmV0dXJuO2NvbnN0IG49TWkuRm9ybWF0LkNTUy5wYXJzZUhleCh0KTtyZXR1cm4gbj97cmFuZ2U6ZSxjb2xvcjpOaShuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9OnZvaWQgMH1mdW5jdGlvbiBIaShlLHQsbil7aWYoIWV8fDEhPT10Lmxlbmd0aClyZXR1cm47Y29uc3QgaT1SaSh0WzBdLnZhbHVlcygpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpOaShpWzBdLGlbMV0saVsyXSxuP2lbM106MSl9fWZ1bmN0aW9uIHppKGUsdCxuKXtpZighZXx8MSE9PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPVJpKHRbMF0udmFsdWVzKCkpLHI9bmV3IE1pKG5ldyBFaShpWzBdLGlbMV0vMTAwLGlbMl0vMTAwLG4/aVszXToxKSk7cmV0dXJue3JhbmdlOmUsY29sb3I6Tmkoci5yZ2JhLnIsci5yZ2JhLmcsci5yZ2JhLmIsci5yZ2JhLmEpfX1mdW5jdGlvbiBEaShlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9bLi4uZS5tYXRjaEFsbCh0KV06ZS5maW5kTWF0Y2hlcyh0KX1mdW5jdGlvbiBXaShlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0VmFsdWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnBvc2l0aW9uQXQ/ZnVuY3Rpb24oZSl7Y29uc3QgdD1bXSxuPURpKGUsL1xiKHJnYnxyZ2JhfGhzbHxoc2xhKShcKFswLTlccywuXCVdKlwpKXwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihuLmxlbmd0aD4wKWZvcihjb25zdCBpIG9mIG4pe2NvbnN0IG49aS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKSxyPW5bMV0sYT1uWzJdO2lmKCFhKWNvbnRpbnVlO2xldCBvO2lmKCJyZ2IiPT09cil7Y29uc3QgdD0vXlwoXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccypcKSQvZ207bz1IaShJaShlLGkpLERpKGEsdCksITEpfWVsc2UgaWYoInJnYmEiPT09cil7Y29uc3QgdD0vXlwoXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207bz1IaShJaShlLGkpLERpKGEsdCksITApfWVsc2UgaWYoImhzbCI9PT1yKXtjb25zdCB0PS9eXChccyooMzZbMF18M1swLTVdWzAtOV18WzEyXVswLTldWzAtOV18WzEtOV0/WzAtOV0pXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKlwpJC9nbTtvPXppKElpKGUsaSksRGkoYSx0KSwhMSl9ZWxzZSBpZigiaHNsYSI9PT1yKXtjb25zdCB0PS9eXChccyooMzZbMF18M1swLTVdWzAtOV18WzEyXVswLTldWzAtOV18WzEtOV0/WzAtOV0pXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtvPXppKElpKGUsaSksRGkoYSx0KSwhMCl9ZWxzZSIjIj09PXImJihvPVVpKElpKGUsaSkscithKSk7byYmdC5wdXNoKG8pfXJldHVybiB0fShlKTpbXX1NaS53aGl0ZT1uZXcgTWkobmV3IENpKDI1NSwyNTUsMjU1LDEpKSxNaS5ibGFjaz1uZXcgTWkobmV3IENpKDAsMCwwLDEpKSxNaS5yZWQ9bmV3IE1pKG5ldyBDaSgyNTUsMCwwLDEpKSxNaS5ibHVlPW5ldyBNaShuZXcgQ2koMCwwLDI1NSwxKSksTWkuZ3JlZW49bmV3IE1pKG5ldyBDaSgwLDI1NSwwLDEpKSxNaS5jeWFuPW5ldyBNaShuZXcgQ2koMCwyNTUsMjU1LDEpKSxNaS5saWdodGdyZXk9bmV3IE1pKG5ldyBDaSgyMTEsMjExLDIxMSwxKSksTWkudHJhbnNwYXJlbnQ9bmV3IE1pKG5ldyBDaSgwLDAsMCwwKSksZnVuY3Rpb24oZSl7dmFyIHQ7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7Y29uc3QgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gMiE9PXQubGVuZ3RoPyIwIit0OnR9ZnVuY3Rpb24gaShlKXtzd2l0Y2goZSl7Y2FzZSA0ODpyZXR1cm4gMDtjYXNlIDQ5OnJldHVybiAxO2Nhc2UgNTA6cmV0dXJuIDI7Y2FzZSA1MTpyZXR1cm4gMztjYXNlIDUyOnJldHVybiA0O2Nhc2UgNTM6cmV0dXJuIDU7Y2FzZSA1NDpyZXR1cm4gNjtjYXNlIDU1OnJldHVybiA3O2Nhc2UgNTY6cmV0dXJuIDg7Y2FzZSA1NzpyZXR1cm4gOTtjYXNlIDk3OmNhc2UgNjU6cmV0dXJuIDEwO2Nhc2UgOTg6Y2FzZSA2NjpyZXR1cm4gMTE7Y2FzZSA5OTpjYXNlIDY3OnJldHVybiAxMjtjYXNlIDEwMDpjYXNlIDY4OnJldHVybiAxMztjYXNlIDEwMTpjYXNlIDY5OnJldHVybiAxNDtjYXNlIDEwMjpjYXNlIDcwOnJldHVybiAxNX1yZXR1cm4gMH10LmZvcm1hdFJHQj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQucmdiYS5hP2ByZ2IoJHt0LnJnYmEucn0sICR7dC5yZ2JhLmd9LCAke3QucmdiYS5ifSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRSR0JBKHQpfSx0LmZvcm1hdFJHQkE9ZnVuY3Rpb24oZSl7cmV0dXJuYHJnYmEoJHtlLnJnYmEucn0sICR7ZS5yZ2JhLmd9LCAke2UucmdiYS5ifSwgJHsrZS5yZ2JhLmEudG9GaXhlZCgyKX0pYH0sdC5mb3JtYXRIU0w9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10LmhzbGEuYT9gaHNsKCR7dC5oc2xhLmh9LCAkeygxMDAqdC5oc2xhLnMpLnRvRml4ZWQoMil9JSwgJHsoMTAwKnQuaHNsYS5sKS50b0ZpeGVkKDIpfSUpYDplLkZvcm1hdC5DU1MuZm9ybWF0SFNMQSh0KX0sdC5mb3JtYXRIU0xBPWZ1bmN0aW9uKGUpe3JldHVybmBoc2xhKCR7ZS5oc2xhLmh9LCAkeygxMDAqZS5oc2xhLnMpLnRvRml4ZWQoMil9JSwgJHsoMTAwKmUuaHNsYS5sKS50b0ZpeGVkKDIpfSUsICR7ZS5oc2xhLmEudG9GaXhlZCgyKX0pYH0sdC5mb3JtYXRIZXg9ZnVuY3Rpb24oZSl7cmV0dXJuYCMke24oZS5yZ2JhLnIpfSR7bihlLnJnYmEuZyl9JHtuKGUucmdiYS5iKX1gfSx0LmZvcm1hdEhleEE9ZnVuY3Rpb24odCxpPSExKXtyZXR1cm4gaSYmMT09PXQucmdiYS5hP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgodCk6YCMke24odC5yZ2JhLnIpfSR7bih0LnJnYmEuZyl9JHtuKHQucmdiYS5iKX0ke24oTWF0aC5yb3VuZCgyNTUqdC5yZ2JhLmEpKX1gfSx0LmZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgodCk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEodCl9LHQucGFyc2VIZXg9ZnVuY3Rpb24odCl7Y29uc3Qgbj10Lmxlbmd0aDtpZigwPT09bilyZXR1cm4gbnVsbDtpZigzNSE9PXQuY2hhckNvZGVBdCgwKSlyZXR1cm4gbnVsbDtpZig3PT09bil7Y29uc3Qgbj0xNippKHQuY2hhckNvZGVBdCgxKSkraSh0LmNoYXJDb2RlQXQoMikpLHI9MTYqaSh0LmNoYXJDb2RlQXQoMykpK2kodC5jaGFyQ29kZUF0KDQpKSxhPTE2KmkodC5jaGFyQ29kZUF0KDUpKStpKHQuY2hhckNvZGVBdCg2KSk7cmV0dXJuIG5ldyBlKG5ldyBDaShuLHIsYSwxKSl9aWYoOT09PW4pe2NvbnN0IG49MTYqaSh0LmNoYXJDb2RlQXQoMSkpK2kodC5jaGFyQ29kZUF0KDIpKSxyPTE2KmkodC5jaGFyQ29kZUF0KDMpKStpKHQuY2hhckNvZGVBdCg0KSksYT0xNippKHQuY2hhckNvZGVBdCg1KSkraSh0LmNoYXJDb2RlQXQoNikpLG89MTYqaSh0LmNoYXJDb2RlQXQoNykpK2kodC5jaGFyQ29kZUF0KDgpKTtyZXR1cm4gbmV3IGUobmV3IENpKG4scixhLG8vMjU1KSl9aWYoND09PW4pe2NvbnN0IG49aSh0LmNoYXJDb2RlQXQoMSkpLHI9aSh0LmNoYXJDb2RlQXQoMikpLGE9aSh0LmNoYXJDb2RlQXQoMykpO3JldHVybiBuZXcgZShuZXcgQ2koMTYqbituLDE2KnIrciwxNiphK2EpKX1pZig1PT09bil7Y29uc3Qgbj1pKHQuY2hhckNvZGVBdCgxKSkscj1pKHQuY2hhckNvZGVBdCgyKSksYT1pKHQuY2hhckNvZGVBdCgzKSksbz1pKHQuY2hhckNvZGVBdCg0KSk7cmV0dXJuIG5ldyBlKG5ldyBDaSgxNipuK24sMTYqcityLDE2KmErYSwoMTYqbytvKS8yNTUpKX1yZXR1cm4gbnVsbH19KSgodD1lLkZvcm1hdHx8KGUuRm9ybWF0PXt9KSkuQ1NTfHwodC5DU1M9e30pKX0oTWl8fChNaT17fSkpO3ZhciBPaT1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24ocixhKXtmdW5jdGlvbiBvKGUpe3RyeXtsKGkubmV4dChlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7bChpLnRocm93KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBsKGUpe3ZhciB0O2UuZG9uZT9yKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihvLHMpfWwoKGk9aS5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgUGkgZXh0ZW5kcyBjdHtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1maW5kTWF0Y2hlcyhlKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wO248dGhpcy5fbGluZXMubGVuZ3RoO24rKyl7Y29uc3QgaT10aGlzLl9saW5lc1tuXSxyPXRoaXMub2Zmc2V0QXQobmV3IG50KG4rMSwxKSksYT1pLm1hdGNoQWxsKGUpO2Zvcihjb25zdCBlIG9mIGEpKGUuaW5kZXh8fDA9PT1lLmluZGV4KSYmKGUuaW5kZXg9ZS5pbmRleCtyKSx0LnB1c2goZSl9cmV0dXJuIHR9Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQoZSl7cmV0dXJuIHRoaXMuX2xpbmVzW2UtMV19Z2V0V29yZEF0UG9zaXRpb24oZSx0KXtjb25zdCBuPXV0KGUuY29sdW1uLGZ1bmN0aW9uKGUpe2xldCB0PWh0O2lmKGUmJmUgaW5zdGFuY2VvZiBSZWdFeHApaWYoZS5nbG9iYWwpdD1lO2Vsc2V7bGV0IG49ImciO2UuaWdub3JlQ2FzZSYmKG4rPSJpIiksZS5tdWx0aWxpbmUmJihuKz0ibSIpLGUudW5pY29kZSYmKG4rPSJ1IiksdD1uZXcgUmVnRXhwKGUuc291cmNlLG4pfXJldHVybiB0Lmxhc3RJbmRleD0wLHR9KHQpLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXSwwKTtyZXR1cm4gbj9uZXcgaXQoZS5saW5lTnVtYmVyLG4uc3RhcnRDb2x1bW4sZS5saW5lTnVtYmVyLG4uZW5kQ29sdW1uKTpudWxsfXdvcmRzKGUpe2NvbnN0IHQ9dGhpcy5fbGluZXMsbj10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgaT0wLHI9IiIsYT0wLG89W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihhPG8ubGVuZ3RoKXtjb25zdCBlPXIuc3Vic3RyaW5nKG9bYV0uc3RhcnQsb1thXS5lbmQpO2ErPTEseWllbGQgZX1lbHNle2lmKCEoaTx0Lmxlbmd0aCkpYnJlYWs7cj10W2ldLG89bihyLGUpLGE9MCxpKz0xfX19fWdldExpbmVXb3JkcyhlLHQpe2NvbnN0IG49dGhpcy5fbGluZXNbZS0xXSxpPXRoaXMuX3dvcmRlbml6ZShuLHQpLHI9W107Zm9yKGNvbnN0IGUgb2YgaSlyLnB1c2goe3dvcmQ6bi5zdWJzdHJpbmcoZS5zdGFydCxlLmVuZCksc3RhcnRDb2x1bW46ZS5zdGFydCsxLGVuZENvbHVtbjplLmVuZCsxfSk7cmV0dXJuIHJ9X3dvcmRlbml6ZShlLHQpe2NvbnN0IG49W107bGV0IGk7Zm9yKHQubGFzdEluZGV4PTA7KGk9dC5leGVjKGUpKSYmMCE9PWlbMF0ubGVuZ3RoOyluLnB1c2goe3N0YXJ0OmkuaW5kZXgsZW5kOmkuaW5kZXgraVswXS5sZW5ndGh9KTtyZXR1cm4gbn1nZXRWYWx1ZUluUmFuZ2UoZSl7aWYoKGU9dGhpcy5fdmFsaWRhdGVSYW5nZShlKSkuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xLGUuZW5kQ29sdW1uLTEpO2NvbnN0IHQ9dGhpcy5fZW9sLG49ZS5zdGFydExpbmVOdW1iZXItMSxpPWUuZW5kTGluZU51bWJlci0xLHI9W107ci5wdXNoKHRoaXMuX2xpbmVzW25dLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGU9bisxO2U8aTtlKyspci5wdXNoKHRoaXMuX2xpbmVzW2VdKTtyZXR1cm4gci5wdXNoKHRoaXMuX2xpbmVzW2ldLnN1YnN0cmluZygwLGUuZW5kQ29sdW1uLTEpKSxyLmpvaW4odCl9b2Zmc2V0QXQoZSl7cmV0dXJuIGU9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbihlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0oZS5saW5lTnVtYmVyLTIpKyhlLmNvbHVtbi0xKX1wb3NpdGlvbkF0KGUpe2U9TWF0aC5mbG9vcihlKSxlPU1hdGgubWF4KDAsZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IHQ9dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKGUpLG49dGhpcy5fbGluZXNbdC5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErdC5pbmRleCxjb2x1bW46MStNYXRoLm1pbih0LnJlbWFpbmRlcixuKX19X3ZhbGlkYXRlUmFuZ2UoZSl7Y29uc3QgdD10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjplLnN0YXJ0Q29sdW1ufSksbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuZW5kTGluZU51bWJlcixjb2x1bW46ZS5lbmRDb2x1bW59KTtyZXR1cm4gdC5saW5lTnVtYmVyIT09ZS5zdGFydExpbmVOdW1iZXJ8fHQuY29sdW1uIT09ZS5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyfHxuLmNvbHVtbiE9PWUuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLGVuZENvbHVtbjpuLmNvbHVtbn06ZX1fdmFsaWRhdGVQb3NpdGlvbihlKXtpZighbnQuaXNJUG9zaXRpb24oZSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjp0LGNvbHVtbjpufT1lLGk9ITE7aWYodDwxKXQ9MSxuPTEsaT0hMDtlbHNlIGlmKHQ+dGhpcy5fbGluZXMubGVuZ3RoKXQ9dGhpcy5fbGluZXMubGVuZ3RoLG49dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMSxpPSEwO2Vsc2V7Y29uc3QgZT10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxO248MT8obj0xLGk9ITApOm4+ZSYmKG49ZSxpPSEwKX1yZXR1cm4gaT97bGluZU51bWJlcjp0LGNvbHVtbjpufTplfX1jbGFzcyBxaXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2hvc3Q9ZSx0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT10LHRoaXMuX2ZvcmVpZ25Nb2R1bGU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCl9X2dldE1vZGVsKGUpe3JldHVybiB0aGlzLl9tb2RlbHNbZV19X2dldE1vZGVscygpe2NvbnN0IGU9W107cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vZGVscykuZm9yRWFjaCgodD0+ZS5wdXNoKHRoaXMuX21vZGVsc1t0XSkpKSxlfWFjY2VwdE5ld01vZGVsKGUpe3RoaXMuX21vZGVsc1tlLnVybF09bmV3IFBpKEtlLnBhcnNlKGUudXJsKSxlLmxpbmVzLGUuRU9MLGUudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQoZSx0KXtpZighdGhpcy5fbW9kZWxzW2VdKXJldHVybjt0aGlzLl9tb2RlbHNbZV0ub25FdmVudHModCl9YWNjZXB0UmVtb3ZlZE1vZGVsKGUpe3RoaXMuX21vZGVsc1tlXSYmZGVsZXRlIHRoaXMuX21vZGVsc1tlXX1jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMoZSx0LG4pe3JldHVybiBPaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIGk/Qm4uY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGksdCxuKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX0pKX1jb21wdXRlRGlmZihlLHQsbixpKXtyZXR1cm4gT2kodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKGUpLGE9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIHImJmE/cWkuY29tcHV0ZURpZmYocixhLG4saSk6bnVsbH0pKX1zdGF0aWMgY29tcHV0ZURpZmYoZSx0LG4saSl7Y29uc3Qgcj0iYWR2YW5jZWQiPT09aT94aS5hZHZhbmNlZDp4aS5sZWdhY3ksYT1lLmdldExpbmVzQ29udGVudCgpLG89dC5nZXRMaW5lc0NvbnRlbnQoKSxzPXIuY29tcHV0ZURpZmYoYSxvLG4pO3JldHVybntpZGVudGljYWw6IShzLmNoYW5nZXMubGVuZ3RoPjApJiZ0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwoZSx0KSxxdWl0RWFybHk6cy5oaXRUaW1lb3V0LGNoYW5nZXM6cy5jaGFuZ2VzLm1hcCgoZT0+e3ZhciB0O3JldHVybltlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbnVsbD09PSh0PWUuaW5uZXJDaGFuZ2VzKXx8dm9pZCAwPT09dD92b2lkIDA6dC5tYXAoKGU9PltlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbixlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcixlLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uLGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyLGUubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW5dKSldfSkpfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbChlLHQpe2NvbnN0IG49ZS5nZXRMaW5lQ291bnQoKTtpZihuIT09dC5nZXRMaW5lQ291bnQoKSlyZXR1cm4hMTtmb3IobGV0IGk9MTtpPD1uO2krKyl7aWYoZS5nZXRMaW5lQ29udGVudChpKSE9PXQuZ2V0TGluZUNvbnRlbnQoaSkpcmV0dXJuITF9cmV0dXJuITB9Y29tcHV0ZU1vcmVNaW5pbWFsRWRpdHMoZSx0LG4pe3JldHVybiBPaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIWkpcmV0dXJuIHQ7Y29uc3Qgcj1bXTtsZXQgYTt0PXQuc2xpY2UoMCkuc29ydCgoKGUsdCk9PntpZihlLnJhbmdlJiZ0LnJhbmdlKXJldHVybiBpdC5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZS5yYW5nZSx0LnJhbmdlKTtyZXR1cm4oZS5yYW5nZT8wOjEpLSh0LnJhbmdlPzA6MSl9KSk7Zm9yKGxldHtyYW5nZTplLHRleHQ6byxlb2w6c31vZiB0KXtpZigibnVtYmVyIj09dHlwZW9mIHMmJihhPXMpLGl0LmlzRW1wdHkoZSkmJiFvKWNvbnRpbnVlO2NvbnN0IHQ9aS5nZXRWYWx1ZUluUmFuZ2UoZSk7aWYobz1vLnJlcGxhY2UoL1xyXG58XG58XHIvZyxpLmVvbCksdD09PW8pY29udGludWU7aWYoTWF0aC5tYXgoby5sZW5ndGgsdC5sZW5ndGgpPnFpLl9kaWZmTGltaXQpe3IucHVzaCh7cmFuZ2U6ZSx0ZXh0Om99KTtjb250aW51ZX1jb25zdCBsPWZlKHQsbyxuKSxjPWkub2Zmc2V0QXQoaXQubGlmdChlKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBlIG9mIGwpe2NvbnN0IHQ9aS5wb3NpdGlvbkF0KGMrZS5vcmlnaW5hbFN0YXJ0KSxuPWkucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoKSxhPXt0ZXh0Om8uc3Vic3RyKGUubW9kaWZpZWRTdGFydCxlLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixlbmRDb2x1bW46bi5jb2x1bW59fTtpLmdldFZhbHVlSW5SYW5nZShhLnJhbmdlKSE9PWEudGV4dCYmci5wdXNoKGEpfX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGEmJnIucHVzaCh7ZW9sOmEsdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSkscn0pKX1jb21wdXRlTGlua3MoZSl7cmV0dXJuIE9pKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD92dC5jb21wdXRlTGlua3MoZSk6W119KHQpOm51bGx9KSl9Y29tcHV0ZURlZmF1bHREb2N1bWVudENvbG9ycyhlKXtyZXR1cm4gT2kodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiB0P1dpKHQpOm51bGx9KSl9dGV4dHVhbFN1Z2dlc3QoZSx0LG4saSl7cmV0dXJuIE9pKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgRCghMCksYT1uZXcgUmVnRXhwKG4saSksbz1uZXcgU2V0O2U6Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3QgZT10aGlzLl9nZXRNb2RlbChuKTtpZihlKWZvcihjb25zdCBuIG9mIGUud29yZHMoYSkpaWYobiE9PXQmJmlzTmFOKE51bWJlcihuKSkmJihvLmFkZChuKSxvLnNpemU+cWkuX3N1Z2dlc3Rpb25zTGltaXQpKWJyZWFrIGV9cmV0dXJue3dvcmRzOkFycmF5LmZyb20obyksZHVyYXRpb246ci5lbGFwc2VkKCl9fSkpfWNvbXB1dGVXb3JkUmFuZ2VzKGUsdCxuLGkpe3JldHVybiBPaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIXIpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgYT1uZXcgUmVnRXhwKG4saSksbz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT10LnN0YXJ0TGluZU51bWJlcjtlPHQuZW5kTGluZU51bWJlcjtlKyspe2NvbnN0IHQ9ci5nZXRMaW5lV29yZHMoZSxhKTtmb3IoY29uc3QgbiBvZiB0KXtpZighaXNOYU4oTnVtYmVyKG4ud29yZCkpKWNvbnRpbnVlO2xldCB0PW9bbi53b3JkXTt0fHwodD1bXSxvW24ud29yZF09dCksdC5wdXNoKHtzdGFydExpbmVOdW1iZXI6ZSxzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6ZSxlbmRDb2x1bW46bi5lbmRDb2x1bW59KX19cmV0dXJuIG99KSl9bmF2aWdhdGVWYWx1ZVNldChlLHQsbixpLHIpe3JldHVybiBPaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGE9dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3Qgbz1uZXcgUmVnRXhwKGkscik7dC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uJiYodD17c3RhcnRMaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOnQuZW5kQ29sdW1uKzF9KTtjb25zdCBzPWEuZ2V0VmFsdWVJblJhbmdlKHQpLGw9YS5nZXRXb3JkQXRQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0sbyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYz1hLmdldFZhbHVlSW5SYW5nZShsKTtyZXR1cm4gd3QuSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldCh0LHMsbCxjLG4pfSkpfWxvYWRGb3JlaWduTW9kdWxlKGUsdCxuKXtjb25zdCBpPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9e307Zm9yKGNvbnN0IHQgb2YgZSlpW3RdPW4odCk7cmV0dXJuIGl9KG4sKChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKSkscj17aG9zdDppLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShyLHQpLFByb21pc2UucmVzb2x2ZShHKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcihlLHQpe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVtlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVtlXS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fX1xaS5fZGlmZkxpbWl0PTFlNSxxaS5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsImZ1bmN0aW9uIj09dHlwZW9mIGltcG9ydFNjcmlwdHMmJihnbG9iYWxUaGlzLm1vbmFjbz17ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOlN0LEVtaXR0ZXI6QixLZXlDb2RlOmhuLEtleU1vZDpEbixQb3NpdGlvbjpudCxSYW5nZTppdCxTZWxlY3Rpb246SXQsU2VsZWN0aW9uRGlyZWN0aW9uOlRuLE1hcmtlclNldmVyaXR5OmRuLE1hcmtlclRhZzp1bixVcmk6S2UsVG9rZW46em59KTtsZXQgRmk9ITE7ZnVuY3Rpb24gQmkoZSl7aWYoRmkpcmV0dXJuO0ZpPSEwO2NvbnN0IHQ9bmV3IGhlKChlPT57Z2xvYmFsVGhpcy5wb3N0TWVzc2FnZShlKX0pLCh0PT5uZXcgcWkodCxlKSkpO2dsb2JhbFRoaXMub25tZXNzYWdlPWU9Pnt0Lm9ubWVzc2FnZShlLmRhdGEpfX1mdW5jdGlvbiBWaShlLHQsLi4ubil7Ci8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFZlcnNpb246IDAuMzkuMChmZjM2MjFhM2ZhNjM4OTg3M2JlNTQxMmQxNzU1NDI5NGVhMWIwOTQxKQogICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KcmV0dXJuIGZ1bmN0aW9uKGUsdCl7bGV0IG47cmV0dXJuIG49MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9PntsZXQgaT1uWzBdO3JldHVybiB2b2lkIDAhPT10W2ldP3RbaV06ZX0pKSxufSh0LG4pfWZ1bmN0aW9uIEtpKGUpe3JldHVybiBWaX12YXIgamksR2ksJGksSmksWGksWWksUWksWmksZXIsdHIsbnIsaXIscnIsYXIsb3Isc3IsbHIsY3IsaHIsZHIsdXIsbXIscHIsZnIsZ3IsYnIsX3IsdnIsd3IseXIsVHIsa3IsU3IseHIsTHIsQ3IsRXIsQXIsTXIsUnIsTnIsSXIsVXIsSHIsenIsRHIsV3IsT3IsUHI7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e0ZpfHxCaShudWxsKX0sKEdpPWppfHwoamk9e30pKS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsR2kuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKEppPSRpfHwoJGk9e30pKS5NSU5fVkFMVUU9MCxKaS5NQVhfVkFMVUU9MjE0NzQ4MzY0NywoWWk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09TnVtYmVyLk1BWF9WQUxVRSYmKGU9JGkuTUFYX1ZBTFVFKSx0PT09TnVtYmVyLk1BWF9WQUxVRSYmKHQ9JGkuTUFYX1ZBTFVFKSx7bGluZTplLGNoYXJhY3Rlcjp0fX0sWWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEub2JqZWN0TGl0ZXJhbCh0KSYmUGEudWludGVnZXIodC5saW5lKSYmUGEudWludGVnZXIodC5jaGFyYWN0ZXIpfSwoWmk9UWl8fChRaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpKXtpZihQYS51aW50ZWdlcihlKSYmUGEudWludGVnZXIodCkmJlBhLnVpbnRlZ2VyKG4pJiZQYS51aW50ZWdlcihpKSlyZXR1cm57c3RhcnQ6WGkuY3JlYXRlKGUsdCksZW5kOlhpLmNyZWF0ZShuLGkpfTtpZihYaS5pcyhlKSYmWGkuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIituKyIsICIraSsiXSIpfSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5vYmplY3RMaXRlcmFsKHQpJiZYaS5pcyh0LnN0YXJ0KSYmWGkuaXModC5lbmQpfSwodHI9ZXJ8fChlcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sdHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmUWkuaXModC5yYW5nZSkmJihQYS5zdHJpbmcodC51cmkpfHxQYS51bmRlZmluZWQodC51cmkpKX0sKGlyPW5yfHwobnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJue3RhcmdldFVyaTplLHRhcmdldFJhbmdlOnQsdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6bixvcmlnaW5TZWxlY3Rpb25SYW5nZTppfX0saXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmUWkuaXModC50YXJnZXRSYW5nZSkmJlBhLnN0cmluZyh0LnRhcmdldFVyaSkmJihRaS5pcyh0LnRhcmdldFNlbGVjdGlvblJhbmdlKXx8UGEudW5kZWZpbmVkKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKFFpLmlzKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxQYS51bmRlZmluZWQodC5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfSwoYXI9cnJ8fChycj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm57cmVkOmUsZ3JlZW46dCxibHVlOm4sYWxwaGE6aX19LGFyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLm51bWJlclJhbmdlKHQucmVkLDAsMSkmJlBhLm51bWJlclJhbmdlKHQuZ3JlZW4sMCwxKSYmUGEubnVtYmVyUmFuZ2UodC5ibHVlLDAsMSkmJlBhLm51bWJlclJhbmdlKHQuYWxwaGEsMCwxKX0sKHNyPW9yfHwob3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxjb2xvcjp0fX0sc3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUWkuaXModC5yYW5nZSkmJnJyLmlzKHQuY29sb3IpfSwoY3I9bHJ8fChscj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue2xhYmVsOmUsdGV4dEVkaXQ6dCxhZGRpdGlvbmFsVGV4dEVkaXRzOm59fSxjci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5zdHJpbmcodC5sYWJlbCkmJihQYS51bmRlZmluZWQodC50ZXh0RWRpdCl8fHhyLmlzKHQpKSYmKFBhLnVuZGVmaW5lZCh0LmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxQYS50eXBlZEFycmF5KHQuYWRkaXRpb25hbFRleHRFZGl0cyx4ci5pcykpfSwoZHI9aHJ8fChocj17fSkpLkNvbW1lbnQ9ImNvbW1lbnQiLGRyLkltcG9ydHM9ImltcG9ydHMiLGRyLlJlZ2lvbj0icmVnaW9uIiwobXI9dXJ8fCh1cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpLHIpe3ZhciBhPXtzdGFydExpbmU6ZSxlbmRMaW5lOnR9O3JldHVybiBQYS5kZWZpbmVkKG4pJiYoYS5zdGFydENoYXJhY3Rlcj1uKSxQYS5kZWZpbmVkKGkpJiYoYS5lbmRDaGFyYWN0ZXI9aSksUGEuZGVmaW5lZChyKSYmKGEua2luZD1yKSxhfSxtci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS51aW50ZWdlcih0LnN0YXJ0TGluZSkmJlBhLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmKFBhLnVuZGVmaW5lZCh0LnN0YXJ0Q2hhcmFjdGVyKXx8UGEudWludGVnZXIodC5zdGFydENoYXJhY3RlcikpJiYoUGEudW5kZWZpbmVkKHQuZW5kQ2hhcmFjdGVyKXx8UGEudWludGVnZXIodC5lbmRDaGFyYWN0ZXIpKSYmKFBhLnVuZGVmaW5lZCh0LmtpbmQpfHxQYS5zdHJpbmcodC5raW5kKSl9LChmcj1wcnx8KHByPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2xvY2F0aW9uOmUsbWVzc2FnZTp0fX0sZnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmZXIuaXModC5sb2NhdGlvbikmJlBhLnN0cmluZyh0Lm1lc3NhZ2UpfSwoYnI9Z3J8fChncj17fSkpLkVycm9yPTEsYnIuV2FybmluZz0yLGJyLkluZm9ybWF0aW9uPTMsYnIuSGludD00LCh2cj1fcnx8KF9yPXt9KSkuVW5uZWNlc3Nhcnk9MSx2ci5EZXByZWNhdGVkPTIsKHdyfHwod3I9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBudWxsIT10JiZQYS5zdHJpbmcodC5ocmVmKX0sKFRyPXlyfHwoeXI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4saSxyLGEpe3ZhciBvPXtyYW5nZTplLG1lc3NhZ2U6dH07cmV0dXJuIFBhLmRlZmluZWQobikmJihvLnNldmVyaXR5PW4pLFBhLmRlZmluZWQoaSkmJihvLmNvZGU9aSksUGEuZGVmaW5lZChyKSYmKG8uc291cmNlPXIpLFBhLmRlZmluZWQoYSkmJihvLnJlbGF0ZWRJbmZvcm1hdGlvbj1hKSxvfSxUci5pcz1mdW5jdGlvbihlKXt2YXIgdCxuPWU7cmV0dXJuIFBhLmRlZmluZWQobikmJlFpLmlzKG4ucmFuZ2UpJiZQYS5zdHJpbmcobi5tZXNzYWdlKSYmKFBhLm51bWJlcihuLnNldmVyaXR5KXx8UGEudW5kZWZpbmVkKG4uc2V2ZXJpdHkpKSYmKFBhLmludGVnZXIobi5jb2RlKXx8UGEuc3RyaW5nKG4uY29kZSl8fFBhLnVuZGVmaW5lZChuLmNvZGUpKSYmKFBhLnVuZGVmaW5lZChuLmNvZGVEZXNjcmlwdGlvbil8fFBhLnN0cmluZyhudWxsPT09KHQ9bi5jb2RlRGVzY3JpcHRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhyZWYpKSYmKFBhLnN0cmluZyhuLnNvdXJjZSl8fFBhLnVuZGVmaW5lZChuLnNvdXJjZSkpJiYoUGEudW5kZWZpbmVkKG4ucmVsYXRlZEluZm9ybWF0aW9uKXx8UGEudHlwZWRBcnJheShuLnJlbGF0ZWRJbmZvcm1hdGlvbixwci5pcykpfSwoU3I9a3J8fChrcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciByPXt0aXRsZTplLGNvbW1hbmQ6dH07cmV0dXJuIFBhLmRlZmluZWQobikmJm4ubGVuZ3RoPjAmJihyLmFyZ3VtZW50cz1uKSxyfSxTci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5kZWZpbmVkKHQpJiZQYS5zdHJpbmcodC50aXRsZSkmJlBhLnN0cmluZyh0LmNvbW1hbmQpfSwoTHI9eHJ8fCh4cj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnR9fSxMci5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dH19LExyLmRlbD1mdW5jdGlvbihlKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIifX0sTHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEub2JqZWN0TGl0ZXJhbCh0KSYmUGEuc3RyaW5nKHQubmV3VGV4dCkmJlFpLmlzKHQucmFuZ2UpfSwoRXI9Q3J8fChDcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIGk9e2xhYmVsOmV9O3JldHVybiB2b2lkIDAhPT10JiYoaS5uZWVkc0NvbmZpcm1hdGlvbj10KSx2b2lkIDAhPT1uJiYoaS5kZXNjcmlwdGlvbj1uKSxpfSxFci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZQYS5vYmplY3RMaXRlcmFsKHQpJiZQYS5zdHJpbmcodC5sYWJlbCkmJihQYS5ib29sZWFuKHQubmVlZHNDb25maXJtYXRpb24pfHx2b2lkIDA9PT10Lm5lZWRzQ29uZmlybWF0aW9uKSYmKFBhLnN0cmluZyh0LmRlc2NyaXB0aW9uKXx8dm9pZCAwPT09dC5kZXNjcmlwdGlvbil9LChBcnx8KEFyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSwoUnI9TXJ8fChNcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFJyLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxSci5kZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDp0fX0sUnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4geHIuaXModCkmJihDci5pcyh0LmFubm90YXRpb25JZCl8fEFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChJcj1Ocnx8KE5yPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RleHREb2N1bWVudDplLGVkaXRzOnR9fSxJci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5kZWZpbmVkKHQpJiZLci5pcyh0LnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkodC5lZGl0cyl9LChIcj1Vcnx8KFVyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17a2luZDoiY3JlYXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoaS5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihpLmFubm90YXRpb25JZD1uKSxpfSxIci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiY3JlYXRlIj09PXQua2luZCYmUGEuc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fFBhLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxQYS5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxBci5pcyh0LmFubm90YXRpb25JZCkpfSwoRHI9enJ8fCh6cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpKXt2YXIgcj17a2luZDoicmVuYW1lIixvbGRVcmk6ZSxuZXdVcmk6dH07cmV0dXJuIHZvaWQgMD09PW58fHZvaWQgMD09PW4ub3ZlcndyaXRlJiZ2b2lkIDA9PT1uLmlnbm9yZUlmRXhpc3RzfHwoci5vcHRpb25zPW4pLHZvaWQgMCE9PWkmJihyLmFubm90YXRpb25JZD1pKSxyfSxEci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYicmVuYW1lIj09PXQua2luZCYmUGEuc3RyaW5nKHQub2xkVXJpKSYmUGEuc3RyaW5nKHQubmV3VXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fFBhLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxQYS5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxBci5pcyh0LmFubm90YXRpb25JZCkpfSwoT3I9V3J8fChXcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIGk9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10LnJlY3Vyc2l2ZSYmdm9pZCAwPT09dC5pZ25vcmVJZk5vdEV4aXN0c3x8KGkub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoaS5hbm5vdGF0aW9uSWQ9biksaX0sT3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImRlbGV0ZSI9PT10LmtpbmQmJlBhLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMucmVjdXJzaXZlfHxQYS5ib29sZWFuKHQub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8UGEuYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8QXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKFByfHwoUHI9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYodm9pZCAwIT09dC5jaGFuZ2VzfHx2b2lkIDAhPT10LmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT10LmRvY3VtZW50Q2hhbmdlc3x8dC5kb2N1bWVudENoYW5nZXMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBQYS5zdHJpbmcoZS5raW5kKT9Vci5pcyhlKXx8enIuaXMoZSl8fFdyLmlzKGUpOk5yLmlzKGUpfSkpKX07dmFyIHFyLEZyLEJyLFZyLEtyLGpyLEdyLCRyLEpyLFhyLFlyLFFyLFpyLGVhLHRhLG5hLGlhLHJhLGFhLG9hLHNhLGxhLGNhLGhhLGRhLHVhLG1hLHBhLGZhLGdhLGJhLF9hLHZhLHdhLHlhLFRhLGthLFNhLHhhLExhLENhLEVhLEFhLE1hLFJhLE5hLElhLFVhLEhhLHphLERhLFdhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9cmV0dXJuIGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7dmFyIGkscjtpZih2b2lkIDA9PT1uP2k9eHIuaW5zZXJ0KGUsdCk6QXIuaXMobik/KHI9bixpPU1yLmluc2VydChlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UobiksaT1Nci5pbnNlcnQoZSx0LHIpKSx0aGlzLmVkaXRzLnB1c2goaSksdm9pZCAwIT09cilyZXR1cm4gcn0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7dmFyIGkscjtpZih2b2lkIDA9PT1uP2k9eHIucmVwbGFjZShlLHQpOkFyLmlzKG4pPyhyPW4saT1Nci5yZXBsYWNlKGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucykscj10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxpPU1yLnJlcGxhY2UoZSx0LHIpKSx0aGlzLmVkaXRzLnB1c2goaSksdm9pZCAwIT09cilyZXR1cm4gcn0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4saTtpZih2b2lkIDA9PT10P249eHIuZGVsKGUpOkFyLmlzKHQpPyhpPXQsbj1Nci5kZWwoZSx0KSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZSh0KSxuPU1yLmRlbChlLGkpKSx0aGlzLmVkaXRzLnB1c2gobiksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdHN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5lZGl0cy5zcGxpY2UoMCx0aGlzLmVkaXRzLmxlbmd0aCl9LGUucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9LGV9KCksT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubWFuYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYoQXIuaXMoZSk/bj1lOihuPXRoaXMubmV4dElkKCksdD1lKSx2b2lkIDAhPT10aGlzLl9hbm5vdGF0aW9uc1tuXSl0aHJvdyBuZXcgRXJyb3IoIklkICIrbisiIGlzIGFscmVhZHkgaW4gdXNlLiIpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJObyBhbm5vdGF0aW9uIHByb3ZpZGVkIGZvciBpZCAiK24pO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc1tuXT10LHRoaXMuX3NpemUrKyxufSxlLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX0sZX0oKTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5fdGV4dEVkaXRDaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCksdm9pZCAwIT09ZT8odGhpcy5fd29ya3NwYWNlRWRpdD1lLGUuZG9jdW1lbnRDaGFuZ2VzPyh0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgT2EoZS5jaGFuZ2VBbm5vdGF0aW9ucyksZS5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSxlLmRvY3VtZW50Q2hhbmdlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihOci5pcyhlKSl7dmFyIG49bmV3IFdhKGUuZWRpdHMsdC5fY2hhbmdlQW5ub3RhdGlvbnMpO3QuX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPW59fSkpKTplLmNoYW5nZXMmJk9iamVjdC5rZXlzKGUuY2hhbmdlcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bmV3IFdhKGUuY2hhbmdlc1tuXSk7dC5fdGV4dEVkaXRDaGFuZ2VzW25dPWl9KSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0RWRpdENoYW5nZT1mdW5jdGlvbihlKXtpZihLci5pcyhlKSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgdD17dXJpOmUudXJpLHZlcnNpb246ZS52ZXJzaW9ufTtpZighKGk9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSkpe3ZhciBuPXt0ZXh0RG9jdW1lbnQ6dCxlZGl0czpyPVtdfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG4pLGk9bmV3IFdhKHIsdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV09aX1yZXR1cm4gaX1pZih0aGlzLmluaXRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgaTtpZighKGk9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKSl7dmFyIHI9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW2VdPXIsaT1uZXcgV2EociksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdPWl9cmV0dXJuIGl9LGUucHJvdG90eXBlLmluaXREb2N1bWVudENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IE9hLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPVtdLHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpfSxlLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIGkscixhO2lmKENyLmlzKHQpfHxBci5pcyh0KT9pPXQ6bj10LHZvaWQgMD09PWk/cj1Vci5jcmVhdGUoZSxuKTooYT1Bci5pcyhpKT9pOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxyPVVyLmNyZWF0ZShlLG4sYSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gociksdm9pZCAwIT09YSlyZXR1cm4gYX0sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbihlLHQsbixpKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGEsbztpZihDci5pcyhuKXx8QXIuaXMobik/cj1uOmk9bix2b2lkIDA9PT1yP2E9enIuY3JlYXRlKGUsdCxpKToobz1Bci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxhPXpyLmNyZWF0ZShlLHQsaSxvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChhKSx2b2lkIDAhPT1vKXJldHVybiBvfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpLHIsYTtpZihDci5pcyh0KXx8QXIuaXModCk/aT10Om49dCx2b2lkIDA9PT1pP3I9V3IuY3JlYXRlKGUsbik6KGE9QXIuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSkscj1Xci5jcmVhdGUoZSxuLGEpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHIpLHZvaWQgMCE9PWEpcmV0dXJuIGF9fSgpLChGcj1xcnx8KHFyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybnt1cmk6ZX19LEZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLmRlZmluZWQodCkmJlBhLnN0cmluZyh0LnVyaSl9LChWcj1Ccnx8KEJyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LFZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLmRlZmluZWQodCkmJlBhLnN0cmluZyh0LnVyaSkmJlBhLmludGVnZXIodC52ZXJzaW9uKX0sKGpyPUtyfHwoS3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sanIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmUGEuc3RyaW5nKHQudXJpKSYmKG51bGw9PT10LnZlcnNpb258fFBhLmludGVnZXIodC52ZXJzaW9uKSl9LCgkcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLGkpe3JldHVybnt1cmk6ZSxsYW5ndWFnZUlkOnQsdmVyc2lvbjpuLHRleHQ6aX19LCRyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLmRlZmluZWQodCkmJlBhLnN0cmluZyh0LnVyaSkmJlBhLnN0cmluZyh0Lmxhbmd1YWdlSWQpJiZQYS5pbnRlZ2VyKHQudmVyc2lvbikmJlBhLnN0cmluZyh0LnRleHQpfSwoWHI9SnJ8fChKcj17fSkpLlBsYWluVGV4dD0icGxhaW50ZXh0IixYci5NYXJrZG93bj0ibWFya2Rvd24iLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24odCl7dmFyIG49dDtyZXR1cm4gbj09PWUuUGxhaW5UZXh0fHxuPT09ZS5NYXJrZG93bn19KEpyfHwoSnI9e30pKSwoWXJ8fChZcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLm9iamVjdExpdGVyYWwoZSkmJkpyLmlzKHQua2luZCkmJlBhLnN0cmluZyh0LnZhbHVlKX0sKFpyPVFyfHwoUXI9e30pKS5UZXh0PTEsWnIuTWV0aG9kPTIsWnIuRnVuY3Rpb249Myxaci5Db25zdHJ1Y3Rvcj00LFpyLkZpZWxkPTUsWnIuVmFyaWFibGU9Nixaci5DbGFzcz03LFpyLkludGVyZmFjZT04LFpyLk1vZHVsZT05LFpyLlByb3BlcnR5PTEwLFpyLlVuaXQ9MTEsWnIuVmFsdWU9MTIsWnIuRW51bT0xMyxaci5LZXl3b3JkPTE0LFpyLlNuaXBwZXQ9MTUsWnIuQ29sb3I9MTYsWnIuRmlsZT0xNyxaci5SZWZlcmVuY2U9MTgsWnIuRm9sZGVyPTE5LFpyLkVudW1NZW1iZXI9MjAsWnIuQ29uc3RhbnQ9MjEsWnIuU3RydWN0PTIyLFpyLkV2ZW50PTIzLFpyLk9wZXJhdG9yPTI0LFpyLlR5cGVQYXJhbWV0ZXI9MjUsKHRhPWVhfHwoZWE9e30pKS5QbGFpblRleHQ9MSx0YS5TbmlwcGV0PTIsKG5hfHwobmE9e30pKS5EZXByZWNhdGVkPTEsKHJhPWlhfHwoaWE9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntuZXdUZXh0OmUsaW5zZXJ0OnQscmVwbGFjZTpufX0scmEuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmUGEuc3RyaW5nKHQubmV3VGV4dCkmJlFpLmlzKHQuaW5zZXJ0KSYmUWkuaXModC5yZXBsYWNlKX0sKG9hPWFhfHwoYWE9e30pKS5hc0lzPTEsb2EuYWRqdXN0SW5kZW50YXRpb249Miwoc2F8fChzYT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LChsYXx8KGxhPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2l0ZW1zOmV8fFtdLGlzSW5jb21wbGV0ZTohIXR9fSwoaGE9Y2F8fChjYT17fSkpLmZyb21QbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfSxoYS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5zdHJpbmcodCl8fFBhLm9iamVjdExpdGVyYWwodCkmJlBhLnN0cmluZyh0Lmxhbmd1YWdlKSYmUGEuc3RyaW5nKHQudmFsdWUpfSwoZGF8fChkYT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZQYS5vYmplY3RMaXRlcmFsKHQpJiYoWXIuaXModC5jb250ZW50cyl8fGNhLmlzKHQuY29udGVudHMpfHxQYS50eXBlZEFycmF5KHQuY29udGVudHMsY2EuaXMpKSYmKHZvaWQgMD09PWUucmFuZ2V8fFFpLmlzKGUucmFuZ2UpKX0sKHVhfHwodWE9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD97bGFiZWw6ZSxkb2N1bWVudGF0aW9uOnR9OntsYWJlbDplfX0sKG1hfHwobWE9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgcj17bGFiZWw6ZX07cmV0dXJuIFBhLmRlZmluZWQodCkmJihyLmRvY3VtZW50YXRpb249dCksUGEuZGVmaW5lZChuKT9yLnBhcmFtZXRlcnM9bjpyLnBhcmFtZXRlcnM9W10scn0sKGZhPXBhfHwocGE9e30pKS5UZXh0PTEsZmEuUmVhZD0yLGZhLldyaXRlPTMsKGdhfHwoZ2E9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIFBhLm51bWJlcih0KSYmKG4ua2luZD10KSxufSwoX2E9YmF8fChiYT17fSkpLkZpbGU9MSxfYS5Nb2R1bGU9MixfYS5OYW1lc3BhY2U9MyxfYS5QYWNrYWdlPTQsX2EuQ2xhc3M9NSxfYS5NZXRob2Q9NixfYS5Qcm9wZXJ0eT03LF9hLkZpZWxkPTgsX2EuQ29uc3RydWN0b3I9OSxfYS5FbnVtPTEwLF9hLkludGVyZmFjZT0xMSxfYS5GdW5jdGlvbj0xMixfYS5WYXJpYWJsZT0xMyxfYS5Db25zdGFudD0xNCxfYS5TdHJpbmc9MTUsX2EuTnVtYmVyPTE2LF9hLkJvb2xlYW49MTcsX2EuQXJyYXk9MTgsX2EuT2JqZWN0PTE5LF9hLktleT0yMCxfYS5OdWxsPTIxLF9hLkVudW1NZW1iZXI9MjIsX2EuU3RydWN0PTIzLF9hLkV2ZW50PTI0LF9hLk9wZXJhdG9yPTI1LF9hLlR5cGVQYXJhbWV0ZXI9MjYsKHZhfHwodmE9e30pKS5EZXByZWNhdGVkPTEsKHdhfHwod2E9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4saSxyKXt2YXIgYT17bmFtZTplLGtpbmQ6dCxsb2NhdGlvbjp7dXJpOmkscmFuZ2U6bn19O3JldHVybiByJiYoYS5jb250YWluZXJOYW1lPXIpLGF9LChUYT15YXx8KHlhPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLGkscixhKXt2YXIgbz17bmFtZTplLGRldGFpbDp0LGtpbmQ6bixyYW5nZTppLHNlbGVjdGlvblJhbmdlOnJ9O3JldHVybiB2b2lkIDAhPT1hJiYoby5jaGlsZHJlbj1hKSxvfSxUYS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZQYS5zdHJpbmcodC5uYW1lKSYmUGEubnVtYmVyKHQua2luZCkmJlFpLmlzKHQucmFuZ2UpJiZRaS5pcyh0LnNlbGVjdGlvblJhbmdlKSYmKHZvaWQgMD09PXQuZGV0YWlsfHxQYS5zdHJpbmcodC5kZXRhaWwpKSYmKHZvaWQgMD09PXQuZGVwcmVjYXRlZHx8UGEuYm9vbGVhbih0LmRlcHJlY2F0ZWQpKSYmKHZvaWQgMD09PXQuY2hpbGRyZW58fEFycmF5LmlzQXJyYXkodC5jaGlsZHJlbikpJiYodm9pZCAwPT09dC50YWdzfHxBcnJheS5pc0FycmF5KHQudGFncykpfSwoU2E9a2F8fChrYT17fSkpLkVtcHR5PSIiLFNhLlF1aWNrRml4PSJxdWlja2ZpeCIsU2EuUmVmYWN0b3I9InJlZmFjdG9yIixTYS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLFNhLlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLFNhLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsU2EuU291cmNlPSJzb3VyY2UiLFNhLlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsU2EuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIiwoTGE9eGF8fCh4YT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtkaWFnbm9zdGljczplfTtyZXR1cm4gbnVsbCE9dCYmKG4ub25seT10KSxufSxMYS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBQYS5kZWZpbmVkKHQpJiZQYS50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MseXIuaXMpJiYodm9pZCAwPT09dC5vbmx5fHxQYS50eXBlZEFycmF5KHQub25seSxQYS5zdHJpbmcpKX0sKEVhPUNhfHwoQ2E9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXt0aXRsZTplfSxyPSEwO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8ocj0hMSxpLmtpbmQ9dCk6a3IuaXModCk/aS5jb21tYW5kPXQ6aS5lZGl0PXQsciYmdm9pZCAwIT09biYmKGkua2luZD1uKSxpfSxFYS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZQYS5zdHJpbmcodC50aXRsZSkmJih2b2lkIDA9PT10LmRpYWdub3N0aWNzfHxQYS50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MseXIuaXMpKSYmKHZvaWQgMD09PXQua2luZHx8UGEuc3RyaW5nKHQua2luZCkpJiYodm9pZCAwIT09dC5lZGl0fHx2b2lkIDAhPT10LmNvbW1hbmQpJiYodm9pZCAwPT09dC5jb21tYW5kfHxrci5pcyh0LmNvbW1hbmQpKSYmKHZvaWQgMD09PXQuaXNQcmVmZXJyZWR8fFBhLmJvb2xlYW4odC5pc1ByZWZlcnJlZCkpJiYodm9pZCAwPT09dC5lZGl0fHxQci5pcyh0LmVkaXQpKX0sKE1hPUFhfHwoQWE9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIFBhLmRlZmluZWQodCkmJihuLmRhdGE9dCksbn0sTWEuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmUWkuaXModC5yYW5nZSkmJihQYS51bmRlZmluZWQodC5jb21tYW5kKXx8a3IuaXModC5jb21tYW5kKSl9LChOYT1SYXx8KFJhPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RhYlNpemU6ZSxpbnNlcnRTcGFjZXM6dH19LE5hLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFBhLmRlZmluZWQodCkmJlBhLnVpbnRlZ2VyKHQudGFiU2l6ZSkmJlBhLmJvb2xlYW4odC5pbnNlcnRTcGFjZXMpfSwoVWE9SWF8fChJYT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsdGFyZ2V0OnQsZGF0YTpufX0sVWEuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gUGEuZGVmaW5lZCh0KSYmUWkuaXModC5yYW5nZSkmJihQYS51bmRlZmluZWQodC50YXJnZXQpfHxQYS5zdHJpbmcodC50YXJnZXQpKX0sKHphPUhhfHwoSGE9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxwYXJlbnQ6dH19LHphLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJlFpLmlzKHQucmFuZ2UpJiYodm9pZCAwPT09dC5wYXJlbnR8fHphLmlzKHQucGFyZW50KSl9LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTt2YXIgaT1lLmxlbmd0aC8yfDAscj1lLnNsaWNlKDAsaSksYT1lLnNsaWNlKGkpO3QocixuKSx0KGEsbik7Zm9yKHZhciBvPTAscz0wLGw9MDtvPHIubGVuZ3RoJiZzPGEubGVuZ3RoOyl7dmFyIGM9bihyW29dLGFbc10pO2VbbCsrXT1jPD0wP3JbbysrXTphW3MrK119Zm9yKDtvPHIubGVuZ3RoOyllW2wrK109cltvKytdO2Zvcig7czxhLmxlbmd0aDspZVtsKytdPWFbcysrXTtyZXR1cm4gZX1lLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbmV3IEJhKGUsdCxuLGkpfSxlLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISEoUGEuZGVmaW5lZCh0KSYmUGEuc3RyaW5nKHQudXJpKSYmKFBhLnVuZGVmaW5lZCh0Lmxhbmd1YWdlSWQpfHxQYS5zdHJpbmcodC5sYW5ndWFnZUlkKSkmJlBhLnVpbnRlZ2VyKHQubGluZUNvdW50KSYmUGEuZnVuYyh0LmdldFRleHQpJiZQYS5mdW5jKHQucG9zaXRpb25BdCkmJlBhLmZ1bmModC5vZmZzZXRBdCkpfSxlLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9ZS5nZXRUZXh0KCkscj10KG4sKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxhPWkubGVuZ3RoLG89ci5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIHM9cltvXSxsPWUub2Zmc2V0QXQocy5yYW5nZS5zdGFydCksYz1lLm9mZnNldEF0KHMucmFuZ2UuZW5kKTtpZighKGM8PWEpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2k9aS5zdWJzdHJpbmcoMCxsKStzLm5ld1RleHQraS5zdWJzdHJpbmcoYyxpLmxlbmd0aCksYT1sfXJldHVybiBpfX0oRGF8fChEYT17fSkpO3ZhciBQYSxxYSxGYSxCYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYW5ndWFnZUlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJzaW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LGUucHJvdG90eXBlLmdldExpbmVPZmZzZXRzPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMCxpPTA7aTx0Lmxlbmd0aDtpKyspe24mJihlLnB1c2goaSksbj0hMSk7dmFyIHI9dC5jaGFyQXQoaSk7bj0iXHIiPT09cnx8IlxuIj09PXIsIlxyIj09PXImJmkrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KGkrMSkmJmkrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXQubGVuZ3RoO2lmKDA9PT1pKXJldHVybiBYaS5jcmVhdGUoMCxlKTtmb3IoO248aTspe3ZhciByPU1hdGguZmxvb3IoKG4raSkvMik7dFtyXT5lP2k9cjpuPXIrMX12YXIgYT1uLTE7cmV0dXJuIFhpLmNyZWF0ZShhLGUtdFthXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgbj10W2UubGluZV0saT1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpO3FhPVBhfHwoUGE9e30pLEZhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscWEuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0scWEudW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxxYS5ib29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfSxxYS5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1GYS5jYWxsKGUpfSxxYS5udW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1GYS5jYWxsKGUpfSxxYS5udW1iZXJSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1GYS5jYWxsKGUpJiZ0PD1lJiZlPD1ufSxxYS5pbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09RmEuY2FsbChlKSYmLTIxNDc0ODM2NDg8PWUmJmU8PTIxNDc0ODM2NDd9LHFhLnVpbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09RmEuY2FsbChlKSYmMDw9ZSYmZTw9MjE0NzQ4MzY0N30scWEuZnVuYz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09RmEuY2FsbChlKX0scWEub2JqZWN0TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX0scWEudHlwZWRBcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHQpfTt2YXIgVmEsS2EsamEsR2EsJGEsSmEsWGEsWWEsUWEsWmE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2NvbnN0IHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHQpe2ZvcihsZXQgdCBvZiBlKWlmKFphLmlzSW5jcmVtZW50YWwodCkpe2NvbnN0IGU9bm8odC5yYW5nZSksbj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGk9dGhpcy5vZmZzZXRBdChlLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLG4pK3QudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhpLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCByPU1hdGgubWF4KGUuc3RhcnQubGluZSwwKSxhPU1hdGgubWF4KGUuZW5kLmxpbmUsMCk7bGV0IG89dGhpcy5fbGluZU9mZnNldHM7Y29uc3Qgcz10byh0LnRleHQsITEsbik7aWYoYS1yPT09cy5sZW5ndGgpZm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKW9bZStyKzFdPXNbZV07ZWxzZSBzLmxlbmd0aDwxZTQ/by5zcGxpY2UocisxLGEtciwuLi5zKTp0aGlzLl9saW5lT2Zmc2V0cz1vPW8uc2xpY2UoMCxyKzEpLmNvbmNhdChzLG8uc2xpY2UoYSsxKSk7Y29uc3QgbD10LnRleHQubGVuZ3RoLShpLW4pO2lmKDAhPT1sKWZvcihsZXQgZT1yKzErcy5sZW5ndGgsdD1vLmxlbmd0aDtlPHQ7ZSsrKW9bZV09b1tlXStsfWVsc2V7aWYoIVphLmlzRnVsbCh0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXRoaXMuX3ZlcnNpb249dH1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyYmKHRoaXMuX2xpbmVPZmZzZXRzPXRvKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXQubGVuZ3RoO2lmKDA9PT1pKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxpOyl7bGV0IHI9TWF0aC5mbG9vcigobitpKS8yKTt0W3JdPmU/aT1yOm49cisxfWxldCByPW4tMTtyZXR1cm57bGluZTpyLGNoYXJhY3RlcjplLXRbcl19fW9mZnNldEF0KGUpe2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj10W2UubGluZV0saT1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMCE9PXQucmFuZ2UmJih2b2lkIDA9PT10LnJhbmdlTGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHQucmFuZ2VMZW5ndGgpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMD09PXQucmFuZ2UmJnZvaWQgMD09PXQucmFuZ2VMZW5ndGh9fTtmdW5jdGlvbiBlbyhlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLG4pLHI9ZS5zbGljZShuKTtlbyhpLHQpLGVvKHIsdCk7bGV0IGE9MCxvPTAscz0wO2Zvcig7YTxpLmxlbmd0aCYmbzxyLmxlbmd0aDspe2xldCBuPXQoaVthXSxyW29dKTtlW3MrK109bjw9MD9pW2ErK106cltvKytdfWZvcig7YTxpLmxlbmd0aDspZVtzKytdPWlbYSsrXTtmb3IoO288ci5sZW5ndGg7KWVbcysrXT1yW28rK107cmV0dXJuIGV9ZnVuY3Rpb24gdG8oZSx0LG49MCl7Y29uc3QgaT10P1tuXTpbXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZS5jaGFyQ29kZUF0KHQpOzEzIT09ciYmMTAhPT1yfHwoMTM9PT1yJiZ0KzE8ZS5sZW5ndGgmJjEwPT09ZS5jaGFyQ29kZUF0KHQrMSkmJnQrKyxpLnB1c2gobit0KzEpKX1yZXR1cm4gaX1mdW5jdGlvbiBubyhlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBpbyhlKXtjb25zdCB0PW5vKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX0oS2E9VmF8fChWYT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbmV3IFphKGUsdCxuLGkpfSxLYS51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiBaYSlyZXR1cm4gZS51cGRhdGUodCxuKSxlO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX0sS2EuYXBwbHlFZGl0cz1mdW5jdGlvbihlLHQpe2xldCBuPWUuZ2V0VGV4dCgpLGk9ZW8odC5tYXAoaW8pLCgoZSx0KT0+e2xldCBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSkscj0wO2NvbnN0IGE9W107Zm9yKGNvbnN0IHQgb2YgaSl7bGV0IGk9ZS5vZmZzZXRBdCh0LnJhbmdlLnN0YXJ0KTtpZihpPHIpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aT5yJiZhLnB1c2gobi5zdWJzdHJpbmcocixpKSksdC5uZXdUZXh0Lmxlbmd0aCYmYS5wdXNoKHQubmV3VGV4dCkscj1lLm9mZnNldEF0KHQucmFuZ2UuZW5kKX1yZXR1cm4gYS5wdXNoKG4uc3Vic3RyKHIpKSxhLmpvaW4oIiIpfSwoR2E9amF8fChqYT17fSkpW0dhLlN0YXJ0Q29tbWVudFRhZz0wXT0iU3RhcnRDb21tZW50VGFnIixHYVtHYS5Db21tZW50PTFdPSJDb21tZW50IixHYVtHYS5FbmRDb21tZW50VGFnPTJdPSJFbmRDb21tZW50VGFnIixHYVtHYS5TdGFydFRhZ09wZW49M109IlN0YXJ0VGFnT3BlbiIsR2FbR2EuU3RhcnRUYWdDbG9zZT00XT0iU3RhcnRUYWdDbG9zZSIsR2FbR2EuU3RhcnRUYWdTZWxmQ2xvc2U9NV09IlN0YXJ0VGFnU2VsZkNsb3NlIixHYVtHYS5TdGFydFRhZz02XT0iU3RhcnRUYWciLEdhW0dhLkVuZFRhZ09wZW49N109IkVuZFRhZ09wZW4iLEdhW0dhLkVuZFRhZ0Nsb3NlPThdPSJFbmRUYWdDbG9zZSIsR2FbR2EuRW5kVGFnPTldPSJFbmRUYWciLEdhW0dhLkRlbGltaXRlckFzc2lnbj0xMF09IkRlbGltaXRlckFzc2lnbiIsR2FbR2EuQXR0cmlidXRlTmFtZT0xMV09IkF0dHJpYnV0ZU5hbWUiLEdhW0dhLkF0dHJpYnV0ZVZhbHVlPTEyXT0iQXR0cmlidXRlVmFsdWUiLEdhW0dhLlN0YXJ0RG9jdHlwZVRhZz0xM109IlN0YXJ0RG9jdHlwZVRhZyIsR2FbR2EuRG9jdHlwZT0xNF09IkRvY3R5cGUiLEdhW0dhLkVuZERvY3R5cGVUYWc9MTVdPSJFbmREb2N0eXBlVGFnIixHYVtHYS5Db250ZW50PTE2XT0iQ29udGVudCIsR2FbR2EuV2hpdGVzcGFjZT0xN109IldoaXRlc3BhY2UiLEdhW0dhLlVua25vd249MThdPSJVbmtub3duIixHYVtHYS5TY3JpcHQ9MTldPSJTY3JpcHQiLEdhW0dhLlN0eWxlcz0yMF09IlN0eWxlcyIsR2FbR2EuRU9TPTIxXT0iRU9TIiwoSmE9JGF8fCgkYT17fSkpW0phLldpdGhpbkNvbnRlbnQ9MF09IldpdGhpbkNvbnRlbnQiLEphW0phLkFmdGVyT3BlbmluZ1N0YXJ0VGFnPTFdPSJBZnRlck9wZW5pbmdTdGFydFRhZyIsSmFbSmEuQWZ0ZXJPcGVuaW5nRW5kVGFnPTJdPSJBZnRlck9wZW5pbmdFbmRUYWciLEphW0phLldpdGhpbkRvY3R5cGU9M109IldpdGhpbkRvY3R5cGUiLEphW0phLldpdGhpblRhZz00XT0iV2l0aGluVGFnIixKYVtKYS5XaXRoaW5FbmRUYWc9NV09IldpdGhpbkVuZFRhZyIsSmFbSmEuV2l0aGluQ29tbWVudD02XT0iV2l0aGluQ29tbWVudCIsSmFbSmEuV2l0aGluU2NyaXB0Q29udGVudD03XT0iV2l0aGluU2NyaXB0Q29udGVudCIsSmFbSmEuV2l0aGluU3R5bGVDb250ZW50PThdPSJXaXRoaW5TdHlsZUNvbnRlbnQiLEphW0phLkFmdGVyQXR0cmlidXRlTmFtZT05XT0iQWZ0ZXJBdHRyaWJ1dGVOYW1lIixKYVtKYS5CZWZvcmVBdHRyaWJ1dGVWYWx1ZT0xMF09IkJlZm9yZUF0dHJpYnV0ZVZhbHVlIiwoWGF8fChYYT17fSkpLkxBVEVTVD17dGV4dERvY3VtZW50Ontjb21wbGV0aW9uOntjb21wbGV0aW9uSXRlbTp7ZG9jdW1lbnRhdGlvbkZvcm1hdDpbSnIuTWFya2Rvd24sSnIuUGxhaW5UZXh0XX19LGhvdmVyOntjb250ZW50Rm9ybWF0OltKci5NYXJrZG93bixKci5QbGFpblRleHRdfX19LChRYT1ZYXx8KFlhPXt9KSlbUWEuVW5rbm93bj0wXT0iVW5rbm93biIsUWFbUWEuRmlsZT0xXT0iRmlsZSIsUWFbUWEuRGlyZWN0b3J5PTJdPSJEaXJlY3RvcnkiLFFhW1FhLlN5bWJvbGljTGluaz02NF09IlN5bWJvbGljTGluayI7dmFyIHJvPUtpKCksYW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zb3VyY2U9ZSx0aGlzLmxlbj1lLmxlbmd0aCx0aGlzLnBvc2l0aW9uPXR9cmV0dXJuIGUucHJvdG90eXBlLmVvcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbjw9dGhpcy5wb3NpdGlvbn0sZS5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxlLnByb3RvdHlwZS5wb3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbn0sZS5wcm90b3R5cGUuZ29CYWNrVG89ZnVuY3Rpb24oZSl7dGhpcy5wb3NpdGlvbj1lfSxlLnByb3RvdHlwZS5nb0JhY2s9ZnVuY3Rpb24oZSl7dGhpcy5wb3NpdGlvbi09ZX0sZS5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uKz1lfSxlLnByb3RvdHlwZS5nb1RvRW5kPWZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbj10aGlzLnNvdXJjZS5sZW5ndGh9LGUucHJvdG90eXBlLm5leHRDaGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbisrKXx8MH0sZS5wcm90b3R5cGUucGVla0NoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbitlKXx8MH0sZS5wcm90b3R5cGUuYWR2YW5jZUlmQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbikmJih0aGlzLnBvc2l0aW9uKyssITApfSxlLnByb3RvdHlwZS5hZHZhbmNlSWZDaGFycz1mdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLnBvc2l0aW9uK2UubGVuZ3RoPnRoaXMuc291cmNlLmxlbmd0aClyZXR1cm4hMTtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbit0KSE9PWVbdF0pcmV0dXJuITE7cmV0dXJuIHRoaXMuYWR2YW5jZSh0KSwhMH0sZS5wcm90b3R5cGUuYWR2YW5jZUlmUmVnRXhwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc291cmNlLnN1YnN0cih0aGlzLnBvc2l0aW9uKS5tYXRjaChlKTtyZXR1cm4gdD8odGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9uK3QuaW5kZXgrdFswXS5sZW5ndGgsdFswXSk6IiJ9LGUucHJvdG90eXBlLmFkdmFuY2VVbnRpbFJlZ0V4cD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNvdXJjZS5zdWJzdHIodGhpcy5wb3NpdGlvbikubWF0Y2goZSk7cmV0dXJuIHQ/KHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbit0LmluZGV4LHRbMF0pOih0aGlzLmdvVG9FbmQoKSwiIil9LGUucHJvdG90eXBlLmFkdmFuY2VVbnRpbENoYXI9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLnBvc2l0aW9uPHRoaXMuc291cmNlLmxlbmd0aDspe2lmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbik9PT1lKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuYWR2YW5jZVVudGlsQ2hhcnM9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLnBvc2l0aW9uK2UubGVuZ3RoPD10aGlzLnNvdXJjZS5sZW5ndGg7KXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rdCk9PT1lW3RdO3QrKyk7aWYodD09PWUubGVuZ3RoKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4gdGhpcy5nb1RvRW5kKCksITF9LGUucHJvdG90eXBlLnNraXBXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWR2YW5jZVdoaWxlQ2hhcigoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1fb3x8ZT09PXZvfHxlPT09Zm98fGU9PT1ib3x8ZT09PWdvfSkpPjB9LGUucHJvdG90eXBlLmFkdmFuY2VXaGlsZUNoYXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMucG9zaXRpb247dGhpcy5wb3NpdGlvbjx0aGlzLmxlbiYmZSh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24pKTspdGhpcy5wb3NpdGlvbisrO3JldHVybiB0aGlzLnBvc2l0aW9uLXR9LGV9KCksb289IiEiLmNoYXJDb2RlQXQoMCksc289Ii0iLmNoYXJDb2RlQXQoMCksbG89IjwiLmNoYXJDb2RlQXQoMCksY289Ij4iLmNoYXJDb2RlQXQoMCksaG89Ii8iLmNoYXJDb2RlQXQoMCksdW89Ij0iLmNoYXJDb2RlQXQoMCksbW89JyInLmNoYXJDb2RlQXQoMCkscG89IiciLmNoYXJDb2RlQXQoMCksZm89IlxuIi5jaGFyQ29kZUF0KDApLGdvPSJcciIuY2hhckNvZGVBdCgwKSxibz0iXGYiLmNoYXJDb2RlQXQoMCksX289IiAiLmNoYXJDb2RlQXQoMCksdm89Ilx0Ii5jaGFyQ29kZUF0KDApLHdvPXsidGV4dC94LWhhbmRsZWJhcnMtdGVtcGxhdGUiOiEwLCJ0ZXh0L2h0bWwiOiEwfTtmdW5jdGlvbiB5byhlLHQsbixpKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0kYS5XaXRoaW5Db250ZW50KSx2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIHIsYSxvLHMsbCxjPW5ldyBhbyhlLHQpLGg9bixkPTAsdT1qYS5Vbmtub3duO2Z1bmN0aW9uIG0oKXtyZXR1cm4gYy5hZHZhbmNlSWZSZWdFeHAoL15bXzpcd11bXzpcdy0uXGRdKi8pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcChlLHQsbil7cmV0dXJuIHU9dCxkPWUscj1uLHR9ZnVuY3Rpb24gZigpe3ZhciBlLHQ9Yy5wb3MoKTtpZihjLmVvcygpKXJldHVybiBwKHQsamEuRU9TKTtzd2l0Y2goaCl7Y2FzZSAkYS5XaXRoaW5Db21tZW50OnJldHVybiBjLmFkdmFuY2VJZkNoYXJzKFtzbyxzbyxjb10pPyhoPSRhLldpdGhpbkNvbnRlbnQscCh0LGphLkVuZENvbW1lbnRUYWcpKTooYy5hZHZhbmNlVW50aWxDaGFycyhbc28sc28sY29dKSxwKHQsamEuQ29tbWVudCkpO2Nhc2UgJGEuV2l0aGluRG9jdHlwZTpyZXR1cm4gYy5hZHZhbmNlSWZDaGFyKGNvKT8oaD0kYS5XaXRoaW5Db250ZW50LHAodCxqYS5FbmREb2N0eXBlVGFnKSk6KGMuYWR2YW5jZVVudGlsQ2hhcihjbykscCh0LGphLkRvY3R5cGUpKTtjYXNlICRhLldpdGhpbkNvbnRlbnQ6aWYoYy5hZHZhbmNlSWZDaGFyKGxvKSl7aWYoIWMuZW9zKCkmJmMucGVla0NoYXIoKT09PW9vKXtpZihjLmFkdmFuY2VJZkNoYXJzKFtvbyxzbyxzb10pKXJldHVybiBoPSRhLldpdGhpbkNvbW1lbnQscCh0LGphLlN0YXJ0Q29tbWVudFRhZyk7aWYoYy5hZHZhbmNlSWZSZWdFeHAoL14hZG9jdHlwZS9pKSlyZXR1cm4gaD0kYS5XaXRoaW5Eb2N0eXBlLHAodCxqYS5TdGFydERvY3R5cGVUYWcpfXJldHVybiBjLmFkdmFuY2VJZkNoYXIoaG8pPyhoPSRhLkFmdGVyT3BlbmluZ0VuZFRhZyxwKHQsamEuRW5kVGFnT3BlbikpOihoPSRhLkFmdGVyT3BlbmluZ1N0YXJ0VGFnLHAodCxqYS5TdGFydFRhZ09wZW4pKX1yZXR1cm4gYy5hZHZhbmNlVW50aWxDaGFyKGxvKSxwKHQsamEuQ29udGVudCk7Y2FzZSAkYS5BZnRlck9wZW5pbmdFbmRUYWc6cmV0dXJuIG0oKS5sZW5ndGg+MD8oaD0kYS5XaXRoaW5FbmRUYWcscCh0LGphLkVuZFRhZykpOmMuc2tpcFdoaXRlc3BhY2UoKT9wKHQsamEuV2hpdGVzcGFjZSxybygiZXJyb3IudW5leHBlY3RlZFdoaXRlc3BhY2UiLCJUYWcgbmFtZSBtdXN0IGRpcmVjdGx5IGZvbGxvdyB0aGUgb3BlbiBicmFja2V0LiIpKTooaD0kYS5XaXRoaW5FbmRUYWcsYy5hZHZhbmNlVW50aWxDaGFyKGNvKSx0PGMucG9zKCk/cCh0LGphLlVua25vd24scm8oImVycm9yLmVuZFRhZ05hbWVFeHBlY3RlZCIsIkVuZCB0YWcgbmFtZSBleHBlY3RlZC4iKSk6ZigpKTtjYXNlICRhLldpdGhpbkVuZFRhZzppZihjLnNraXBXaGl0ZXNwYWNlKCkpcmV0dXJuIHAodCxqYS5XaGl0ZXNwYWNlKTtpZihjLmFkdmFuY2VJZkNoYXIoY28pKXJldHVybiBoPSRhLldpdGhpbkNvbnRlbnQscCh0LGphLkVuZFRhZ0Nsb3NlKTtpZihpJiZjLnBlZWtDaGFyKCk9PT1sbylyZXR1cm4gaD0kYS5XaXRoaW5Db250ZW50LHAodCxqYS5FbmRUYWdDbG9zZSxybygiZXJyb3IuY2xvc2luZ0JyYWNrZXRNaXNzaW5nIiwiQ2xvc2luZyBicmFja2V0IG1pc3NpbmcuIikpO2U9cm8oImVycm9yLmNsb3NpbmdCcmFja2V0RXhwZWN0ZWQiLCJDbG9zaW5nIGJyYWNrZXQgZXhwZWN0ZWQuIik7YnJlYWs7Y2FzZSAkYS5BZnRlck9wZW5pbmdTdGFydFRhZzpyZXR1cm4gbz1tKCksbD12b2lkIDAscz12b2lkIDAsby5sZW5ndGg+MD8oYT0hMSxoPSRhLldpdGhpblRhZyxwKHQsamEuU3RhcnRUYWcpKTpjLnNraXBXaGl0ZXNwYWNlKCk/cCh0LGphLldoaXRlc3BhY2Uscm8oImVycm9yLnVuZXhwZWN0ZWRXaGl0ZXNwYWNlIiwiVGFnIG5hbWUgbXVzdCBkaXJlY3RseSBmb2xsb3cgdGhlIG9wZW4gYnJhY2tldC4iKSk6KGg9JGEuV2l0aGluVGFnLGMuYWR2YW5jZVVudGlsQ2hhcihjbyksdDxjLnBvcygpP3AodCxqYS5Vbmtub3duLHJvKCJlcnJvci5zdGFydFRhZ05hbWVFeHBlY3RlZCIsIlN0YXJ0IHRhZyBuYW1lIGV4cGVjdGVkLiIpKTpmKCkpO2Nhc2UgJGEuV2l0aGluVGFnOnJldHVybiBjLnNraXBXaGl0ZXNwYWNlKCk/KGE9ITAscCh0LGphLldoaXRlc3BhY2UpKTphJiYocz1jLmFkdmFuY2VJZlJlZ0V4cCgvXlteXHMiJz48Lz1ceDAwLVx4MEZceDdGXHg4MC1ceDlGXSovKS50b0xvd2VyQ2FzZSgpKS5sZW5ndGg+MD8oaD0kYS5BZnRlckF0dHJpYnV0ZU5hbWUsYT0hMSxwKHQsamEuQXR0cmlidXRlTmFtZSkpOmMuYWR2YW5jZUlmQ2hhcnMoW2hvLGNvXSk/KGg9JGEuV2l0aGluQ29udGVudCxwKHQsamEuU3RhcnRUYWdTZWxmQ2xvc2UpKTpjLmFkdmFuY2VJZkNoYXIoY28pPyhoPSJzY3JpcHQiPT09bz9sJiZ3b1tsXT8kYS5XaXRoaW5Db250ZW50OiRhLldpdGhpblNjcmlwdENvbnRlbnQ6InN0eWxlIj09PW8/JGEuV2l0aGluU3R5bGVDb250ZW50OiRhLldpdGhpbkNvbnRlbnQscCh0LGphLlN0YXJ0VGFnQ2xvc2UpKTppJiZjLnBlZWtDaGFyKCk9PT1sbz8oaD0kYS5XaXRoaW5Db250ZW50LHAodCxqYS5TdGFydFRhZ0Nsb3NlLHJvKCJlcnJvci5jbG9zaW5nQnJhY2tldE1pc3NpbmciLCJDbG9zaW5nIGJyYWNrZXQgbWlzc2luZy4iKSkpOihjLmFkdmFuY2UoMSkscCh0LGphLlVua25vd24scm8oImVycm9yLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblRhZyIsIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIHRhZy4iKSkpO2Nhc2UgJGEuQWZ0ZXJBdHRyaWJ1dGVOYW1lOnJldHVybiBjLnNraXBXaGl0ZXNwYWNlKCk/KGE9ITAscCh0LGphLldoaXRlc3BhY2UpKTpjLmFkdmFuY2VJZkNoYXIodW8pPyhoPSRhLkJlZm9yZUF0dHJpYnV0ZVZhbHVlLHAodCxqYS5EZWxpbWl0ZXJBc3NpZ24pKTooaD0kYS5XaXRoaW5UYWcsZigpKTtjYXNlICRhLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOmlmKGMuc2tpcFdoaXRlc3BhY2UoKSlyZXR1cm4gcCh0LGphLldoaXRlc3BhY2UpO3ZhciBuPWMuYWR2YW5jZUlmUmVnRXhwKC9eW15ccyInYD08Pl0rLyk7aWYobi5sZW5ndGg+MClyZXR1cm4gYy5wZWVrQ2hhcigpPT09Y28mJmMucGVla0NoYXIoLTEpPT09aG8mJihjLmdvQmFjaygxKSxuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLCJ0eXBlIj09PXMmJihsPW4pLGg9JGEuV2l0aGluVGFnLGE9ITEscCh0LGphLkF0dHJpYnV0ZVZhbHVlKTt2YXIgcj1jLnBlZWtDaGFyKCk7cmV0dXJuIHI9PT1wb3x8cj09PW1vPyhjLmFkdmFuY2UoMSksYy5hZHZhbmNlVW50aWxDaGFyKHIpJiZjLmFkdmFuY2UoMSksInR5cGUiPT09cyYmKGw9Yy5nZXRTb3VyY2UoKS5zdWJzdHJpbmcodCsxLGMucG9zKCktMSkpLGg9JGEuV2l0aGluVGFnLGE9ITEscCh0LGphLkF0dHJpYnV0ZVZhbHVlKSk6KGg9JGEuV2l0aGluVGFnLGE9ITEsZigpKTtjYXNlICRhLldpdGhpblNjcmlwdENvbnRlbnQ6Zm9yKHZhciBkPTE7IWMuZW9zKCk7KXt2YXIgdT1jLmFkdmFuY2VJZlJlZ0V4cCgvPCEtLXwtLT58PFwvP3NjcmlwdFxzKlwvPz4/L2kpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gYy5nb1RvRW5kKCkscCh0LGphLlNjcmlwdCk7aWYoIlx4M2MhLS0iPT09dSkxPT09ZCYmKGQ9Mik7ZWxzZSBpZigiLS1ceDNlIj09PXUpZD0xO2Vsc2UgaWYoIi8iIT09dVsxXSkyPT09ZCYmKGQ9Myk7ZWxzZXtpZigzIT09ZCl7Yy5nb0JhY2sodS5sZW5ndGgpO2JyZWFrfWQ9Mn19cmV0dXJuIGg9JGEuV2l0aGluQ29udGVudCx0PGMucG9zKCk/cCh0LGphLlNjcmlwdCk6ZigpO2Nhc2UgJGEuV2l0aGluU3R5bGVDb250ZW50OnJldHVybiBjLmFkdmFuY2VVbnRpbFJlZ0V4cCgvPFwvc3R5bGUvaSksaD0kYS5XaXRoaW5Db250ZW50LHQ8Yy5wb3MoKT9wKHQsamEuU3R5bGVzKTpmKCl9cmV0dXJuIGMuYWR2YW5jZSgxKSxoPSRhLldpdGhpbkNvbnRlbnQscCh0LGphLlVua25vd24sZSl9cmV0dXJue3NjYW46ZnVuY3Rpb24oKXt2YXIgZT1jLnBvcygpLHQ9aCxuPWYoKTtyZXR1cm4gbj09PWphLkVPU3x8ZSE9PWMucG9zKCl8fGkmJihuPT09amEuU3RhcnRUYWdDbG9zZXx8bj09PWphLkVuZFRhZ0Nsb3NlKT9uOihjb25zb2xlLmxvZygiU2Nhbm5lci5zY2FuIGhhcyBub3QgYWR2YW5jZWQgYXQgb2Zmc2V0ICIrZSsiLCBzdGF0ZSBiZWZvcmU6ICIrdCsiIGFmdGVyOiAiK2gpLGMuYWR2YW5jZSgxKSxwKGUsamEuVW5rbm93bikpfSxnZXRUb2tlblR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0VG9rZW5PZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sZ2V0VG9rZW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gYy5wb3MoKS1kfSxnZXRUb2tlbkVuZDpmdW5jdGlvbigpe3JldHVybiBjLnBvcygpfSxnZXRUb2tlblRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRTb3VyY2UoKS5zdWJzdHJpbmcoZCxjLnBvcygpKX0sZ2V0U2Nhbm5lclN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LGdldFRva2VuRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fWZ1bmN0aW9uIFRvKGUsdCl7dmFyIG49MCxpPWUubGVuZ3RoO2lmKDA9PT1pKXJldHVybiAwO2Zvcig7bjxpOyl7dmFyIHI9TWF0aC5mbG9vcigobitpKS8yKTt0KGVbcl0pP2k9cjpuPXIrMX1yZXR1cm4gbn12YXIga289WyJhcmVhIiwiYmFzZSIsImJyIiwiY29sIiwiZW1iZWQiLCJociIsImltZyIsImlucHV0Iiwia2V5Z2VuIiwibGluayIsIm1lbnVpdGVtIiwibWV0YSIsInBhcmFtIiwic291cmNlIiwidHJhY2siLCJ3YnIiXTtmdW5jdGlvbiBTbyhlKXtyZXR1cm4hIWUmJmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGk9MCxyPWUubGVuZ3RoLTE7aTw9cjspe3ZhciBhPShpK3IpLzJ8MCxvPW4oZVthXSx0KTtpZihvPDApaT1hKzE7ZWxzZXtpZighKG8+MCkpcmV0dXJuIGE7cj1hLTF9fXJldHVybi0oaSsxKX0oa28sZS50b0xvd2VyQ2FzZSgpLChmdW5jdGlvbihlLHQpe3JldHVybiBlLmxvY2FsZUNvbXBhcmUodCl9KSk+PTB9dmFyIHhvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpKXt0aGlzLnN0YXJ0PWUsdGhpcy5lbmQ9dCx0aGlzLmNoaWxkcmVuPW4sdGhpcy5wYXJlbnQ9aSx0aGlzLmNsb3NlZD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyaWJ1dGVOYW1lcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXM/T2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTpbXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5pc1NhbWVUYWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PXRoaXMudGFnP3ZvaWQgMD09PWU6dm9pZCAwIT09ZSYmdGhpcy50YWcubGVuZ3RoPT09ZS5sZW5ndGgmJnRoaXMudGFnLnRvTG93ZXJDYXNlKCk9PT1lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxhc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOnZvaWQgMH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5maW5kTm9kZUJlZm9yZT1mdW5jdGlvbihlKXt2YXIgdD1Ubyh0aGlzLmNoaWxkcmVuLChmdW5jdGlvbih0KXtyZXR1cm4gZTw9dC5zdGFydH0pKS0xO2lmKHQ+PTApe3ZhciBuPXRoaXMuY2hpbGRyZW5bdF07aWYoZT5uLnN0YXJ0KXtpZihlPG4uZW5kKXJldHVybiBuLmZpbmROb2RlQmVmb3JlKGUpO3ZhciBpPW4ubGFzdENoaWxkO3JldHVybiBpJiZpLmVuZD09PW4uZW5kP24uZmluZE5vZGVCZWZvcmUoZSk6bn19cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmZpbmROb2RlQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9VG8odGhpcy5jaGlsZHJlbiwoZnVuY3Rpb24odCl7cmV0dXJuIGU8PXQuc3RhcnR9KSktMTtpZih0Pj0wKXt2YXIgbj10aGlzLmNoaWxkcmVuW3RdO2lmKGU+bi5zdGFydCYmZTw9bi5lbmQpcmV0dXJuIG4uZmluZE5vZGVBdChlKX1yZXR1cm4gdGhpc30sZX0oKTtmdW5jdGlvbiBMbyhlKXtmb3IodmFyIHQ9eW8oZSx2b2lkIDAsdm9pZCAwLCEwKSxuPW5ldyB4bygwLGUubGVuZ3RoLFtdLHZvaWQgMCksaT1uLHI9LTEsYT12b2lkIDAsbz1udWxsLHM9dC5zY2FuKCk7cyE9PWphLkVPUzspe3N3aXRjaChzKXtjYXNlIGphLlN0YXJ0VGFnT3Blbjp2YXIgbD1uZXcgeG8odC5nZXRUb2tlbk9mZnNldCgpLGUubGVuZ3RoLFtdLGkpO2kuY2hpbGRyZW4ucHVzaChsKSxpPWw7YnJlYWs7Y2FzZSBqYS5TdGFydFRhZzppLnRhZz10LmdldFRva2VuVGV4dCgpO2JyZWFrO2Nhc2UgamEuU3RhcnRUYWdDbG9zZTppLnBhcmVudCYmKGkuZW5kPXQuZ2V0VG9rZW5FbmQoKSx0LmdldFRva2VuTGVuZ3RoKCk/KGkuc3RhcnRUYWdFbmQ9dC5nZXRUb2tlbkVuZCgpLGkudGFnJiZTbyhpLnRhZykmJihpLmNsb3NlZD0hMCxpPWkucGFyZW50KSk6aT1pLnBhcmVudCk7YnJlYWs7Y2FzZSBqYS5TdGFydFRhZ1NlbGZDbG9zZTppLnBhcmVudCYmKGkuY2xvc2VkPSEwLGkuZW5kPXQuZ2V0VG9rZW5FbmQoKSxpLnN0YXJ0VGFnRW5kPXQuZ2V0VG9rZW5FbmQoKSxpPWkucGFyZW50KTticmVhaztjYXNlIGphLkVuZFRhZ09wZW46cj10LmdldFRva2VuT2Zmc2V0KCksYT12b2lkIDA7YnJlYWs7Y2FzZSBqYS5FbmRUYWc6YT10LmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSBqYS5FbmRUYWdDbG9zZTpmb3IodmFyIGM9aTshYy5pc1NhbWVUYWcoYSkmJmMucGFyZW50OyljPWMucGFyZW50O2lmKGMucGFyZW50KXtmb3IoO2khPT1jOylpLmVuZD1yLGkuY2xvc2VkPSExLGk9aS5wYXJlbnQ7aS5jbG9zZWQ9ITAsaS5lbmRUYWdTdGFydD1yLGkuZW5kPXQuZ2V0VG9rZW5FbmQoKSxpPWkucGFyZW50fWJyZWFrO2Nhc2UgamEuQXR0cmlidXRlTmFtZTpvPXQuZ2V0VG9rZW5UZXh0KCksKGg9aS5hdHRyaWJ1dGVzKXx8KGkuYXR0cmlidXRlcz1oPXt9KSxoW29dPW51bGw7YnJlYWs7Y2FzZSBqYS5BdHRyaWJ1dGVWYWx1ZTp2YXIgaCxkPXQuZ2V0VG9rZW5UZXh0KCk7KGg9aS5hdHRyaWJ1dGVzKSYmbyYmKGhbb109ZCxvPW51bGwpfXM9dC5zY2FuKCl9Zm9yKDtpLnBhcmVudDspaS5lbmQ9ZS5sZW5ndGgsaS5jbG9zZWQ9ITEsaT1pLnBhcmVudDtyZXR1cm57cm9vdHM6bi5jaGlsZHJlbixmaW5kTm9kZUJlZm9yZTpuLmZpbmROb2RlQmVmb3JlLmJpbmQobiksZmluZE5vZGVBdDpuLmZpbmROb2RlQXQuYmluZChuKX19dmFyIENvPXsiQWFjdXRlOyI6IsOBIixBYWN1dGU6IsOBIiwiYWFjdXRlOyI6IsOhIixhYWN1dGU6IsOhIiwiQWJyZXZlOyI6IsSCIiwiYWJyZXZlOyI6IsSDIiwiYWM7Ijoi4oi+IiwiYWNkOyI6IuKIvyIsImFjRTsiOiLiiL7MsyIsIkFjaXJjOyI6IsOCIixBY2lyYzoiw4IiLCJhY2lyYzsiOiLDoiIsYWNpcmM6IsOiIiwiYWN1dGU7IjoiwrQiLGFjdXRlOiLCtCIsIkFjeTsiOiLQkCIsImFjeTsiOiLQsCIsIkFFbGlnOyI6IsOGIixBRWxpZzoiw4YiLCJhZWxpZzsiOiLDpiIsYWVsaWc6IsOmIiwiYWY7Ijoi4oGhIiwiQWZyOyI6IvCdlIQiLCJhZnI7Ijoi8J2UniIsIkFncmF2ZTsiOiLDgCIsQWdyYXZlOiLDgCIsImFncmF2ZTsiOiLDoCIsYWdyYXZlOiLDoCIsImFsZWZzeW07Ijoi4oS1IiwiYWxlcGg7Ijoi4oS1IiwiQWxwaGE7IjoizpEiLCJhbHBoYTsiOiLOsSIsIkFtYWNyOyI6IsSAIiwiYW1hY3I7IjoixIEiLCJhbWFsZzsiOiLiqL8iLCJBTVA7IjoiJiIsQU1QOiImIiwiYW1wOyI6IiYiLGFtcDoiJiIsIkFuZDsiOiLiqZMiLCJhbmQ7Ijoi4oinIiwiYW5kYW5kOyI6IuKplSIsImFuZGQ7Ijoi4qmcIiwiYW5kc2xvcGU7Ijoi4qmYIiwiYW5kdjsiOiLiqZoiLCJhbmc7Ijoi4oigIiwiYW5nZTsiOiLipqQiLCJhbmdsZTsiOiLiiKAiLCJhbmdtc2Q7Ijoi4oihIiwiYW5nbXNkYWE7Ijoi4qaoIiwiYW5nbXNkYWI7Ijoi4qapIiwiYW5nbXNkYWM7Ijoi4qaqIiwiYW5nbXNkYWQ7Ijoi4qarIiwiYW5nbXNkYWU7Ijoi4qasIiwiYW5nbXNkYWY7Ijoi4qatIiwiYW5nbXNkYWc7Ijoi4qauIiwiYW5nbXNkYWg7Ijoi4qavIiwiYW5ncnQ7Ijoi4oifIiwiYW5ncnR2YjsiOiLiir4iLCJhbmdydHZiZDsiOiLipp0iLCJhbmdzcGg7Ijoi4oiiIiwiYW5nc3Q7Ijoiw4UiLCJhbmd6YXJyOyI6IuKNvCIsIkFvZ29uOyI6IsSEIiwiYW9nb247IjoixIUiLCJBb3BmOyI6IvCdlLgiLCJhb3BmOyI6IvCdlZIiLCJhcDsiOiLiiYgiLCJhcGFjaXI7Ijoi4qmvIiwiYXBFOyI6IuKpsCIsImFwZTsiOiLiiYoiLCJhcGlkOyI6IuKJiyIsImFwb3M7IjoiJyIsIkFwcGx5RnVuY3Rpb247Ijoi4oGhIiwiYXBwcm94OyI6IuKJiCIsImFwcHJveGVxOyI6IuKJiiIsIkFyaW5nOyI6IsOFIixBcmluZzoiw4UiLCJhcmluZzsiOiLDpSIsYXJpbmc6IsOlIiwiQXNjcjsiOiLwnZKcIiwiYXNjcjsiOiLwnZK2IiwiQXNzaWduOyI6IuKJlCIsImFzdDsiOiIqIiwiYXN5bXA7Ijoi4omIIiwiYXN5bXBlcTsiOiLiiY0iLCJBdGlsZGU7Ijoiw4MiLEF0aWxkZToiw4MiLCJhdGlsZGU7Ijoiw6MiLGF0aWxkZToiw6MiLCJBdW1sOyI6IsOEIixBdW1sOiLDhCIsImF1bWw7Ijoiw6QiLGF1bWw6IsOkIiwiYXdjb25pbnQ7Ijoi4oizIiwiYXdpbnQ7Ijoi4qiRIiwiYmFja2Nvbmc7Ijoi4omMIiwiYmFja2Vwc2lsb247Ijoiz7YiLCJiYWNrcHJpbWU7Ijoi4oC1IiwiYmFja3NpbTsiOiLiiL0iLCJiYWNrc2ltZXE7Ijoi4ouNIiwiQmFja3NsYXNoOyI6IuKIliIsIkJhcnY7Ijoi4qunIiwiYmFydmVlOyI6IuKKvSIsIkJhcndlZDsiOiLijIYiLCJiYXJ3ZWQ7Ijoi4oyFIiwiYmFyd2VkZ2U7Ijoi4oyFIiwiYmJyazsiOiLijrUiLCJiYnJrdGJyazsiOiLijrYiLCJiY29uZzsiOiLiiYwiLCJCY3k7Ijoi0JEiLCJiY3k7Ijoi0LEiLCJiZHF1bzsiOiLigJ4iLCJiZWNhdXM7Ijoi4oi1IiwiQmVjYXVzZTsiOiLiiLUiLCJiZWNhdXNlOyI6IuKItSIsImJlbXB0eXY7Ijoi4qawIiwiYmVwc2k7Ijoiz7YiLCJiZXJub3U7Ijoi4oSsIiwiQmVybm91bGxpczsiOiLihKwiLCJCZXRhOyI6Is6SIiwiYmV0YTsiOiLOsiIsImJldGg7Ijoi4oS2IiwiYmV0d2VlbjsiOiLiiawiLCJCZnI7Ijoi8J2UhSIsImJmcjsiOiLwnZSfIiwiYmlnY2FwOyI6IuKLgiIsImJpZ2NpcmM7Ijoi4pevIiwiYmlnY3VwOyI6IuKLgyIsImJpZ29kb3Q7Ijoi4qiAIiwiYmlnb3BsdXM7Ijoi4qiBIiwiYmlnb3RpbWVzOyI6IuKogiIsImJpZ3NxY3VwOyI6IuKohiIsImJpZ3N0YXI7Ijoi4piFIiwiYmlndHJpYW5nbGVkb3duOyI6IuKWvSIsImJpZ3RyaWFuZ2xldXA7Ijoi4pazIiwiYmlndXBsdXM7Ijoi4qiEIiwiYmlndmVlOyI6IuKLgSIsImJpZ3dlZGdlOyI6IuKLgCIsImJrYXJvdzsiOiLipI0iLCJibGFja2xvemVuZ2U7Ijoi4qerIiwiYmxhY2tzcXVhcmU7Ijoi4paqIiwiYmxhY2t0cmlhbmdsZTsiOiLilrQiLCJibGFja3RyaWFuZ2xlZG93bjsiOiLilr4iLCJibGFja3RyaWFuZ2xlbGVmdDsiOiLil4IiLCJibGFja3RyaWFuZ2xlcmlnaHQ7Ijoi4pa4IiwiYmxhbms7Ijoi4pCjIiwiYmxrMTI7Ijoi4paSIiwiYmxrMTQ7Ijoi4paRIiwiYmxrMzQ7Ijoi4paTIiwiYmxvY2s7Ijoi4paIIiwiYm5lOyI6Ij3ig6UiLCJibmVxdWl2OyI6IuKJoeKDpSIsImJOb3Q7Ijoi4qutIiwiYm5vdDsiOiLijJAiLCJCb3BmOyI6IvCdlLkiLCJib3BmOyI6IvCdlZMiLCJib3Q7Ijoi4oqlIiwiYm90dG9tOyI6IuKKpSIsImJvd3RpZTsiOiLii4giLCJib3hib3g7Ijoi4qeJIiwiYm94REw7Ijoi4pWXIiwiYm94RGw7Ijoi4pWWIiwiYm94ZEw7Ijoi4pWVIiwiYm94ZGw7Ijoi4pSQIiwiYm94RFI7Ijoi4pWUIiwiYm94RHI7Ijoi4pWTIiwiYm94ZFI7Ijoi4pWSIiwiYm94ZHI7Ijoi4pSMIiwiYm94SDsiOiLilZAiLCJib3hoOyI6IuKUgCIsImJveEhEOyI6IuKVpiIsImJveEhkOyI6IuKVpCIsImJveGhEOyI6IuKVpSIsImJveGhkOyI6IuKUrCIsImJveEhVOyI6IuKVqSIsImJveEh1OyI6IuKVpyIsImJveGhVOyI6IuKVqCIsImJveGh1OyI6IuKUtCIsImJveG1pbnVzOyI6IuKKnyIsImJveHBsdXM7Ijoi4oqeIiwiYm94dGltZXM7Ijoi4oqgIiwiYm94VUw7Ijoi4pWdIiwiYm94VWw7Ijoi4pWcIiwiYm94dUw7Ijoi4pWbIiwiYm94dWw7Ijoi4pSYIiwiYm94VVI7Ijoi4pWaIiwiYm94VXI7Ijoi4pWZIiwiYm94dVI7Ijoi4pWYIiwiYm94dXI7Ijoi4pSUIiwiYm94VjsiOiLilZEiLCJib3h2OyI6IuKUgiIsImJveFZIOyI6IuKVrCIsImJveFZoOyI6IuKVqyIsImJveHZIOyI6IuKVqiIsImJveHZoOyI6IuKUvCIsImJveFZMOyI6IuKVoyIsImJveFZsOyI6IuKVoiIsImJveHZMOyI6IuKVoSIsImJveHZsOyI6IuKUpCIsImJveFZSOyI6IuKVoCIsImJveFZyOyI6IuKVnyIsImJveHZSOyI6IuKVniIsImJveHZyOyI6IuKUnCIsImJwcmltZTsiOiLigLUiLCJCcmV2ZTsiOiLLmCIsImJyZXZlOyI6IsuYIiwiYnJ2YmFyOyI6IsKmIixicnZiYXI6IsKmIiwiQnNjcjsiOiLihKwiLCJic2NyOyI6IvCdkrciLCJic2VtaTsiOiLigY8iLCJic2ltOyI6IuKIvSIsImJzaW1lOyI6IuKLjSIsImJzb2w7IjoiXFwiLCJic29sYjsiOiLip4UiLCJic29saHN1YjsiOiLin4giLCJidWxsOyI6IuKAoiIsImJ1bGxldDsiOiLigKIiLCJidW1wOyI6IuKJjiIsImJ1bXBFOyI6IuKqriIsImJ1bXBlOyI6IuKJjyIsIkJ1bXBlcTsiOiLiiY4iLCJidW1wZXE7Ijoi4omPIiwiQ2FjdXRlOyI6IsSGIiwiY2FjdXRlOyI6IsSHIiwiQ2FwOyI6IuKLkiIsImNhcDsiOiLiiKkiLCJjYXBhbmQ7Ijoi4qmEIiwiY2FwYnJjdXA7Ijoi4qmJIiwiY2FwY2FwOyI6IuKpiyIsImNhcGN1cDsiOiLiqYciLCJjYXBkb3Q7Ijoi4qmAIiwiQ2FwaXRhbERpZmZlcmVudGlhbEQ7Ijoi4oWFIiwiY2FwczsiOiLiiKnvuIAiLCJjYXJldDsiOiLigYEiLCJjYXJvbjsiOiLLhyIsIkNheWxleXM7Ijoi4oStIiwiY2NhcHM7Ijoi4qmNIiwiQ2Nhcm9uOyI6IsSMIiwiY2Nhcm9uOyI6IsSNIiwiQ2NlZGlsOyI6IsOHIixDY2VkaWw6IsOHIiwiY2NlZGlsOyI6IsOnIixjY2VkaWw6IsOnIiwiQ2NpcmM7IjoixIgiLCJjY2lyYzsiOiLEiSIsIkNjb25pbnQ7Ijoi4oiwIiwiY2N1cHM7Ijoi4qmMIiwiY2N1cHNzbTsiOiLiqZAiLCJDZG90OyI6IsSKIiwiY2RvdDsiOiLEiyIsImNlZGlsOyI6IsK4IixjZWRpbDoiwrgiLCJDZWRpbGxhOyI6IsK4IiwiY2VtcHR5djsiOiLiprIiLCJjZW50OyI6IsKiIixjZW50OiLCoiIsIkNlbnRlckRvdDsiOiLCtyIsImNlbnRlcmRvdDsiOiLCtyIsIkNmcjsiOiLihK0iLCJjZnI7Ijoi8J2UoCIsIkNIY3k7Ijoi0KciLCJjaGN5OyI6ItGHIiwiY2hlY2s7Ijoi4pyTIiwiY2hlY2ttYXJrOyI6IuKckyIsIkNoaTsiOiLOpyIsImNoaTsiOiLPhyIsImNpcjsiOiLil4siLCJjaXJjOyI6IsuGIiwiY2lyY2VxOyI6IuKJlyIsImNpcmNsZWFycm93bGVmdDsiOiLihroiLCJjaXJjbGVhcnJvd3JpZ2h0OyI6IuKGuyIsImNpcmNsZWRhc3Q7Ijoi4oqbIiwiY2lyY2xlZGNpcmM7Ijoi4oqaIiwiY2lyY2xlZGRhc2g7Ijoi4oqdIiwiQ2lyY2xlRG90OyI6IuKKmSIsImNpcmNsZWRSOyI6IsKuIiwiY2lyY2xlZFM7Ijoi4pOIIiwiQ2lyY2xlTWludXM7Ijoi4oqWIiwiQ2lyY2xlUGx1czsiOiLiipUiLCJDaXJjbGVUaW1lczsiOiLiipciLCJjaXJFOyI6IuKngyIsImNpcmU7Ijoi4omXIiwiY2lyZm5pbnQ7Ijoi4qiQIiwiY2lybWlkOyI6IuKrryIsImNpcnNjaXI7Ijoi4qeCIiwiQ2xvY2t3aXNlQ29udG91ckludGVncmFsOyI6IuKIsiIsIkNsb3NlQ3VybHlEb3VibGVRdW90ZTsiOiLigJ0iLCJDbG9zZUN1cmx5UXVvdGU7Ijoi4oCZIiwiY2x1YnM7Ijoi4pmjIiwiY2x1YnN1aXQ7Ijoi4pmjIiwiQ29sb247Ijoi4oi3IiwiY29sb247IjoiOiIsIkNvbG9uZTsiOiLiqbQiLCJjb2xvbmU7Ijoi4omUIiwiY29sb25lcTsiOiLiiZQiLCJjb21tYTsiOiIsIiwiY29tbWF0OyI6IkAiLCJjb21wOyI6IuKIgSIsImNvbXBmbjsiOiLiiJgiLCJjb21wbGVtZW50OyI6IuKIgSIsImNvbXBsZXhlczsiOiLihIIiLCJjb25nOyI6IuKJhSIsImNvbmdkb3Q7Ijoi4qmtIiwiQ29uZ3J1ZW50OyI6IuKJoSIsIkNvbmludDsiOiLiiK8iLCJjb25pbnQ7Ijoi4oiuIiwiQ29udG91ckludGVncmFsOyI6IuKIriIsIkNvcGY7Ijoi4oSCIiwiY29wZjsiOiLwnZWUIiwiY29wcm9kOyI6IuKIkCIsIkNvcHJvZHVjdDsiOiLiiJAiLCJDT1BZOyI6IsKpIixDT1BZOiLCqSIsImNvcHk7IjoiwqkiLGNvcHk6IsKpIiwiY29weXNyOyI6IuKElyIsIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7Ijoi4oizIiwiY3JhcnI7Ijoi4oa1IiwiQ3Jvc3M7Ijoi4qivIiwiY3Jvc3M7Ijoi4pyXIiwiQ3NjcjsiOiLwnZKeIiwiY3NjcjsiOiLwnZK4IiwiY3N1YjsiOiLiq48iLCJjc3ViZTsiOiLiq5EiLCJjc3VwOyI6IuKrkCIsImNzdXBlOyI6IuKrkiIsImN0ZG90OyI6IuKLryIsImN1ZGFycmw7Ijoi4qS4IiwiY3VkYXJycjsiOiLipLUiLCJjdWVwcjsiOiLii54iLCJjdWVzYzsiOiLii58iLCJjdWxhcnI7Ijoi4oa2IiwiY3VsYXJycDsiOiLipL0iLCJDdXA7Ijoi4ouTIiwiY3VwOyI6IuKIqiIsImN1cGJyY2FwOyI6IuKpiCIsIkN1cENhcDsiOiLiiY0iLCJjdXBjYXA7Ijoi4qmGIiwiY3VwY3VwOyI6IuKpiiIsImN1cGRvdDsiOiLiio0iLCJjdXBvcjsiOiLiqYUiLCJjdXBzOyI6IuKIqu+4gCIsImN1cmFycjsiOiLihrciLCJjdXJhcnJtOyI6IuKkvCIsImN1cmx5ZXFwcmVjOyI6IuKLniIsImN1cmx5ZXFzdWNjOyI6IuKLnyIsImN1cmx5dmVlOyI6IuKLjiIsImN1cmx5d2VkZ2U7Ijoi4ouPIiwiY3VycmVuOyI6IsKkIixjdXJyZW46IsKkIiwiY3VydmVhcnJvd2xlZnQ7Ijoi4oa2IiwiY3VydmVhcnJvd3JpZ2h0OyI6IuKGtyIsImN1dmVlOyI6IuKLjiIsImN1d2VkOyI6IuKLjyIsImN3Y29uaW50OyI6IuKIsiIsImN3aW50OyI6IuKIsSIsImN5bGN0eTsiOiLijK0iLCJEYWdnZXI7Ijoi4oChIiwiZGFnZ2VyOyI6IuKAoCIsImRhbGV0aDsiOiLihLgiLCJEYXJyOyI6IuKGoSIsImRBcnI7Ijoi4oeTIiwiZGFycjsiOiLihpMiLCJkYXNoOyI6IuKAkCIsIkRhc2h2OyI6IuKrpCIsImRhc2h2OyI6IuKKoyIsImRia2Fyb3c7Ijoi4qSPIiwiZGJsYWM7Ijoiy50iLCJEY2Fyb247IjoixI4iLCJkY2Fyb247IjoixI8iLCJEY3k7Ijoi0JQiLCJkY3k7Ijoi0LQiLCJERDsiOiLihYUiLCJkZDsiOiLihYYiLCJkZGFnZ2VyOyI6IuKAoSIsImRkYXJyOyI6IuKHiiIsIkREb3RyYWhkOyI6IuKkkSIsImRkb3RzZXE7Ijoi4qm3IiwiZGVnOyI6IsKwIixkZWc6IsKwIiwiRGVsOyI6IuKIhyIsIkRlbHRhOyI6Is6UIiwiZGVsdGE7IjoizrQiLCJkZW1wdHl2OyI6IuKmsSIsImRmaXNodDsiOiLipb8iLCJEZnI7Ijoi8J2UhyIsImRmcjsiOiLwnZShIiwiZEhhcjsiOiLipaUiLCJkaGFybDsiOiLih4MiLCJkaGFycjsiOiLih4IiLCJEaWFjcml0aWNhbEFjdXRlOyI6IsK0IiwiRGlhY3JpdGljYWxEb3Q7Ijoiy5kiLCJEaWFjcml0aWNhbERvdWJsZUFjdXRlOyI6IsudIiwiRGlhY3JpdGljYWxHcmF2ZTsiOiJgIiwiRGlhY3JpdGljYWxUaWxkZTsiOiLLnCIsImRpYW07Ijoi4ouEIiwiRGlhbW9uZDsiOiLii4QiLCJkaWFtb25kOyI6IuKLhCIsImRpYW1vbmRzdWl0OyI6IuKZpiIsImRpYW1zOyI6IuKZpiIsImRpZTsiOiLCqCIsIkRpZmZlcmVudGlhbEQ7Ijoi4oWGIiwiZGlnYW1tYTsiOiLPnSIsImRpc2luOyI6IuKLsiIsImRpdjsiOiLDtyIsImRpdmlkZTsiOiLDtyIsZGl2aWRlOiLDtyIsImRpdmlkZW9udGltZXM7Ijoi4ouHIiwiZGl2b254OyI6IuKLhyIsIkRKY3k7Ijoi0IIiLCJkamN5OyI6ItGSIiwiZGxjb3JuOyI6IuKMniIsImRsY3JvcDsiOiLijI0iLCJkb2xsYXI7IjoiJCIsIkRvcGY7Ijoi8J2UuyIsImRvcGY7Ijoi8J2VlSIsIkRvdDsiOiLCqCIsImRvdDsiOiLLmSIsIkRvdERvdDsiOiLig5wiLCJkb3RlcTsiOiLiiZAiLCJkb3RlcWRvdDsiOiLiiZEiLCJEb3RFcXVhbDsiOiLiiZAiLCJkb3RtaW51czsiOiLiiLgiLCJkb3RwbHVzOyI6IuKIlCIsImRvdHNxdWFyZTsiOiLiiqEiLCJkb3VibGViYXJ3ZWRnZTsiOiLijIYiLCJEb3VibGVDb250b3VySW50ZWdyYWw7Ijoi4oivIiwiRG91YmxlRG90OyI6IsKoIiwiRG91YmxlRG93bkFycm93OyI6IuKHkyIsIkRvdWJsZUxlZnRBcnJvdzsiOiLih5AiLCJEb3VibGVMZWZ0UmlnaHRBcnJvdzsiOiLih5QiLCJEb3VibGVMZWZ0VGVlOyI6IuKrpCIsIkRvdWJsZUxvbmdMZWZ0QXJyb3c7Ijoi4p+4IiwiRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OyI6IuKfuiIsIkRvdWJsZUxvbmdSaWdodEFycm93OyI6IuKfuSIsIkRvdWJsZVJpZ2h0QXJyb3c7Ijoi4oeSIiwiRG91YmxlUmlnaHRUZWU7Ijoi4oqoIiwiRG91YmxlVXBBcnJvdzsiOiLih5EiLCJEb3VibGVVcERvd25BcnJvdzsiOiLih5UiLCJEb3VibGVWZXJ0aWNhbEJhcjsiOiLiiKUiLCJEb3duQXJyb3c7Ijoi4oaTIiwiRG93bmFycm93OyI6IuKHkyIsImRvd25hcnJvdzsiOiLihpMiLCJEb3duQXJyb3dCYXI7Ijoi4qSTIiwiRG93bkFycm93VXBBcnJvdzsiOiLih7UiLCJEb3duQnJldmU7IjoizJEiLCJkb3duZG93bmFycm93czsiOiLih4oiLCJkb3duaGFycG9vbmxlZnQ7Ijoi4oeDIiwiZG93bmhhcnBvb25yaWdodDsiOiLih4IiLCJEb3duTGVmdFJpZ2h0VmVjdG9yOyI6IuKlkCIsIkRvd25MZWZ0VGVlVmVjdG9yOyI6IuKlniIsIkRvd25MZWZ0VmVjdG9yOyI6IuKGvSIsIkRvd25MZWZ0VmVjdG9yQmFyOyI6IuKlliIsIkRvd25SaWdodFRlZVZlY3RvcjsiOiLipZ8iLCJEb3duUmlnaHRWZWN0b3I7Ijoi4oeBIiwiRG93blJpZ2h0VmVjdG9yQmFyOyI6IuKllyIsIkRvd25UZWU7Ijoi4oqkIiwiRG93blRlZUFycm93OyI6IuKGpyIsImRyYmthcm93OyI6IuKkkCIsImRyY29ybjsiOiLijJ8iLCJkcmNyb3A7Ijoi4oyMIiwiRHNjcjsiOiLwnZKfIiwiZHNjcjsiOiLwnZK5IiwiRFNjeTsiOiLQhSIsImRzY3k7Ijoi0ZUiLCJkc29sOyI6IuKntiIsIkRzdHJvazsiOiLEkCIsImRzdHJvazsiOiLEkSIsImR0ZG90OyI6IuKLsSIsImR0cmk7Ijoi4pa/IiwiZHRyaWY7Ijoi4pa+IiwiZHVhcnI7Ijoi4oe1IiwiZHVoYXI7Ijoi4qWvIiwiZHdhbmdsZTsiOiLipqYiLCJEWmN5OyI6ItCPIiwiZHpjeTsiOiLRnyIsImR6aWdyYXJyOyI6IuKfvyIsIkVhY3V0ZTsiOiLDiSIsRWFjdXRlOiLDiSIsImVhY3V0ZTsiOiLDqSIsZWFjdXRlOiLDqSIsImVhc3RlcjsiOiLiqa4iLCJFY2Fyb247IjoixJoiLCJlY2Fyb247IjoixJsiLCJlY2lyOyI6IuKJliIsIkVjaXJjOyI6IsOKIixFY2lyYzoiw4oiLCJlY2lyYzsiOiLDqiIsZWNpcmM6IsOqIiwiZWNvbG9uOyI6IuKJlSIsIkVjeTsiOiLQrSIsImVjeTsiOiLRjSIsImVERG90OyI6IuKptyIsIkVkb3Q7IjoixJYiLCJlRG90OyI6IuKJkSIsImVkb3Q7IjoixJciLCJlZTsiOiLihYciLCJlZkRvdDsiOiLiiZIiLCJFZnI7Ijoi8J2UiCIsImVmcjsiOiLwnZSiIiwiZWc7Ijoi4qqaIiwiRWdyYXZlOyI6IsOIIixFZ3JhdmU6IsOIIiwiZWdyYXZlOyI6IsOoIixlZ3JhdmU6IsOoIiwiZWdzOyI6IuKqliIsImVnc2RvdDsiOiLiqpgiLCJlbDsiOiLiqpkiLCJFbGVtZW50OyI6IuKIiCIsImVsaW50ZXJzOyI6IuKPpyIsImVsbDsiOiLihJMiLCJlbHM7Ijoi4qqVIiwiZWxzZG90OyI6IuKqlyIsIkVtYWNyOyI6IsSSIiwiZW1hY3I7IjoixJMiLCJlbXB0eTsiOiLiiIUiLCJlbXB0eXNldDsiOiLiiIUiLCJFbXB0eVNtYWxsU3F1YXJlOyI6IuKXuyIsImVtcHR5djsiOiLiiIUiLCJFbXB0eVZlcnlTbWFsbFNxdWFyZTsiOiLilqsiLCJlbXNwOyI6IuKAgyIsImVtc3AxMzsiOiLigIQiLCJlbXNwMTQ7Ijoi4oCFIiwiRU5HOyI6IsWKIiwiZW5nOyI6IsWLIiwiZW5zcDsiOiLigIIiLCJFb2dvbjsiOiLEmCIsImVvZ29uOyI6IsSZIiwiRW9wZjsiOiLwnZS8IiwiZW9wZjsiOiLwnZWWIiwiZXBhcjsiOiLii5UiLCJlcGFyc2w7Ijoi4qejIiwiZXBsdXM7Ijoi4qmxIiwiZXBzaTsiOiLOtSIsIkVwc2lsb247IjoizpUiLCJlcHNpbG9uOyI6Is61IiwiZXBzaXY7Ijoiz7UiLCJlcWNpcmM7Ijoi4omWIiwiZXFjb2xvbjsiOiLiiZUiLCJlcXNpbTsiOiLiiYIiLCJlcXNsYW50Z3RyOyI6IuKqliIsImVxc2xhbnRsZXNzOyI6IuKqlSIsIkVxdWFsOyI6IuKptSIsImVxdWFsczsiOiI9IiwiRXF1YWxUaWxkZTsiOiLiiYIiLCJlcXVlc3Q7Ijoi4omfIiwiRXF1aWxpYnJpdW07Ijoi4oeMIiwiZXF1aXY7Ijoi4omhIiwiZXF1aXZERDsiOiLiqbgiLCJlcXZwYXJzbDsiOiLip6UiLCJlcmFycjsiOiLipbEiLCJlckRvdDsiOiLiiZMiLCJFc2NyOyI6IuKEsCIsImVzY3I7Ijoi4oSvIiwiZXNkb3Q7Ijoi4omQIiwiRXNpbTsiOiLiqbMiLCJlc2ltOyI6IuKJgiIsIkV0YTsiOiLOlyIsImV0YTsiOiLOtyIsIkVUSDsiOiLDkCIsRVRIOiLDkCIsImV0aDsiOiLDsCIsZXRoOiLDsCIsIkV1bWw7Ijoiw4siLEV1bWw6IsOLIiwiZXVtbDsiOiLDqyIsZXVtbDoiw6siLCJldXJvOyI6IuKCrCIsImV4Y2w7IjoiISIsImV4aXN0OyI6IuKIgyIsIkV4aXN0czsiOiLiiIMiLCJleHBlY3RhdGlvbjsiOiLihLAiLCJFeHBvbmVudGlhbEU7Ijoi4oWHIiwiZXhwb25lbnRpYWxlOyI6IuKFhyIsImZhbGxpbmdkb3RzZXE7Ijoi4omSIiwiRmN5OyI6ItCkIiwiZmN5OyI6ItGEIiwiZmVtYWxlOyI6IuKZgCIsImZmaWxpZzsiOiLvrIMiLCJmZmxpZzsiOiLvrIAiLCJmZmxsaWc7Ijoi76yEIiwiRmZyOyI6IvCdlIkiLCJmZnI7Ijoi8J2UoyIsImZpbGlnOyI6Iu+sgSIsIkZpbGxlZFNtYWxsU3F1YXJlOyI6IuKXvCIsIkZpbGxlZFZlcnlTbWFsbFNxdWFyZTsiOiLilqoiLCJmamxpZzsiOiJmaiIsImZsYXQ7Ijoi4pmtIiwiZmxsaWc7Ijoi76yCIiwiZmx0bnM7Ijoi4paxIiwiZm5vZjsiOiLGkiIsIkZvcGY7Ijoi8J2UvSIsImZvcGY7Ijoi8J2VlyIsIkZvckFsbDsiOiLiiIAiLCJmb3JhbGw7Ijoi4oiAIiwiZm9yazsiOiLii5QiLCJmb3JrdjsiOiLiq5kiLCJGb3VyaWVydHJmOyI6IuKEsSIsImZwYXJ0aW50OyI6IuKojSIsImZyYWMxMjsiOiLCvSIsZnJhYzEyOiLCvSIsImZyYWMxMzsiOiLihZMiLCJmcmFjMTQ7IjoiwrwiLGZyYWMxNDoiwrwiLCJmcmFjMTU7Ijoi4oWVIiwiZnJhYzE2OyI6IuKFmSIsImZyYWMxODsiOiLihZsiLCJmcmFjMjM7Ijoi4oWUIiwiZnJhYzI1OyI6IuKFliIsImZyYWMzNDsiOiLCviIsZnJhYzM0OiLCviIsImZyYWMzNTsiOiLihZciLCJmcmFjMzg7Ijoi4oWcIiwiZnJhYzQ1OyI6IuKFmCIsImZyYWM1NjsiOiLihZoiLCJmcmFjNTg7Ijoi4oWdIiwiZnJhYzc4OyI6IuKFniIsImZyYXNsOyI6IuKBhCIsImZyb3duOyI6IuKMoiIsIkZzY3I7Ijoi4oSxIiwiZnNjcjsiOiLwnZK7IiwiZ2FjdXRlOyI6Ise1IiwiR2FtbWE7IjoizpMiLCJnYW1tYTsiOiLOsyIsIkdhbW1hZDsiOiLPnCIsImdhbW1hZDsiOiLPnSIsImdhcDsiOiLiqoYiLCJHYnJldmU7IjoixJ4iLCJnYnJldmU7IjoixJ8iLCJHY2VkaWw7IjoixKIiLCJHY2lyYzsiOiLEnCIsImdjaXJjOyI6IsSdIiwiR2N5OyI6ItCTIiwiZ2N5OyI6ItCzIiwiR2RvdDsiOiLEoCIsImdkb3Q7IjoixKEiLCJnRTsiOiLiiaciLCJnZTsiOiLiiaUiLCJnRWw7Ijoi4qqMIiwiZ2VsOyI6IuKLmyIsImdlcTsiOiLiiaUiLCJnZXFxOyI6IuKJpyIsImdlcXNsYW50OyI6IuKpviIsImdlczsiOiLiqb4iLCJnZXNjYzsiOiLiqqkiLCJnZXNkb3Q7Ijoi4qqAIiwiZ2VzZG90bzsiOiLiqoIiLCJnZXNkb3RvbDsiOiLiqoQiLCJnZXNsOyI6IuKLm++4gCIsImdlc2xlczsiOiLiqpQiLCJHZnI7Ijoi8J2UiiIsImdmcjsiOiLwnZSkIiwiR2c7Ijoi4ouZIiwiZ2c7Ijoi4omrIiwiZ2dnOyI6IuKLmSIsImdpbWVsOyI6IuKEtyIsIkdKY3k7Ijoi0IMiLCJnamN5OyI6ItGTIiwiZ2w7Ijoi4om3IiwiZ2xhOyI6IuKqpSIsImdsRTsiOiLiqpIiLCJnbGo7Ijoi4qqkIiwiZ25hcDsiOiLiqooiLCJnbmFwcHJveDsiOiLiqooiLCJnbkU7Ijoi4ompIiwiZ25lOyI6IuKqiCIsImduZXE7Ijoi4qqIIiwiZ25lcXE7Ijoi4ompIiwiZ25zaW07Ijoi4ounIiwiR29wZjsiOiLwnZS+IiwiZ29wZjsiOiLwnZWYIiwiZ3JhdmU7IjoiYCIsIkdyZWF0ZXJFcXVhbDsiOiLiiaUiLCJHcmVhdGVyRXF1YWxMZXNzOyI6IuKLmyIsIkdyZWF0ZXJGdWxsRXF1YWw7Ijoi4omnIiwiR3JlYXRlckdyZWF0ZXI7Ijoi4qqiIiwiR3JlYXRlckxlc3M7Ijoi4om3IiwiR3JlYXRlclNsYW50RXF1YWw7Ijoi4qm+IiwiR3JlYXRlclRpbGRlOyI6IuKJsyIsIkdzY3I7Ijoi8J2SoiIsImdzY3I7Ijoi4oSKIiwiZ3NpbTsiOiLiibMiLCJnc2ltZTsiOiLiqo4iLCJnc2ltbDsiOiLiqpAiLCJHVDsiOiI+IixHVDoiPiIsIkd0OyI6IuKJqyIsImd0OyI6Ij4iLGd0OiI+IiwiZ3RjYzsiOiLiqqciLCJndGNpcjsiOiLiqboiLCJndGRvdDsiOiLii5ciLCJndGxQYXI7Ijoi4qaVIiwiZ3RxdWVzdDsiOiLiqbwiLCJndHJhcHByb3g7Ijoi4qqGIiwiZ3RyYXJyOyI6IuKluCIsImd0cmRvdDsiOiLii5ciLCJndHJlcWxlc3M7Ijoi4oubIiwiZ3RyZXFxbGVzczsiOiLiqowiLCJndHJsZXNzOyI6IuKJtyIsImd0cnNpbTsiOiLiibMiLCJndmVydG5lcXE7Ijoi4omp77iAIiwiZ3ZuRTsiOiLiianvuIAiLCJIYWNlazsiOiLLhyIsImhhaXJzcDsiOiLigIoiLCJoYWxmOyI6IsK9IiwiaGFtaWx0OyI6IuKEiyIsIkhBUkRjeTsiOiLQqiIsImhhcmRjeTsiOiLRiiIsImhBcnI7Ijoi4oeUIiwiaGFycjsiOiLihpQiLCJoYXJyY2lyOyI6IuKliCIsImhhcnJ3OyI6IuKGrSIsIkhhdDsiOiJeIiwiaGJhcjsiOiLihI8iLCJIY2lyYzsiOiLEpCIsImhjaXJjOyI6IsSlIiwiaGVhcnRzOyI6IuKZpSIsImhlYXJ0c3VpdDsiOiLimaUiLCJoZWxsaXA7Ijoi4oCmIiwiaGVyY29uOyI6IuKKuSIsIkhmcjsiOiLihIwiLCJoZnI7Ijoi8J2UpSIsIkhpbGJlcnRTcGFjZTsiOiLihIsiLCJoa3NlYXJvdzsiOiLipKUiLCJoa3N3YXJvdzsiOiLipKYiLCJob2FycjsiOiLih78iLCJob210aHQ7Ijoi4oi7IiwiaG9va2xlZnRhcnJvdzsiOiLihqkiLCJob29rcmlnaHRhcnJvdzsiOiLihqoiLCJIb3BmOyI6IuKEjSIsImhvcGY7Ijoi8J2VmSIsImhvcmJhcjsiOiLigJUiLCJIb3Jpem9udGFsTGluZTsiOiLilIAiLCJIc2NyOyI6IuKEiyIsImhzY3I7Ijoi8J2SvSIsImhzbGFzaDsiOiLihI8iLCJIc3Ryb2s7IjoixKYiLCJoc3Ryb2s7IjoixKciLCJIdW1wRG93bkh1bXA7Ijoi4omOIiwiSHVtcEVxdWFsOyI6IuKJjyIsImh5YnVsbDsiOiLigYMiLCJoeXBoZW47Ijoi4oCQIiwiSWFjdXRlOyI6IsONIixJYWN1dGU6IsONIiwiaWFjdXRlOyI6IsOtIixpYWN1dGU6IsOtIiwiaWM7Ijoi4oGjIiwiSWNpcmM7Ijoiw44iLEljaXJjOiLDjiIsImljaXJjOyI6IsOuIixpY2lyYzoiw64iLCJJY3k7Ijoi0JgiLCJpY3k7Ijoi0LgiLCJJZG90OyI6IsSwIiwiSUVjeTsiOiLQlSIsImllY3k7Ijoi0LUiLCJpZXhjbDsiOiLCoSIsaWV4Y2w6IsKhIiwiaWZmOyI6IuKHlCIsIklmcjsiOiLihJEiLCJpZnI7Ijoi8J2UpiIsIklncmF2ZTsiOiLDjCIsSWdyYXZlOiLDjCIsImlncmF2ZTsiOiLDrCIsaWdyYXZlOiLDrCIsImlpOyI6IuKFiCIsImlpaWludDsiOiLiqIwiLCJpaWludDsiOiLiiK0iLCJpaW5maW47Ijoi4qecIiwiaWlvdGE7Ijoi4oSpIiwiSUpsaWc7IjoixLIiLCJpamxpZzsiOiLEsyIsIkltOyI6IuKEkSIsIkltYWNyOyI6IsSqIiwiaW1hY3I7IjoixKsiLCJpbWFnZTsiOiLihJEiLCJJbWFnaW5hcnlJOyI6IuKFiCIsImltYWdsaW5lOyI6IuKEkCIsImltYWdwYXJ0OyI6IuKEkSIsImltYXRoOyI6IsSxIiwiaW1vZjsiOiLiirciLCJpbXBlZDsiOiLGtSIsIkltcGxpZXM7Ijoi4oeSIiwiaW47Ijoi4oiIIiwiaW5jYXJlOyI6IuKEhSIsImluZmluOyI6IuKIniIsImluZmludGllOyI6IuKnnSIsImlub2RvdDsiOiLEsSIsIkludDsiOiLiiKwiLCJpbnQ7Ijoi4oirIiwiaW50Y2FsOyI6IuKKuiIsImludGVnZXJzOyI6IuKEpCIsIkludGVncmFsOyI6IuKIqyIsImludGVyY2FsOyI6IuKKuiIsIkludGVyc2VjdGlvbjsiOiLii4IiLCJpbnRsYXJoazsiOiLiqJciLCJpbnRwcm9kOyI6IuKovCIsIkludmlzaWJsZUNvbW1hOyI6IuKBoyIsIkludmlzaWJsZVRpbWVzOyI6IuKBoiIsIklPY3k7Ijoi0IEiLCJpb2N5OyI6ItGRIiwiSW9nb247IjoixK4iLCJpb2dvbjsiOiLEryIsIklvcGY7Ijoi8J2VgCIsImlvcGY7Ijoi8J2VmiIsIklvdGE7IjoizpkiLCJpb3RhOyI6Is65IiwiaXByb2Q7Ijoi4qi8IiwiaXF1ZXN0OyI6IsK/IixpcXVlc3Q6IsK/IiwiSXNjcjsiOiLihJAiLCJpc2NyOyI6IvCdkr4iLCJpc2luOyI6IuKIiCIsImlzaW5kb3Q7Ijoi4ou1IiwiaXNpbkU7Ijoi4ou5IiwiaXNpbnM7Ijoi4ou0IiwiaXNpbnN2OyI6IuKLsyIsImlzaW52OyI6IuKIiCIsIml0OyI6IuKBoiIsIkl0aWxkZTsiOiLEqCIsIml0aWxkZTsiOiLEqSIsIkl1a2N5OyI6ItCGIiwiaXVrY3k7Ijoi0ZYiLCJJdW1sOyI6IsOPIixJdW1sOiLDjyIsIml1bWw7Ijoiw68iLGl1bWw6IsOvIiwiSmNpcmM7IjoixLQiLCJqY2lyYzsiOiLEtSIsIkpjeTsiOiLQmSIsImpjeTsiOiLQuSIsIkpmcjsiOiLwnZSNIiwiamZyOyI6IvCdlKciLCJqbWF0aDsiOiLItyIsIkpvcGY7Ijoi8J2VgSIsImpvcGY7Ijoi8J2VmyIsIkpzY3I7Ijoi8J2SpSIsImpzY3I7Ijoi8J2SvyIsIkpzZXJjeTsiOiLQiCIsImpzZXJjeTsiOiLRmCIsIkp1a2N5OyI6ItCEIiwianVrY3k7Ijoi0ZQiLCJLYXBwYTsiOiLOmiIsImthcHBhOyI6Is66Iiwia2FwcGF2OyI6Is+wIiwiS2NlZGlsOyI6IsS2Iiwia2NlZGlsOyI6IsS3IiwiS2N5OyI6ItCaIiwia2N5OyI6ItC6IiwiS2ZyOyI6IvCdlI4iLCJrZnI7Ijoi8J2UqCIsImtncmVlbjsiOiLEuCIsIktIY3k7Ijoi0KUiLCJraGN5OyI6ItGFIiwiS0pjeTsiOiLQjCIsImtqY3k7Ijoi0ZwiLCJLb3BmOyI6IvCdlYIiLCJrb3BmOyI6IvCdlZwiLCJLc2NyOyI6IvCdkqYiLCJrc2NyOyI6IvCdk4AiLCJsQWFycjsiOiLih5oiLCJMYWN1dGU7IjoixLkiLCJsYWN1dGU7IjoixLoiLCJsYWVtcHR5djsiOiLiprQiLCJsYWdyYW47Ijoi4oSSIiwiTGFtYmRhOyI6Is6bIiwibGFtYmRhOyI6Is67IiwiTGFuZzsiOiLin6oiLCJsYW5nOyI6IuKfqCIsImxhbmdkOyI6IuKmkSIsImxhbmdsZTsiOiLin6giLCJsYXA7Ijoi4qqFIiwiTGFwbGFjZXRyZjsiOiLihJIiLCJsYXF1bzsiOiLCqyIsbGFxdW86IsKrIiwiTGFycjsiOiLihp4iLCJsQXJyOyI6IuKHkCIsImxhcnI7Ijoi4oaQIiwibGFycmI7Ijoi4oekIiwibGFycmJmczsiOiLipJ8iLCJsYXJyZnM7Ijoi4qSdIiwibGFycmhrOyI6IuKGqSIsImxhcnJscDsiOiLihqsiLCJsYXJycGw7Ijoi4qS5IiwibGFycnNpbTsiOiLipbMiLCJsYXJydGw7Ijoi4oaiIiwibGF0OyI6IuKqqyIsImxBdGFpbDsiOiLipJsiLCJsYXRhaWw7Ijoi4qSZIiwibGF0ZTsiOiLiqq0iLCJsYXRlczsiOiLiqq3vuIAiLCJsQmFycjsiOiLipI4iLCJsYmFycjsiOiLipIwiLCJsYmJyazsiOiLinbIiLCJsYnJhY2U7IjoieyIsImxicmFjazsiOiJbIiwibGJya2U7Ijoi4qaLIiwibGJya3NsZDsiOiLipo8iLCJsYnJrc2x1OyI6IuKmjSIsIkxjYXJvbjsiOiLEvSIsImxjYXJvbjsiOiLEviIsIkxjZWRpbDsiOiLEuyIsImxjZWRpbDsiOiLEvCIsImxjZWlsOyI6IuKMiCIsImxjdWI7IjoieyIsIkxjeTsiOiLQmyIsImxjeTsiOiLQuyIsImxkY2E7Ijoi4qS2IiwibGRxdW87Ijoi4oCcIiwibGRxdW9yOyI6IuKAniIsImxkcmRoYXI7Ijoi4qWnIiwibGRydXNoYXI7Ijoi4qWLIiwibGRzaDsiOiLihrIiLCJsRTsiOiLiiaYiLCJsZTsiOiLiiaQiLCJMZWZ0QW5nbGVCcmFja2V0OyI6IuKfqCIsIkxlZnRBcnJvdzsiOiLihpAiLCJMZWZ0YXJyb3c7Ijoi4oeQIiwibGVmdGFycm93OyI6IuKGkCIsIkxlZnRBcnJvd0JhcjsiOiLih6QiLCJMZWZ0QXJyb3dSaWdodEFycm93OyI6IuKHhiIsImxlZnRhcnJvd3RhaWw7Ijoi4oaiIiwiTGVmdENlaWxpbmc7Ijoi4oyIIiwiTGVmdERvdWJsZUJyYWNrZXQ7Ijoi4p+mIiwiTGVmdERvd25UZWVWZWN0b3I7Ijoi4qWhIiwiTGVmdERvd25WZWN0b3I7Ijoi4oeDIiwiTGVmdERvd25WZWN0b3JCYXI7Ijoi4qWZIiwiTGVmdEZsb29yOyI6IuKMiiIsImxlZnRoYXJwb29uZG93bjsiOiLihr0iLCJsZWZ0aGFycG9vbnVwOyI6IuKGvCIsImxlZnRsZWZ0YXJyb3dzOyI6IuKHhyIsIkxlZnRSaWdodEFycm93OyI6IuKGlCIsIkxlZnRyaWdodGFycm93OyI6IuKHlCIsImxlZnRyaWdodGFycm93OyI6IuKGlCIsImxlZnRyaWdodGFycm93czsiOiLih4YiLCJsZWZ0cmlnaHRoYXJwb29uczsiOiLih4siLCJsZWZ0cmlnaHRzcXVpZ2Fycm93OyI6IuKGrSIsIkxlZnRSaWdodFZlY3RvcjsiOiLipY4iLCJMZWZ0VGVlOyI6IuKKoyIsIkxlZnRUZWVBcnJvdzsiOiLihqQiLCJMZWZ0VGVlVmVjdG9yOyI6IuKlmiIsImxlZnR0aHJlZXRpbWVzOyI6IuKLiyIsIkxlZnRUcmlhbmdsZTsiOiLiirIiLCJMZWZ0VHJpYW5nbGVCYXI7Ijoi4qePIiwiTGVmdFRyaWFuZ2xlRXF1YWw7Ijoi4oq0IiwiTGVmdFVwRG93blZlY3RvcjsiOiLipZEiLCJMZWZ0VXBUZWVWZWN0b3I7Ijoi4qWgIiwiTGVmdFVwVmVjdG9yOyI6IuKGvyIsIkxlZnRVcFZlY3RvckJhcjsiOiLipZgiLCJMZWZ0VmVjdG9yOyI6IuKGvCIsIkxlZnRWZWN0b3JCYXI7Ijoi4qWSIiwibEVnOyI6IuKqiyIsImxlZzsiOiLii5oiLCJsZXE7Ijoi4omkIiwibGVxcTsiOiLiiaYiLCJsZXFzbGFudDsiOiLiqb0iLCJsZXM7Ijoi4qm9IiwibGVzY2M7Ijoi4qqoIiwibGVzZG90OyI6IuKpvyIsImxlc2RvdG87Ijoi4qqBIiwibGVzZG90b3I7Ijoi4qqDIiwibGVzZzsiOiLii5rvuIAiLCJsZXNnZXM7Ijoi4qqTIiwibGVzc2FwcHJveDsiOiLiqoUiLCJsZXNzZG90OyI6IuKLliIsImxlc3NlcWd0cjsiOiLii5oiLCJsZXNzZXFxZ3RyOyI6IuKqiyIsIkxlc3NFcXVhbEdyZWF0ZXI7Ijoi4ouaIiwiTGVzc0Z1bGxFcXVhbDsiOiLiiaYiLCJMZXNzR3JlYXRlcjsiOiLiibYiLCJsZXNzZ3RyOyI6IuKJtiIsIkxlc3NMZXNzOyI6IuKqoSIsImxlc3NzaW07Ijoi4omyIiwiTGVzc1NsYW50RXF1YWw7Ijoi4qm9IiwiTGVzc1RpbGRlOyI6IuKJsiIsImxmaXNodDsiOiLipbwiLCJsZmxvb3I7Ijoi4oyKIiwiTGZyOyI6IvCdlI8iLCJsZnI7Ijoi8J2UqSIsImxnOyI6IuKJtiIsImxnRTsiOiLiqpEiLCJsSGFyOyI6IuKloiIsImxoYXJkOyI6IuKGvSIsImxoYXJ1OyI6IuKGvCIsImxoYXJ1bDsiOiLipaoiLCJsaGJsazsiOiLiloQiLCJMSmN5OyI6ItCJIiwibGpjeTsiOiLRmSIsIkxsOyI6IuKLmCIsImxsOyI6IuKJqiIsImxsYXJyOyI6IuKHhyIsImxsY29ybmVyOyI6IuKMniIsIkxsZWZ0YXJyb3c7Ijoi4oeaIiwibGxoYXJkOyI6IuKlqyIsImxsdHJpOyI6IuKXuiIsIkxtaWRvdDsiOiLEvyIsImxtaWRvdDsiOiLFgCIsImxtb3VzdDsiOiLijrAiLCJsbW91c3RhY2hlOyI6IuKOsCIsImxuYXA7Ijoi4qqJIiwibG5hcHByb3g7Ijoi4qqJIiwibG5FOyI6IuKJqCIsImxuZTsiOiLiqociLCJsbmVxOyI6IuKqhyIsImxuZXFxOyI6IuKJqCIsImxuc2ltOyI6IuKLpiIsImxvYW5nOyI6IuKfrCIsImxvYXJyOyI6IuKHvSIsImxvYnJrOyI6IuKfpiIsIkxvbmdMZWZ0QXJyb3c7Ijoi4p+1IiwiTG9uZ2xlZnRhcnJvdzsiOiLin7giLCJsb25nbGVmdGFycm93OyI6IuKftSIsIkxvbmdMZWZ0UmlnaHRBcnJvdzsiOiLin7ciLCJMb25nbGVmdHJpZ2h0YXJyb3c7Ijoi4p+6IiwibG9uZ2xlZnRyaWdodGFycm93OyI6IuKftyIsImxvbmdtYXBzdG87Ijoi4p+8IiwiTG9uZ1JpZ2h0QXJyb3c7Ijoi4p+2IiwiTG9uZ3JpZ2h0YXJyb3c7Ijoi4p+5IiwibG9uZ3JpZ2h0YXJyb3c7Ijoi4p+2IiwibG9vcGFycm93bGVmdDsiOiLihqsiLCJsb29wYXJyb3dyaWdodDsiOiLihqwiLCJsb3BhcjsiOiLipoUiLCJMb3BmOyI6IvCdlYMiLCJsb3BmOyI6IvCdlZ0iLCJsb3BsdXM7Ijoi4qitIiwibG90aW1lczsiOiLiqLQiLCJsb3dhc3Q7Ijoi4oiXIiwibG93YmFyOyI6Il8iLCJMb3dlckxlZnRBcnJvdzsiOiLihpkiLCJMb3dlclJpZ2h0QXJyb3c7Ijoi4oaYIiwibG96OyI6IuKXiiIsImxvemVuZ2U7Ijoi4peKIiwibG96ZjsiOiLip6siLCJscGFyOyI6IigiLCJscGFybHQ7Ijoi4qaTIiwibHJhcnI7Ijoi4oeGIiwibHJjb3JuZXI7Ijoi4oyfIiwibHJoYXI7Ijoi4oeLIiwibHJoYXJkOyI6IuKlrSIsImxybTsiOiLigI4iLCJscnRyaTsiOiLiir8iLCJsc2FxdW87Ijoi4oC5IiwiTHNjcjsiOiLihJIiLCJsc2NyOyI6IvCdk4EiLCJMc2g7Ijoi4oawIiwibHNoOyI6IuKGsCIsImxzaW07Ijoi4omyIiwibHNpbWU7Ijoi4qqNIiwibHNpbWc7Ijoi4qqPIiwibHNxYjsiOiJbIiwibHNxdW87Ijoi4oCYIiwibHNxdW9yOyI6IuKAmiIsIkxzdHJvazsiOiLFgSIsImxzdHJvazsiOiLFgiIsIkxUOyI6IjwiLExUOiI8IiwiTHQ7Ijoi4omqIiwibHQ7IjoiPCIsbHQ6IjwiLCJsdGNjOyI6IuKqpiIsImx0Y2lyOyI6IuKpuSIsImx0ZG90OyI6IuKLliIsImx0aHJlZTsiOiLii4siLCJsdGltZXM7Ijoi4ouJIiwibHRsYXJyOyI6IuKltiIsImx0cXVlc3Q7Ijoi4qm7IiwibHRyaTsiOiLil4MiLCJsdHJpZTsiOiLiirQiLCJsdHJpZjsiOiLil4IiLCJsdHJQYXI7Ijoi4qaWIiwibHVyZHNoYXI7Ijoi4qWKIiwibHVydWhhcjsiOiLipaYiLCJsdmVydG5lcXE7Ijoi4omo77iAIiwibHZuRTsiOiLiiajvuIAiLCJtYWNyOyI6IsKvIixtYWNyOiLCryIsIm1hbGU7Ijoi4pmCIiwibWFsdDsiOiLinKAiLCJtYWx0ZXNlOyI6IuKcoCIsIk1hcDsiOiLipIUiLCJtYXA7Ijoi4oamIiwibWFwc3RvOyI6IuKGpiIsIm1hcHN0b2Rvd247Ijoi4oanIiwibWFwc3RvbGVmdDsiOiLihqQiLCJtYXBzdG91cDsiOiLihqUiLCJtYXJrZXI7Ijoi4pauIiwibWNvbW1hOyI6IuKoqSIsIk1jeTsiOiLQnCIsIm1jeTsiOiLQvCIsIm1kYXNoOyI6IuKAlCIsIm1ERG90OyI6IuKIuiIsIm1lYXN1cmVkYW5nbGU7Ijoi4oihIiwiTWVkaXVtU3BhY2U7Ijoi4oGfIiwiTWVsbGludHJmOyI6IuKEsyIsIk1mcjsiOiLwnZSQIiwibWZyOyI6IvCdlKoiLCJtaG87Ijoi4oSnIiwibWljcm87IjoiwrUiLG1pY3JvOiLCtSIsIm1pZDsiOiLiiKMiLCJtaWRhc3Q7IjoiKiIsIm1pZGNpcjsiOiLiq7AiLCJtaWRkb3Q7IjoiwrciLG1pZGRvdDoiwrciLCJtaW51czsiOiLiiJIiLCJtaW51c2I7Ijoi4oqfIiwibWludXNkOyI6IuKIuCIsIm1pbnVzZHU7Ijoi4qiqIiwiTWludXNQbHVzOyI6IuKIkyIsIm1sY3A7Ijoi4qubIiwibWxkcjsiOiLigKYiLCJtbnBsdXM7Ijoi4oiTIiwibW9kZWxzOyI6IuKKpyIsIk1vcGY7Ijoi8J2VhCIsIm1vcGY7Ijoi8J2VniIsIm1wOyI6IuKIkyIsIk1zY3I7Ijoi4oSzIiwibXNjcjsiOiLwnZOCIiwibXN0cG9zOyI6IuKIviIsIk11OyI6Is6cIiwibXU7IjoizrwiLCJtdWx0aW1hcDsiOiLiirgiLCJtdW1hcDsiOiLiirgiLCJuYWJsYTsiOiLiiIciLCJOYWN1dGU7IjoixYMiLCJuYWN1dGU7IjoixYQiLCJuYW5nOyI6IuKIoOKDkiIsIm5hcDsiOiLiiYkiLCJuYXBFOyI6IuKpsMy4IiwibmFwaWQ7Ijoi4omLzLgiLCJuYXBvczsiOiLFiSIsIm5hcHByb3g7Ijoi4omJIiwibmF0dXI7Ijoi4pmuIiwibmF0dXJhbDsiOiLima4iLCJuYXR1cmFsczsiOiLihJUiLCJuYnNwOyI6IsKgIixuYnNwOiLCoCIsIm5idW1wOyI6IuKJjsy4IiwibmJ1bXBlOyI6IuKJj8y4IiwibmNhcDsiOiLiqYMiLCJOY2Fyb247IjoixYciLCJuY2Fyb247IjoixYgiLCJOY2VkaWw7IjoixYUiLCJuY2VkaWw7IjoixYYiLCJuY29uZzsiOiLiiYciLCJuY29uZ2RvdDsiOiLiqa3MuCIsIm5jdXA7Ijoi4qmCIiwiTmN5OyI6ItCdIiwibmN5OyI6ItC9IiwibmRhc2g7Ijoi4oCTIiwibmU7Ijoi4omgIiwibmVhcmhrOyI6IuKkpCIsIm5lQXJyOyI6IuKHlyIsIm5lYXJyOyI6IuKGlyIsIm5lYXJyb3c7Ijoi4oaXIiwibmVkb3Q7Ijoi4omQzLgiLCJOZWdhdGl2ZU1lZGl1bVNwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVGhpY2tTcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVRoaW5TcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVZlcnlUaGluU3BhY2U7Ijoi4oCLIiwibmVxdWl2OyI6IuKJoiIsIm5lc2VhcjsiOiLipKgiLCJuZXNpbTsiOiLiiYLMuCIsIk5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKJqyIsIk5lc3RlZExlc3NMZXNzOyI6IuKJqiIsIk5ld0xpbmU7IjoiXG4iLCJuZXhpc3Q7Ijoi4oiEIiwibmV4aXN0czsiOiLiiIQiLCJOZnI7Ijoi8J2UkSIsIm5mcjsiOiLwnZSrIiwibmdFOyI6IuKJp8y4IiwibmdlOyI6IuKJsSIsIm5nZXE7Ijoi4omxIiwibmdlcXE7Ijoi4omnzLgiLCJuZ2Vxc2xhbnQ7Ijoi4qm+zLgiLCJuZ2VzOyI6IuKpvsy4IiwibkdnOyI6IuKLmcy4IiwibmdzaW07Ijoi4om1Iiwibkd0OyI6IuKJq+KDkiIsIm5ndDsiOiLiia8iLCJuZ3RyOyI6IuKJryIsIm5HdHY7Ijoi4omrzLgiLCJuaEFycjsiOiLih44iLCJuaGFycjsiOiLihq4iLCJuaHBhcjsiOiLiq7IiLCJuaTsiOiLiiIsiLCJuaXM7Ijoi4ou8IiwibmlzZDsiOiLii7oiLCJuaXY7Ijoi4oiLIiwiTkpjeTsiOiLQiiIsIm5qY3k7Ijoi0ZoiLCJubEFycjsiOiLih40iLCJubGFycjsiOiLihpoiLCJubGRyOyI6IuKApSIsIm5sRTsiOiLiiabMuCIsIm5sZTsiOiLiibAiLCJuTGVmdGFycm93OyI6IuKHjSIsIm5sZWZ0YXJyb3c7Ijoi4oaaIiwibkxlZnRyaWdodGFycm93OyI6IuKHjiIsIm5sZWZ0cmlnaHRhcnJvdzsiOiLihq4iLCJubGVxOyI6IuKJsCIsIm5sZXFxOyI6IuKJpsy4IiwibmxlcXNsYW50OyI6IuKpvcy4IiwibmxlczsiOiLiqb3MuCIsIm5sZXNzOyI6IuKJriIsIm5MbDsiOiLii5jMuCIsIm5sc2ltOyI6IuKJtCIsIm5MdDsiOiLiiarig5IiLCJubHQ7Ijoi4omuIiwibmx0cmk7Ijoi4ouqIiwibmx0cmllOyI6IuKLrCIsIm5MdHY7Ijoi4omqzLgiLCJubWlkOyI6IuKIpCIsIk5vQnJlYWs7Ijoi4oGgIiwiTm9uQnJlYWtpbmdTcGFjZTsiOiLCoCIsIk5vcGY7Ijoi4oSVIiwibm9wZjsiOiLwnZWfIiwiTm90OyI6IuKrrCIsIm5vdDsiOiLCrCIsbm90OiLCrCIsIk5vdENvbmdydWVudDsiOiLiiaIiLCJOb3RDdXBDYXA7Ijoi4omtIiwiTm90RG91YmxlVmVydGljYWxCYXI7Ijoi4oimIiwiTm90RWxlbWVudDsiOiLiiIkiLCJOb3RFcXVhbDsiOiLiiaAiLCJOb3RFcXVhbFRpbGRlOyI6IuKJgsy4IiwiTm90RXhpc3RzOyI6IuKIhCIsIk5vdEdyZWF0ZXI7Ijoi4omvIiwiTm90R3JlYXRlckVxdWFsOyI6IuKJsSIsIk5vdEdyZWF0ZXJGdWxsRXF1YWw7Ijoi4omnzLgiLCJOb3RHcmVhdGVyR3JlYXRlcjsiOiLiiavMuCIsIk5vdEdyZWF0ZXJMZXNzOyI6IuKJuSIsIk5vdEdyZWF0ZXJTbGFudEVxdWFsOyI6IuKpvsy4IiwiTm90R3JlYXRlclRpbGRlOyI6IuKJtSIsIk5vdEh1bXBEb3duSHVtcDsiOiLiiY7MuCIsIk5vdEh1bXBFcXVhbDsiOiLiiY/MuCIsIm5vdGluOyI6IuKIiSIsIm5vdGluZG90OyI6IuKLtcy4Iiwibm90aW5FOyI6IuKLucy4Iiwibm90aW52YTsiOiLiiIkiLCJub3RpbnZiOyI6IuKLtyIsIm5vdGludmM7Ijoi4ou2IiwiTm90TGVmdFRyaWFuZ2xlOyI6IuKLqiIsIk5vdExlZnRUcmlhbmdsZUJhcjsiOiLip4/MuCIsIk5vdExlZnRUcmlhbmdsZUVxdWFsOyI6IuKLrCIsIk5vdExlc3M7Ijoi4omuIiwiTm90TGVzc0VxdWFsOyI6IuKJsCIsIk5vdExlc3NHcmVhdGVyOyI6IuKJuCIsIk5vdExlc3NMZXNzOyI6IuKJqsy4IiwiTm90TGVzc1NsYW50RXF1YWw7Ijoi4qm9zLgiLCJOb3RMZXNzVGlsZGU7Ijoi4om0IiwiTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI7Ijoi4qqizLgiLCJOb3ROZXN0ZWRMZXNzTGVzczsiOiLiqqHMuCIsIm5vdG5pOyI6IuKIjCIsIm5vdG5pdmE7Ijoi4oiMIiwibm90bml2YjsiOiLii74iLCJub3RuaXZjOyI6IuKLvSIsIk5vdFByZWNlZGVzOyI6IuKKgCIsIk5vdFByZWNlZGVzRXF1YWw7Ijoi4qqvzLgiLCJOb3RQcmVjZWRlc1NsYW50RXF1YWw7Ijoi4ougIiwiTm90UmV2ZXJzZUVsZW1lbnQ7Ijoi4oiMIiwiTm90UmlnaHRUcmlhbmdsZTsiOiLii6siLCJOb3RSaWdodFRyaWFuZ2xlQmFyOyI6IuKnkMy4IiwiTm90UmlnaHRUcmlhbmdsZUVxdWFsOyI6IuKLrSIsIk5vdFNxdWFyZVN1YnNldDsiOiLiio/MuCIsIk5vdFNxdWFyZVN1YnNldEVxdWFsOyI6IuKLoiIsIk5vdFNxdWFyZVN1cGVyc2V0OyI6IuKKkMy4IiwiTm90U3F1YXJlU3VwZXJzZXRFcXVhbDsiOiLii6MiLCJOb3RTdWJzZXQ7Ijoi4oqC4oOSIiwiTm90U3Vic2V0RXF1YWw7Ijoi4oqIIiwiTm90U3VjY2VlZHM7Ijoi4oqBIiwiTm90U3VjY2VlZHNFcXVhbDsiOiLiqrDMuCIsIk5vdFN1Y2NlZWRzU2xhbnRFcXVhbDsiOiLii6EiLCJOb3RTdWNjZWVkc1RpbGRlOyI6IuKJv8y4IiwiTm90U3VwZXJzZXQ7Ijoi4oqD4oOSIiwiTm90U3VwZXJzZXRFcXVhbDsiOiLiiokiLCJOb3RUaWxkZTsiOiLiiYEiLCJOb3RUaWxkZUVxdWFsOyI6IuKJhCIsIk5vdFRpbGRlRnVsbEVxdWFsOyI6IuKJhyIsIk5vdFRpbGRlVGlsZGU7Ijoi4omJIiwiTm90VmVydGljYWxCYXI7Ijoi4oikIiwibnBhcjsiOiLiiKYiLCJucGFyYWxsZWw7Ijoi4oimIiwibnBhcnNsOyI6IuKrveKDpSIsIm5wYXJ0OyI6IuKIgsy4IiwibnBvbGludDsiOiLiqJQiLCJucHI7Ijoi4oqAIiwibnByY3VlOyI6IuKLoCIsIm5wcmU7Ijoi4qqvzLgiLCJucHJlYzsiOiLiioAiLCJucHJlY2VxOyI6IuKqr8y4IiwibnJBcnI7Ijoi4oePIiwibnJhcnI7Ijoi4oabIiwibnJhcnJjOyI6IuKks8y4IiwibnJhcnJ3OyI6IuKGncy4IiwiblJpZ2h0YXJyb3c7Ijoi4oePIiwibnJpZ2h0YXJyb3c7Ijoi4oabIiwibnJ0cmk7Ijoi4ourIiwibnJ0cmllOyI6IuKLrSIsIm5zYzsiOiLiioEiLCJuc2NjdWU7Ijoi4ouhIiwibnNjZTsiOiLiqrDMuCIsIk5zY3I7Ijoi8J2SqSIsIm5zY3I7Ijoi8J2TgyIsIm5zaG9ydG1pZDsiOiLiiKQiLCJuc2hvcnRwYXJhbGxlbDsiOiLiiKYiLCJuc2ltOyI6IuKJgSIsIm5zaW1lOyI6IuKJhCIsIm5zaW1lcTsiOiLiiYQiLCJuc21pZDsiOiLiiKQiLCJuc3BhcjsiOiLiiKYiLCJuc3FzdWJlOyI6IuKLoiIsIm5zcXN1cGU7Ijoi4oujIiwibnN1YjsiOiLiioQiLCJuc3ViRTsiOiLiq4XMuCIsIm5zdWJlOyI6IuKKiCIsIm5zdWJzZXQ7Ijoi4oqC4oOSIiwibnN1YnNldGVxOyI6IuKKiCIsIm5zdWJzZXRlcXE7Ijoi4quFzLgiLCJuc3VjYzsiOiLiioEiLCJuc3VjY2VxOyI6IuKqsMy4IiwibnN1cDsiOiLiioUiLCJuc3VwRTsiOiLiq4bMuCIsIm5zdXBlOyI6IuKKiSIsIm5zdXBzZXQ7Ijoi4oqD4oOSIiwibnN1cHNldGVxOyI6IuKKiSIsIm5zdXBzZXRlcXE7Ijoi4quGzLgiLCJudGdsOyI6IuKJuSIsIk50aWxkZTsiOiLDkSIsTnRpbGRlOiLDkSIsIm50aWxkZTsiOiLDsSIsbnRpbGRlOiLDsSIsIm50bGc7Ijoi4om4IiwibnRyaWFuZ2xlbGVmdDsiOiLii6oiLCJudHJpYW5nbGVsZWZ0ZXE7Ijoi4ousIiwibnRyaWFuZ2xlcmlnaHQ7Ijoi4ourIiwibnRyaWFuZ2xlcmlnaHRlcTsiOiLii60iLCJOdTsiOiLOnSIsIm51OyI6Is69IiwibnVtOyI6IiMiLCJudW1lcm87Ijoi4oSWIiwibnVtc3A7Ijoi4oCHIiwibnZhcDsiOiLiiY3ig5IiLCJuVkRhc2g7Ijoi4oqvIiwiblZkYXNoOyI6IuKKriIsIm52RGFzaDsiOiLiiq0iLCJudmRhc2g7Ijoi4oqsIiwibnZnZTsiOiLiiaXig5IiLCJudmd0OyI6Ij7ig5IiLCJudkhhcnI7Ijoi4qSEIiwibnZpbmZpbjsiOiLip54iLCJudmxBcnI7Ijoi4qSCIiwibnZsZTsiOiLiiaTig5IiLCJudmx0OyI6Ijzig5IiLCJudmx0cmllOyI6IuKKtOKDkiIsIm52ckFycjsiOiLipIMiLCJudnJ0cmllOyI6IuKKteKDkiIsIm52c2ltOyI6IuKIvOKDkiIsIm53YXJoazsiOiLipKMiLCJud0FycjsiOiLih5YiLCJud2FycjsiOiLihpYiLCJud2Fycm93OyI6IuKGliIsIm53bmVhcjsiOiLipKciLCJPYWN1dGU7Ijoiw5MiLE9hY3V0ZToiw5MiLCJvYWN1dGU7Ijoiw7MiLG9hY3V0ZToiw7MiLCJvYXN0OyI6IuKKmyIsIm9jaXI7Ijoi4oqaIiwiT2NpcmM7Ijoiw5QiLE9jaXJjOiLDlCIsIm9jaXJjOyI6IsO0IixvY2lyYzoiw7QiLCJPY3k7Ijoi0J4iLCJvY3k7Ijoi0L4iLCJvZGFzaDsiOiLiip0iLCJPZGJsYWM7IjoixZAiLCJvZGJsYWM7IjoixZEiLCJvZGl2OyI6IuKouCIsIm9kb3Q7Ijoi4oqZIiwib2Rzb2xkOyI6IuKmvCIsIk9FbGlnOyI6IsWSIiwib2VsaWc7IjoixZMiLCJvZmNpcjsiOiLipr8iLCJPZnI7Ijoi8J2UkiIsIm9mcjsiOiLwnZSsIiwib2dvbjsiOiLLmyIsIk9ncmF2ZTsiOiLDkiIsT2dyYXZlOiLDkiIsIm9ncmF2ZTsiOiLDsiIsb2dyYXZlOiLDsiIsIm9ndDsiOiLip4EiLCJvaGJhcjsiOiLiprUiLCJvaG07IjoizqkiLCJvaW50OyI6IuKIriIsIm9sYXJyOyI6IuKGuiIsIm9sY2lyOyI6IuKmviIsIm9sY3Jvc3M7Ijoi4qa7Iiwib2xpbmU7Ijoi4oC+Iiwib2x0OyI6IuKngCIsIk9tYWNyOyI6IsWMIiwib21hY3I7IjoixY0iLCJPbWVnYTsiOiLOqSIsIm9tZWdhOyI6Is+JIiwiT21pY3JvbjsiOiLOnyIsIm9taWNyb247Ijoizr8iLCJvbWlkOyI6IuKmtiIsIm9taW51czsiOiLiipYiLCJPb3BmOyI6IvCdlYYiLCJvb3BmOyI6IvCdlaAiLCJvcGFyOyI6IuKmtyIsIk9wZW5DdXJseURvdWJsZVF1b3RlOyI6IuKAnCIsIk9wZW5DdXJseVF1b3RlOyI6IuKAmCIsIm9wZXJwOyI6IuKmuSIsIm9wbHVzOyI6IuKKlSIsIk9yOyI6IuKplCIsIm9yOyI6IuKIqCIsIm9yYXJyOyI6IuKGuyIsIm9yZDsiOiLiqZ0iLCJvcmRlcjsiOiLihLQiLCJvcmRlcm9mOyI6IuKEtCIsIm9yZGY7IjoiwqoiLG9yZGY6IsKqIiwib3JkbTsiOiLCuiIsb3JkbToiwroiLCJvcmlnb2Y7Ijoi4oq2Iiwib3JvcjsiOiLiqZYiLCJvcnNsb3BlOyI6IuKplyIsIm9ydjsiOiLiqZsiLCJvUzsiOiLik4giLCJPc2NyOyI6IvCdkqoiLCJvc2NyOyI6IuKEtCIsIk9zbGFzaDsiOiLDmCIsT3NsYXNoOiLDmCIsIm9zbGFzaDsiOiLDuCIsb3NsYXNoOiLDuCIsIm9zb2w7Ijoi4oqYIiwiT3RpbGRlOyI6IsOVIixPdGlsZGU6IsOVIiwib3RpbGRlOyI6IsO1IixvdGlsZGU6IsO1IiwiT3RpbWVzOyI6IuKotyIsIm90aW1lczsiOiLiipciLCJvdGltZXNhczsiOiLiqLYiLCJPdW1sOyI6IsOWIixPdW1sOiLDliIsIm91bWw7Ijoiw7YiLG91bWw6IsO2Iiwib3ZiYXI7Ijoi4oy9IiwiT3ZlckJhcjsiOiLigL4iLCJPdmVyQnJhY2U7Ijoi4o+eIiwiT3ZlckJyYWNrZXQ7Ijoi4o60IiwiT3ZlclBhcmVudGhlc2lzOyI6IuKPnCIsInBhcjsiOiLiiKUiLCJwYXJhOyI6IsK2IixwYXJhOiLCtiIsInBhcmFsbGVsOyI6IuKIpSIsInBhcnNpbTsiOiLiq7MiLCJwYXJzbDsiOiLiq70iLCJwYXJ0OyI6IuKIgiIsIlBhcnRpYWxEOyI6IuKIgiIsIlBjeTsiOiLQnyIsInBjeTsiOiLQvyIsInBlcmNudDsiOiIlIiwicGVyaW9kOyI6Ii4iLCJwZXJtaWw7Ijoi4oCwIiwicGVycDsiOiLiiqUiLCJwZXJ0ZW5rOyI6IuKAsSIsIlBmcjsiOiLwnZSTIiwicGZyOyI6IvCdlK0iLCJQaGk7IjoizqYiLCJwaGk7Ijoiz4YiLCJwaGl2OyI6Is+VIiwicGhtbWF0OyI6IuKEsyIsInBob25lOyI6IuKYjiIsIlBpOyI6Is6gIiwicGk7Ijoiz4AiLCJwaXRjaGZvcms7Ijoi4ouUIiwicGl2OyI6Is+WIiwicGxhbmNrOyI6IuKEjyIsInBsYW5ja2g7Ijoi4oSOIiwicGxhbmt2OyI6IuKEjyIsInBsdXM7IjoiKyIsInBsdXNhY2lyOyI6IuKooyIsInBsdXNiOyI6IuKKniIsInBsdXNjaXI7Ijoi4qiiIiwicGx1c2RvOyI6IuKIlCIsInBsdXNkdTsiOiLiqKUiLCJwbHVzZTsiOiLiqbIiLCJQbHVzTWludXM7IjoiwrEiLCJwbHVzbW47IjoiwrEiLHBsdXNtbjoiwrEiLCJwbHVzc2ltOyI6IuKopiIsInBsdXN0d287Ijoi4qinIiwicG07IjoiwrEiLCJQb2luY2FyZXBsYW5lOyI6IuKEjCIsInBvaW50aW50OyI6IuKolSIsIlBvcGY7Ijoi4oSZIiwicG9wZjsiOiLwnZWhIiwicG91bmQ7IjoiwqMiLHBvdW5kOiLCoyIsIlByOyI6IuKquyIsInByOyI6IuKJuiIsInByYXA7Ijoi4qq3IiwicHJjdWU7Ijoi4om8IiwicHJFOyI6IuKqsyIsInByZTsiOiLiqq8iLCJwcmVjOyI6IuKJuiIsInByZWNhcHByb3g7Ijoi4qq3IiwicHJlY2N1cmx5ZXE7Ijoi4om8IiwiUHJlY2VkZXM7Ijoi4om6IiwiUHJlY2VkZXNFcXVhbDsiOiLiqq8iLCJQcmVjZWRlc1NsYW50RXF1YWw7Ijoi4om8IiwiUHJlY2VkZXNUaWxkZTsiOiLiib4iLCJwcmVjZXE7Ijoi4qqvIiwicHJlY25hcHByb3g7Ijoi4qq5IiwicHJlY25lcXE7Ijoi4qq1IiwicHJlY25zaW07Ijoi4ouoIiwicHJlY3NpbTsiOiLiib4iLCJQcmltZTsiOiLigLMiLCJwcmltZTsiOiLigLIiLCJwcmltZXM7Ijoi4oSZIiwicHJuYXA7Ijoi4qq5IiwicHJuRTsiOiLiqrUiLCJwcm5zaW07Ijoi4ouoIiwicHJvZDsiOiLiiI8iLCJQcm9kdWN0OyI6IuKIjyIsInByb2ZhbGFyOyI6IuKMriIsInByb2ZsaW5lOyI6IuKMkiIsInByb2ZzdXJmOyI6IuKMkyIsInByb3A7Ijoi4oidIiwiUHJvcG9ydGlvbjsiOiLiiLciLCJQcm9wb3J0aW9uYWw7Ijoi4oidIiwicHJvcHRvOyI6IuKInSIsInByc2ltOyI6IuKJviIsInBydXJlbDsiOiLiirAiLCJQc2NyOyI6IvCdkqsiLCJwc2NyOyI6IvCdk4UiLCJQc2k7IjoizqgiLCJwc2k7Ijoiz4giLCJwdW5jc3A7Ijoi4oCIIiwiUWZyOyI6IvCdlJQiLCJxZnI7Ijoi8J2UriIsInFpbnQ7Ijoi4qiMIiwiUW9wZjsiOiLihJoiLCJxb3BmOyI6IvCdlaIiLCJxcHJpbWU7Ijoi4oGXIiwiUXNjcjsiOiLwnZKsIiwicXNjcjsiOiLwnZOGIiwicXVhdGVybmlvbnM7Ijoi4oSNIiwicXVhdGludDsiOiLiqJYiLCJxdWVzdDsiOiI/IiwicXVlc3RlcTsiOiLiiZ8iLCJRVU9UOyI6JyInLFFVT1Q6JyInLCJxdW90OyI6JyInLHF1b3Q6JyInLCJyQWFycjsiOiLih5siLCJyYWNlOyI6IuKIvcyxIiwiUmFjdXRlOyI6IsWUIiwicmFjdXRlOyI6IsWVIiwicmFkaWM7Ijoi4oiaIiwicmFlbXB0eXY7Ijoi4qazIiwiUmFuZzsiOiLin6siLCJyYW5nOyI6IuKfqSIsInJhbmdkOyI6IuKmkiIsInJhbmdlOyI6IuKmpSIsInJhbmdsZTsiOiLin6kiLCJyYXF1bzsiOiLCuyIscmFxdW86IsK7IiwiUmFycjsiOiLihqAiLCJyQXJyOyI6IuKHkiIsInJhcnI7Ijoi4oaSIiwicmFycmFwOyI6IuKltSIsInJhcnJiOyI6IuKHpSIsInJhcnJiZnM7Ijoi4qSgIiwicmFycmM7Ijoi4qSzIiwicmFycmZzOyI6IuKkniIsInJhcnJoazsiOiLihqoiLCJyYXJybHA7Ijoi4oasIiwicmFycnBsOyI6IuKlhSIsInJhcnJzaW07Ijoi4qW0IiwiUmFycnRsOyI6IuKkliIsInJhcnJ0bDsiOiLihqMiLCJyYXJydzsiOiLihp0iLCJyQXRhaWw7Ijoi4qScIiwicmF0YWlsOyI6IuKkmiIsInJhdGlvOyI6IuKItiIsInJhdGlvbmFsczsiOiLihJoiLCJSQmFycjsiOiLipJAiLCJyQmFycjsiOiLipI8iLCJyYmFycjsiOiLipI0iLCJyYmJyazsiOiLinbMiLCJyYnJhY2U7IjoifSIsInJicmFjazsiOiJdIiwicmJya2U7Ijoi4qaMIiwicmJya3NsZDsiOiLipo4iLCJyYnJrc2x1OyI6IuKmkCIsIlJjYXJvbjsiOiLFmCIsInJjYXJvbjsiOiLFmSIsIlJjZWRpbDsiOiLFliIsInJjZWRpbDsiOiLFlyIsInJjZWlsOyI6IuKMiSIsInJjdWI7IjoifSIsIlJjeTsiOiLQoCIsInJjeTsiOiLRgCIsInJkY2E7Ijoi4qS3IiwicmRsZGhhcjsiOiLipakiLCJyZHF1bzsiOiLigJ0iLCJyZHF1b3I7Ijoi4oCdIiwicmRzaDsiOiLihrMiLCJSZTsiOiLihJwiLCJyZWFsOyI6IuKEnCIsInJlYWxpbmU7Ijoi4oSbIiwicmVhbHBhcnQ7Ijoi4oScIiwicmVhbHM7Ijoi4oSdIiwicmVjdDsiOiLilq0iLCJSRUc7Ijoiwq4iLFJFRzoiwq4iLCJyZWc7Ijoiwq4iLHJlZzoiwq4iLCJSZXZlcnNlRWxlbWVudDsiOiLiiIsiLCJSZXZlcnNlRXF1aWxpYnJpdW07Ijoi4oeLIiwiUmV2ZXJzZVVwRXF1aWxpYnJpdW07Ijoi4qWvIiwicmZpc2h0OyI6IuKlvSIsInJmbG9vcjsiOiLijIsiLCJSZnI7Ijoi4oScIiwicmZyOyI6IvCdlK8iLCJySGFyOyI6IuKlpCIsInJoYXJkOyI6IuKHgSIsInJoYXJ1OyI6IuKHgCIsInJoYXJ1bDsiOiLipawiLCJSaG87IjoizqEiLCJyaG87Ijoiz4EiLCJyaG92OyI6Is+xIiwiUmlnaHRBbmdsZUJyYWNrZXQ7Ijoi4p+pIiwiUmlnaHRBcnJvdzsiOiLihpIiLCJSaWdodGFycm93OyI6IuKHkiIsInJpZ2h0YXJyb3c7Ijoi4oaSIiwiUmlnaHRBcnJvd0JhcjsiOiLih6UiLCJSaWdodEFycm93TGVmdEFycm93OyI6IuKHhCIsInJpZ2h0YXJyb3d0YWlsOyI6IuKGoyIsIlJpZ2h0Q2VpbGluZzsiOiLijIkiLCJSaWdodERvdWJsZUJyYWNrZXQ7Ijoi4p+nIiwiUmlnaHREb3duVGVlVmVjdG9yOyI6IuKlnSIsIlJpZ2h0RG93blZlY3RvcjsiOiLih4IiLCJSaWdodERvd25WZWN0b3JCYXI7Ijoi4qWVIiwiUmlnaHRGbG9vcjsiOiLijIsiLCJyaWdodGhhcnBvb25kb3duOyI6IuKHgSIsInJpZ2h0aGFycG9vbnVwOyI6IuKHgCIsInJpZ2h0bGVmdGFycm93czsiOiLih4QiLCJyaWdodGxlZnRoYXJwb29uczsiOiLih4wiLCJyaWdodHJpZ2h0YXJyb3dzOyI6IuKHiSIsInJpZ2h0c3F1aWdhcnJvdzsiOiLihp0iLCJSaWdodFRlZTsiOiLiiqIiLCJSaWdodFRlZUFycm93OyI6IuKGpiIsIlJpZ2h0VGVlVmVjdG9yOyI6IuKlmyIsInJpZ2h0dGhyZWV0aW1lczsiOiLii4wiLCJSaWdodFRyaWFuZ2xlOyI6IuKKsyIsIlJpZ2h0VHJpYW5nbGVCYXI7Ijoi4qeQIiwiUmlnaHRUcmlhbmdsZUVxdWFsOyI6IuKKtSIsIlJpZ2h0VXBEb3duVmVjdG9yOyI6IuKljyIsIlJpZ2h0VXBUZWVWZWN0b3I7Ijoi4qWcIiwiUmlnaHRVcFZlY3RvcjsiOiLihr4iLCJSaWdodFVwVmVjdG9yQmFyOyI6IuKllCIsIlJpZ2h0VmVjdG9yOyI6IuKHgCIsIlJpZ2h0VmVjdG9yQmFyOyI6IuKlkyIsInJpbmc7Ijoiy5oiLCJyaXNpbmdkb3RzZXE7Ijoi4omTIiwicmxhcnI7Ijoi4oeEIiwicmxoYXI7Ijoi4oeMIiwicmxtOyI6IuKAjyIsInJtb3VzdDsiOiLijrEiLCJybW91c3RhY2hlOyI6IuKOsSIsInJubWlkOyI6IuKrriIsInJvYW5nOyI6IuKfrSIsInJvYXJyOyI6IuKHviIsInJvYnJrOyI6IuKfpyIsInJvcGFyOyI6IuKmhiIsIlJvcGY7Ijoi4oSdIiwicm9wZjsiOiLwnZWjIiwicm9wbHVzOyI6IuKoriIsInJvdGltZXM7Ijoi4qi1IiwiUm91bmRJbXBsaWVzOyI6IuKlsCIsInJwYXI7IjoiKSIsInJwYXJndDsiOiLippQiLCJycHBvbGludDsiOiLiqJIiLCJycmFycjsiOiLih4kiLCJScmlnaHRhcnJvdzsiOiLih5siLCJyc2FxdW87Ijoi4oC6IiwiUnNjcjsiOiLihJsiLCJyc2NyOyI6IvCdk4ciLCJSc2g7Ijoi4oaxIiwicnNoOyI6IuKGsSIsInJzcWI7IjoiXSIsInJzcXVvOyI6IuKAmSIsInJzcXVvcjsiOiLigJkiLCJydGhyZWU7Ijoi4ouMIiwicnRpbWVzOyI6IuKLiiIsInJ0cmk7Ijoi4pa5IiwicnRyaWU7Ijoi4oq1IiwicnRyaWY7Ijoi4pa4IiwicnRyaWx0cmk7Ijoi4qeOIiwiUnVsZURlbGF5ZWQ7Ijoi4qe0IiwicnVsdWhhcjsiOiLipagiLCJyeDsiOiLihJ4iLCJTYWN1dGU7IjoixZoiLCJzYWN1dGU7IjoixZsiLCJzYnF1bzsiOiLigJoiLCJTYzsiOiLiqrwiLCJzYzsiOiLiibsiLCJzY2FwOyI6IuKquCIsIlNjYXJvbjsiOiLFoCIsInNjYXJvbjsiOiLFoSIsInNjY3VlOyI6IuKJvSIsInNjRTsiOiLiqrQiLCJzY2U7Ijoi4qqwIiwiU2NlZGlsOyI6IsWeIiwic2NlZGlsOyI6IsWfIiwiU2NpcmM7IjoixZwiLCJzY2lyYzsiOiLFnSIsInNjbmFwOyI6IuKquiIsInNjbkU7Ijoi4qq2Iiwic2Nuc2ltOyI6IuKLqSIsInNjcG9saW50OyI6IuKokyIsInNjc2ltOyI6IuKJvyIsIlNjeTsiOiLQoSIsInNjeTsiOiLRgSIsInNkb3Q7Ijoi4ouFIiwic2RvdGI7Ijoi4oqhIiwic2RvdGU7Ijoi4qmmIiwic2VhcmhrOyI6IuKkpSIsInNlQXJyOyI6IuKHmCIsInNlYXJyOyI6IuKGmCIsInNlYXJyb3c7Ijoi4oaYIiwic2VjdDsiOiLCpyIsc2VjdDoiwqciLCJzZW1pOyI6IjsiLCJzZXN3YXI7Ijoi4qSpIiwic2V0bWludXM7Ijoi4oiWIiwic2V0bW47Ijoi4oiWIiwic2V4dDsiOiLinLYiLCJTZnI7Ijoi8J2UliIsInNmcjsiOiLwnZSwIiwic2Zyb3duOyI6IuKMoiIsInNoYXJwOyI6IuKZryIsIlNIQ0hjeTsiOiLQqSIsInNoY2hjeTsiOiLRiSIsIlNIY3k7Ijoi0KgiLCJzaGN5OyI6ItGIIiwiU2hvcnREb3duQXJyb3c7Ijoi4oaTIiwiU2hvcnRMZWZ0QXJyb3c7Ijoi4oaQIiwic2hvcnRtaWQ7Ijoi4oijIiwic2hvcnRwYXJhbGxlbDsiOiLiiKUiLCJTaG9ydFJpZ2h0QXJyb3c7Ijoi4oaSIiwiU2hvcnRVcEFycm93OyI6IuKGkSIsInNoeTsiOiLCrSIsc2h5OiLCrSIsIlNpZ21hOyI6Is6jIiwic2lnbWE7Ijoiz4MiLCJzaWdtYWY7Ijoiz4IiLCJzaWdtYXY7Ijoiz4IiLCJzaW07Ijoi4oi8Iiwic2ltZG90OyI6IuKpqiIsInNpbWU7Ijoi4omDIiwic2ltZXE7Ijoi4omDIiwic2ltZzsiOiLiqp4iLCJzaW1nRTsiOiLiqqAiLCJzaW1sOyI6IuKqnSIsInNpbWxFOyI6IuKqnyIsInNpbW5lOyI6IuKJhiIsInNpbXBsdXM7Ijoi4qikIiwic2ltcmFycjsiOiLipbIiLCJzbGFycjsiOiLihpAiLCJTbWFsbENpcmNsZTsiOiLiiJgiLCJzbWFsbHNldG1pbnVzOyI6IuKIliIsInNtYXNocDsiOiLiqLMiLCJzbWVwYXJzbDsiOiLip6QiLCJzbWlkOyI6IuKIoyIsInNtaWxlOyI6IuKMoyIsInNtdDsiOiLiqqoiLCJzbXRlOyI6IuKqrCIsInNtdGVzOyI6IuKqrO+4gCIsIlNPRlRjeTsiOiLQrCIsInNvZnRjeTsiOiLRjCIsInNvbDsiOiIvIiwic29sYjsiOiLip4QiLCJzb2xiYXI7Ijoi4oy/IiwiU29wZjsiOiLwnZWKIiwic29wZjsiOiLwnZWkIiwic3BhZGVzOyI6IuKZoCIsInNwYWRlc3VpdDsiOiLimaAiLCJzcGFyOyI6IuKIpSIsInNxY2FwOyI6IuKKkyIsInNxY2FwczsiOiLiipPvuIAiLCJzcWN1cDsiOiLiipQiLCJzcWN1cHM7Ijoi4oqU77iAIiwiU3FydDsiOiLiiJoiLCJzcXN1YjsiOiLiio8iLCJzcXN1YmU7Ijoi4oqRIiwic3FzdWJzZXQ7Ijoi4oqPIiwic3FzdWJzZXRlcTsiOiLiipEiLCJzcXN1cDsiOiLiipAiLCJzcXN1cGU7Ijoi4oqSIiwic3FzdXBzZXQ7Ijoi4oqQIiwic3FzdXBzZXRlcTsiOiLiipIiLCJzcXU7Ijoi4pahIiwiU3F1YXJlOyI6IuKWoSIsInNxdWFyZTsiOiLilqEiLCJTcXVhcmVJbnRlcnNlY3Rpb247Ijoi4oqTIiwiU3F1YXJlU3Vic2V0OyI6IuKKjyIsIlNxdWFyZVN1YnNldEVxdWFsOyI6IuKKkSIsIlNxdWFyZVN1cGVyc2V0OyI6IuKKkCIsIlNxdWFyZVN1cGVyc2V0RXF1YWw7Ijoi4oqSIiwiU3F1YXJlVW5pb247Ijoi4oqUIiwic3F1YXJmOyI6IuKWqiIsInNxdWY7Ijoi4paqIiwic3JhcnI7Ijoi4oaSIiwiU3NjcjsiOiLwnZKuIiwic3NjcjsiOiLwnZOIIiwic3NldG1uOyI6IuKIliIsInNzbWlsZTsiOiLijKMiLCJzc3RhcmY7Ijoi4ouGIiwiU3RhcjsiOiLii4YiLCJzdGFyOyI6IuKYhiIsInN0YXJmOyI6IuKYhSIsInN0cmFpZ2h0ZXBzaWxvbjsiOiLPtSIsInN0cmFpZ2h0cGhpOyI6Is+VIiwic3RybnM7Ijoiwq8iLCJTdWI7Ijoi4ouQIiwic3ViOyI6IuKKgiIsInN1YmRvdDsiOiLiqr0iLCJzdWJFOyI6IuKrhSIsInN1YmU7Ijoi4oqGIiwic3ViZWRvdDsiOiLiq4MiLCJzdWJtdWx0OyI6IuKrgSIsInN1Ym5FOyI6IuKriyIsInN1Ym5lOyI6IuKKiiIsInN1YnBsdXM7Ijoi4qq/Iiwic3VicmFycjsiOiLipbkiLCJTdWJzZXQ7Ijoi4ouQIiwic3Vic2V0OyI6IuKKgiIsInN1YnNldGVxOyI6IuKKhiIsInN1YnNldGVxcTsiOiLiq4UiLCJTdWJzZXRFcXVhbDsiOiLiioYiLCJzdWJzZXRuZXE7Ijoi4oqKIiwic3Vic2V0bmVxcTsiOiLiq4siLCJzdWJzaW07Ijoi4quHIiwic3Vic3ViOyI6IuKrlSIsInN1YnN1cDsiOiLiq5MiLCJzdWNjOyI6IuKJuyIsInN1Y2NhcHByb3g7Ijoi4qq4Iiwic3VjY2N1cmx5ZXE7Ijoi4om9IiwiU3VjY2VlZHM7Ijoi4om7IiwiU3VjY2VlZHNFcXVhbDsiOiLiqrAiLCJTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4om9IiwiU3VjY2VlZHNUaWxkZTsiOiLiib8iLCJzdWNjZXE7Ijoi4qqwIiwic3VjY25hcHByb3g7Ijoi4qq6Iiwic3VjY25lcXE7Ijoi4qq2Iiwic3VjY25zaW07Ijoi4oupIiwic3VjY3NpbTsiOiLiib8iLCJTdWNoVGhhdDsiOiLiiIsiLCJTdW07Ijoi4oiRIiwic3VtOyI6IuKIkSIsInN1bmc7Ijoi4pmqIiwiU3VwOyI6IuKLkSIsInN1cDsiOiLiioMiLCJzdXAxOyI6IsK5IixzdXAxOiLCuSIsInN1cDI7IjoiwrIiLHN1cDI6IsKyIiwic3VwMzsiOiLCsyIsc3VwMzoiwrMiLCJzdXBkb3Q7Ijoi4qq+Iiwic3VwZHN1YjsiOiLiq5giLCJzdXBFOyI6IuKrhiIsInN1cGU7Ijoi4oqHIiwic3VwZWRvdDsiOiLiq4QiLCJTdXBlcnNldDsiOiLiioMiLCJTdXBlcnNldEVxdWFsOyI6IuKKhyIsInN1cGhzb2w7Ijoi4p+JIiwic3VwaHN1YjsiOiLiq5ciLCJzdXBsYXJyOyI6IuKluyIsInN1cG11bHQ7Ijoi4quCIiwic3VwbkU7Ijoi4quMIiwic3VwbmU7Ijoi4oqLIiwic3VwcGx1czsiOiLiq4AiLCJTdXBzZXQ7Ijoi4ouRIiwic3Vwc2V0OyI6IuKKgyIsInN1cHNldGVxOyI6IuKKhyIsInN1cHNldGVxcTsiOiLiq4YiLCJzdXBzZXRuZXE7Ijoi4oqLIiwic3Vwc2V0bmVxcTsiOiLiq4wiLCJzdXBzaW07Ijoi4quIIiwic3Vwc3ViOyI6IuKrlCIsInN1cHN1cDsiOiLiq5YiLCJzd2FyaGs7Ijoi4qSmIiwic3dBcnI7Ijoi4oeZIiwic3dhcnI7Ijoi4oaZIiwic3dhcnJvdzsiOiLihpkiLCJzd253YXI7Ijoi4qSqIiwic3psaWc7Ijoiw58iLHN6bGlnOiLDnyIsIlRhYjsiOiJcdCIsInRhcmdldDsiOiLijJYiLCJUYXU7IjoizqQiLCJ0YXU7Ijoiz4QiLCJ0YnJrOyI6IuKOtCIsIlRjYXJvbjsiOiLFpCIsInRjYXJvbjsiOiLFpSIsIlRjZWRpbDsiOiLFoiIsInRjZWRpbDsiOiLFoyIsIlRjeTsiOiLQoiIsInRjeTsiOiLRgiIsInRkb3Q7Ijoi4oObIiwidGVscmVjOyI6IuKMlSIsIlRmcjsiOiLwnZSXIiwidGZyOyI6IvCdlLEiLCJ0aGVyZTQ7Ijoi4oi0IiwiVGhlcmVmb3JlOyI6IuKItCIsInRoZXJlZm9yZTsiOiLiiLQiLCJUaGV0YTsiOiLOmCIsInRoZXRhOyI6Is64IiwidGhldGFzeW07Ijoiz5EiLCJ0aGV0YXY7Ijoiz5EiLCJ0aGlja2FwcHJveDsiOiLiiYgiLCJ0aGlja3NpbTsiOiLiiLwiLCJUaGlja1NwYWNlOyI6IuKBn+KAiiIsInRoaW5zcDsiOiLigIkiLCJUaGluU3BhY2U7Ijoi4oCJIiwidGhrYXA7Ijoi4omIIiwidGhrc2ltOyI6IuKIvCIsIlRIT1JOOyI6IsOeIixUSE9STjoiw54iLCJ0aG9ybjsiOiLDviIsdGhvcm46IsO+IiwiVGlsZGU7Ijoi4oi8IiwidGlsZGU7Ijoiy5wiLCJUaWxkZUVxdWFsOyI6IuKJgyIsIlRpbGRlRnVsbEVxdWFsOyI6IuKJhSIsIlRpbGRlVGlsZGU7Ijoi4omIIiwidGltZXM7Ijoiw5ciLHRpbWVzOiLDlyIsInRpbWVzYjsiOiLiiqAiLCJ0aW1lc2JhcjsiOiLiqLEiLCJ0aW1lc2Q7Ijoi4qiwIiwidGludDsiOiLiiK0iLCJ0b2VhOyI6IuKkqCIsInRvcDsiOiLiiqQiLCJ0b3Bib3Q7Ijoi4oy2IiwidG9wY2lyOyI6IuKrsSIsIlRvcGY7Ijoi8J2ViyIsInRvcGY7Ijoi8J2VpSIsInRvcGZvcms7Ijoi4quaIiwidG9zYTsiOiLipKkiLCJ0cHJpbWU7Ijoi4oC0IiwiVFJBREU7Ijoi4oSiIiwidHJhZGU7Ijoi4oSiIiwidHJpYW5nbGU7Ijoi4pa1IiwidHJpYW5nbGVkb3duOyI6IuKWvyIsInRyaWFuZ2xlbGVmdDsiOiLil4MiLCJ0cmlhbmdsZWxlZnRlcTsiOiLiirQiLCJ0cmlhbmdsZXE7Ijoi4omcIiwidHJpYW5nbGVyaWdodDsiOiLilrkiLCJ0cmlhbmdsZXJpZ2h0ZXE7Ijoi4oq1IiwidHJpZG90OyI6IuKXrCIsInRyaWU7Ijoi4omcIiwidHJpbWludXM7Ijoi4qi6IiwiVHJpcGxlRG90OyI6IuKDmyIsInRyaXBsdXM7Ijoi4qi5IiwidHJpc2I7Ijoi4qeNIiwidHJpdGltZTsiOiLiqLsiLCJ0cnBleml1bTsiOiLij6IiLCJUc2NyOyI6IvCdkq8iLCJ0c2NyOyI6IvCdk4kiLCJUU2N5OyI6ItCmIiwidHNjeTsiOiLRhiIsIlRTSGN5OyI6ItCLIiwidHNoY3k7Ijoi0ZsiLCJUc3Ryb2s7IjoixaYiLCJ0c3Ryb2s7IjoixaciLCJ0d2l4dDsiOiLiiawiLCJ0d29oZWFkbGVmdGFycm93OyI6IuKGniIsInR3b2hlYWRyaWdodGFycm93OyI6IuKGoCIsIlVhY3V0ZTsiOiLDmiIsVWFjdXRlOiLDmiIsInVhY3V0ZTsiOiLDuiIsdWFjdXRlOiLDuiIsIlVhcnI7Ijoi4oafIiwidUFycjsiOiLih5EiLCJ1YXJyOyI6IuKGkSIsIlVhcnJvY2lyOyI6IuKliSIsIlVicmN5OyI6ItCOIiwidWJyY3k7Ijoi0Z4iLCJVYnJldmU7IjoixawiLCJ1YnJldmU7Ijoixa0iLCJVY2lyYzsiOiLDmyIsVWNpcmM6IsObIiwidWNpcmM7Ijoiw7siLHVjaXJjOiLDuyIsIlVjeTsiOiLQoyIsInVjeTsiOiLRgyIsInVkYXJyOyI6IuKHhSIsIlVkYmxhYzsiOiLFsCIsInVkYmxhYzsiOiLFsSIsInVkaGFyOyI6IuKlriIsInVmaXNodDsiOiLipb4iLCJVZnI7Ijoi8J2UmCIsInVmcjsiOiLwnZSyIiwiVWdyYXZlOyI6IsOZIixVZ3JhdmU6IsOZIiwidWdyYXZlOyI6IsO5Iix1Z3JhdmU6IsO5IiwidUhhcjsiOiLipaMiLCJ1aGFybDsiOiLihr8iLCJ1aGFycjsiOiLihr4iLCJ1aGJsazsiOiLiloAiLCJ1bGNvcm47Ijoi4oycIiwidWxjb3JuZXI7Ijoi4oycIiwidWxjcm9wOyI6IuKMjyIsInVsdHJpOyI6IuKXuCIsIlVtYWNyOyI6IsWqIiwidW1hY3I7IjoixasiLCJ1bWw7IjoiwqgiLHVtbDoiwqgiLCJVbmRlckJhcjsiOiJfIiwiVW5kZXJCcmFjZTsiOiLij58iLCJVbmRlckJyYWNrZXQ7Ijoi4o61IiwiVW5kZXJQYXJlbnRoZXNpczsiOiLij50iLCJVbmlvbjsiOiLii4MiLCJVbmlvblBsdXM7Ijoi4oqOIiwiVW9nb247IjoixbIiLCJ1b2dvbjsiOiLFsyIsIlVvcGY7Ijoi8J2VjCIsInVvcGY7Ijoi8J2VpiIsIlVwQXJyb3c7Ijoi4oaRIiwiVXBhcnJvdzsiOiLih5EiLCJ1cGFycm93OyI6IuKGkSIsIlVwQXJyb3dCYXI7Ijoi4qSSIiwiVXBBcnJvd0Rvd25BcnJvdzsiOiLih4UiLCJVcERvd25BcnJvdzsiOiLihpUiLCJVcGRvd25hcnJvdzsiOiLih5UiLCJ1cGRvd25hcnJvdzsiOiLihpUiLCJVcEVxdWlsaWJyaXVtOyI6IuKlriIsInVwaGFycG9vbmxlZnQ7Ijoi4oa/IiwidXBoYXJwb29ucmlnaHQ7Ijoi4oa+IiwidXBsdXM7Ijoi4oqOIiwiVXBwZXJMZWZ0QXJyb3c7Ijoi4oaWIiwiVXBwZXJSaWdodEFycm93OyI6IuKGlyIsIlVwc2k7Ijoiz5IiLCJ1cHNpOyI6Is+FIiwidXBzaWg7Ijoiz5IiLCJVcHNpbG9uOyI6Is6lIiwidXBzaWxvbjsiOiLPhSIsIlVwVGVlOyI6IuKKpSIsIlVwVGVlQXJyb3c7Ijoi4oalIiwidXB1cGFycm93czsiOiLih4giLCJ1cmNvcm47Ijoi4oydIiwidXJjb3JuZXI7Ijoi4oydIiwidXJjcm9wOyI6IuKMjiIsIlVyaW5nOyI6IsWuIiwidXJpbmc7Ijoixa8iLCJ1cnRyaTsiOiLil7kiLCJVc2NyOyI6IvCdkrAiLCJ1c2NyOyI6IvCdk4oiLCJ1dGRvdDsiOiLii7AiLCJVdGlsZGU7IjoixagiLCJ1dGlsZGU7IjoixakiLCJ1dHJpOyI6IuKWtSIsInV0cmlmOyI6IuKWtCIsInV1YXJyOyI6IuKHiCIsIlV1bWw7Ijoiw5wiLFV1bWw6IsOcIiwidXVtbDsiOiLDvCIsdXVtbDoiw7wiLCJ1d2FuZ2xlOyI6IuKmpyIsInZhbmdydDsiOiLippwiLCJ2YXJlcHNpbG9uOyI6Is+1IiwidmFya2FwcGE7Ijoiz7AiLCJ2YXJub3RoaW5nOyI6IuKIhSIsInZhcnBoaTsiOiLPlSIsInZhcnBpOyI6Is+WIiwidmFycHJvcHRvOyI6IuKInSIsInZBcnI7Ijoi4oeVIiwidmFycjsiOiLihpUiLCJ2YXJyaG87Ijoiz7EiLCJ2YXJzaWdtYTsiOiLPgiIsInZhcnN1YnNldG5lcTsiOiLiiorvuIAiLCJ2YXJzdWJzZXRuZXFxOyI6IuKri++4gCIsInZhcnN1cHNldG5lcTsiOiLiiovvuIAiLCJ2YXJzdXBzZXRuZXFxOyI6IuKrjO+4gCIsInZhcnRoZXRhOyI6Is+RIiwidmFydHJpYW5nbGVsZWZ0OyI6IuKKsiIsInZhcnRyaWFuZ2xlcmlnaHQ7Ijoi4oqzIiwiVmJhcjsiOiLiq6siLCJ2QmFyOyI6IuKrqCIsInZCYXJ2OyI6IuKrqSIsIlZjeTsiOiLQkiIsInZjeTsiOiLQsiIsIlZEYXNoOyI6IuKKqyIsIlZkYXNoOyI6IuKKqSIsInZEYXNoOyI6IuKKqCIsInZkYXNoOyI6IuKKoiIsIlZkYXNobDsiOiLiq6YiLCJWZWU7Ijoi4ouBIiwidmVlOyI6IuKIqCIsInZlZWJhcjsiOiLiirsiLCJ2ZWVlcTsiOiLiiZoiLCJ2ZWxsaXA7Ijoi4ouuIiwiVmVyYmFyOyI6IuKAliIsInZlcmJhcjsiOiJ8IiwiVmVydDsiOiLigJYiLCJ2ZXJ0OyI6InwiLCJWZXJ0aWNhbEJhcjsiOiLiiKMiLCJWZXJ0aWNhbExpbmU7IjoifCIsIlZlcnRpY2FsU2VwYXJhdG9yOyI6IuKdmCIsIlZlcnRpY2FsVGlsZGU7Ijoi4omAIiwiVmVyeVRoaW5TcGFjZTsiOiLigIoiLCJWZnI7Ijoi8J2UmSIsInZmcjsiOiLwnZSzIiwidmx0cmk7Ijoi4oqyIiwidm5zdWI7Ijoi4oqC4oOSIiwidm5zdXA7Ijoi4oqD4oOSIiwiVm9wZjsiOiLwnZWNIiwidm9wZjsiOiLwnZWnIiwidnByb3A7Ijoi4oidIiwidnJ0cmk7Ijoi4oqzIiwiVnNjcjsiOiLwnZKxIiwidnNjcjsiOiLwnZOLIiwidnN1Ym5FOyI6IuKri++4gCIsInZzdWJuZTsiOiLiiorvuIAiLCJ2c3VwbkU7Ijoi4quM77iAIiwidnN1cG5lOyI6IuKKi++4gCIsIlZ2ZGFzaDsiOiLiiqoiLCJ2emlnemFnOyI6IuKmmiIsIldjaXJjOyI6IsW0Iiwid2NpcmM7IjoixbUiLCJ3ZWRiYXI7Ijoi4qmfIiwiV2VkZ2U7Ijoi4ouAIiwid2VkZ2U7Ijoi4oinIiwid2VkZ2VxOyI6IuKJmSIsIndlaWVycDsiOiLihJgiLCJXZnI7Ijoi8J2UmiIsIndmcjsiOiLwnZS0IiwiV29wZjsiOiLwnZWOIiwid29wZjsiOiLwnZWoIiwid3A7Ijoi4oSYIiwid3I7Ijoi4omAIiwid3JlYXRoOyI6IuKJgCIsIldzY3I7Ijoi8J2SsiIsIndzY3I7Ijoi8J2TjCIsInhjYXA7Ijoi4ouCIiwieGNpcmM7Ijoi4pevIiwieGN1cDsiOiLii4MiLCJ4ZHRyaTsiOiLilr0iLCJYZnI7Ijoi8J2UmyIsInhmcjsiOiLwnZS1IiwieGhBcnI7Ijoi4p+6IiwieGhhcnI7Ijoi4p+3IiwiWGk7Ijoizp4iLCJ4aTsiOiLOviIsInhsQXJyOyI6IuKfuCIsInhsYXJyOyI6IuKftSIsInhtYXA7Ijoi4p+8IiwieG5pczsiOiLii7siLCJ4b2RvdDsiOiLiqIAiLCJYb3BmOyI6IvCdlY8iLCJ4b3BmOyI6IvCdlakiLCJ4b3BsdXM7Ijoi4qiBIiwieG90aW1lOyI6IuKogiIsInhyQXJyOyI6IuKfuSIsInhyYXJyOyI6IuKftiIsIlhzY3I7Ijoi8J2SsyIsInhzY3I7Ijoi8J2TjSIsInhzcWN1cDsiOiLiqIYiLCJ4dXBsdXM7Ijoi4qiEIiwieHV0cmk7Ijoi4pazIiwieHZlZTsiOiLii4EiLCJ4d2VkZ2U7Ijoi4ouAIiwiWWFjdXRlOyI6IsOdIixZYWN1dGU6IsOdIiwieWFjdXRlOyI6IsO9Iix5YWN1dGU6IsO9IiwiWUFjeTsiOiLQryIsInlhY3k7Ijoi0Y8iLCJZY2lyYzsiOiLFtiIsInljaXJjOyI6IsW3IiwiWWN5OyI6ItCrIiwieWN5OyI6ItGLIiwieWVuOyI6IsKlIix5ZW46IsKlIiwiWWZyOyI6IvCdlJwiLCJ5ZnI7Ijoi8J2UtiIsIllJY3k7Ijoi0IciLCJ5aWN5OyI6ItGXIiwiWW9wZjsiOiLwnZWQIiwieW9wZjsiOiLwnZWqIiwiWXNjcjsiOiLwnZK0IiwieXNjcjsiOiLwnZOOIiwiWVVjeTsiOiLQriIsInl1Y3k7Ijoi0Y4iLCJZdW1sOyI6IsW4IiwieXVtbDsiOiLDvyIseXVtbDoiw78iLCJaYWN1dGU7IjoixbkiLCJ6YWN1dGU7IjoixboiLCJaY2Fyb247Ijoixb0iLCJ6Y2Fyb247Ijoixb4iLCJaY3k7Ijoi0JciLCJ6Y3k7Ijoi0LciLCJaZG90OyI6IsW7IiwiemRvdDsiOiLFvCIsInplZXRyZjsiOiLihKgiLCJaZXJvV2lkdGhTcGFjZTsiOiLigIsiLCJaZXRhOyI6Is6WIiwiemV0YTsiOiLOtiIsIlpmcjsiOiLihKgiLCJ6ZnI7Ijoi8J2UtyIsIlpIY3k7Ijoi0JYiLCJ6aGN5OyI6ItC2IiwiemlncmFycjsiOiLih50iLCJab3BmOyI6IuKEpCIsInpvcGY7Ijoi8J2VqyIsIlpzY3I7Ijoi8J2StSIsInpzY3I7Ijoi8J2TjyIsInp3ajsiOiLigI0iLCJ6d25qOyI6IuKAjCJ9O2Z1bmN0aW9uIEVvKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQW8oZSx0KXtmb3IodmFyIG49IiI7dD4wOykxPT0oMSZ0KSYmKG4rPWUpLGUrPWUsdD4+Pj0xO3JldHVybiBufXZhciBNbz0iYSIuY2hhckNvZGVBdCgwKSxSbz0ieiIuY2hhckNvZGVBdCgwKSxObz0iQSIuY2hhckNvZGVBdCgwKSxJbz0iWiIuY2hhckNvZGVBdCgwKSxVbz0iMCIuY2hhckNvZGVBdCgwKSxIbz0iOSIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiB6byhlLHQpe3ZhciBuPWUuY2hhckNvZGVBdCh0KTtyZXR1cm4gTW88PW4mJm48PVJvfHxObzw9biYmbjw9SW98fFVvPD1uJiZuPD1Ib31mdW5jdGlvbiBEbyhlKXtyZXR1cm4gdm9pZCAwIT09ZX12YXIgV289ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49dGhpczt0aGlzLmlkPWUsdGhpcy5fdGFncz1bXSx0aGlzLl90YWdNYXA9e30sdGhpcy5fdmFsdWVTZXRNYXA9e30sdGhpcy5fdGFncz10LnRhZ3N8fFtdLHRoaXMuX2dsb2JhbEF0dHJpYnV0ZXM9dC5nbG9iYWxBdHRyaWJ1dGVzfHxbXSx0aGlzLl90YWdzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24uX3RhZ01hcFtlLm5hbWUudG9Mb3dlckNhc2UoKV09ZX0pKSx0LnZhbHVlU2V0cyYmdC52YWx1ZVNldHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5fdmFsdWVTZXRNYXBbZS5uYW1lXT1lLnZhbHVlc30pKX1yZXR1cm4gZS5wcm90b3R5cGUuaXNBcHBsaWNhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGUucHJvdG90eXBlLnByb3ZpZGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RhZ3N9LGUucHJvdG90eXBlLnByb3ZpZGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSxpPXRoaXMuX3RhZ01hcFtlLnRvTG93ZXJDYXNlKCldO3JldHVybiBpJiZpLmF0dHJpYnV0ZXMuZm9yRWFjaChuKSx0aGlzLl9nbG9iYWxBdHRyaWJ1dGVzLmZvckVhY2gobiksdH0sZS5wcm90b3R5cGUucHJvdmlkZVZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsaT1bXTt0PXQudG9Mb3dlckNhc2UoKTt2YXIgcj1mdW5jdGlvbihlKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UubmFtZS50b0xvd2VyQ2FzZSgpPT09dCYmKGUudmFsdWVzJiZlLnZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goZSl9KSksZS52YWx1ZVNldCYmbi5fdmFsdWVTZXRNYXBbZS52YWx1ZVNldF0mJm4uX3ZhbHVlU2V0TWFwW2UudmFsdWVTZXRdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kucHVzaChlKX0pKSl9KSl9LGE9dGhpcy5fdGFnTWFwW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIGEmJnIoYS5hdHRyaWJ1dGVzKSxyKHRoaXMuX2dsb2JhbEF0dHJpYnV0ZXMpLGl9LGV9KCk7ZnVuY3Rpb24gT28oZSx0LG4pe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgaT17a2luZDpuPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9O2lmKGUuZGVzY3JpcHRpb24mJiExIT09dC5kb2N1bWVudGF0aW9uKXt2YXIgcj1mdW5jdGlvbihlKXtpZihlKXJldHVybiJzdHJpbmciPT10eXBlb2YgZT97a2luZDoibWFya2Rvd24iLHZhbHVlOmV9OntraW5kOiJtYXJrZG93biIsdmFsdWU6ZS52YWx1ZX19KGUuZGVzY3JpcHRpb24pO3ImJihpLnZhbHVlKz1yLnZhbHVlKX1pZihlLnJlZmVyZW5jZXMmJmUucmVmZXJlbmNlcy5sZW5ndGg+MCYmITEhPT10LnJlZmVyZW5jZXMmJihpLnZhbHVlLmxlbmd0aCYmKGkudmFsdWUrPSJcblxuIiksaS52YWx1ZSs9bj9lLnJlZmVyZW5jZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iWyIuY29uY2F0KGUubmFtZSwiXSgiKS5jb25jYXQoZS51cmwsIikiKX0pKS5qb2luKCIgfCAiKTplLnJlZmVyZW5jZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iIi5jb25jYXQoZS5uYW1lLCI6ICIpLmNvbmNhdChlLnVybCl9KSkuam9pbigiXG4iKSksIiIhPT1pLnZhbHVlKXJldHVybiBpfXZhciBQbz1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24ocixhKXtmdW5jdGlvbiBvKGUpe3RyeXtsKGkubmV4dChlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7bChpLnRocm93KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBsKGUpe3ZhciB0O2UuZG9uZT9yKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihvLHMpfWwoKGk9aS5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0scW89ZnVuY3Rpb24oZSx0KXt2YXIgbixpLHIsYSxvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnJbMF0pdGhyb3cgclsxXTtyZXR1cm4gclsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBzKGEpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oYSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvOyl0cnl7aWYobj0xLGkmJihyPTImYVswXT9pLnJldHVybjphWzBdP2kudGhyb3d8fCgocj1pLnJldHVybikmJnIuY2FsbChpKSwwKTppLm5leHQpJiYhKHI9ci5jYWxsKGksYVsxXSkpLmRvbmUpcmV0dXJuIHI7c3dpdGNoKGk9MCxyJiYoYT1bMiZhWzBdLHIudmFsdWVdKSxhWzBdKXtjYXNlIDA6Y2FzZSAxOnI9YTticmVhaztjYXNlIDQ6cmV0dXJuIG8ubGFiZWwrKyx7dmFsdWU6YVsxXSxkb25lOiExfTtjYXNlIDU6by5sYWJlbCsrLGk9YVsxXSxhPVswXTtjb250aW51ZTtjYXNlIDc6YT1vLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKHI9by50cnlzLChyPXIubGVuZ3RoPjAmJnJbci5sZW5ndGgtMV0pfHw2IT09YVswXSYmMiE9PWFbMF0pKXtvPTA7Y29udGludWV9aWYoMz09PWFbMF0mJighcnx8YVsxXT5yWzBdJiZhWzFdPHJbM10pKXtvLmxhYmVsPWFbMV07YnJlYWt9aWYoNj09PWFbMF0mJm8ubGFiZWw8clsxXSl7by5sYWJlbD1yWzFdLHI9YTticmVha31pZihyJiZvLmxhYmVsPHJbMl0pe28ubGFiZWw9clsyXSxvLm9wcy5wdXNoKGEpO2JyZWFrfXJbMl0mJm8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZX1hPXQuY2FsbChlLG8pfWNhdGNoKGUpe2E9WzYsZV0saT0wfWZpbmFsbHl7bj1yPTB9aWYoNSZhWzBdKXRocm93IGFbMV07cmV0dXJue3ZhbHVlOmFbMF0/YVsxXTp2b2lkIDAsZG9uZTohMH19KFthLHNdKX19fSxGbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5yZWFkRGlyZWN0b3J5PWUsdGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5vbkh0bWxBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbihlKXsoZnVuY3Rpb24oZSx0KXtpZigic3JjIj09PXR8fCJocmVmIj09PXQpcmV0dXJuITA7dmFyIG49am9bZV07aWYobilyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bj09PXQ6LTEhPT1uLmluZGV4T2YodCk7cmV0dXJuITF9KShlLnRhZyxlLmF0dHJpYnV0ZSkmJnRoaXMuYXRyaWJ1dGVDb21wbGV0aW9ucy5wdXNoKGUpfSxlLnByb3RvdHlwZS5jb21wdXRlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUG8odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBuLGkscixhLG8scyxsLGMsaCxkO3JldHVybiBxbyh0aGlzLChmdW5jdGlvbih1KXtzd2l0Y2godS5sYWJlbCl7Y2FzZSAwOm49e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0saT0wLHI9dGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zLHUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGk8ci5sZW5ndGg/KGE9cltpXSxmdW5jdGlvbihlKXtpZihFbyhlLCJodHRwIil8fEVvKGUsImh0dHBzIil8fEVvKGUsIi8vIikpcmV0dXJuITE7cmV0dXJuITB9KG89ZnVuY3Rpb24oZSl7cmV0dXJuIEVvKGUsIiciKXx8RW8oZSwnIicpP2Uuc2xpY2UoMSwtMSk6ZX0oZS5nZXRUZXh0KGEucmFuZ2UpKSk/Ii4iIT09byYmIi4uIiE9PW8/WzMsMl06KG4uaXNJbmNvbXBsZXRlPSEwLFszLDRdKTpbMyw0XSk6WzMsNV07Y2FzZSAyOnJldHVybiBzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyPWUubGFzdEluZGV4T2YoIi8iKTtpZigtMT09PXIpaT1mdW5jdGlvbihlLHQsbil7dmFyIGk9S28oZS5zdGFydCx0KSxyPUtvKGUuZW5kLG4pO3JldHVybiBRaS5jcmVhdGUoaSxyKX0obiwxLC0xKTtlbHNle3ZhciBhPXQuc2xpY2UocisxKSxvPUtvKG4uZW5kLC0xLWEubGVuZ3RoKSxzPWEuaW5kZXhPZigiICIpLGw9dm9pZCAwO2w9LTEhPT1zP0tvKG8scyk6S28obi5lbmQsLTEpLGk9UWkuY3JlYXRlKG8sbCl9cmV0dXJuIGl9KGEudmFsdWUsbyxhLnJhbmdlKSxbNCx0aGlzLnByb3ZpZGVQYXRoU3VnZ2VzdGlvbnMoYS52YWx1ZSxzLGUsdCldO2Nhc2UgMzpmb3IobD11LnNlbnQoKSxjPTAsaD1sO2M8aC5sZW5ndGg7YysrKWQ9aFtjXSxuLml0ZW1zLnB1c2goZCk7dS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gaSsrLFszLDFdO2Nhc2UgNTpyZXR1cm5bMixuXX19KSl9KSl9LGUucHJvdG90eXBlLnByb3ZpZGVQYXRoU3VnZ2VzdGlvbnM9ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIFBvKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgcixhLG8scyxsLGMsaCxkLHU7cmV0dXJuIHFvKHRoaXMsKGZ1bmN0aW9uKG0pe3N3aXRjaChtLmxhYmVsKXtjYXNlIDA6aWYocj1lLnN1YnN0cmluZygwLGUubGFzdEluZGV4T2YoIi8iKSsxKSwhKGE9aS5yZXNvbHZlUmVmZXJlbmNlKHJ8fCIuIixuLnVyaSkpKXJldHVyblszLDRdO20ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG0udHJ5cy5wdXNoKFsxLDMsLDRdKSxvPVtdLFs0LHRoaXMucmVhZERpcmVjdG9yeShhKV07Y2FzZSAyOmZvcihzPW0uc2VudCgpLGw9MCxjPXM7bDxjLmxlbmd0aDtsKyspaD1jW2xdLGQ9aFswXSx1PWhbMV0sZC5jaGFyQ29kZUF0KDApIT09Qm8mJm8ucHVzaChWbyhkLHU9PT1ZYS5EaXJlY3RvcnksdCkpO3JldHVyblsyLG9dO2Nhc2UgMzpyZXR1cm4gbS5zZW50KCksWzMsNF07Y2FzZSA0OnJldHVyblsyLFtdXX19KSl9KSl9LGV9KCksQm89Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gVm8oZSx0LG4pe3JldHVybiB0P3tsYWJlbDplKz0iLyIsa2luZDpRci5Gb2xkZXIsdGV4dEVkaXQ6eHIucmVwbGFjZShuLGUpLGNvbW1hbmQ6e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In19OntsYWJlbDplLGtpbmQ6UXIuRmlsZSx0ZXh0RWRpdDp4ci5yZXBsYWNlKG4sZSl9fWZ1bmN0aW9uIEtvKGUsdCl7cmV0dXJuIFhpLmNyZWF0ZShlLmxpbmUsZS5jaGFyYWN0ZXIrdCl9dmFyIGpvPXthOiJocmVmIixhcmVhOiJocmVmIixib2R5OiJiYWNrZ3JvdW5kIixkZWw6ImNpdGUiLGZvcm06ImFjdGlvbiIsZnJhbWU6WyJzcmMiLCJsb25nZGVzYyJdLGltZzpbInNyYyIsImxvbmdkZXNjIl0saW5zOiJjaXRlIixsaW5rOiJocmVmIixvYmplY3Q6ImRhdGEiLHE6ImNpdGUiLHNjcmlwdDoic3JjIixhdWRpbzoic3JjIixidXR0b246ImZvcm1hY3Rpb24iLGNvbW1hbmQ6Imljb24iLGVtYmVkOiJzcmMiLGh0bWw6Im1hbmlmZXN0IixpbnB1dDpbInNyYyIsImZvcm1hY3Rpb24iXSxzb3VyY2U6InNyYyIsdHJhY2s6InNyYyIsdmlkZW86WyJzcmMiLCJwb3N0ZXIiXX0sR289ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsYSl7ZnVuY3Rpb24gbyhlKXt0cnl7bChpLm5leHQoZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2woaS50aHJvdyhlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gbChlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4obyxzKX1sKChpPWkuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LCRvPWZ1bmN0aW9uKGUsdCl7dmFyIG4saSxyLGEsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZyWzBdKXRocm93IHJbMV07cmV0dXJuIHJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYT17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihhW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGE7ZnVuY3Rpb24gcyhhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7bzspdHJ5e2lmKG49MSxpJiYocj0yJmFbMF0/aS5yZXR1cm46YVswXT9pLnRocm93fHwoKHI9aS5yZXR1cm4pJiZyLmNhbGwoaSksMCk6aS5uZXh0KSYmIShyPXIuY2FsbChpLGFbMV0pKS5kb25lKXJldHVybiByO3N3aXRjaChpPTAsciYmKGE9WzImYVswXSxyLnZhbHVlXSksYVswXSl7Y2FzZSAwOmNhc2UgMTpyPWE7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOmFbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxpPWFbMV0sYT1bMF07Y29udGludWU7Y2FzZSA3OmE9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShyPW8udHJ5cywocj1yLmxlbmd0aD4wJiZyW3IubGVuZ3RoLTFdKXx8NiE9PWFbMF0mJjIhPT1hWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1hWzBdJiYoIXJ8fGFbMV0+clswXSYmYVsxXTxyWzNdKSl7by5sYWJlbD1hWzFdO2JyZWFrfWlmKDY9PT1hWzBdJiZvLmxhYmVsPHJbMV0pe28ubGFiZWw9clsxXSxyPWE7YnJlYWt9aWYociYmby5sYWJlbDxyWzJdKXtvLmxhYmVsPXJbMl0sby5vcHMucHVzaChhKTticmVha31yWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9YT10LmNhbGwoZSxvKX1jYXRjaChlKXthPVs2LGVdLGk9MH1maW5hbGx5e249cj0wfWlmKDUmYVswXSl0aHJvdyBhWzFdO3JldHVybnt2YWx1ZTphWzBdP2FbMV06dm9pZCAwLGRvbmU6ITB9fShbYSxzXSl9fX0sSm89S2koKSxYbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmxzT3B0aW9ucz1lLHRoaXMuZGF0YU1hbmFnZXI9dCx0aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHM9W119cmV0dXJuIGUucHJvdG90eXBlLnNldENvbXBsZXRpb25QYXJ0aWNpcGFudHM9ZnVuY3Rpb24oZSl7dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzPWV8fFtdfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlMj1mdW5jdGlvbihlLHQsbixpLHIpe3JldHVybiBHbyh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGEsbyxzLGw7cmV0dXJuICRvKHRoaXMsKGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlcnx8IXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KXJldHVyblsyLHRoaXMuZG9Db21wbGV0ZShlLHQsbixyKV07YT1uZXcgRm8odGhpcy5sc09wdGlvbnMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3RvcnkpLG89dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bYV0uY29uY2F0KG8pLHM9dGhpcy5kb0NvbXBsZXRlKGUsdCxuLHIpLGMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGMudHJ5cy5wdXNoKFsxLCwzLDRdKSxbNCxhLmNvbXB1dGVDb21wbGV0aW9ucyhlLGkpXTtjYXNlIDI6cmV0dXJuIGw9Yy5zZW50KCksWzIse2lzSW5jb21wbGV0ZTpzLmlzSW5jb21wbGV0ZXx8bC5pc0luY29tcGxldGUsaXRlbXM6bC5pdGVtcy5jb25jYXQocy5pdGVtcyl9XTtjYXNlIDM6cmV0dXJuIHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1vLFs3XTtjYXNlIDQ6cmV0dXJuWzJdfX0pKX0pKX0sZS5wcm90b3R5cGUuZG9Db21wbGV0ZT1mdW5jdGlvbihlLHQsbixpKXt2YXIgcj10aGlzLl9kb0NvbXBsZXRlKGUsdCxuLGkpO3JldHVybiB0aGlzLmNvbnZlcnRDb21wbGV0aW9uTGlzdChyKX0sZS5wcm90b3R5cGUuX2RvQ29tcGxldGU9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9e2lzSW5jb21wbGV0ZTohMSxpdGVtczpbXX0sYT10aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHMsbz10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFQcm92aWRlcnMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzQXBwbGljYWJsZShlLmxhbmd1YWdlSWQpJiYoIWl8fCExIT09aVt0LmdldElkKCldKX0pKSxzPXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpLGw9ZS5nZXRUZXh0KCksYz1lLm9mZnNldEF0KHQpLGg9bi5maW5kTm9kZUJlZm9yZShjKTtpZighaClyZXR1cm4gcjt2YXIgZCx1PXlvKGwsaC5zdGFydCksbT0iIjtmdW5jdGlvbiBwKHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWMpLHQ+YyYmKHQ9Yykse3N0YXJ0OmUucG9zaXRpb25BdCh0KSxlbmQ6ZS5wb3NpdGlvbkF0KG4pfX1mdW5jdGlvbiBmKGUsdCl7dmFyIG49cChlLHQpO3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucHJvdmlkZVRhZ3MoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyLml0ZW1zLnB1c2goe2xhYmVsOmUubmFtZSxraW5kOlFyLlByb3BlcnR5LGRvY3VtZW50YXRpb246T28oZSx2b2lkIDAscyksdGV4dEVkaXQ6eHIucmVwbGFjZShuLGUubmFtZSksaW5zZXJ0VGV4dEZvcm1hdDplYS5QbGFpblRleHR9KX0pKX0pKSxyfWZ1bmN0aW9uIGcoZSl7Zm9yKHZhciB0PWU7dD4wOyl7dmFyIG49bC5jaGFyQXQodC0xKTtpZigiXG5cciIuaW5kZXhPZihuKT49MClyZXR1cm4gbC5zdWJzdHJpbmcodCxlKTtpZighWW8obikpcmV0dXJuIG51bGw7dC0tfXJldHVybiBsLnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIGIoZSx0LG4pe3ZvaWQgMD09PW4mJihuPWMpO3ZhciBpPXAoZSxuKSxhPVFvKGwsbiwkYS5XaXRoaW5FbmRUYWcsamEuRW5kVGFnQ2xvc2UpPyIiOiI+IixkPWg7Zm9yKHQmJihkPWQucGFyZW50KTtkOyl7dmFyIHU9ZC50YWc7aWYodSYmKCFkLmNsb3NlZHx8ZC5lbmRUYWdTdGFydCYmZC5lbmRUYWdTdGFydD5jKSl7dmFyIG09e2xhYmVsOiIvIit1LGtpbmQ6UXIuUHJvcGVydHksZmlsdGVyVGV4dDoiLyIrdSx0ZXh0RWRpdDp4ci5yZXBsYWNlKGksIi8iK3UrYSksaW5zZXJ0VGV4dEZvcm1hdDplYS5QbGFpblRleHR9LGY9ZyhkLnN0YXJ0KSxiPWcoZS0xKTtpZihudWxsIT09ZiYmbnVsbCE9PWImJmYhPT1iKXt2YXIgXz1mKyI8LyIrdSthO20udGV4dEVkaXQ9eHIucmVwbGFjZShwKGUtMS1iLmxlbmd0aCksXyksbS5maWx0ZXJUZXh0PWIrIjwvIit1fXJldHVybiByLml0ZW1zLnB1c2gobSkscn1kPWQucGFyZW50fXJldHVybiB0fHxvLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucHJvdmlkZVRhZ3MoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyLml0ZW1zLnB1c2goe2xhYmVsOiIvIitlLm5hbWUsa2luZDpRci5Qcm9wZXJ0eSxkb2N1bWVudGF0aW9uOk9vKGUsdm9pZCAwLHMpLGZpbHRlclRleHQ6Ii8iK2UubmFtZSthLHRleHRFZGl0OnhyLnJlcGxhY2UoaSwiLyIrZS5uYW1lK2EpLGluc2VydFRleHRGb3JtYXQ6ZWEuUGxhaW5UZXh0fSl9KSl9KSkscn1mdW5jdGlvbiBfKHQsbil7aWYoaSYmaS5oaWRlQXV0b0NvbXBsZXRlUHJvcG9zYWxzKXJldHVybiByO2lmKCFTbyhuKSl7dmFyIGE9ZS5wb3NpdGlvbkF0KHQpO3IuaXRlbXMucHVzaCh7bGFiZWw6IjwvIituKyI+IixraW5kOlFyLlByb3BlcnR5LGZpbHRlclRleHQ6IjwvIituKyI+Iix0ZXh0RWRpdDp4ci5pbnNlcnQoYSwiJDA8LyIrbisiPiIpLGluc2VydFRleHRGb3JtYXQ6ZWEuU25pcHBldH0pfXJldHVybiByfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZihlLHQpLGIoZSwhMCx0KSxyfWZ1bmN0aW9uIHcoZSx0KXt2YXIgYTt2b2lkIDA9PT10JiYodD1jKTtmb3IodmFyIGQ9YztkPHQmJiI8IiE9PWxbZF07KWQrKzt2YXIgdT1sLnN1YnN0cmluZyhlLHQpLGY9cChlLGQpLGc9IiI7aWYoIVFvKGwsdCwkYS5BZnRlckF0dHJpYnV0ZU5hbWUsamEuRGVsaW1pdGVyQXNzaWduKSl7dmFyIGI9bnVsbCE9PShhPW51bGw9PWk/dm9pZCAwOmkuYXR0cmlidXRlRGVmYXVsdFZhbHVlKSYmdm9pZCAwIT09YT9hOiJkb3VibGVxdW90ZXMiO2c9ImVtcHR5Ij09PWI/Ij0kMSI6InNpbmdsZXF1b3RlcyI9PT1iPyI9JyQxJyI6Jz0iJDEiJ312YXIgXyx2PShfPU9iamVjdC5jcmVhdGUobnVsbCksaC5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKChmdW5jdGlvbihlKXtfW2VdPSEwfSkpLF8pO3JldHVybiB2W3VdPSExLG8uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wcm92aWRlQXR0cmlidXRlcyhtKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighdltlLm5hbWVdKXt2W2UubmFtZV09ITA7dmFyIHQsbj1lLm5hbWU7InYiIT09ZS52YWx1ZVNldCYmZy5sZW5ndGgmJihuKz1nLChlLnZhbHVlU2V0fHwic3R5bGUiPT09ZS5uYW1lKSYmKHQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pKSxyLml0ZW1zLnB1c2goe2xhYmVsOmUubmFtZSxraW5kOiJoYW5kbGVyIj09PWUudmFsdWVTZXQ/UXIuRnVuY3Rpb246UXIuVmFsdWUsZG9jdW1lbnRhdGlvbjpPbyhlLHZvaWQgMCxzKSx0ZXh0RWRpdDp4ci5yZXBsYWNlKGYsbiksaW5zZXJ0VGV4dEZvcm1hdDplYS5TbmlwcGV0LGNvbW1hbmQ6dH0pfX0pKX0pKSxmdW5jdGlvbihlLHQpe3ZhciBpPSJkYXRhLSIsYT17fTtmdW5jdGlvbiBvKGUpe2UuYXR0cmlidXRlTmFtZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7IUVvKGUsaSl8fGFbZV18fHRbZV18fChhW2VdPWUrJz0iJDEiJyl9KSksZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pKX1hW2ldPSIiLmNvbmNhdChpLCckMT0iJDIiJyksbiYmbi5yb290cy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pKTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gci5pdGVtcy5wdXNoKHtsYWJlbDp0LGtpbmQ6UXIuVmFsdWUsdGV4dEVkaXQ6eHIucmVwbGFjZShlLGFbdF0pLGluc2VydFRleHRGb3JtYXQ6ZWEuU25pcHBldH0pfSkpfShmLHYpLHJ9ZnVuY3Rpb24geShuLGkpe3ZhciBoLHUsZixnO2lmKHZvaWQgMD09PWkmJihpPWMpLGM+biYmYzw9aSYmKGc9bFtuXSwvXlsiJ10qJC8udGVzdChnKSkpe3ZhciBiPW4rMSxfPWk7aT5uJiZsW2ktMV09PT1sW25dJiZfLS07dmFyIHY9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7dD5uJiYhWW8oZVt0LTFdKTspdC0tO3JldHVybiB0fShsLGMsYiksdz1mdW5jdGlvbihlLHQsbil7Zm9yKDt0PG4mJiFZbyhlW3RdKTspdCsrO3JldHVybiB0fShsLGMsXyk7aD1wKHYsdyksZj1jPj1iJiZjPD1fP2wuc3Vic3RyaW5nKGIsYyk6IiIsdT0hMX1lbHNlIGg9cChuLGkpLGY9bC5zdWJzdHJpbmcobixjKSx1PSEwO2lmKGEubGVuZ3RoPjApZm9yKHZhciB5PW0udG9Mb3dlckNhc2UoKSxUPWQudG9Mb3dlckNhc2UoKSxrPXAobixpKSx4PTAsTD1hO3g8TC5sZW5ndGg7eCsrKXt2YXIgQz1MW3hdO0Mub25IdG1sQXR0cmlidXRlVmFsdWUmJkMub25IdG1sQXR0cmlidXRlVmFsdWUoe2RvY3VtZW50OmUscG9zaXRpb246dCx0YWc6eSxhdHRyaWJ1dGU6VCx2YWx1ZTpmLHJhbmdlOmt9KX1yZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnByb3ZpZGVWYWx1ZXMobSxkKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD11PyciJytlLm5hbWUrJyInOmUubmFtZTtyLml0ZW1zLnB1c2goe2xhYmVsOmUubmFtZSxmaWx0ZXJUZXh0OnQsa2luZDpRci5Vbml0LGRvY3VtZW50YXRpb246T28oZSx2b2lkIDAscyksdGV4dEVkaXQ6eHIucmVwbGFjZShoLHQpLGluc2VydFRleHRGb3JtYXQ6ZWEuUGxhaW5UZXh0fSl9KSl9KSksUygpLHJ9ZnVuY3Rpb24gVChlKXtyZXR1cm4gYz09PXUuZ2V0VG9rZW5FbmQoKSYmKEw9dS5zY2FuKCkpPT09ZSYmdS5nZXRUb2tlbk9mZnNldCgpPT09Yz91LmdldFRva2VuRW5kKCk6Y31mdW5jdGlvbiBrKCl7Zm9yKHZhciBuPTAsaT1hO248aS5sZW5ndGg7bisrKXt2YXIgcj1pW25dO3Iub25IdG1sQ29udGVudCYmci5vbkh0bWxDb250ZW50KHtkb2N1bWVudDplLHBvc2l0aW9uOnR9KX1yZXR1cm4gUygpfWZ1bmN0aW9uIFMoKXtmb3IodmFyIGUsbixpLGE9Yy0xLG89dC5jaGFyYWN0ZXI7YT49MCYmem8obCxhKTspYS0tLG8tLTtpZihhPj0wJiYiJiI9PT1sW2FdKXt2YXIgcz1RaS5jcmVhdGUoWGkuY3JlYXRlKHQubGluZSxvLTEpLHQpO2Zvcih2YXIgaCBpbiBDbylpZihuPSI7IixpPXZvaWQgMCwoaT0oZT1oKS5sZW5ndGgtbi5sZW5ndGgpPjA/ZS5sYXN0SW5kZXhPZihuKT09PWk6MD09PWkmJmU9PT1uKXt2YXIgZD0iJiIraDtyLml0ZW1zLnB1c2goe2xhYmVsOmQsa2luZDpRci5LZXl3b3JkLGRvY3VtZW50YXRpb246Sm8oImVudGl0eS5wcm9wb3NlIiwiQ2hhcmFjdGVyIGVudGl0eSByZXByZXNlbnRpbmcgJyIuY29uY2F0KENvW2hdLCInIikpLHRleHRFZGl0OnhyLnJlcGxhY2UocyxkKSxpbnNlcnRUZXh0Rm9ybWF0OmVhLlBsYWluVGV4dH0pfX1yZXR1cm4gcn1mb3IodmFyIHgsTD11LnNjYW4oKTtMIT09amEuRU9TJiZ1LmdldFRva2VuT2Zmc2V0KCk8PWM7KXtzd2l0Y2goTCl7Y2FzZSBqYS5TdGFydFRhZ09wZW46aWYodS5nZXRUb2tlbkVuZCgpPT09Yyl7dmFyIEM9VChqYS5TdGFydFRhZyk7cmV0dXJuIDA9PT10LmxpbmUmJih4PXZvaWQgMCx4PXAoYyxDKSxyLml0ZW1zLnB1c2goe2xhYmVsOiIhRE9DVFlQRSIsa2luZDpRci5Qcm9wZXJ0eSxkb2N1bWVudGF0aW9uOiJBIHByZWFtYmxlIGZvciBhbiBIVE1MIGRvY3VtZW50LiIsdGV4dEVkaXQ6eHIucmVwbGFjZSh4LCIhRE9DVFlQRSBodG1sPiIpLGluc2VydFRleHRGb3JtYXQ6ZWEuUGxhaW5UZXh0fSkpLHYoYyxDKX1icmVhaztjYXNlIGphLlN0YXJ0VGFnOmlmKHUuZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9dS5nZXRUb2tlbkVuZCgpKXJldHVybiBmKHUuZ2V0VG9rZW5PZmZzZXQoKSx1LmdldFRva2VuRW5kKCkpO209dS5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIGphLkF0dHJpYnV0ZU5hbWU6aWYodS5nZXRUb2tlbk9mZnNldCgpPD1jJiZjPD11LmdldFRva2VuRW5kKCkpcmV0dXJuIHcodS5nZXRUb2tlbk9mZnNldCgpLHUuZ2V0VG9rZW5FbmQoKSk7ZD11LmdldFRva2VuVGV4dCgpO2JyZWFrO2Nhc2UgamEuRGVsaW1pdGVyQXNzaWduOmlmKHUuZ2V0VG9rZW5FbmQoKT09PWMpe0M9VChqYS5BdHRyaWJ1dGVWYWx1ZSk7cmV0dXJuIHkoYyxDKX1icmVhaztjYXNlIGphLkF0dHJpYnV0ZVZhbHVlOmlmKHUuZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9dS5nZXRUb2tlbkVuZCgpKXJldHVybiB5KHUuZ2V0VG9rZW5PZmZzZXQoKSx1LmdldFRva2VuRW5kKCkpO2JyZWFrO2Nhc2UgamEuV2hpdGVzcGFjZTppZihjPD11LmdldFRva2VuRW5kKCkpc3dpdGNoKHUuZ2V0U2Nhbm5lclN0YXRlKCkpe2Nhc2UgJGEuQWZ0ZXJPcGVuaW5nU3RhcnRUYWc6cmV0dXJuIHYodS5nZXRUb2tlbk9mZnNldCgpLFQoamEuU3RhcnRUYWcpKTtjYXNlICRhLldpdGhpblRhZzpjYXNlICRhLkFmdGVyQXR0cmlidXRlTmFtZTpyZXR1cm4gdyh1LmdldFRva2VuRW5kKCkpO2Nhc2UgJGEuQmVmb3JlQXR0cmlidXRlVmFsdWU6cmV0dXJuIHkodS5nZXRUb2tlbkVuZCgpKTtjYXNlICRhLkFmdGVyT3BlbmluZ0VuZFRhZzpyZXR1cm4gYih1LmdldFRva2VuT2Zmc2V0KCktMSwhMSk7Y2FzZSAkYS5XaXRoaW5Db250ZW50OnJldHVybiBrKCl9YnJlYWs7Y2FzZSBqYS5FbmRUYWdPcGVuOmlmKGM8PXUuZ2V0VG9rZW5FbmQoKSlyZXR1cm4gYih1LmdldFRva2VuT2Zmc2V0KCkrMSwhMSxUKGphLkVuZFRhZykpO2JyZWFrO2Nhc2UgamEuRW5kVGFnOmlmKGM8PXUuZ2V0VG9rZW5FbmQoKSlmb3IodmFyIEU9dS5nZXRUb2tlbk9mZnNldCgpLTE7RT49MDspe3ZhciBBPWwuY2hhckF0KEUpO2lmKCIvIj09PUEpcmV0dXJuIGIoRSwhMSx1LmdldFRva2VuRW5kKCkpO2lmKCFZbyhBKSlicmVhaztFLS19YnJlYWs7Y2FzZSBqYS5TdGFydFRhZ0Nsb3NlOmlmKGM8PXUuZ2V0VG9rZW5FbmQoKSYmbSlyZXR1cm4gXyh1LmdldFRva2VuRW5kKCksbSk7YnJlYWs7Y2FzZSBqYS5Db250ZW50OmlmKGM8PXUuZ2V0VG9rZW5FbmQoKSlyZXR1cm4gaygpO2JyZWFrO2RlZmF1bHQ6aWYoYzw9dS5nZXRUb2tlbkVuZCgpKXJldHVybiByfUw9dS5zY2FuKCl9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmRvUXVvdGVDb21wbGV0ZT1mdW5jdGlvbihlLHQsbixpKXt2YXIgcixhPWUub2Zmc2V0QXQodCk7aWYoYTw9MClyZXR1cm4gbnVsbDt2YXIgbz1udWxsIT09KHI9bnVsbD09aT92b2lkIDA6aS5hdHRyaWJ1dGVEZWZhdWx0VmFsdWUpJiZ2b2lkIDAhPT1yP3I6ImRvdWJsZXF1b3RlcyI7aWYoImVtcHR5Ij09PW8pcmV0dXJuIG51bGw7aWYoIj0iIT09ZS5nZXRUZXh0KCkuY2hhckF0KGEtMSkpcmV0dXJuIG51bGw7dmFyIHM9ImRvdWJsZXF1b3RlcyI9PT1vPyciJDEiJzoiJyQxJyIsbD1uLmZpbmROb2RlQmVmb3JlKGEpO2lmKGwmJmwuYXR0cmlidXRlcyYmbC5zdGFydDxhJiYoIWwuZW5kVGFnU3RhcnR8fGwuZW5kVGFnU3RhcnQ+YSkpZm9yKHZhciBjPXlvKGUuZ2V0VGV4dCgpLGwuc3RhcnQpLGg9Yy5zY2FuKCk7aCE9PWphLkVPUyYmYy5nZXRUb2tlbkVuZCgpPD1hOyl7aWYoaD09PWphLkF0dHJpYnV0ZU5hbWUmJmMuZ2V0VG9rZW5FbmQoKT09PWEtMSlyZXR1cm4oaD1jLnNjYW4oKSkhPT1qYS5EZWxpbWl0ZXJBc3NpZ258fChoPWMuc2NhbigpKT09PWphLlVua25vd258fGg9PT1qYS5BdHRyaWJ1dGVWYWx1ZT9udWxsOnM7aD1jLnNjYW4oKX1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuZG9UYWdDb21wbGV0ZT1mdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5vZmZzZXRBdCh0KTtpZihpPD0wKXJldHVybiBudWxsO3ZhciByPWUuZ2V0VGV4dCgpLmNoYXJBdChpLTEpO2lmKCI+Ij09PXIpe2lmKChvPW4uZmluZE5vZGVCZWZvcmUoaSkpJiZvLnRhZyYmIVNvKG8udGFnKSYmby5zdGFydDxpJiYoIW8uZW5kVGFnU3RhcnR8fG8uZW5kVGFnU3RhcnQ+aSkpZm9yKHZhciBhPShzPXlvKGUuZ2V0VGV4dCgpLG8uc3RhcnQpKS5zY2FuKCk7YSE9PWphLkVPUyYmcy5nZXRUb2tlbkVuZCgpPD1pOyl7aWYoYT09PWphLlN0YXJ0VGFnQ2xvc2UmJnMuZ2V0VG9rZW5FbmQoKT09PWkpcmV0dXJuIiQwPC8iLmNvbmNhdChvLnRhZywiPiIpO2E9cy5zY2FuKCl9fWVsc2UgaWYoIi8iPT09cil7Zm9yKHZhciBvPW4uZmluZE5vZGVCZWZvcmUoaSk7byYmby5jbG9zZWQmJiEoby5lbmRUYWdTdGFydCYmby5lbmRUYWdTdGFydD5pKTspbz1vLnBhcmVudDtpZihvJiZvLnRhZyl7dmFyIHM7Zm9yKGE9KHM9eW8oZS5nZXRUZXh0KCksby5zdGFydCkpLnNjYW4oKTthIT09amEuRU9TJiZzLmdldFRva2VuRW5kKCk8PWk7KXtpZihhPT09amEuRW5kVGFnT3BlbiYmcy5nZXRUb2tlbkVuZCgpPT09aSlyZXR1cm4iIi5jb25jYXQoby50YWcsIj4iKTthPXMuc2NhbigpfX19cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmNvbnZlcnRDb21wbGV0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCl8fGUuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kb2N1bWVudGF0aW9uJiYic3RyaW5nIiE9dHlwZW9mIGUuZG9jdW1lbnRhdGlvbiYmKGUuZG9jdW1lbnRhdGlvbj17a2luZDoicGxhaW50ZXh0Iix2YWx1ZTplLmRvY3VtZW50YXRpb24udmFsdWV9KX0pKSxlfSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7dmFyIGUsdCxuO2lmKCFEbyh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXtpZighRG8odGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKSlyZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3duPSEwLHRoaXMuc3VwcG9ydHNNYXJrZG93bjt2YXIgaT1udWxsPT09KG49bnVsbD09PSh0PW51bGw9PT0oZT10aGlzLmxzT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jb21wbGV0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0aW9uSXRlbSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZG9jdW1lbnRhdGlvbkZvcm1hdDt0aGlzLnN1cHBvcnRzTWFya2Rvd249QXJyYXkuaXNBcnJheShpKSYmLTEhPT1pLmluZGV4T2YoSnIuTWFya2Rvd24pfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259LGV9KCk7ZnVuY3Rpb24gWW8oZSl7cmV0dXJuL15ccyokLy50ZXN0KGUpfWZ1bmN0aW9uIFFvKGUsdCxuLGkpe2Zvcih2YXIgcj15byhlLHQsbiksYT1yLnNjYW4oKTthPT09amEuV2hpdGVzcGFjZTspYT1yLnNjYW4oKTtyZXR1cm4gYT09PWl9dmFyIFpvLGVzLHRzLG5zPUtpKCksaXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5sc09wdGlvbnM9ZSx0aGlzLmRhdGFNYW5hZ2VyPXR9cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9dGhpcy5jb252ZXJ0Q29udGVudHMuYmluZCh0aGlzKSxhPXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpLG89ZS5vZmZzZXRBdCh0KSxzPW4uZmluZE5vZGVBdChvKSxsPWUuZ2V0VGV4dCgpO2lmKCFzfHwhcy50YWcpcmV0dXJuIG51bGw7dmFyIGM9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc0FwcGxpY2FibGUoZS5sYW5ndWFnZUlkKX0pKTtmdW5jdGlvbiBoKGUsdCxuKXtmb3IodmFyIG89ZnVuY3Rpb24obil7dmFyIG89bnVsbDtpZihuLnByb3ZpZGVUYWdzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYobi5uYW1lLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpe3ZhciByPU9vKG4saSxhKTtyfHwocj17a2luZDphPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9KSxvPXtjb250ZW50czpyLHJhbmdlOnR9fX0pKSxvKXJldHVybiBvLmNvbnRlbnRzPXIoby5jb250ZW50cykse3ZhbHVlOm99fSxzPTAsbD1jO3M8bC5sZW5ndGg7cysrKXt2YXIgaD1vKGxbc10pO2lmKCJvYmplY3QiPT10eXBlb2YgaClyZXR1cm4gaC52YWx1ZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKHQsbil7Zm9yKHZhciBpPXlvKGUuZ2V0VGV4dCgpLG4pLHI9aS5zY2FuKCk7ciE9PWphLkVPUyYmKGkuZ2V0VG9rZW5FbmQoKTxvfHxpLmdldFRva2VuRW5kKCk9PT1vJiZyIT09dCk7KXI9aS5zY2FuKCk7cmV0dXJuIHI9PT10JiZvPD1pLmdldFRva2VuRW5kKCk/e3N0YXJ0OmUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLGVuZDplLnBvc2l0aW9uQXQoaS5nZXRUb2tlbkVuZCgpKX06bnVsbH1pZihzLmVuZFRhZ1N0YXJ0JiZvPj1zLmVuZFRhZ1N0YXJ0KXt2YXIgdT1kKGphLkVuZFRhZyxzLmVuZFRhZ1N0YXJ0KTtyZXR1cm4gdT9oKHMudGFnLHUpOm51bGx9dmFyIG09ZChqYS5TdGFydFRhZyxzLnN0YXJ0KTtpZihtKXJldHVybiBoKHMudGFnLG0pO3ZhciBwPWQoamEuQXR0cmlidXRlTmFtZSxzLnN0YXJ0KTtpZihwKXJldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvPWZ1bmN0aW9uKG8pe3ZhciBzPW51bGw7aWYoby5wcm92aWRlQXR0cmlidXRlcyhlKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZih0PT09ZS5uYW1lJiZlLmRlc2NyaXB0aW9uKXt2YXIgcj1PbyhlLGksYSk7cz1yP3tjb250ZW50czpyLHJhbmdlOm59Om51bGx9fSkpLHMpcmV0dXJuIHMuY29udGVudHM9cihzLmNvbnRlbnRzKSx7dmFsdWU6c319LHM9MCxsPWM7czxsLmxlbmd0aDtzKyspe3ZhciBoPW8obFtzXSk7aWYoIm9iamVjdCI9PXR5cGVvZiBoKXJldHVybiBoLnZhbHVlfXJldHVybiBudWxsfShiPXMudGFnLGUuZ2V0VGV4dChwKSxwKTt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgZT1vLTEsbj10LmNoYXJhY3RlcjtlPj0wJiZ6byhsLGUpOyllLS0sbi0tO2Zvcih2YXIgaT1lKzEscj1uO3pvKGwsaSk7KWkrKyxyKys7aWYoZT49MCYmIiYiPT09bFtlXSl7cmV0dXJuIjsiPT09bFtpXT9RaS5jcmVhdGUoWGkuY3JlYXRlKHQubGluZSxuKSxYaS5jcmVhdGUodC5saW5lLHIrMSkpOlFpLmNyZWF0ZShYaS5jcmVhdGUodC5saW5lLG4pLFhpLmNyZWF0ZSh0LmxpbmUscikpfXJldHVybiBudWxsfSgpO2lmKGYpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8tMSxuPSImIjt0Pj0wJiZ6byhlLHQpOyl0LS07Zm9yKHQrPTE7em8oZSx0KTspbis9ZVt0XSx0Kz0xO3JldHVybiBuKyI7In0oZSk7Zm9yKHZhciBpIGluIENvKXt2YXIgYT1udWxsO2lmKG49PT0iJiIraSl7dmFyIHM9Q29baV0uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxsPSJVKyI7aWYocy5sZW5ndGg8NClmb3IodmFyIGM9NC1zLmxlbmd0aCxoPTA7aDxjOylsKz0iMCIsaCs9MTtsKz1zO3ZhciBkPW5zKCJlbnRpdHkucHJvcG9zZSIsIkNoYXJhY3RlciBlbnRpdHkgcmVwcmVzZW50aW5nICciLmNvbmNhdChDb1tpXSwiJywgdW5pY29kZSBlcXVpdmFsZW50ICciKS5jb25jYXQobCwiJyIpKTthPWQ/e2NvbnRlbnRzOmQscmFuZ2U6dH06bnVsbH1pZihhKXJldHVybiBhLmNvbnRlbnRzPXIoYS5jb250ZW50cyksYX1yZXR1cm4gbnVsbH0obCxmKTt2YXIgZz1kKGphLkF0dHJpYnV0ZVZhbHVlLHMuc3RhcnQpO2lmKGcpe3ZhciBiPXMudGFnLF89ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGUucmVwbGFjZSgvWyciXS8sIiIpOyInIiE9PWVbMF0mJiciJyE9PWVbMF18fChlPWUuc2xpY2UoMSkpOyInIiE9PWVbZS5sZW5ndGgtMV0mJiciJyE9PWVbZS5sZW5ndGgtMV18fChlPWUuc2xpY2UoMCwtMSkpO3JldHVybiBlfShlLmdldFRleHQoZykpLHY9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGk9eW8oZS5nZXRUZXh0KCksdCkscj1pLnNjYW4oKSxhPXZvaWQgMDtyIT09amEuRU9TJiZpLmdldFRva2VuRW5kKCk8PW47KShyPWkuc2NhbigpKT09PWphLkF0dHJpYnV0ZU5hbWUmJihhPWkuZ2V0VG9rZW5UZXh0KCkpO3JldHVybiBhfShzLnN0YXJ0LGUub2Zmc2V0QXQoZy5zdGFydCkpO2lmKHYpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgcz1mdW5jdGlvbihzKXt2YXIgbD1udWxsO2lmKHMucHJvdmlkZVZhbHVlcyhlLHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKG49PT1lLm5hbWUmJmUuZGVzY3JpcHRpb24pe3ZhciB0PU9vKGUsaSxhKTtsPXQ/e2NvbnRlbnRzOnQscmFuZ2U6b306bnVsbH19KSksbClyZXR1cm4gbC5jb250ZW50cz1yKGwuY29udGVudHMpLHt2YWx1ZTpsfX0sbD0wLGg9YztsPGgubGVuZ3RoO2wrKyl7dmFyIGQ9cyhoW2xdKTtpZigib2JqZWN0Ij09dHlwZW9mIGQpcmV0dXJuIGQudmFsdWV9cmV0dXJuIG51bGx9KGIsdixfLGcpfXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5jb252ZXJ0Q29udGVudHM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoImtpbmQiaW4gZSlyZXR1cm57a2luZDoicGxhaW50ZXh0Iix2YWx1ZTplLnZhbHVlfTtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS52YWx1ZTtlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZS52YWx1ZX0pKX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe3ZhciBlLHQsbjtpZighRG8odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIURvKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247dmFyIGk9bnVsbD09PShuPW51bGw9PT0odD1udWxsPT09KGU9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50ZXh0RG9jdW1lbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhvdmVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb250ZW50Rm9ybWF0O3RoaXMuc3VwcG9ydHNNYXJrZG93bj1BcnJheS5pc0FycmF5KGkpJiYtMSE9PWkuaW5kZXhPZihKci5NYXJrZG93bil9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZX0oKTtmdW5jdGlvbiBycyhlLHQpe3JldHVybiBlfVpvPVssLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5fX3BhcmVudD1lLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9faW5kZW50X2NvdW50PS0xLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleD0wLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD0tMSx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9faXRlbXM9W119ZnVuY3Rpb24gbihlLHQpe3RoaXMuX19jYWNoZT1bIiJdLHRoaXMuX19pbmRlbnRfc2l6ZT1lLmluZGVudF9zaXplLHRoaXMuX19pbmRlbnRfc3RyaW5nPWUuaW5kZW50X2NoYXIsZS5pbmRlbnRfd2l0aF90YWJzfHwodGhpcy5fX2luZGVudF9zdHJpbmc9bmV3IEFycmF5KGUuaW5kZW50X3NpemUrMSkuam9pbihlLmluZGVudF9jaGFyKSksdD10fHwiIixlLmluZGVudF9sZXZlbD4wJiYodD1uZXcgQXJyYXkoZS5pbmRlbnRfbGV2ZWwrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLHRoaXMuX19iYXNlX3N0cmluZz10LHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaShlLGkpe3RoaXMuX19pbmRlbnRfY2FjaGU9bmV3IG4oZSxpKSx0aGlzLnJhdz0hMSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lPWUuZW5kX3dpdGhfbmV3bGluZSx0aGlzLmluZGVudF9zaXplPWUuaW5kZW50X3NpemUsdGhpcy53cmFwX2xpbmVfbGVuZ3RoPWUud3JhcF9saW5lX2xlbmd0aCx0aGlzLmluZGVudF9lbXB0eV9saW5lcz1lLmluZGVudF9lbXB0eV9saW5lcyx0aGlzLl9fbGluZXM9W10sdGhpcy5wcmV2aW91c19saW5lPW51bGwsdGhpcy5jdXJyZW50X2xpbmU9bnVsbCx0aGlzLm5leHRfbGluZT1uZXcgdCh0aGlzKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITEsdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCl9dC5wcm90b3R5cGUuY2xvbmVfZW1wdHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdCh0aGlzLl9fcGFyZW50KTtyZXR1cm4gZS5zZXRfaW5kZW50KHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksZX0sdC5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gZTwwP3RoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoK2VdOnRoaXMuX19pdGVtc1tlXX0sdC5wcm90b3R5cGUuaGFzX21hdGNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9faXRlbXMubGVuZ3RoLTE7dD49MDt0LS0paWYodGhpcy5fX2l0ZW1zW3RdLm1hdGNoKGUpKXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5pc19lbXB0eSgpJiYodGhpcy5fX2luZGVudF9jb3VudD1lfHwwLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9dHx8MCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zaXplKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCkpfSx0LnByb3RvdHlwZS5fc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRleD10aGlzLl9faXRlbXMubGVuZ3RoLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fY2hhcmFjdGVyX2NvdW50LHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19hbGlnbm1lbnRfY291bnQpfSx0LnByb3RvdHlwZS5fc2hvdWxkX3dyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgmJnRoaXMuX19jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiZ0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19jaGFyYWN0ZXJfY291bnR9LHQucHJvdG90eXBlLl9hbGxvd193cmFwPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvdWxkX3dyYXAoKSl7dGhpcy5fX3BhcmVudC5hZGRfbmV3X2xpbmUoKTt2YXIgZT10aGlzLl9fcGFyZW50LmN1cnJlbnRfbGluZTtyZXR1cm4gZS5zZXRfaW5kZW50KHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQpLGUuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLHRoaXMuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UoMCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksZS5fX2NoYXJhY3Rlcl9jb3VudCs9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudC10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsIiAiPT09ZS5fX2l0ZW1zWzBdJiYoZS5fX2l0ZW1zLnNwbGljZSgwLDEpLGUuX19jaGFyYWN0ZXJfY291bnQtPTEpLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fX2l0ZW1zLmxlbmd0aH0sdC5wcm90b3R5cGUubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCk/bnVsbDp0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aC0xXX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt0aGlzLl9faXRlbXMucHVzaChlKTt2YXIgdD1lLmxhc3RJbmRleE9mKCJcbiIpOy0xIT09dD90aGlzLl9fY2hhcmFjdGVyX2NvdW50PWUubGVuZ3RoLXQ6dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCs9ZS5sZW5ndGh9LHQucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBlPW51bGw7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8KGU9dGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPWUubGVuZ3RoKSxlfSx0LnByb3RvdHlwZS5fcmVtb3ZlX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX19pbmRlbnRfY291bnQ+MCYmKHRoaXMuX19pbmRlbnRfY291bnQtPTEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09dGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZSl9LHQucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ+MCYmKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudC09MSl9LHQucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IoOyIgIj09PXRoaXMubGFzdCgpOyl0aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09MX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP3RoaXMuX19wYXJlbnQuaW5kZW50X2VtcHR5X2xpbmVzJiYoZT10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQpKTooZT10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksZSs9dGhpcy5fX2l0ZW1zLmpvaW4oIiIpKSxlfSxuLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO3JldHVybiB0PXR8fDAsZTwwJiYobj0wKSxuKz1lKnRoaXMuX19pbmRlbnRfc2l6ZSxuKz10fSxuLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19iYXNlX3N0cmluZztyZXR1cm4gdD10fHwwLGU8MCYmKGU9MCxuPSIiKSx0Kz1lKnRoaXMuX19pbmRlbnRfc2l6ZSx0aGlzLl9fZW5zdXJlX2NhY2hlKHQpLG4rPXRoaXMuX19jYWNoZVt0XX0sbi5wcm90b3R5cGUuX19lbnN1cmVfY2FjaGU9ZnVuY3Rpb24oZSl7Zm9yKDtlPj10aGlzLl9fY2FjaGUubGVuZ3RoOyl0aGlzLl9fYWRkX2NvbHVtbigpfSxuLnByb3RvdHlwZS5fX2FkZF9jb2x1bW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fY2FjaGUubGVuZ3RoLHQ9MCxuPSIiO3RoaXMuX19pbmRlbnRfc2l6ZSYmZT49dGhpcy5fX2luZGVudF9zaXplJiYoZS09KHQ9TWF0aC5mbG9vcihlL3RoaXMuX19pbmRlbnRfc2l6ZSkpKnRoaXMuX19pbmRlbnRfc2l6ZSxuPW5ldyBBcnJheSh0KzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSxlJiYobis9bmV3IEFycmF5KGUrMSkuam9pbigiICIpKSx0aGlzLl9fY2FjaGUucHVzaChuKX0saS5wcm90b3R5cGUuX19hZGRfb3V0cHV0bGluZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXNfbGluZT10aGlzLmN1cnJlbnRfbGluZSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLm5leHRfbGluZS5jbG9uZV9lbXB0eSgpLHRoaXMuX19saW5lcy5wdXNoKHRoaXMuY3VycmVudF9saW5lKX0saS5wcm90b3R5cGUuZ2V0X2xpbmVfbnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19saW5lcy5sZW5ndGh9LGkucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zdHJpbmcoZSx0KX0saS5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zaXplKGUsdCl9LGkucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJldmlvdXNfbGluZSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0saS5wcm90b3R5cGUuYWRkX25ld19saW5lPWZ1bmN0aW9uKGUpe3JldHVybiEodGhpcy5pc19lbXB0eSgpfHwhZSYmdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKXx8KHRoaXMucmF3fHx0aGlzLl9fYWRkX291dHB1dGxpbmUoKSwwKSl9LGkucHJvdG90eXBlLmdldF9jb2RlPWZ1bmN0aW9uKGUpe3RoaXMudHJpbSghMCk7dmFyIHQ9dGhpcy5jdXJyZW50X2xpbmUucG9wKCk7dCYmKCJcbiI9PT10W3QubGVuZ3RoLTFdJiYodD10LnJlcGxhY2UoL1xuKyQvZywiIikpLHRoaXMuY3VycmVudF9saW5lLnB1c2godCkpLHRoaXMuX2VuZF93aXRoX25ld2xpbmUmJnRoaXMuX19hZGRfb3V0cHV0bGluZSgpO3ZhciBuPXRoaXMuX19saW5lcy5qb2luKCJcbiIpO3JldHVybiJcbiIhPT1lJiYobj1uLnJlcGxhY2UoL1tcbl0vZyxlKSksbn0saS5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRfbGluZS5fc2V0X3dyYXBfcG9pbnQoKX0saS5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihlLHQpe3JldHVybiBlPWV8fDAsdD10fHwwLHRoaXMubmV4dF9saW5lLnNldF9pbmRlbnQoZSx0KSx0aGlzLl9fbGluZXMubGVuZ3RoPjE/KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoZSx0KSwhMCk6KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoKSwhMSl9LGkucHJvdG90eXBlLmFkZF9yYXdfdG9rZW49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLm5ld2xpbmVzO3QrKyl0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGUud2hpdGVzcGFjZV9iZWZvcmUpLHRoaXMuY3VycmVudF9saW5lLnB1c2goZS50ZXh0KSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITF9LGkucHJvdG90eXBlLmFkZF90b2tlbj1mdW5jdGlvbihlKXt0aGlzLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbigpLHRoaXMuY3VycmVudF9saW5lLnB1c2goZSksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPXRoaXMuY3VycmVudF9saW5lLl9hbGxvd193cmFwKCl9LGkucHJvdG90eXBlLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbj1mdW5jdGlvbigpe3RoaXMuc3BhY2VfYmVmb3JlX3Rva2VuJiYhdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSYmKHRoaXMubm9uX2JyZWFraW5nX3NwYWNlfHx0aGlzLnNldF93cmFwX3BvaW50KCksdGhpcy5jdXJyZW50X2xpbmUucHVzaCgiICIpKX0saS5wcm90b3R5cGUucmVtb3ZlX2luZGVudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fX2xpbmVzLmxlbmd0aDtlPHQ7KXRoaXMuX19saW5lc1tlXS5fcmVtb3ZlX2luZGVudCgpLGUrKzt0aGlzLmN1cnJlbnRfbGluZS5fcmVtb3ZlX3dyYXBfaW5kZW50KCl9LGkucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oZSl7Zm9yKGU9dm9pZCAwIT09ZSYmZSx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7ZSYmdGhpcy5fX2xpbmVzLmxlbmd0aD4xJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpOyl0aGlzLl9fbGluZXMucG9wKCksdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMV0sdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO3RoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXMubGVuZ3RoPjE/dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl06bnVsbH0saS5wcm90b3R5cGUuanVzdF9hZGRlZF9uZXdsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LGkucHJvdG90eXBlLmp1c3RfYWRkZWRfYmxhbmtsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8dGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSYmdGhpcy5wcmV2aW91c19saW5lLmlzX2VtcHR5KCl9LGkucHJvdG90eXBlLmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPXRoaXMuX19saW5lcy5sZW5ndGgtMjtpPj0wOyl7dmFyIHI9dGhpcy5fX2xpbmVzW2ldO2lmKHIuaXNfZW1wdHkoKSlicmVhaztpZigwIT09ci5pdGVtKDApLmluZGV4T2YoZSkmJnIuaXRlbSgtMSkhPT1uKXt0aGlzLl9fbGluZXMuc3BsaWNlKGkrMSwwLG5ldyB0KHRoaXMpKSx0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl07YnJlYWt9aS0tfX0sZS5leHBvcnRzLk91dHB1dD1pfSwsLCxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5yYXdfb3B0aW9ucz1uKGUsdCksdGhpcy5kaXNhYmxlZD10aGlzLl9nZXRfYm9vbGVhbigiZGlzYWJsZWQiKSx0aGlzLmVvbD10aGlzLl9nZXRfY2hhcmFjdGVycygiZW9sIiwiYXV0byIpLHRoaXMuZW5kX3dpdGhfbmV3bGluZT10aGlzLl9nZXRfYm9vbGVhbigiZW5kX3dpdGhfbmV3bGluZSIpLHRoaXMuaW5kZW50X3NpemU9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X3NpemUiLDQpLHRoaXMuaW5kZW50X2NoYXI9dGhpcy5fZ2V0X2NoYXJhY3RlcnMoImluZGVudF9jaGFyIiwiICIpLHRoaXMuaW5kZW50X2xldmVsPXRoaXMuX2dldF9udW1iZXIoImluZGVudF9sZXZlbCIpLHRoaXMucHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X2Jvb2xlYW4oInByZXNlcnZlX25ld2xpbmVzIiwhMCksdGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X251bWJlcigibWF4X3ByZXNlcnZlX25ld2xpbmVzIiwzMjc4NiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lc3x8KHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPTApLHRoaXMuaW5kZW50X3dpdGhfdGFicz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X3dpdGhfdGFicyIsIlx0Ij09PXRoaXMuaW5kZW50X2NoYXIpLHRoaXMuaW5kZW50X3dpdGhfdGFicyYmKHRoaXMuaW5kZW50X2NoYXI9Ilx0IiwxPT09dGhpcy5pbmRlbnRfc2l6ZSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9ZnVuY3Rpb24gbihlLHQpe3ZhciBuLHI9e307Zm9yKG4gaW4gZT1pKGUpKW4hPT10JiYocltuXT1lW25dKTtpZih0JiZlW3RdKWZvcihuIGluIGVbdF0pcltuXT1lW3RdW25dO3JldHVybiByfWZ1bmN0aW9uIGkoZSl7dmFyIHQsbj17fTtmb3IodCBpbiBlKW5bdC5yZXBsYWNlKC8tL2csIl8iKV09ZVt0XTtyZXR1cm4gbn10LnByb3RvdHlwZS5fZ2V0X2FycmF5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yYXdfb3B0aW9uc1tlXSxpPXR8fFtdO3JldHVybiJvYmplY3QiPT10eXBlb2Ygbj9udWxsIT09biYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY29uY2F0JiYoaT1uLmNvbmNhdCgpKToic3RyaW5nIj09dHlwZW9mIG4mJihpPW4uc3BsaXQoL1teYS16QS1aMC05X1wvXC1dKy8pKSxpfSx0LnByb3RvdHlwZS5fZ2V0X2Jvb2xlYW49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJhd19vcHRpb25zW2VdO3JldHVybiB2b2lkIDA9PT1uPyEhdDohIW59LHQucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmF3X29wdGlvbnNbZV0saT10fHwiIjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4mJihpPW4ucmVwbGFjZSgvXFxyLywiXHIiKS5yZXBsYWNlKC9cXG4vLCJcbiIpLnJlcGxhY2UoL1xcdC8sIlx0IikpLGl9LHQucHJvdG90eXBlLl9nZXRfbnVtYmVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yYXdfb3B0aW9uc1tlXTt0PXBhcnNlSW50KHQsMTApLGlzTmFOKHQpJiYodD0wKTt2YXIgaT1wYXJzZUludChuLDEwKTtyZXR1cm4gaXNOYU4oaSkmJihpPXQpLGl9LHQucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QoZSx0LG4pO2lmKDEhPT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK2UrIicgY2FuIG9ubHkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuIit0KyJcbllvdSBwYXNzZWQgaW46ICciK3RoaXMucmF3X29wdGlvbnNbZV0rIiciKTtyZXR1cm4gaVswXX0sdC5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihlLHQsbil7aWYoIXR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihuPW58fFt0WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKG4sdCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGk9dGhpcy5fZ2V0X2FycmF5KGUsbik7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihpLHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrZSsiJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuIit0KyJcbllvdSBwYXNzZWQgaW46ICciK3RoaXMucmF3X29wdGlvbnNbZV0rIiciKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuX2lzX3ZhbGlkX3NlbGVjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aCYmdC5sZW5ndGgmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5pbmRleE9mKGUpfSkpfSxlLmV4cG9ydHMuT3B0aW9ucz10LGUuZXhwb3J0cy5ub3JtYWxpemVPcHRzPWksZS5leHBvcnRzLm1lcmdlT3B0cz1ufSwsZnVuY3Rpb24oZSl7dmFyIHQ9UmVnRXhwLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic3RpY2t5Iik7ZnVuY3Rpb24gbihlKXt0aGlzLl9faW5wdXQ9ZXx8IiIsdGhpcy5fX2lucHV0X2xlbmd0aD10aGlzLl9faW5wdXQubGVuZ3RoLHRoaXMuX19wb3NpdGlvbj0wfW4ucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb249MH0sbi5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj4wJiYodGhpcy5fX3Bvc2l0aW9uLT0xKX0sbi5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcG9zaXRpb248dGhpcy5fX2lucHV0X2xlbmd0aH0sbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPW51bGw7cmV0dXJuIHRoaXMuaGFzTmV4dCgpJiYoZT10aGlzLl9faW5wdXQuY2hhckF0KHRoaXMuX19wb3NpdGlvbiksdGhpcy5fX3Bvc2l0aW9uKz0xKSxlfSxuLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7cmV0dXJuIGU9ZXx8MCwoZSs9dGhpcy5fX3Bvc2l0aW9uKT49MCYmZTx0aGlzLl9faW5wdXRfbGVuZ3RoJiYodD10aGlzLl9faW5wdXQuY2hhckF0KGUpKSx0fSxuLnByb3RvdHlwZS5fX21hdGNoPWZ1bmN0aW9uKGUsbil7ZS5sYXN0SW5kZXg9bjt2YXIgaT1lLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4haXx8dCYmZS5zdGlja3l8fGkuaW5kZXghPT1uJiYoaT1udWxsKSxpfSxuLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8MCwodCs9dGhpcy5fX3Bvc2l0aW9uKT49MCYmdDx0aGlzLl9faW5wdXRfbGVuZ3RoJiYhIXRoaXMuX19tYXRjaChlLHQpfSxuLnByb3RvdHlwZS50ZXN0Q2hhcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucGVlayh0KTtyZXR1cm4gZS5sYXN0SW5kZXg9MCxudWxsIT09biYmZS50ZXN0KG4pfSxuLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fbWF0Y2goZSx0aGlzLl9fcG9zaXRpb24pO3JldHVybiB0P3RoaXMuX19wb3NpdGlvbis9dFswXS5sZW5ndGg6dD1udWxsLHR9LG4ucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHI9IiI7cmV0dXJuIGUmJihpPXRoaXMubWF0Y2goZSkpJiYocis9aVswXSksIXR8fCFpJiZlfHwocis9dGhpcy5yZWFkVW50aWwodCxuKSkscn0sbi5wcm90b3R5cGUucmVhZFVudGlsPWZ1bmN0aW9uKGUsdCl7dmFyIG4saT10aGlzLl9fcG9zaXRpb247ZS5sYXN0SW5kZXg9dGhpcy5fX3Bvc2l0aW9uO3ZhciByPWUuZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiByPyhpPXIuaW5kZXgsdCYmKGkrPXJbMF0ubGVuZ3RoKSk6aT10aGlzLl9faW5wdXRfbGVuZ3RoLG49dGhpcy5fX2lucHV0LnN1YnN0cmluZyh0aGlzLl9fcG9zaXRpb24saSksdGhpcy5fX3Bvc2l0aW9uPWksbn0sbi5wcm90b3R5cGUucmVhZFVudGlsQWZ0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVhZFVudGlsKGUsITApfSxuLnByb3RvdHlwZS5nZXRfcmVnZXhwPWZ1bmN0aW9uKGUsbil7dmFyIGk9bnVsbCxyPSJnIjtyZXR1cm4gbiYmdCYmKHI9InkiKSwic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZT9pPW5ldyBSZWdFeHAoZSxyKTplJiYoaT1uZXcgUmVnRXhwKGUuc291cmNlLHIpKSxpfSxuLnByb3RvdHlwZS5nZXRfbGl0ZXJhbF9yZWdleHA9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZ0V4cChlLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIikpfSxuLnByb3RvdHlwZS5wZWVrVW50aWxBZnRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fcG9zaXRpb24sbj10aGlzLnJlYWRVbnRpbEFmdGVyKGUpO3JldHVybiB0aGlzLl9fcG9zaXRpb249dCxufSxuLnByb3RvdHlwZS5sb29rQmFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fcG9zaXRpb24tMTtyZXR1cm4gdD49ZS5sZW5ndGgmJnRoaXMuX19pbnB1dC5zdWJzdHJpbmcodC1lLmxlbmd0aCx0KS50b0xvd2VyQ2FzZSgpPT09ZX0sZS5leHBvcnRzLklucHV0U2Nhbm5lcj1ufSwsLCwsZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe2U9InN0cmluZyI9PXR5cGVvZiBlP2U6ZS5zb3VyY2UsdD0ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnNvdXJjZSx0aGlzLl9fZGlyZWN0aXZlc19ibG9ja19wYXR0ZXJuPW5ldyBSZWdFeHAoZSsvIGJlYXV0aWZ5KCBcdytbOl1cdyspKyAvLnNvdXJjZSt0LCJnIiksdGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuPS8gKFx3KylbOl0oXHcrKS9nLHRoaXMuX19kaXJlY3RpdmVzX2VuZF9pZ25vcmVfcGF0dGVybj1uZXcgUmVnRXhwKGUrL1xzYmVhdXRpZnlcc2lnbm9yZTplbmRccy8uc291cmNlK3QsImciKX10LnByb3RvdHlwZS5nZXRfZGlyZWN0aXZlcz1mdW5jdGlvbihlKXtpZighZS5tYXRjaCh0aGlzLl9fZGlyZWN0aXZlc19ibG9ja19wYXR0ZXJuKSlyZXR1cm4gbnVsbDt2YXIgdD17fTt0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4ubGFzdEluZGV4PTA7Zm9yKHZhciBuPXRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5leGVjKGUpO247KXRbblsxXV09blsyXSxuPXRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5leGVjKGUpO3JldHVybiB0fSx0LnByb3RvdHlwZS5yZWFkSWdub3JlZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZWFkVW50aWxBZnRlcih0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm4pfSxlLmV4cG9ydHMuRGlyZWN0aXZlcz10fSwsZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMTYpLkJlYXV0aWZpZXIscj1uKDE3KS5PcHRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgaShlLHQpLmJlYXV0aWZ5KCl9LGUuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBuZXcgcn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE3KS5PcHRpb25zLHI9bigyKS5PdXRwdXQsYT1uKDgpLklucHV0U2Nhbm5lcixvPW5ldygwLG4oMTMpLkRpcmVjdGl2ZXMpKC9cL1wqLywvXCpcLy8pLHM9L1xyXG58W1xyXG5dLyxsPS9cclxufFtcclxuXS9nLGM9L1xzLyxoPS8oPzpcc3xcbikrL2csZD0vXC9cKig/Oltcc1xTXSo/KSgoPzpcKlwvKXwkKS9nLHU9L1wvXC8oPzpbXlxuXHJcdTIwMjhcdTIwMjldKikvZztmdW5jdGlvbiBtKGUsdCl7dGhpcy5fc291cmNlX3RleHQ9ZXx8IiIsdGhpcy5fb3B0aW9ucz1uZXcgaSh0KSx0aGlzLl9jaD1udWxsLHRoaXMuX2lucHV0PW51bGwsdGhpcy5ORVNURURfQVRfUlVMRT17IkBwYWdlIjohMCwiQGZvbnQtZmFjZSI6ITAsIkBrZXlmcmFtZXMiOiEwLCJAbWVkaWEiOiEwLCJAc3VwcG9ydHMiOiEwLCJAZG9jdW1lbnQiOiEwfSx0aGlzLkNPTkRJVElPTkFMX0dST1VQX1JVTEU9eyJAbWVkaWEiOiEwLCJAc3VwcG9ydHMiOiEwLCJAZG9jdW1lbnQiOiEwfX1tLnByb3RvdHlwZS5lYXRTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7Zm9yKHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKTt0aGlzLl9jaDspe2lmKHQrPXRoaXMuX2NoLCJcXCI9PT10aGlzLl9jaCl0Kz10aGlzLl9pbnB1dC5uZXh0KCk7ZWxzZSBpZigtMSE9PWUuaW5kZXhPZih0aGlzLl9jaCl8fCJcbiI9PT10aGlzLl9jaClicmVhazt0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCl9cmV0dXJuIHR9LG0ucHJvdG90eXBlLmVhdFdoaXRlc3BhY2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWMudGVzdCh0aGlzLl9pbnB1dC5wZWVrKCkpLG49MDtjLnRlc3QodGhpcy5faW5wdXQucGVlaygpKTspdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLGUmJiJcbiI9PT10aGlzLl9jaCYmKDA9PT1ufHxuPHRoaXMuX29wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzKSYmKG4rKyx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCEwKSk7cmV0dXJuIHR9LG0ucHJvdG90eXBlLmZvdW5kTmVzdGVkUHNldWRvQ2xhc3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTEsbj10aGlzLl9pbnB1dC5wZWVrKHQpO247KXtpZigieyI9PT1uKXJldHVybiEwO2lmKCIoIj09PW4pZSs9MTtlbHNlIGlmKCIpIj09PW4pe2lmKDA9PT1lKXJldHVybiExO2UtPTF9ZWxzZSBpZigiOyI9PT1ufHwifSI9PT1uKXJldHVybiExO3QrKyxuPXRoaXMuX2lucHV0LnBlZWsodCl9cmV0dXJuITF9LG0ucHJvdG90eXBlLnByaW50X3N0cmluZz1mdW5jdGlvbihlKXt0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCksdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT0hMCx0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGUpfSxtLnByb3RvdHlwZS5wcmVzZXJ2ZVNpbmdsZVNwYWNlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKX0sbS5wcm90b3R5cGUuaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5kZW50TGV2ZWwrK30sbS5wcm90b3R5cGUub3V0ZGVudD1mdW5jdGlvbigpe3RoaXMuX2luZGVudExldmVsPjAmJnRoaXMuX2luZGVudExldmVsLS19LG0ucHJvdG90eXBlLmJlYXV0aWZ5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3B0aW9ucy5kaXNhYmxlZClyZXR1cm4gdGhpcy5fc291cmNlX3RleHQ7dmFyIGU9dGhpcy5fc291cmNlX3RleHQsdD10aGlzLl9vcHRpb25zLmVvbDsiYXV0byI9PT10JiYodD0iXG4iLGUmJnMudGVzdChlfHwiIikmJih0PWUubWF0Y2gocylbMF0pKTt2YXIgbj0oZT1lLnJlcGxhY2UobCwiXG4iKSkubWF0Y2goL15bXHQgXSovKVswXTt0aGlzLl9vdXRwdXQ9bmV3IHIodGhpcy5fb3B0aW9ucyxuKSx0aGlzLl9pbnB1dD1uZXcgYShlKSx0aGlzLl9pbmRlbnRMZXZlbD0wLHRoaXMuX25lc3RlZExldmVsPTAsdGhpcy5fY2g9bnVsbDtmb3IodmFyIGksbSxwPTAsZj0hMSxnPSExLGI9ITEsXz0hMSx2PSExLHc9dGhpcy5fY2g7aT0iIiE9PXRoaXMuX2lucHV0LnJlYWQoaCksbT13LHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSwiXFwiPT09dGhpcy5fY2gmJnRoaXMuX2lucHV0Lmhhc05leHQoKSYmKHRoaXMuX2NoKz10aGlzLl9pbnB1dC5uZXh0KCkpLHc9dGhpcy5fY2gsdGhpcy5fY2g7KWlmKCIvIj09PXRoaXMuX2NoJiYiKiI9PT10aGlzLl9pbnB1dC5wZWVrKCkpe3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLl9pbnB1dC5iYWNrKCk7dmFyIHk9dGhpcy5faW5wdXQucmVhZChkKSxUPW8uZ2V0X2RpcmVjdGl2ZXMoeSk7VCYmInN0YXJ0Ij09PVQuaWdub3JlJiYoeSs9by5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCkpLHRoaXMucHJpbnRfc3RyaW5nKHkpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpfWVsc2UgaWYoIi8iPT09dGhpcy5fY2gmJiIvIj09PXRoaXMuX2lucHV0LnBlZWsoKSl0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuX2lucHV0LmJhY2soKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9pbnB1dC5yZWFkKHUpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApO2Vsc2UgaWYoIkAiPT09dGhpcy5fY2gpaWYodGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGkpLCJ7Ij09PXRoaXMuX2lucHV0LnBlZWsoKSl0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygifSIpKTtlbHNle3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTt2YXIgaz10aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xdXC89JyJdL2cpO2subWF0Y2goL1sgOl0kLykmJihrPXRoaXMuZWF0U3RyaW5nKCI6ICIpLnJlcGxhY2UoL1xzJC8sIiIpLHRoaXMucHJpbnRfc3RyaW5nKGspLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLCJleHRlbmQiPT09KGs9ay5yZXBsYWNlKC9ccyQvLCIiKSk/Xz0hMDoiaW1wb3J0Ij09PWsmJih2PSEwKSxrIGluIHRoaXMuTkVTVEVEX0FUX1JVTEU/KHRoaXMuX25lc3RlZExldmVsKz0xLGsgaW4gdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFJiYoYj0hMCkpOmZ8fDAhPT1wfHwtMT09PWsuaW5kZXhPZigiOiIpfHwoZz0hMCx0aGlzLmluZGVudCgpKX1lbHNlIiMiPT09dGhpcy5fY2gmJiJ7Ij09PXRoaXMuX2lucHV0LnBlZWsoKT8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGkpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoK3RoaXMuZWF0U3RyaW5nKCJ9IikpKToieyI9PT10aGlzLl9jaD8oZyYmKGc9ITEsdGhpcy5vdXRkZW50KCkpLGI/KGI9ITEsZj10aGlzLl9pbmRlbnRMZXZlbD49dGhpcy5fbmVzdGVkTGV2ZWwpOmY9dGhpcy5faW5kZW50TGV2ZWw+PXRoaXMuX25lc3RlZExldmVsLTEsdGhpcy5fb3B0aW9ucy5uZXdsaW5lX2JldHdlZW5fcnVsZXMmJmYmJnRoaXMuX291dHB1dC5wcmV2aW91c19saW5lJiYieyIhPT10aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZS5pdGVtKC0xKSYmdGhpcy5fb3V0cHV0LmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlKCIvIiwiLCIpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsImV4cGFuZCI9PT10aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlPyh0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuaW5kZW50KCksdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5faW5kZW50TGV2ZWwpKToodGhpcy5pbmRlbnQoKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpKToifSI9PT10aGlzLl9jaD8odGhpcy5vdXRkZW50KCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLCJ7Ij09PW0mJnRoaXMuX291dHB1dC50cmltKCEwKSx2PSExLF89ITEsZyYmKHRoaXMub3V0ZGVudCgpLGc9ITEpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSxmPSExLHRoaXMuX25lc3RlZExldmVsJiZ0aGlzLl9uZXN0ZWRMZXZlbC0tLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLHRoaXMuX29wdGlvbnMubmV3bGluZV9iZXR3ZWVuX3J1bGVzJiYhdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCkmJiJ9IiE9PXRoaXMuX2lucHV0LnBlZWsoKSYmdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSghMCkpOiI6Ij09PXRoaXMuX2NoPyFmJiYhYnx8dGhpcy5faW5wdXQubG9va0JhY2soIiYiKXx8dGhpcy5mb3VuZE5lc3RlZFBzZXVkb0NsYXNzKCl8fHRoaXMuX2lucHV0Lmxvb2tCYWNrKCIoIil8fF98fDAhPT1wPyh0aGlzLl9pbnB1dC5sb29rQmFjaygiICIpJiYodGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksIjoiPT09dGhpcy5faW5wdXQucGVlaygpPyh0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5wcmludF9zdHJpbmcoIjo6IikpOnRoaXMucHJpbnRfc3RyaW5nKCI6IikpOih0aGlzLnByaW50X3N0cmluZygiOiIpLGd8fChnPSEwLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLmluZGVudCgpKSk6JyInPT09dGhpcy5fY2h8fCInIj09PXRoaXMuX2NoPyh0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcodGhpcy5fY2gpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApKToiOyI9PT10aGlzLl9jaD8wPT09cD8oZyYmKHRoaXMub3V0ZGVudCgpLGc9ITEpLF89ITEsdj0hMSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSwiLyIhPT10aGlzLl9pbnB1dC5wZWVrKCkmJnRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSk6KHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOiIoIj09PXRoaXMuX2NoP3RoaXMuX2lucHV0Lmxvb2tCYWNrKCJ1cmwiKT8odGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSgpLHArKyx0aGlzLmluZGVudCgpLHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSwiKSI9PT10aGlzLl9jaHx8JyInPT09dGhpcy5fY2h8fCInIj09PXRoaXMuX2NoP3RoaXMuX2lucHV0LmJhY2soKTp0aGlzLl9jaCYmKHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoK3RoaXMuZWF0U3RyaW5nKCIpIikpLHAmJihwLS0sdGhpcy5vdXRkZW50KCkpKSk6KHRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShpKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCkscCsrLHRoaXMuaW5kZW50KCkpOiIpIj09PXRoaXMuX2NoPyhwJiYocC0tLHRoaXMub3V0ZGVudCgpKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkpOiIsIj09PXRoaXMuX2NoPyh0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSwhdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZXx8Z3x8MCE9PXB8fHZ8fF8/dGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMDp0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOiI+IiE9PXRoaXMuX2NoJiYiKyIhPT10aGlzLl9jaCYmIn4iIT09dGhpcy5fY2h8fGd8fDAhPT1wPyJdIj09PXRoaXMuX2NoP3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKToiWyI9PT10aGlzLl9jaD8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGkpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSk6Ij0iPT09dGhpcy5fY2g/KHRoaXMuZWF0V2hpdGVzcGFjZSgpLHRoaXMucHJpbnRfc3RyaW5nKCI9IiksYy50ZXN0KHRoaXMuX2NoKSYmKHRoaXMuX2NoPSIiKSk6IiEiIT09dGhpcy5fY2h8fHRoaXMuX2lucHV0Lmxvb2tCYWNrKCJcXCIpPyh0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKToodGhpcy5wcmludF9zdHJpbmcoIiAiKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkpOnRoaXMuX29wdGlvbnMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I/KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCksdGhpcy5fY2gmJmMudGVzdCh0aGlzLl9jaCkmJih0aGlzLl9jaD0iIikpO3JldHVybiB0aGlzLl9vdXRwdXQuZ2V0X2NvZGUodCl9LGUuZXhwb3J0cy5CZWF1dGlmaWVyPW19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDYpLk9wdGlvbnM7ZnVuY3Rpb24gcihlKXtpLmNhbGwodGhpcyxlLCJjc3MiKSx0aGlzLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJzZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSIsITApLHRoaXMubmV3bGluZV9iZXR3ZWVuX3J1bGVzPXRoaXMuX2dldF9ib29sZWFuKCJuZXdsaW5lX2JldHdlZW5fcnVsZXMiLCEwKTt2YXIgdD10aGlzLl9nZXRfYm9vbGVhbigic3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvciIpO3RoaXMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I9dGhpcy5fZ2V0X2Jvb2xlYW4oInNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yIil8fHQ7dmFyIG49dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCJicmFjZV9zdHlsZSIsWyJjb2xsYXBzZSIsImV4cGFuZCIsImVuZC1leHBhbmQiLCJub25lIiwicHJlc2VydmUtaW5saW5lIl0pO3RoaXMuYnJhY2Vfc3R5bGU9ImNvbGxhcHNlIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKykiZXhwYW5kIiE9PW5bcl0/dGhpcy5icmFjZV9zdHlsZT0iY29sbGFwc2UiOnRoaXMuYnJhY2Vfc3R5bGU9bltyXX1yLnByb3RvdHlwZT1uZXcgaSxlLmV4cG9ydHMuT3B0aW9ucz1yfV0sZXM9e30sdHM9ZnVuY3Rpb24gZSh0KXt2YXIgbj1lc1t0XTtpZih2b2lkIDAhPT1uKXJldHVybiBuLmV4cG9ydHM7dmFyIGk9ZXNbdF09e2V4cG9ydHM6e319O3JldHVybiBab1t0XShpLGkuZXhwb3J0cyxlKSxpLmV4cG9ydHN9KDE1KTt2YXIgYXMsb3Msc3M9dHM7ZnVuY3Rpb24gbHMoZSx0LG4pe3ZhciBpPWUuZ2V0VGV4dCgpLHI9ITAsYT0wLG89bi50YWJTaXplfHw0O2lmKHQpe2Zvcih2YXIgcz1lLm9mZnNldEF0KHQuc3RhcnQpLGw9cztsPjAmJm1zKGksbC0xKTspbC0tOzA9PT1sfHx1cyhpLGwtMSk/cz1sOmw8cyYmKHM9bCsxKTtmb3IodmFyIGM9ZS5vZmZzZXRBdCh0LmVuZCksaD1jO2g8aS5sZW5ndGgmJm1zKGksaCk7KWgrKzsoaD09PWkubGVuZ3RofHx1cyhpLGgpKSYmKGM9aCksdD1RaS5jcmVhdGUoZS5wb3NpdGlvbkF0KHMpLGUucG9zaXRpb25BdChjKSk7dmFyIGQ9aS5zdWJzdHJpbmcoMCxzKTtpZihuZXcgUmVnRXhwKC8uKls8XVtePl0qJC8pLnRlc3QoZCkpcmV0dXJuW3tyYW5nZTp0LG5ld1RleHQ6aT1pLnN1YnN0cmluZyhzLGMpfV07aWYocj1jPT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyhzLGMpLDAhPT1zKXt2YXIgdT1lLm9mZnNldEF0KFhpLmNyZWF0ZSh0LnN0YXJ0LmxpbmUsMCkpO2E9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXQscj0wLGE9bi50YWJTaXplfHw0O2Zvcig7aTxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KGkpO2lmKCIgIj09PW8pcisrO2Vsc2V7aWYoIlx0IiE9PW8pYnJlYWs7cis9YX1pKyt9cmV0dXJuIE1hdGguZmxvb3Ioci9hKX0oZS5nZXRUZXh0KCksdSxuKX19ZWxzZSB0PVFpLmNyZWF0ZShYaS5jcmVhdGUoMCwwKSxlLnBvc2l0aW9uQXQoaS5sZW5ndGgpKTt2YXIgbT17aW5kZW50X3NpemU6byxpbmRlbnRfY2hhcjpuLmluc2VydFNwYWNlcz8iICI6Ilx0IixpbmRlbnRfZW1wdHlfbGluZXM6Y3MobiwiaW5kZW50RW1wdHlMaW5lcyIsITEpLHdyYXBfbGluZV9sZW5ndGg6Y3Mobiwid3JhcExpbmVMZW5ndGgiLDEyMCksdW5mb3JtYXR0ZWQ6aHMobiwidW5mb3JtYXR0ZWQiLHZvaWQgMCksY29udGVudF91bmZvcm1hdHRlZDpocyhuLCJjb250ZW50VW5mb3JtYXR0ZWQiLHZvaWQgMCksaW5kZW50X2lubmVyX2h0bWw6Y3MobiwiaW5kZW50SW5uZXJIdG1sIiwhMSkscHJlc2VydmVfbmV3bGluZXM6Y3MobiwicHJlc2VydmVOZXdMaW5lcyIsITApLG1heF9wcmVzZXJ2ZV9uZXdsaW5lczpjcyhuLCJtYXhQcmVzZXJ2ZU5ld0xpbmVzIiwzMjc4NiksaW5kZW50X2hhbmRsZWJhcnM6Y3MobiwiaW5kZW50SGFuZGxlYmFycyIsITEpLGVuZF93aXRoX25ld2xpbmU6ciYmY3MobiwiZW5kV2l0aE5ld2xpbmUiLCExKSxleHRyYV9saW5lcnM6aHMobiwiZXh0cmFMaW5lcnMiLHZvaWQgMCksd3JhcF9hdHRyaWJ1dGVzOmNzKG4sIndyYXBBdHRyaWJ1dGVzIiwiYXV0byIpLHdyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZTpjcyhuLCJ3cmFwQXR0cmlidXRlc0luZGVudFNpemUiLHZvaWQgMCksZW9sOiJcbiIsaW5kZW50X3NjcmlwdHM6Y3MobiwiaW5kZW50U2NyaXB0cyIsIm5vcm1hbCIpLHRlbXBsYXRpbmc6ZHMobiwiYWxsIiksdW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI6Y3MobiwidW5mb3JtYXR0ZWRDb250ZW50RGVsaW1pdGVyIiwiIil9LHA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXMoZSx0LHJzLHNzKX0oaS5yZXBsYWNlKC9eXHMrLywiIiksbSk7aWYoYT4wKXt2YXIgZj1uLmluc2VydFNwYWNlcz9BbygiICIsbyphKTpBbygiXHQiLGEpO3A9cC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrZiksMD09PXQuc3RhcnQuY2hhcmFjdGVyJiYocD1mK3ApfXJldHVyblt7cmFuZ2U6dCxuZXdUZXh0OnB9XX1mdW5jdGlvbiBjcyhlLHQsbil7aWYoZSYmZS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGk9ZVt0XTtpZihudWxsIT09aSlyZXR1cm4gaX1yZXR1cm4gbn1mdW5jdGlvbiBocyhlLHQsbil7dmFyIGk9Y3MoZSx0LG51bGwpO3JldHVybiJzdHJpbmciPT10eXBlb2YgaT9pLmxlbmd0aD4wP2kuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpfSkpOltdOm59ZnVuY3Rpb24gZHMoZSx0KXtyZXR1cm4hMD09PWNzKGUsInRlbXBsYXRpbmciLHQpP1siYXV0byJdOlsibm9uZSJdfWZ1bmN0aW9uIHVzKGUsdCl7cmV0dXJuLTEhPT0iXHJcbiIuaW5kZXhPZihlLmNoYXJBdCh0KSl9ZnVuY3Rpb24gbXMoZSx0KXtyZXR1cm4tMSE9PSIgXHQiLmluZGV4T2YoZS5jaGFyQXQodCkpfSFmdW5jdGlvbigpe3ZhciBlPVssLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5fX3BhcmVudD1lLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9faW5kZW50X2NvdW50PS0xLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleD0wLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD0tMSx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9faXRlbXM9W119ZnVuY3Rpb24gbihlLHQpe3RoaXMuX19jYWNoZT1bIiJdLHRoaXMuX19pbmRlbnRfc2l6ZT1lLmluZGVudF9zaXplLHRoaXMuX19pbmRlbnRfc3RyaW5nPWUuaW5kZW50X2NoYXIsZS5pbmRlbnRfd2l0aF90YWJzfHwodGhpcy5fX2luZGVudF9zdHJpbmc9bmV3IEFycmF5KGUuaW5kZW50X3NpemUrMSkuam9pbihlLmluZGVudF9jaGFyKSksdD10fHwiIixlLmluZGVudF9sZXZlbD4wJiYodD1uZXcgQXJyYXkoZS5pbmRlbnRfbGV2ZWwrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLHRoaXMuX19iYXNlX3N0cmluZz10LHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaShlLGkpe3RoaXMuX19pbmRlbnRfY2FjaGU9bmV3IG4oZSxpKSx0aGlzLnJhdz0hMSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lPWUuZW5kX3dpdGhfbmV3bGluZSx0aGlzLmluZGVudF9zaXplPWUuaW5kZW50X3NpemUsdGhpcy53cmFwX2xpbmVfbGVuZ3RoPWUud3JhcF9saW5lX2xlbmd0aCx0aGlzLmluZGVudF9lbXB0eV9saW5lcz1lLmluZGVudF9lbXB0eV9saW5lcyx0aGlzLl9fbGluZXM9W10sdGhpcy5wcmV2aW91c19saW5lPW51bGwsdGhpcy5jdXJyZW50X2xpbmU9bnVsbCx0aGlzLm5leHRfbGluZT1uZXcgdCh0aGlzKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITEsdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCl9dC5wcm90b3R5cGUuY2xvbmVfZW1wdHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdCh0aGlzLl9fcGFyZW50KTtyZXR1cm4gZS5zZXRfaW5kZW50KHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksZX0sdC5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gZTwwP3RoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoK2VdOnRoaXMuX19pdGVtc1tlXX0sdC5wcm90b3R5cGUuaGFzX21hdGNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9faXRlbXMubGVuZ3RoLTE7dD49MDt0LS0paWYodGhpcy5fX2l0ZW1zW3RdLm1hdGNoKGUpKXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5pc19lbXB0eSgpJiYodGhpcy5fX2luZGVudF9jb3VudD1lfHwwLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9dHx8MCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zaXplKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCkpfSx0LnByb3RvdHlwZS5fc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRleD10aGlzLl9faXRlbXMubGVuZ3RoLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fY2hhcmFjdGVyX2NvdW50LHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19hbGlnbm1lbnRfY291bnQpfSx0LnByb3RvdHlwZS5fc2hvdWxkX3dyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgmJnRoaXMuX19jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiZ0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19jaGFyYWN0ZXJfY291bnR9LHQucHJvdG90eXBlLl9hbGxvd193cmFwPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvdWxkX3dyYXAoKSl7dGhpcy5fX3BhcmVudC5hZGRfbmV3X2xpbmUoKTt2YXIgZT10aGlzLl9fcGFyZW50LmN1cnJlbnRfbGluZTtyZXR1cm4gZS5zZXRfaW5kZW50KHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQpLGUuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLHRoaXMuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UoMCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksZS5fX2NoYXJhY3Rlcl9jb3VudCs9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudC10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsIiAiPT09ZS5fX2l0ZW1zWzBdJiYoZS5fX2l0ZW1zLnNwbGljZSgwLDEpLGUuX19jaGFyYWN0ZXJfY291bnQtPTEpLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fX2l0ZW1zLmxlbmd0aH0sdC5wcm90b3R5cGUubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCk/bnVsbDp0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aC0xXX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt0aGlzLl9faXRlbXMucHVzaChlKTt2YXIgdD1lLmxhc3RJbmRleE9mKCJcbiIpOy0xIT09dD90aGlzLl9fY2hhcmFjdGVyX2NvdW50PWUubGVuZ3RoLXQ6dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCs9ZS5sZW5ndGh9LHQucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBlPW51bGw7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8KGU9dGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPWUubGVuZ3RoKSxlfSx0LnByb3RvdHlwZS5fcmVtb3ZlX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX19pbmRlbnRfY291bnQ+MCYmKHRoaXMuX19pbmRlbnRfY291bnQtPTEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09dGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZSl9LHQucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ+MCYmKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudC09MSl9LHQucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IoOyIgIj09PXRoaXMubGFzdCgpOyl0aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09MX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP3RoaXMuX19wYXJlbnQuaW5kZW50X2VtcHR5X2xpbmVzJiYoZT10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQpKTooZT10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksZSs9dGhpcy5fX2l0ZW1zLmpvaW4oIiIpKSxlfSxuLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO3JldHVybiB0PXR8fDAsZTwwJiYobj0wKSxuKz1lKnRoaXMuX19pbmRlbnRfc2l6ZSxuKz10fSxuLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19iYXNlX3N0cmluZztyZXR1cm4gdD10fHwwLGU8MCYmKGU9MCxuPSIiKSx0Kz1lKnRoaXMuX19pbmRlbnRfc2l6ZSx0aGlzLl9fZW5zdXJlX2NhY2hlKHQpLG4rPXRoaXMuX19jYWNoZVt0XX0sbi5wcm90b3R5cGUuX19lbnN1cmVfY2FjaGU9ZnVuY3Rpb24oZSl7Zm9yKDtlPj10aGlzLl9fY2FjaGUubGVuZ3RoOyl0aGlzLl9fYWRkX2NvbHVtbigpfSxuLnByb3RvdHlwZS5fX2FkZF9jb2x1bW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fY2FjaGUubGVuZ3RoLHQ9MCxuPSIiO3RoaXMuX19pbmRlbnRfc2l6ZSYmZT49dGhpcy5fX2luZGVudF9zaXplJiYoZS09KHQ9TWF0aC5mbG9vcihlL3RoaXMuX19pbmRlbnRfc2l6ZSkpKnRoaXMuX19pbmRlbnRfc2l6ZSxuPW5ldyBBcnJheSh0KzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSxlJiYobis9bmV3IEFycmF5KGUrMSkuam9pbigiICIpKSx0aGlzLl9fY2FjaGUucHVzaChuKX0saS5wcm90b3R5cGUuX19hZGRfb3V0cHV0bGluZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXNfbGluZT10aGlzLmN1cnJlbnRfbGluZSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLm5leHRfbGluZS5jbG9uZV9lbXB0eSgpLHRoaXMuX19saW5lcy5wdXNoKHRoaXMuY3VycmVudF9saW5lKX0saS5wcm90b3R5cGUuZ2V0X2xpbmVfbnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19saW5lcy5sZW5ndGh9LGkucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zdHJpbmcoZSx0KX0saS5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zaXplKGUsdCl9LGkucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJldmlvdXNfbGluZSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0saS5wcm90b3R5cGUuYWRkX25ld19saW5lPWZ1bmN0aW9uKGUpe3JldHVybiEodGhpcy5pc19lbXB0eSgpfHwhZSYmdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSkmJih0aGlzLnJhd3x8dGhpcy5fX2FkZF9vdXRwdXRsaW5lKCksITApfSxpLnByb3RvdHlwZS5nZXRfY29kZT1mdW5jdGlvbihlKXt0aGlzLnRyaW0oITApO3ZhciB0PXRoaXMuY3VycmVudF9saW5lLnBvcCgpO3QmJigiXG4iPT09dFt0Lmxlbmd0aC0xXSYmKHQ9dC5yZXBsYWNlKC9cbiskL2csIiIpKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKHQpKSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lJiZ0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt2YXIgbj10aGlzLl9fbGluZXMuam9pbigiXG4iKTtyZXR1cm4iXG4iIT09ZSYmKG49bi5yZXBsYWNlKC9bXG5dL2csZSkpLG59LGkucHJvdG90eXBlLnNldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50X2xpbmUuX3NldF93cmFwX3BvaW50KCl9LGkucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lfHwwLHQ9dHx8MCx0aGlzLm5leHRfbGluZS5zZXRfaW5kZW50KGUsdCksdGhpcy5fX2xpbmVzLmxlbmd0aD4xPyh0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KGUsdCksITApOih0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KCksITEpfSxpLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5uZXdsaW5lczt0KyspdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChlLndoaXRlc3BhY2VfYmVmb3JlKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGUudGV4dCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExfSxpLnByb3RvdHlwZS5hZGRfdG9rZW49ZnVuY3Rpb24oZSl7dGhpcy5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4oKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGUpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD10aGlzLmN1cnJlbnRfbGluZS5fYWxsb3dfd3JhcCgpfSxpLnByb3RvdHlwZS5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oKXt0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiYmIXRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCkmJih0aGlzLm5vbl9icmVha2luZ19zcGFjZXx8dGhpcy5zZXRfd3JhcF9wb2ludCgpLHRoaXMuY3VycmVudF9saW5lLnB1c2goIiAiKSl9LGkucHJvdG90eXBlLnJlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX19saW5lcy5sZW5ndGg7ZTx0Oyl0aGlzLl9fbGluZXNbZV0uX3JlbW92ZV9pbmRlbnQoKSxlKys7dGhpcy5jdXJyZW50X2xpbmUuX3JlbW92ZV93cmFwX2luZGVudCgpfSxpLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGUpe2ZvcihlPXZvaWQgMCE9PWUmJmUsdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO2UmJnRoaXMuX19saW5lcy5sZW5ndGg+MSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKTspdGhpcy5fX2xpbmVzLnBvcCgpLHRoaXMuY3VycmVudF9saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTFdLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzLmxlbmd0aD4xP3RoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdOm51bGx9LGkucHJvdG90eXBlLmp1c3RfYWRkZWRfbmV3bGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxpLnByb3RvdHlwZS5qdXN0X2FkZGVkX2JsYW5rbGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCkmJnRoaXMucHJldmlvdXNfbGluZS5pc19lbXB0eSgpfSxpLnByb3RvdHlwZS5lbnN1cmVfZW1wdHlfbGluZV9hYm92ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLl9fbGluZXMubGVuZ3RoLTI7aT49MDspe3ZhciByPXRoaXMuX19saW5lc1tpXTtpZihyLmlzX2VtcHR5KCkpYnJlYWs7aWYoMCE9PXIuaXRlbSgwKS5pbmRleE9mKGUpJiZyLml0ZW0oLTEpIT09bil7dGhpcy5fX2xpbmVzLnNwbGljZShpKzEsMCxuZXcgdCh0aGlzKSksdGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdO2JyZWFrfWktLX19LGUuZXhwb3J0cy5PdXRwdXQ9aX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzLlRva2VuPWZ1bmN0aW9uKGUsdCxuLGkpe3RoaXMudHlwZT1lLHRoaXMudGV4dD10LHRoaXMuY29tbWVudHNfYmVmb3JlPW51bGwsdGhpcy5uZXdsaW5lcz1ufHwwLHRoaXMud2hpdGVzcGFjZV9iZWZvcmU9aXx8IiIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGwsdGhpcy5vcGVuZWQ9bnVsbCx0aGlzLmNsb3NlZD1udWxsLHRoaXMuZGlyZWN0aXZlcz1udWxsfX0sLCxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5yYXdfb3B0aW9ucz1uKGUsdCksdGhpcy5kaXNhYmxlZD10aGlzLl9nZXRfYm9vbGVhbigiZGlzYWJsZWQiKSx0aGlzLmVvbD10aGlzLl9nZXRfY2hhcmFjdGVycygiZW9sIiwiYXV0byIpLHRoaXMuZW5kX3dpdGhfbmV3bGluZT10aGlzLl9nZXRfYm9vbGVhbigiZW5kX3dpdGhfbmV3bGluZSIpLHRoaXMuaW5kZW50X3NpemU9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X3NpemUiLDQpLHRoaXMuaW5kZW50X2NoYXI9dGhpcy5fZ2V0X2NoYXJhY3RlcnMoImluZGVudF9jaGFyIiwiICIpLHRoaXMuaW5kZW50X2xldmVsPXRoaXMuX2dldF9udW1iZXIoImluZGVudF9sZXZlbCIpLHRoaXMucHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X2Jvb2xlYW4oInByZXNlcnZlX25ld2xpbmVzIiwhMCksdGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X251bWJlcigibWF4X3ByZXNlcnZlX25ld2xpbmVzIiwzMjc4NiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lc3x8KHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPTApLHRoaXMuaW5kZW50X3dpdGhfdGFicz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X3dpdGhfdGFicyIsIlx0Ij09PXRoaXMuaW5kZW50X2NoYXIpLHRoaXMuaW5kZW50X3dpdGhfdGFicyYmKHRoaXMuaW5kZW50X2NoYXI9Ilx0IiwxPT09dGhpcy5pbmRlbnRfc2l6ZSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9ZnVuY3Rpb24gbihlLHQpe3ZhciBuLHI9e307Zm9yKG4gaW4gZT1pKGUpKW4hPT10JiYocltuXT1lW25dKTtpZih0JiZlW3RdKWZvcihuIGluIGVbdF0pcltuXT1lW3RdW25dO3JldHVybiByfWZ1bmN0aW9uIGkoZSl7dmFyIHQsbj17fTtmb3IodCBpbiBlKXtuW3QucmVwbGFjZSgvLS9nLCJfIildPWVbdF19cmV0dXJuIG59dC5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmF3X29wdGlvbnNbZV0saT10fHxbXTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/bnVsbCE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbmNhdCYmKGk9bi5jb25jYXQoKSk6InN0cmluZyI9PXR5cGVvZiBuJiYoaT1uLnNwbGl0KC9bXmEtekEtWjAtOV9cL1wtXSsvKSksaX0sdC5wcm90b3R5cGUuX2dldF9ib29sZWFuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yYXdfb3B0aW9uc1tlXTtyZXR1cm4gdm9pZCAwPT09bj8hIXQ6ISFufSx0LnByb3RvdHlwZS5fZ2V0X2NoYXJhY3RlcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJhd19vcHRpb25zW2VdLGk9dHx8IiI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiYoaT1uLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLywiXG4iKS5yZXBsYWNlKC9cXHQvLCJcdCIpKSxpfSx0LnByb3RvdHlwZS5fZ2V0X251bWJlcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmF3X29wdGlvbnNbZV07dD1wYXJzZUludCh0LDEwKSxpc05hTih0KSYmKHQ9MCk7dmFyIGk9cGFyc2VJbnQobiwxMCk7cmV0dXJuIGlzTmFOKGkpJiYoaT10KSxpfSx0LnByb3RvdHlwZS5fZ2V0X3NlbGVjdGlvbj1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KGUsdCxuKTtpZigxIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE9wdGlvbiBWYWx1ZTogVGhlIG9wdGlvbiAnIitlKyInIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiIrdCsiXG5Zb3UgcGFzc2VkIGluOiAnIit0aGlzLnJhd19vcHRpb25zW2VdKyInIik7cmV0dXJuIGlbMF19LHQucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uX2xpc3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0fHwwPT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZWxlY3Rpb24gbGlzdCBjYW5ub3QgYmUgZW1wdHkuIik7aWYobj1ufHxbdFswXV0sIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihuLHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEZWZhdWx0IFZhbHVlISIpO3ZhciBpPXRoaXMuX2dldF9hcnJheShlLG4pO2lmKCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24oaSx0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK2UrIicgY2FuIGNvbnRhaW4gb25seSB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiIrdCsiXG5Zb3UgcGFzc2VkIGluOiAnIit0aGlzLnJhd19vcHRpb25zW2VdKyInIik7cmV0dXJuIGl9LHQucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGgmJnQubGVuZ3RoJiYhZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMT09PXQuaW5kZXhPZihlKX0pKX0sZS5leHBvcnRzLk9wdGlvbnM9dCxlLmV4cG9ydHMubm9ybWFsaXplT3B0cz1pLGUuZXhwb3J0cy5tZXJnZU9wdHM9bn0sLGZ1bmN0aW9uKGUpe3ZhciB0PVJlZ0V4cC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInN0aWNreSIpO2Z1bmN0aW9uIG4oZSl7dGhpcy5fX2lucHV0PWV8fCIiLHRoaXMuX19pbnB1dF9sZW5ndGg9dGhpcy5fX2lucHV0Lmxlbmd0aCx0aGlzLl9fcG9zaXRpb249MH1uLnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPTB9LG4ucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb24+MCYmKHRoaXMuX19wb3NpdGlvbi09MSl9LG4ucHJvdG90eXBlLmhhc05leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPHRoaXMuX19pbnB1dF9sZW5ndGh9LG4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3JldHVybiB0aGlzLmhhc05leHQoKSYmKGU9dGhpcy5fX2lucHV0LmNoYXJBdCh0aGlzLl9fcG9zaXRpb24pLHRoaXMuX19wb3NpdGlvbis9MSksZX0sbi5wcm90b3R5cGUucGVlaz1mdW5jdGlvbihlKXt2YXIgdD1udWxsO3JldHVybiBlPWV8fDAsKGUrPXRoaXMuX19wb3NpdGlvbik+PTAmJmU8dGhpcy5fX2lucHV0X2xlbmd0aCYmKHQ9dGhpcy5fX2lucHV0LmNoYXJBdChlKSksdH0sbi5wcm90b3R5cGUuX19tYXRjaD1mdW5jdGlvbihlLG4pe2UubGFzdEluZGV4PW47dmFyIGk9ZS5leGVjKHRoaXMuX19pbnB1dCk7cmV0dXJuIWl8fHQmJmUuc3RpY2t5fHxpLmluZGV4IT09biYmKGk9bnVsbCksaX0sbi5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fDAsKHQrPXRoaXMuX19wb3NpdGlvbik+PTAmJnQ8dGhpcy5fX2lucHV0X2xlbmd0aCYmISF0aGlzLl9fbWF0Y2goZSx0KX0sbi5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnBlZWsodCk7cmV0dXJuIGUubGFzdEluZGV4PTAsbnVsbCE9PW4mJmUudGVzdChuKX0sbi5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX21hdGNoKGUsdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gdD90aGlzLl9fcG9zaXRpb24rPXRbMF0ubGVuZ3RoOnQ9bnVsbCx0fSxuLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyPSIiO3JldHVybiBlJiYoaT10aGlzLm1hdGNoKGUpKSYmKHIrPWlbMF0pLCF0fHwhaSYmZXx8KHIrPXRoaXMucmVhZFVudGlsKHQsbikpLHJ9LG4ucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihlLHQpe3ZhciBuLGk9dGhpcy5fX3Bvc2l0aW9uO2UubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgcj1lLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gcj8oaT1yLmluZGV4LHQmJihpKz1yWzBdLmxlbmd0aCkpOmk9dGhpcy5fX2lucHV0X2xlbmd0aCxuPXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGkpLHRoaXMuX19wb3NpdGlvbj1pLG59LG4ucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlYWRVbnRpbChlLCEwKX0sbi5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihlLG4pe3ZhciBpPW51bGwscj0iZyI7cmV0dXJuIG4mJnQmJihyPSJ5IiksInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWU/aT1uZXcgUmVnRXhwKGUscik6ZSYmKGk9bmV3IFJlZ0V4cChlLnNvdXJjZSxyKSksaX0sbi5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKGUpe3JldHVybiBSZWdFeHAoZS5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0sbi5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX3Bvc2l0aW9uLG49dGhpcy5yZWFkVW50aWxBZnRlcihlKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPXQsbn0sbi5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIHQ+PWUubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKHQtZS5sZW5ndGgsdCkudG9Mb3dlckNhc2UoKT09PWV9LGUuZXhwb3J0cy5JbnB1dFNjYW5uZXI9bn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oOCkuSW5wdXRTY2FubmVyLHI9bigzKS5Ub2tlbixhPW4oMTApLlRva2VuU3RyZWFtLG89bigxMSkuV2hpdGVzcGFjZVBhdHRlcm4scz17U1RBUlQ6IlRLX1NUQVJUIixSQVc6IlRLX1JBVyIsRU9GOiJUS19FT0YifSxsPWZ1bmN0aW9uKGUsdCl7dGhpcy5faW5wdXQ9bmV3IGkoZSksdGhpcy5fb3B0aW9ucz10fHx7fSx0aGlzLl9fdG9rZW5zPW51bGwsdGhpcy5fcGF0dGVybnM9e30sdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZT1uZXcgbyh0aGlzLl9pbnB1dCl9O2wucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5faW5wdXQucmVzdGFydCgpLHRoaXMuX190b2tlbnM9bmV3IGEsdGhpcy5fcmVzZXQoKTtmb3IodmFyIHQ9bmV3IHIocy5TVEFSVCwiIiksbj1udWxsLGk9W10sbz1uZXcgYTt0LnR5cGUhPT1zLkVPRjspe2ZvcihlPXRoaXMuX2dldF9uZXh0X3Rva2VuKHQsbik7dGhpcy5faXNfY29tbWVudChlKTspby5hZGQoZSksZT10aGlzLl9nZXRfbmV4dF90b2tlbih0LG4pO28uaXNFbXB0eSgpfHwoZS5jb21tZW50c19iZWZvcmU9byxvPW5ldyBhKSxlLnBhcmVudD1uLHRoaXMuX2lzX29wZW5pbmcoZSk/KGkucHVzaChuKSxuPWUpOm4mJnRoaXMuX2lzX2Nsb3NpbmcoZSxuKSYmKGUub3BlbmVkPW4sbi5jbG9zZWQ9ZSxuPWkucG9wKCksZS5wYXJlbnQ9biksZS5wcmV2aW91cz10LHQubmV4dD1lLHRoaXMuX190b2tlbnMuYWRkKGUpLHQ9ZX1yZXR1cm4gdGhpcy5fX3Rva2Vuc30sbC5wcm90b3R5cGUuX2lzX2ZpcnN0X3Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2tlbnMuaXNFbXB0eSgpfSxsLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXt9LGwucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihlLHQpe3RoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7dmFyIG49dGhpcy5faW5wdXQucmVhZCgvLisvZyk7cmV0dXJuIG4/dGhpcy5fY3JlYXRlX3Rva2VuKHMuUkFXLG4pOnRoaXMuX2NyZWF0ZV90b2tlbihzLkVPRiwiIil9LGwucHJvdG90eXBlLl9pc19jb21tZW50PWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnByb3RvdHlwZS5faXNfb3BlbmluZz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5wcm90b3R5cGUuX2lzX2Nsb3Npbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMX0sbC5wcm90b3R5cGUuX2NyZWF0ZV90b2tlbj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcihlLHQsdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5uZXdsaW5lX2NvdW50LHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2Uud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4pfSxsLnByb3RvdHlwZS5fcmVhZFdoaXRlc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5yZWFkKCl9LGUuZXhwb3J0cy5Ub2tlbml6ZXI9bCxlLmV4cG9ydHMuVE9LRU49c30sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLl9fdG9rZW5zPVtdLHRoaXMuX190b2tlbnNfbGVuZ3RoPXRoaXMuX190b2tlbnMubGVuZ3RoLHRoaXMuX19wb3NpdGlvbj0wLHRoaXMuX19wYXJlbnRfdG9rZW49ZX10LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPTB9LHQucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX190b2tlbnNfbGVuZ3RofSx0LnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9fdG9rZW5zX2xlbmd0aH0sdC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPW51bGw7cmV0dXJuIHRoaXMuaGFzTmV4dCgpJiYoZT10aGlzLl9fdG9rZW5zW3RoaXMuX19wb3NpdGlvbl0sdGhpcy5fX3Bvc2l0aW9uKz0xKSxlfSx0LnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7cmV0dXJuIGU9ZXx8MCwoZSs9dGhpcy5fX3Bvc2l0aW9uKT49MCYmZTx0aGlzLl9fdG9rZW5zX2xlbmd0aCYmKHQ9dGhpcy5fX3Rva2Vuc1tlXSksdH0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuX19wYXJlbnRfdG9rZW4mJihlLnBhcmVudD10aGlzLl9fcGFyZW50X3Rva2VuKSx0aGlzLl9fdG9rZW5zLnB1c2goZSksdGhpcy5fX3Rva2Vuc19sZW5ndGgrPTF9LGUuZXhwb3J0cy5Ub2tlblN0cmVhbT10fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMikuUGF0dGVybjtmdW5jdGlvbiByKGUsdCl7aS5jYWxsKHRoaXMsZSx0KSx0P3RoaXMuX2xpbmVfcmVnZXhwPXRoaXMuX2lucHV0LmdldF9yZWdleHAodC5fbGluZV9yZWdleHApOnRoaXMuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucygiIiwiIiksdGhpcy5uZXdsaW5lX2NvdW50PTAsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iIn1yLnByb3RvdHlwZT1uZXcgaSxyLnByb3RvdHlwZS5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zPWZ1bmN0aW9uKGUsdCl7ZSs9IlxcdCAiLHQrPSJcXG5cXHIiLHRoaXMuX21hdGNoX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiWyIrZSt0KyJdKyIsITApLHRoaXMuX25ld2xpbmVfcmVnZXhwPXRoaXMuX2lucHV0LmdldF9yZWdleHAoIlxcclxcbnxbIit0KyJdIil9LHIucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt0aGlzLm5ld2xpbmVfY291bnQ9MCx0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPSIiO3ZhciBlPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik7aWYoIiAiPT09ZSl0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPSIgIjtlbHNlIGlmKGUpe3ZhciB0PXRoaXMuX19zcGxpdCh0aGlzLl9uZXdsaW5lX3JlZ2V4cCxlKTt0aGlzLm5ld2xpbmVfY291bnQ9dC5sZW5ndGgtMSx0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPXRbdGhpcy5uZXdsaW5lX2NvdW50XX1yZXR1cm4gZX0sci5wcm90b3R5cGUubWF0Y2hpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9jcmVhdGUoKTtyZXR1cm4gbi5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zKGUsdCksbi5fdXBkYXRlKCksbn0sci5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLl9pbnB1dCx0aGlzKX0sci5wcm90b3R5cGUuX19zcGxpdD1mdW5jdGlvbihlLHQpe2UubGFzdEluZGV4PTA7Zm9yKHZhciBuPTAsaT1bXSxyPWUuZXhlYyh0KTtyOylpLnB1c2godC5zdWJzdHJpbmcobixyLmluZGV4KSksbj1yLmluZGV4K3JbMF0ubGVuZ3RoLHI9ZS5leGVjKHQpO3JldHVybiBuPHQubGVuZ3RoP2kucHVzaCh0LnN1YnN0cmluZyhuLHQubGVuZ3RoKSk6aS5wdXNoKCIiKSxpfSxlLmV4cG9ydHMuV2hpdGVzcGFjZVBhdHRlcm49cn0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX2lucHV0PWUsdGhpcy5fc3RhcnRpbmdfcGF0dGVybj1udWxsLHRoaXMuX21hdGNoX3BhdHRlcm49bnVsbCx0aGlzLl91bnRpbF9wYXR0ZXJuPW51bGwsdGhpcy5fdW50aWxfYWZ0ZXI9ITEsdCYmKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCh0Ll9zdGFydGluZ19wYXR0ZXJuLCEwKSx0aGlzLl9tYXRjaF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAodC5fbWF0Y2hfcGF0dGVybiwhMCksdGhpcy5fdW50aWxfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHQuX3VudGlsX3BhdHRlcm4pLHRoaXMuX3VudGlsX2FmdGVyPXQuX3VudGlsX2FmdGVyKX10LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuKTtyZXR1cm4gdGhpcy5fc3RhcnRpbmdfcGF0dGVybiYmIWV8fChlKz10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX21hdGNoX3BhdHRlcm4sdGhpcy5fdW50aWxfcGF0dGVybix0aGlzLl91bnRpbF9hZnRlcikpLGV9LHQucHJvdG90eXBlLnJlYWRfbWF0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXQubWF0Y2godGhpcy5fbWF0Y2hfcGF0dGVybil9LHQucHJvdG90eXBlLnVudGlsX2FmdGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NyZWF0ZSgpO3JldHVybiB0Ll91bnRpbF9hZnRlcj0hMCx0Ll91bnRpbF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoZSksdC5fdXBkYXRlKCksdH0sdC5wcm90b3R5cGUudW50aWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIHQuX3VudGlsX2FmdGVyPSExLHQuX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChlKSx0Ll91cGRhdGUoKSx0fSx0LnByb3RvdHlwZS5zdGFydGluZ193aXRoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NyZWF0ZSgpO3JldHVybiB0Ll9zdGFydGluZ19wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoZSwhMCksdC5fdXBkYXRlKCksdH0sdC5wcm90b3R5cGUubWF0Y2hpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIHQuX21hdGNoX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChlLCEwKSx0Ll91cGRhdGUoKSx0fSx0LnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMuX2lucHV0LHRoaXMpfSx0LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7fSxlLmV4cG9ydHMuUGF0dGVybj10fSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTplLnNvdXJjZSx0PSJzdHJpbmciPT10eXBlb2YgdD90OnQuc291cmNlLHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm49bmV3IFJlZ0V4cChlKy8gYmVhdXRpZnkoIFx3K1s6XVx3KykrIC8uc291cmNlK3QsImciKSx0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm49LyAoXHcrKVs6XShcdyspL2csdGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuPW5ldyBSZWdFeHAoZSsvXHNiZWF1dGlmeVxzaWdub3JlOmVuZFxzLy5zb3VyY2UrdCwiZyIpfXQucHJvdG90eXBlLmdldF9kaXJlY3RpdmVzPWZ1bmN0aW9uKGUpe2lmKCFlLm1hdGNoKHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm4pKXJldHVybiBudWxsO3ZhciB0PXt9O3RoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5sYXN0SW5kZXg9MDtmb3IodmFyIG49dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMoZSk7bjspdFtuWzFdXT1uWzJdLG49dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMoZSk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnJlYWRJZ25vcmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlYWRVbnRpbEFmdGVyKHRoaXMuX19kaXJlY3RpdmVzX2VuZF9pZ25vcmVfcGF0dGVybil9LGUuZXhwb3J0cy5EaXJlY3RpdmVzPXR9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDEyKS5QYXR0ZXJuLHI9e2RqYW5nbzohMSxlcmI6ITEsaGFuZGxlYmFyczohMSxwaHA6ITEsc21hcnR5OiExfTtmdW5jdGlvbiBhKGUsdCl7aS5jYWxsKHRoaXMsZSx0KSx0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj1udWxsLHRoaXMuX2Rpc2FibGVkPU9iamVjdC5hc3NpZ24oe30sciksdGhpcy5fZXhjbHVkZWQ9T2JqZWN0LmFzc2lnbih7fSxyKSx0JiYodGhpcy5fX3RlbXBsYXRlX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCh0Ll9fdGVtcGxhdGVfcGF0dGVybiksdGhpcy5fZXhjbHVkZWQ9T2JqZWN0LmFzc2lnbih0aGlzLl9leGNsdWRlZCx0Ll9leGNsdWRlZCksdGhpcy5fZGlzYWJsZWQ9T2JqZWN0LmFzc2lnbih0aGlzLl9kaXNhYmxlZCx0Ll9kaXNhYmxlZCkpO3ZhciBuPW5ldyBpKGUpO3RoaXMuX19wYXR0ZXJucz17aGFuZGxlYmFyc19jb21tZW50Om4uc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLGhhbmRsZWJhcnNfdW5lc2NhcGVkOm4uc3RhcnRpbmdfd2l0aCgve3t7LykudW50aWxfYWZ0ZXIoL319fS8pLGhhbmRsZWJhcnM6bi5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLHBocDpuLnN0YXJ0aW5nX3dpdGgoLzxcPyg/Ols9IF18cGhwKS8pLnVudGlsX2FmdGVyKC9cPz4vKSxlcmI6bi5zdGFydGluZ193aXRoKC88JVteJV0vKS51bnRpbF9hZnRlcigvW14lXSU+LyksZGphbmdvOm4uc3RhcnRpbmdfd2l0aCgveyUvKS51bnRpbF9hZnRlcigvJX0vKSxkamFuZ29fdmFsdWU6bi5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLGRqYW5nb19jb21tZW50Om4uc3RhcnRpbmdfd2l0aCgveyMvKS51bnRpbF9hZnRlcigvI30vKSxzbWFydHk6bi5zdGFydGluZ193aXRoKC97KD89W159e1xzXG5dKS8pLnVudGlsX2FmdGVyKC9bXlxzXG5dfS8pLHNtYXJ0eV9jb21tZW50Om4uc3RhcnRpbmdfd2l0aCgve1wqLykudW50aWxfYWZ0ZXIoL1wqfS8pLHNtYXJ0eV9saXRlcmFsOm4uc3RhcnRpbmdfd2l0aCgve2xpdGVyYWx9LykudW50aWxfYWZ0ZXIoL3tcL2xpdGVyYWx9Lyl9fWEucHJvdG90eXBlPW5ldyBpLGEucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy5faW5wdXQsdGhpcyl9LGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9fc2V0X3RlbXBsYXRlZF9wYXR0ZXJuKCl9LGEucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIHQuX2Rpc2FibGVkW2VdPSEwLHQuX3VwZGF0ZSgpLHR9LGEucHJvdG90eXBlLnJlYWRfb3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jcmVhdGUoKTtmb3IodmFyIG4gaW4gcil0Ll9kaXNhYmxlZFtuXT0tMT09PWUudGVtcGxhdGluZy5pbmRleE9mKG4pO3JldHVybiB0Ll91cGRhdGUoKSx0fSxhLnByb3RvdHlwZS5leGNsdWRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NyZWF0ZSgpO3JldHVybiB0Ll9leGNsdWRlZFtlXT0hMCx0Ll91cGRhdGUoKSx0fSxhLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dmFyIGU9IiI7ZT10aGlzLl9tYXRjaF9wYXR0ZXJuP3RoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik6dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuLHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuKTtmb3IodmFyIHQ9dGhpcy5fcmVhZF90ZW1wbGF0ZSgpO3Q7KXRoaXMuX21hdGNoX3BhdHRlcm4/dCs9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuKTp0Kz10aGlzLl9pbnB1dC5yZWFkVW50aWwodGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4pLGUrPXQsdD10aGlzLl9yZWFkX3RlbXBsYXRlKCk7cmV0dXJuIHRoaXMuX3VudGlsX2FmdGVyJiYoZSs9dGhpcy5faW5wdXQucmVhZFVudGlsQWZ0ZXIodGhpcy5fdW50aWxfcGF0dGVybikpLGV9LGEucHJvdG90eXBlLl9fc2V0X3RlbXBsYXRlZF9wYXR0ZXJuPWZ1bmN0aW9uKCl7dmFyIGU9W107dGhpcy5fZGlzYWJsZWQucGhwfHxlLnB1c2godGhpcy5fX3BhdHRlcm5zLnBocC5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX2Rpc2FibGVkLmhhbmRsZWJhcnN8fGUucHVzaCh0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX2Rpc2FibGVkLmVyYnx8ZS5wdXNoKHRoaXMuX19wYXR0ZXJucy5lcmIuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5kamFuZ298fChlLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nby5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLGUucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvX3ZhbHVlLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksZS5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ29fY29tbWVudC5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpKSx0aGlzLl9kaXNhYmxlZC5zbWFydHl8fGUucHVzaCh0aGlzLl9fcGF0dGVybnMuc21hcnR5Ll9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fdW50aWxfcGF0dGVybiYmZS5wdXNoKHRoaXMuX3VudGlsX3BhdHRlcm4uc291cmNlKSx0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKCIoPzoiK2Uuam9pbigifCIpKyIpIil9LGEucHJvdG90eXBlLl9yZWFkX3RlbXBsYXRlPWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD10aGlzLl9pbnB1dC5wZWVrKCk7aWYoIjwiPT09dCl7dmFyIG49dGhpcy5faW5wdXQucGVlaygxKTt0aGlzLl9kaXNhYmxlZC5waHB8fHRoaXMuX2V4Y2x1ZGVkLnBocHx8Ij8iIT09bnx8KGU9ZXx8dGhpcy5fX3BhdHRlcm5zLnBocC5yZWFkKCkpLHRoaXMuX2Rpc2FibGVkLmVyYnx8dGhpcy5fZXhjbHVkZWQuZXJifHwiJSIhPT1ufHwoZT1lfHx0aGlzLl9fcGF0dGVybnMuZXJiLnJlYWQoKSl9ZWxzZSJ7Ij09PXQmJih0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzfHx0aGlzLl9leGNsdWRlZC5oYW5kbGViYXJzfHwoZT0oZT0oZT1lfHx0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19jb21tZW50LnJlYWQoKSl8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3VuZXNjYXBlZC5yZWFkKCkpfHx0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5yZWFkKCkpLHRoaXMuX2Rpc2FibGVkLmRqYW5nb3x8KHRoaXMuX2V4Y2x1ZGVkLmRqYW5nb3x8dGhpcy5fZXhjbHVkZWQuaGFuZGxlYmFyc3x8KGU9ZXx8dGhpcy5fX3BhdHRlcm5zLmRqYW5nb192YWx1ZS5yZWFkKCkpLHRoaXMuX2V4Y2x1ZGVkLmRqYW5nb3x8KGU9KGU9ZXx8dGhpcy5fX3BhdHRlcm5zLmRqYW5nb19jb21tZW50LnJlYWQoKSl8fHRoaXMuX19wYXR0ZXJucy5kamFuZ28ucmVhZCgpKSksdGhpcy5fZGlzYWJsZWQuc21hcnR5fHx0aGlzLl9kaXNhYmxlZC5kamFuZ28mJnRoaXMuX2Rpc2FibGVkLmhhbmRsZWJhcnMmJihlPShlPShlPWV8fHRoaXMuX19wYXR0ZXJucy5zbWFydHlfY29tbWVudC5yZWFkKCkpfHx0aGlzLl9fcGF0dGVybnMuc21hcnR5X2xpdGVyYWwucmVhZCgpKXx8dGhpcy5fX3BhdHRlcm5zLnNtYXJ0eS5yZWFkKCkpKTtyZXR1cm4gZX0sZS5leHBvcnRzLlRlbXBsYXRhYmxlUGF0dGVybj1hfSwsLCxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxOSkuQmVhdXRpZmllcixyPW4oMjApLk9wdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgaShlLHQsbixyKS5iZWF1dGlmeSgpfSxlLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMCkuT3B0aW9ucyxyPW4oMikuT3V0cHV0LGE9bigyMSkuVG9rZW5pemVyLG89bigyMSkuVE9LRU4scz0vXHJcbnxbXHJcbl0vLGw9L1xyXG58W1xyXG5dL2csYz1mdW5jdGlvbihlLHQpe3RoaXMuaW5kZW50X2xldmVsPTAsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPWUubWF4X3ByZXNlcnZlX25ld2xpbmVzLHRoaXMucHJlc2VydmVfbmV3bGluZXM9ZS5wcmVzZXJ2ZV9uZXdsaW5lcyx0aGlzLl9vdXRwdXQ9bmV3IHIoZSx0KX07Yy5wcm90b3R5cGUuY3VycmVudF9saW5lX2hhc19tYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5oYXNfbWF0Y2goZSl9LGMucHJvdG90eXBlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oZSx0KXt0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPWUsdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT10fSxjLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpLHRoaXMuX291dHB1dC5zZXRfd3JhcF9wb2ludCgpfSxjLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGUpe3RoaXMuX291dHB1dC5hZGRfcmF3X3Rva2VuKGUpfSxjLnByb3RvdHlwZS5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9MDtlLnR5cGUhPT1vLlRFWFQmJmUucHJldmlvdXMudHlwZSE9PW8uVEVYVCYmKHQ9ZS5uZXdsaW5lcz8xOjApLHRoaXMucHJlc2VydmVfbmV3bGluZXMmJih0PWUubmV3bGluZXM8dGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMrMT9lLm5ld2xpbmVzOnRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzKzEpO2Zvcih2YXIgbj0wO248dDtuKyspdGhpcy5wcmludF9uZXdsaW5lKG4+MCk7cmV0dXJuIDAhPT10fSxjLnByb3RvdHlwZS50cmF2ZXJzZV93aGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiEoIWUud2hpdGVzcGFjZV9iZWZvcmUmJiFlLm5ld2xpbmVzKSYmKHRoaXMucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzKGUpfHwodGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksITApfSxjLnByb3RvdHlwZS5wcmV2aW91c190b2tlbl93cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX291dHB1dC5wcmV2aW91c190b2tlbl93cmFwcGVkfSxjLnByb3RvdHlwZS5wcmludF9uZXdsaW5lPWZ1bmN0aW9uKGUpe3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoZSl9LGMucHJvdG90eXBlLnByaW50X3Rva2VuPWZ1bmN0aW9uKGUpe2UudGV4dCYmKHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpLHRoaXMuX291dHB1dC5hZGRfdG9rZW4oZS50ZXh0KSl9LGMucHJvdG90eXBlLmluZGVudD1mdW5jdGlvbigpe3RoaXMuaW5kZW50X2xldmVsKyt9LGMucHJvdG90eXBlLmdldF9mdWxsX2luZGVudD1mdW5jdGlvbihlKXtyZXR1cm4oZT10aGlzLmluZGVudF9sZXZlbCsoZXx8MCkpPDE/IiI6dGhpcy5fb3V0cHV0LmdldF9pbmRlbnRfc3RyaW5nKGUpfTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwsaT1udWxsO3JldHVybiB0LmNsb3NlZD8oInNjcmlwdCI9PT1lP249InRleHQvamF2YXNjcmlwdCI6InN0eWxlIj09PWUmJihuPSJ0ZXh0L2NzcyIpLG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW51bGwsbj1lLm5leHQ7bi50eXBlIT09by5FT0YmJmUuY2xvc2VkIT09bjspe2lmKG4udHlwZT09PW8uQVRUUklCVVRFJiYidHlwZSI9PT1uLnRleHQpe24ubmV4dCYmbi5uZXh0LnR5cGU9PT1vLkVRVUFMUyYmbi5uZXh0Lm5leHQmJm4ubmV4dC5uZXh0LnR5cGU9PT1vLlZBTFVFJiYodD1uLm5leHQubmV4dC50ZXh0KTticmVha31uPW4ubmV4dH1yZXR1cm4gdH0odCl8fG4sbi5zZWFyY2goInRleHQvY3NzIik+LTE/aT0iY3NzIjpuLnNlYXJjaCgvbW9kdWxlfCgodGV4dHxhcHBsaWNhdGlvbnxkb2pvKVwvKHgtKT8oamF2YXNjcmlwdHxlY21hc2NyaXB0fGpzY3JpcHR8bGl2ZXNjcmlwdHwobGRcKyk/anNvbnxtZXRob2R8YXNwZWN0KSkvKT4tMT9pPSJqYXZhc2NyaXB0IjpuLnNlYXJjaCgvKHRleHR8YXBwbGljYXRpb258ZG9qbylcLyh4LSk/KGh0bWwpLyk+LTE/aT0iaHRtbCI6bi5zZWFyY2goL3Rlc3RcL251bGwvKT4tMSYmKGk9Im51bGwiKSxpKTpudWxsfTtmdW5jdGlvbiBkKGUsdCl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSl9ZnVuY3Rpb24gdShlLHQsbil7dGhpcy5wYXJlbnQ9ZXx8bnVsbCx0aGlzLnRhZz10P3QudGFnX25hbWU6IiIsdGhpcy5pbmRlbnRfbGV2ZWw9bnx8MCx0aGlzLnBhcnNlcl90b2tlbj10fHxudWxsfWZ1bmN0aW9uIG0oZSl7dGhpcy5fcHJpbnRlcj1lLHRoaXMuX2N1cnJlbnRfZnJhbWU9bnVsbH1mdW5jdGlvbiBwKGUsdCxuLHIpe3RoaXMuX3NvdXJjZV90ZXh0PWV8fCIiLHQ9dHx8e30sdGhpcy5fanNfYmVhdXRpZnk9bix0aGlzLl9jc3NfYmVhdXRpZnk9cix0aGlzLl90YWdfc3RhY2s9bnVsbDt2YXIgYT1uZXcgaSh0LCJodG1sIik7dGhpcy5fb3B0aW9ucz1hLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZT0iZm9yY2UiPT09dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMuc3Vic3RyKDAsNSksdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmU9ImZvcmNlLWV4cGFuZC1tdWx0aWxpbmUiPT09dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2FsaWduZWQ9ImZvcmNlLWFsaWduZWQiPT09dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGU9ImFsaWduZWQtbXVsdGlwbGUiPT09dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlPSJwcmVzZXJ2ZSI9PT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCw4KSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZD0icHJlc2VydmUtYWxpZ25lZCI9PT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlc31tLnByb3RvdHlwZS5nZXRfcGFyc2VyX3Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRfZnJhbWU/dGhpcy5fY3VycmVudF9mcmFtZS5wYXJzZXJfdG9rZW46bnVsbH0sbS5wcm90b3R5cGUucmVjb3JkX3RhZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgdSh0aGlzLl9jdXJyZW50X2ZyYW1lLGUsdGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWwpO3RoaXMuX2N1cnJlbnRfZnJhbWU9dH0sbS5wcm90b3R5cGUuX3RyeV9wb3BfZnJhbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDtyZXR1cm4gZSYmKHQ9ZS5wYXJzZXJfdG9rZW4sdGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWw9ZS5pbmRlbnRfbGV2ZWwsdGhpcy5fY3VycmVudF9mcmFtZT1lLnBhcmVudCksdH0sbS5wcm90b3R5cGUuX2dldF9mcmFtZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLl9jdXJyZW50X2ZyYW1lO24mJi0xPT09ZS5pbmRleE9mKG4udGFnKTspe2lmKHQmJi0xIT09dC5pbmRleE9mKG4udGFnKSl7bj1udWxsO2JyZWFrfW49bi5wYXJlbnR9cmV0dXJuIG59LG0ucHJvdG90eXBlLnRyeV9wb3A9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9nZXRfZnJhbWUoW2VdLHQpO3JldHVybiB0aGlzLl90cnlfcG9wX2ZyYW1lKG4pfSxtLnByb3RvdHlwZS5pbmRlbnRfdG9fdGFnPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldF9mcmFtZShlKTt0JiYodGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWw9dC5pbmRlbnRfbGV2ZWwpfSxwLnByb3RvdHlwZS5iZWF1dGlmeT1mdW5jdGlvbigpe2lmKHRoaXMuX29wdGlvbnMuZGlzYWJsZWQpcmV0dXJuIHRoaXMuX3NvdXJjZV90ZXh0O3ZhciBlPXRoaXMuX3NvdXJjZV90ZXh0LHQ9dGhpcy5fb3B0aW9ucy5lb2w7ImF1dG8iPT09dGhpcy5fb3B0aW9ucy5lb2wmJih0PSJcbiIsZSYmcy50ZXN0KGUpJiYodD1lLm1hdGNoKHMpWzBdKSk7dmFyIG49KGU9ZS5yZXBsYWNlKGwsIlxuIikpLm1hdGNoKC9eW1x0IF0qLylbMF0saT17dGV4dDoiIix0eXBlOiIifSxyPW5ldyBmLGg9bmV3IGModGhpcy5fb3B0aW9ucyxuKSxkPW5ldyBhKGUsdGhpcy5fb3B0aW9ucykudG9rZW5pemUoKTt0aGlzLl90YWdfc3RhY2s9bmV3IG0oaCk7Zm9yKHZhciB1PW51bGwscD1kLm5leHQoKTtwLnR5cGUhPT1vLkVPRjspcC50eXBlPT09by5UQUdfT1BFTnx8cC50eXBlPT09by5DT01NRU5UP3I9dT10aGlzLl9oYW5kbGVfdGFnX29wZW4oaCxwLHIsaSk6cC50eXBlPT09by5BVFRSSUJVVEV8fHAudHlwZT09PW8uRVFVQUxTfHxwLnR5cGU9PT1vLlZBTFVFfHxwLnR5cGU9PT1vLlRFWFQmJiFyLnRhZ19jb21wbGV0ZT91PXRoaXMuX2hhbmRsZV9pbnNpZGVfdGFnKGgscCxyLGQpOnAudHlwZT09PW8uVEFHX0NMT1NFP3U9dGhpcy5faGFuZGxlX3RhZ19jbG9zZShoLHAscik6cC50eXBlPT09by5URVhUP3U9dGhpcy5faGFuZGxlX3RleHQoaCxwLHIpOmguYWRkX3Jhd190b2tlbihwKSxpPXUscD1kLm5leHQoKTtyZXR1cm4gaC5fb3V0cHV0LmdldF9jb2RlKHQpfSxwLnByb3RvdHlwZS5faGFuZGxlX3RhZ19jbG9zZT1mdW5jdGlvbihlLHQsbil7dmFyIGk9e3RleHQ6dC50ZXh0LHR5cGU6dC50eXBlfTtyZXR1cm4gZS5hbGlnbm1lbnRfc2l6ZT0wLG4udGFnX2NvbXBsZXRlPSEwLGUuc2V0X3NwYWNlX2JlZm9yZV90b2tlbih0Lm5ld2xpbmVzfHwiIiE9PXQud2hpdGVzcGFjZV9iZWZvcmUsITApLG4uaXNfdW5mb3JtYXR0ZWQ/ZS5hZGRfcmF3X3Rva2VuKHQpOigiPCI9PT1uLnRhZ19zdGFydF9jaGFyJiYoZS5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKCIvIj09PXQudGV4dFswXSwhMCksdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmUmJm4uaGFzX3dyYXBwZWRfYXR0cnMmJmUucHJpbnRfbmV3bGluZSghMSkpLGUucHJpbnRfdG9rZW4odCkpLCFuLmluZGVudF9jb250ZW50fHxuLmlzX3VuZm9ybWF0dGVkfHxuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWR8fChlLmluZGVudCgpLG4uaW5kZW50X2NvbnRlbnQ9ITEpLG4uaXNfaW5saW5lX2VsZW1lbnR8fG4uaXNfdW5mb3JtYXR0ZWR8fG4uaXNfY29udGVudF91bmZvcm1hdHRlZHx8ZS5zZXRfd3JhcF9wb2ludCgpLGl9LHAucHJvdG90eXBlLl9oYW5kbGVfaW5zaWRlX3RhZz1mdW5jdGlvbihlLHQsbixpKXt2YXIgcj1uLmhhc193cmFwcGVkX2F0dHJzLGE9e3RleHQ6dC50ZXh0LHR5cGU6dC50eXBlfTtpZihlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4odC5uZXdsaW5lc3x8IiIhPT10LndoaXRlc3BhY2VfYmVmb3JlLCEwKSxuLmlzX3VuZm9ybWF0dGVkKWUuYWRkX3Jhd190b2tlbih0KTtlbHNlIGlmKCJ7Ij09PW4udGFnX3N0YXJ0X2NoYXImJnQudHlwZT09PW8uVEVYVCllLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyh0KT8odC5uZXdsaW5lcz0wLGUuYWRkX3Jhd190b2tlbih0KSk6ZS5wcmludF90b2tlbih0KTtlbHNle2lmKHQudHlwZT09PW8uQVRUUklCVVRFPyhlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oITApLG4uYXR0cl9jb3VudCs9MSk6KHQudHlwZT09PW8uRVFVQUxTfHx0LnR5cGU9PT1vLlZBTFVFJiZ0LnByZXZpb3VzLnR5cGU9PT1vLkVRVUFMUykmJmUuc2V0X3NwYWNlX2JlZm9yZV90b2tlbighMSksdC50eXBlPT09by5BVFRSSUJVVEUmJiI8Ij09PW4udGFnX3N0YXJ0X2NoYXImJigodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlfHx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZCkmJihlLnRyYXZlcnNlX3doaXRlc3BhY2UodCkscj1yfHwwIT09dC5uZXdsaW5lcyksdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlKSl7dmFyIHM9bi5hdHRyX2NvdW50PjE7aWYodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmUmJjE9PT1uLmF0dHJfY291bnQpe3ZhciBsLGM9ITAsaD0wO2Rve2lmKChsPWkucGVlayhoKSkudHlwZT09PW8uQVRUUklCVVRFKXtjPSExO2JyZWFrfWgrPTF9d2hpbGUoaDw0JiZsLnR5cGUhPT1vLkVPRiYmbC50eXBlIT09by5UQUdfQ0xPU0UpO3M9IWN9cyYmKGUucHJpbnRfbmV3bGluZSghMSkscj0hMCl9ZS5wcmludF90b2tlbih0KSxyPXJ8fGUucHJldmlvdXNfdG9rZW5fd3JhcHBlZCgpLG4uaGFzX3dyYXBwZWRfYXR0cnM9cn1yZXR1cm4gYX0scC5wcm90b3R5cGUuX2hhbmRsZV90ZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17dGV4dDp0LnRleHQsdHlwZToiVEtfQ09OVEVOVCJ9O3JldHVybiBuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWU/dGhpcy5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0KGUsdCxuKTpuLmlzX3VuZm9ybWF0dGVkfHxuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQ/ZS5hZGRfcmF3X3Rva2VuKHQpOihlLnRyYXZlcnNlX3doaXRlc3BhY2UodCksZS5wcmludF90b2tlbih0KSksaX0scC5wcm90b3R5cGUuX3ByaW50X2N1c3RvbV9iZWF0aWZpZXJfdGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcztpZigiIiE9PXQudGV4dCl7dmFyIHIsYT10LnRleHQsbz0xLHM9IiIsbD0iIjsiamF2YXNjcmlwdCI9PT1uLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9qc19iZWF1dGlmeT9yPXRoaXMuX2pzX2JlYXV0aWZ5OiJjc3MiPT09bi5jdXN0b21fYmVhdXRpZmllcl9uYW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fY3NzX2JlYXV0aWZ5P3I9dGhpcy5fY3NzX2JlYXV0aWZ5OiJodG1sIj09PW4uY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSYmKHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHAoZSx0LGkuX2pzX2JlYXV0aWZ5LGkuX2Nzc19iZWF1dGlmeSkuYmVhdXRpZnkoKX0pLCJrZWVwIj09PXRoaXMuX29wdGlvbnMuaW5kZW50X3NjcmlwdHM/bz0wOiJzZXBhcmF0ZSI9PT10aGlzLl9vcHRpb25zLmluZGVudF9zY3JpcHRzJiYobz0tZS5pbmRlbnRfbGV2ZWwpO3ZhciBjPWUuZ2V0X2Z1bGxfaW5kZW50KG8pO2lmKGE9YS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKSwiaHRtbCIhPT1uLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUmJiI8Ij09PWFbMF0mJmEubWF0Y2goL14oPCEtLXw8IVxbQ0RBVEFcWykvKSl7dmFyIGg9L14oPCEtLVteXG5dKnw8IVxbQ0RBVEFcWykoXG4/KShbIFx0XG5dKikoW1xzXFNdKikoLS0+fF1dPikkLy5leGVjKGEpO2lmKCFoKXJldHVybiB2b2lkIGUuYWRkX3Jhd190b2tlbih0KTtzPWMraFsxXSsiXG4iLGE9aFs0XSxoWzVdJiYobD1jK2hbNV0pLGE9YS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKSwoaFsyXXx8LTEhPT1oWzNdLmluZGV4T2YoIlxuIikpJiYoaD1oWzNdLm1hdGNoKC9bIFx0XSskLykpJiYodC53aGl0ZXNwYWNlX2JlZm9yZT1oWzBdKX1pZihhKWlmKHIpe3ZhciBkPWZ1bmN0aW9uKCl7dGhpcy5lb2w9IlxuIn07ZC5wcm90b3R5cGU9dGhpcy5fb3B0aW9ucy5yYXdfb3B0aW9ucyxhPXIoYythLG5ldyBkKX1lbHNle3ZhciB1PXQud2hpdGVzcGFjZV9iZWZvcmU7dSYmKGE9YS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxuKCIrdSsiKT8iLCJnIiksIlxuIikpLGE9YythLnJlcGxhY2UoL1xuL2csIlxuIitjKX1zJiYoYT1hP3MrYSsiXG4iK2w6cytsKSxlLnByaW50X25ld2xpbmUoITEpLGEmJih0LnRleHQ9YSx0LndoaXRlc3BhY2VfYmVmb3JlPSIiLHQubmV3bGluZXM9MCxlLmFkZF9yYXdfdG9rZW4odCksZS5wcmludF9uZXdsaW5lKCEwKSl9fSxwLnByb3RvdHlwZS5faGFuZGxlX3RhZ19vcGVuPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXMuX2dldF90YWdfb3Blbl90b2tlbih0KTtyZXR1cm4hbi5pc191bmZvcm1hdHRlZCYmIW4uaXNfY29udGVudF91bmZvcm1hdHRlZHx8bi5pc19lbXB0eV9lbGVtZW50fHx0LnR5cGUhPT1vLlRBR19PUEVOfHwwIT09dC50ZXh0LmluZGV4T2YoIjwvIik/KGUudHJhdmVyc2Vfd2hpdGVzcGFjZSh0KSx0aGlzLl9zZXRfdGFnX3Bvc2l0aW9uKGUsdCxyLG4saSksci5pc19pbmxpbmVfZWxlbWVudHx8ZS5zZXRfd3JhcF9wb2ludCgpLGUucHJpbnRfdG9rZW4odCkpOihlLmFkZF9yYXdfdG9rZW4odCksci5zdGFydF90YWdfdG9rZW49dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3Aoci50YWdfbmFtZSkpLCh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZHx8dGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKHIuYWxpZ25tZW50X3NpemU9dC50ZXh0Lmxlbmd0aCsxKSxyLnRhZ19jb21wbGV0ZXx8ci5pc191bmZvcm1hdHRlZHx8KGUuYWxpZ25tZW50X3NpemU9ci5hbGlnbm1lbnRfc2l6ZSkscn07dmFyIGY9ZnVuY3Rpb24oZSx0KXt2YXIgbjsodGhpcy5wYXJlbnQ9ZXx8bnVsbCx0aGlzLnRleHQ9IiIsdGhpcy50eXBlPSJUS19UQUdfT1BFTiIsdGhpcy50YWdfbmFtZT0iIix0aGlzLmlzX2lubGluZV9lbGVtZW50PSExLHRoaXMuaXNfdW5mb3JtYXR0ZWQ9ITEsdGhpcy5pc19jb250ZW50X3VuZm9ybWF0dGVkPSExLHRoaXMuaXNfZW1wdHlfZWxlbWVudD0hMSx0aGlzLmlzX3N0YXJ0X3RhZz0hMSx0aGlzLmlzX2VuZF90YWc9ITEsdGhpcy5pbmRlbnRfY29udGVudD0hMSx0aGlzLm11bHRpbGluZV9jb250ZW50PSExLHRoaXMuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT1udWxsLHRoaXMuc3RhcnRfdGFnX3Rva2VuPW51bGwsdGhpcy5hdHRyX2NvdW50PTAsdGhpcy5oYXNfd3JhcHBlZF9hdHRycz0hMSx0aGlzLmFsaWdubWVudF9zaXplPTAsdGhpcy50YWdfY29tcGxldGU9ITEsdGhpcy50YWdfc3RhcnRfY2hhcj0iIix0aGlzLnRhZ19jaGVjaz0iIix0KT8odGhpcy50YWdfc3RhcnRfY2hhcj10LnRleHRbMF0sdGhpcy50ZXh0PXQudGV4dCwiPCI9PT10aGlzLnRhZ19zdGFydF9jaGFyPyhuPXQudGV4dC5tYXRjaCgvXjwoW15ccz5dKikvKSx0aGlzLnRhZ19jaGVjaz1uP25bMV06IiIpOihuPXQudGV4dC5tYXRjaCgvXnt7KD86W1xeXXwjXCo/KT8oW15cc31dKykvKSx0aGlzLnRhZ19jaGVjaz1uP25bMV06IiIsInt7Iz4iPT09dC50ZXh0JiYiPiI9PT10aGlzLnRhZ19jaGVjayYmbnVsbCE9PXQubmV4dCYmKHRoaXMudGFnX2NoZWNrPXQubmV4dC50ZXh0KSksdGhpcy50YWdfY2hlY2s9dGhpcy50YWdfY2hlY2sudG9Mb3dlckNhc2UoKSx0LnR5cGU9PT1vLkNPTU1FTlQmJih0aGlzLnRhZ19jb21wbGV0ZT0hMCksdGhpcy5pc19zdGFydF90YWc9Ii8iIT09dGhpcy50YWdfY2hlY2suY2hhckF0KDApLHRoaXMudGFnX25hbWU9dGhpcy5pc19zdGFydF90YWc/dGhpcy50YWdfY2hlY2s6dGhpcy50YWdfY2hlY2suc3Vic3RyKDEpLHRoaXMuaXNfZW5kX3RhZz0hdGhpcy5pc19zdGFydF90YWd8fHQuY2xvc2VkJiYiLz4iPT09dC5jbG9zZWQudGV4dCx0aGlzLmlzX2VuZF90YWc9dGhpcy5pc19lbmRfdGFnfHwieyI9PT10aGlzLnRhZ19zdGFydF9jaGFyJiYodGhpcy50ZXh0Lmxlbmd0aDwzfHwvW14jXF5dLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoMikpKSk6dGhpcy50YWdfY29tcGxldGU9ITB9O3AucHJvdG90eXBlLl9nZXRfdGFnX29wZW5fdG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGYodGhpcy5fdGFnX3N0YWNrLmdldF9wYXJzZXJfdG9rZW4oKSxlKTtyZXR1cm4gdC5hbGlnbm1lbnRfc2l6ZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSx0LmlzX2VuZF90YWc9dC5pc19lbmRfdGFnfHxkKHQudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMudm9pZF9lbGVtZW50cyksdC5pc19lbXB0eV9lbGVtZW50PXQudGFnX2NvbXBsZXRlfHx0LmlzX3N0YXJ0X3RhZyYmdC5pc19lbmRfdGFnLHQuaXNfdW5mb3JtYXR0ZWQ9IXQudGFnX2NvbXBsZXRlJiZkKHQudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQpLHQuaXNfY29udGVudF91bmZvcm1hdHRlZD0hdC5pc19lbXB0eV9lbGVtZW50JiZkKHQudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZCksdC5pc19pbmxpbmVfZWxlbWVudD1kKHQudGFnX25hbWUsdGhpcy5fb3B0aW9ucy5pbmxpbmUpfHwieyI9PT10LnRhZ19zdGFydF9jaGFyLHR9LHAucHJvdG90eXBlLl9zZXRfdGFnX3Bvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYobi5pc19lbXB0eV9lbGVtZW50fHwobi5pc19lbmRfdGFnP24uc3RhcnRfdGFnX3Rva2VuPXRoaXMuX3RhZ19zdGFjay50cnlfcG9wKG4udGFnX25hbWUpOih0aGlzLl9kb19vcHRpb25hbF9lbmRfZWxlbWVudChuKSYmKG4uaXNfaW5saW5lX2VsZW1lbnR8fGUucHJpbnRfbmV3bGluZSghMSkpLHRoaXMuX3RhZ19zdGFjay5yZWNvcmRfdGFnKG4pLCJzY3JpcHQiIT09bi50YWdfbmFtZSYmInN0eWxlIiE9PW4udGFnX25hbWV8fG4uaXNfdW5mb3JtYXR0ZWR8fG4uaXNfY29udGVudF91bmZvcm1hdHRlZHx8KG4uY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT1oKG4udGFnX2NoZWNrLHQpKSkpLGQobi50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy5leHRyYV9saW5lcnMpJiYoZS5wcmludF9uZXdsaW5lKCExKSxlLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKXx8ZS5wcmludF9uZXdsaW5lKCEwKSksbi5pc19lbXB0eV9lbGVtZW50KXtpZigieyI9PT1uLnRhZ19zdGFydF9jaGFyJiYiZWxzZSI9PT1uLnRhZ19jaGVjayl0aGlzLl90YWdfc3RhY2suaW5kZW50X3RvX3RhZyhbImlmIiwidW5sZXNzIiwiZWFjaCJdKSxuLmluZGVudF9jb250ZW50PSEwLGUuY3VycmVudF9saW5lX2hhc19tYXRjaCgve3sjaWYvKXx8ZS5wcmludF9uZXdsaW5lKCExKTsiIS0tIj09PW4udGFnX25hbWUmJnIudHlwZT09PW8uVEFHX0NMT1NFJiZpLmlzX2VuZF90YWcmJi0xPT09bi50ZXh0LmluZGV4T2YoIlxuIil8fChuLmlzX2lubGluZV9lbGVtZW50fHxuLmlzX3VuZm9ybWF0dGVkfHxlLnByaW50X25ld2xpbmUoITEpLHRoaXMuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lKGUsbikpfWVsc2UgaWYobi5pc19lbmRfdGFnKXt2YXIgYT0hMTthPShhPW4uc3RhcnRfdGFnX3Rva2VuJiZuLnN0YXJ0X3RhZ190b2tlbi5tdWx0aWxpbmVfY29udGVudCl8fCFuLmlzX2lubGluZV9lbGVtZW50JiYhKGkuaXNfaW5saW5lX2VsZW1lbnR8fGkuaXNfdW5mb3JtYXR0ZWQpJiYhKHIudHlwZT09PW8uVEFHX0NMT1NFJiZuLnN0YXJ0X3RhZ190b2tlbj09PWkpJiYiVEtfQ09OVEVOVCIhPT1yLnR5cGUsKG4uaXNfY29udGVudF91bmZvcm1hdHRlZHx8bi5pc191bmZvcm1hdHRlZCkmJihhPSExKSxhJiZlLnByaW50X25ld2xpbmUoITEpfWVsc2Ugbi5pbmRlbnRfY29udGVudD0hbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lLCI8Ij09PW4udGFnX3N0YXJ0X2NoYXImJigiaHRtbCI9PT1uLnRhZ19uYW1lP24uaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaW5uZXJfaHRtbDoiaGVhZCI9PT1uLnRhZ19uYW1lP24uaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sOiJib2R5Ij09PW4udGFnX25hbWUmJihuLmluZGVudF9jb250ZW50PXRoaXMuX29wdGlvbnMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbCkpLG4uaXNfaW5saW5lX2VsZW1lbnR8fG4uaXNfdW5mb3JtYXR0ZWR8fCJUS19DT05URU5UIj09PXIudHlwZSYmIW4uaXNfY29udGVudF91bmZvcm1hdHRlZHx8ZS5wcmludF9uZXdsaW5lKCExKSx0aGlzLl9jYWxjbHVhdGVfcGFyZW50X211bHRpbGluZShlLG4pfSxwLnByb3RvdHlwZS5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmU9ZnVuY3Rpb24oZSx0KXshdC5wYXJlbnR8fCFlLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCl8fCh0LmlzX2lubGluZV9lbGVtZW50fHx0LmlzX3VuZm9ybWF0dGVkKSYmdC5wYXJlbnQuaXNfaW5saW5lX2VsZW1lbnR8fCh0LnBhcmVudC5tdWx0aWxpbmVfY29udGVudD0hMCl9O3ZhciBnPVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkZXRhaWxzIiwiZGl2IiwiZGwiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZGVyIiwiaHIiLCJtYWluIiwibmF2Iiwib2wiLCJwIiwicHJlIiwic2VjdGlvbiIsInRhYmxlIiwidWwiXSxiPVsiYSIsImF1ZGlvIiwiZGVsIiwiaW5zIiwibWFwIiwibm9zY3JpcHQiLCJ2aWRlbyJdO3AucHJvdG90eXBlLl9kb19vcHRpb25hbF9lbmRfZWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD1udWxsO2lmKCFlLmlzX2VtcHR5X2VsZW1lbnQmJmUuaXNfc3RhcnRfdGFnJiZlLnBhcmVudCl7aWYoImJvZHkiPT09ZS50YWdfbmFtZSl0PXR8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJoZWFkIik7ZWxzZSBpZigibGkiPT09ZS50YWdfbmFtZSl0PXR8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJsaSIsWyJvbCIsInVsIl0pO2Vsc2UgaWYoImRkIj09PWUudGFnX25hbWV8fCJkdCI9PT1lLnRhZ19uYW1lKXQ9KHQ9dHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImR0IixbImRsIl0pKXx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImRkIixbImRsIl0pO2Vsc2UgaWYoInAiPT09ZS5wYXJlbnQudGFnX25hbWUmJi0xIT09Zy5pbmRleE9mKGUudGFnX25hbWUpKXt2YXIgbj1lLnBhcmVudC5wYXJlbnQ7biYmLTEhPT1iLmluZGV4T2Yobi50YWdfbmFtZSl8fCh0PXR8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJwIikpfWVsc2UicnAiPT09ZS50YWdfbmFtZXx8InJ0Ij09PWUudGFnX25hbWU/dD0odD10fHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgicnQiLFsicnVieSIsInJ0YyJdKSl8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJycCIsWyJydWJ5IiwicnRjIl0pOiJvcHRncm91cCI9PT1lLnRhZ19uYW1lP3Q9dHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoIm9wdGdyb3VwIixbInNlbGVjdCJdKToib3B0aW9uIj09PWUudGFnX25hbWU/dD10fHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgib3B0aW9uIixbInNlbGVjdCIsImRhdGFsaXN0Iiwib3B0Z3JvdXAiXSk6ImNvbGdyb3VwIj09PWUudGFnX25hbWU/dD10fHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKToidGhlYWQiPT09ZS50YWdfbmFtZT90PSh0PXR8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pKXx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pOiJ0Ym9keSI9PT1lLnRhZ19uYW1lfHwidGZvb3QiPT09ZS50YWdfbmFtZT90PSh0PSh0PSh0PXR8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pKXx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pKXx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRoZWFkIixbInRhYmxlIl0pKXx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRib2R5IixbInRhYmxlIl0pOiJ0ciI9PT1lLnRhZ19uYW1lP3Q9KHQ9KHQ9dHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNhcHRpb24iLFsidGFibGUiXSkpfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY29sZ3JvdXAiLFsidGFibGUiXSkpfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidHIiLFsidGFibGUiLCJ0aGVhZCIsInRib2R5IiwidGZvb3QiXSk6InRoIiE9PWUudGFnX25hbWUmJiJ0ZCIhPT1lLnRhZ19uYW1lfHwodD0odD10fHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidGQiLFsidGFibGUiLCJ0aGVhZCIsInRib2R5IiwidGZvb3QiLCJ0ciJdKSl8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0aCIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCIsInRyIl0pKTtyZXR1cm4gZS5wYXJlbnQ9dGhpcy5fdGFnX3N0YWNrLmdldF9wYXJzZXJfdG9rZW4oKSx0fX0sZS5leHBvcnRzLkJlYXV0aWZpZXI9cH0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNikuT3B0aW9ucztmdW5jdGlvbiByKGUpe2kuY2FsbCh0aGlzLGUsImh0bWwiKSwxPT09dGhpcy50ZW1wbGF0aW5nLmxlbmd0aCYmImF1dG8iPT09dGhpcy50ZW1wbGF0aW5nWzBdJiYodGhpcy50ZW1wbGF0aW5nPVsiZGphbmdvIiwiZXJiIiwiaGFuZGxlYmFycyIsInBocCJdKSx0aGlzLmluZGVudF9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfaW5uZXJfaHRtbCIpLHRoaXMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbD10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2JvZHlfaW5uZXJfaHRtbCIsITApLHRoaXMuaW5kZW50X2hlYWRfaW5uZXJfaHRtbD10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2hlYWRfaW5uZXJfaHRtbCIsITApLHRoaXMuaW5kZW50X2hhbmRsZWJhcnM9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9oYW5kbGViYXJzIiwhMCksdGhpcy53cmFwX2F0dHJpYnV0ZXM9dGhpcy5fZ2V0X3NlbGVjdGlvbigid3JhcF9hdHRyaWJ1dGVzIixbImF1dG8iLCJmb3JjZSIsImZvcmNlLWFsaWduZWQiLCJmb3JjZS1leHBhbmQtbXVsdGlsaW5lIiwiYWxpZ25lZC1tdWx0aXBsZSIsInByZXNlcnZlIiwicHJlc2VydmUtYWxpZ25lZCJdKSx0aGlzLndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemUiLHRoaXMuaW5kZW50X3NpemUpLHRoaXMuZXh0cmFfbGluZXJzPXRoaXMuX2dldF9hcnJheSgiZXh0cmFfbGluZXJzIixbImhlYWQiLCJib2R5IiwiL2h0bWwiXSksdGhpcy5pbmxpbmU9dGhpcy5fZ2V0X2FycmF5KCJpbmxpbmUiLFsiYSIsImFiYnIiLCJhcmVhIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjaXRlIiwiY29kZSIsImRhdGEiLCJkYXRhbGlzdCIsImRlbCIsImRmbiIsImVtIiwiZW1iZWQiLCJpIiwiaWZyYW1lIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJrZXlnZW4iLCJsYWJlbCIsIm1hcCIsIm1hcmsiLCJtYXRoIiwibWV0ZXIiLCJub3NjcmlwdCIsIm9iamVjdCIsIm91dHB1dCIsInByb2dyZXNzIiwicSIsInJ1YnkiLCJzIiwic2FtcCIsInNlbGVjdCIsInNtYWxsIiwic3BhbiIsInN0cm9uZyIsInN1YiIsInN1cCIsInN2ZyIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0aW1lIiwidSIsInZhciIsInZpZGVvIiwid2JyIiwidGV4dCIsImFjcm9ueW0iLCJiaWciLCJzdHJpa2UiLCJ0dCJdKSx0aGlzLnZvaWRfZWxlbWVudHM9dGhpcy5fZ2V0X2FycmF5KCJ2b2lkX2VsZW1lbnRzIixbImFyZWEiLCJiYXNlIiwiYnIiLCJjb2wiLCJlbWJlZCIsImhyIiwiaW1nIiwiaW5wdXQiLCJrZXlnZW4iLCJsaW5rIiwibWVudWl0ZW0iLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciIsIiFkb2N0eXBlIiwiP3htbCIsImJhc2Vmb250IiwiaXNpbmRleCJdKSx0aGlzLnVuZm9ybWF0dGVkPXRoaXMuX2dldF9hcnJheSgidW5mb3JtYXR0ZWQiLFtdKSx0aGlzLmNvbnRlbnRfdW5mb3JtYXR0ZWQ9dGhpcy5fZ2V0X2FycmF5KCJjb250ZW50X3VuZm9ybWF0dGVkIixbInByZSIsInRleHRhcmVhIl0pLHRoaXMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI9dGhpcy5fZ2V0X2NoYXJhY3RlcnMoInVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyIiksdGhpcy5pbmRlbnRfc2NyaXB0cz10aGlzLl9nZXRfc2VsZWN0aW9uKCJpbmRlbnRfc2NyaXB0cyIsWyJub3JtYWwiLCJrZWVwIiwic2VwYXJhdGUiXSl9ci5wcm90b3R5cGU9bmV3IGksZS5leHBvcnRzLk9wdGlvbnM9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oOSkuVG9rZW5pemVyLHI9big5KS5UT0tFTixhPW4oMTMpLkRpcmVjdGl2ZXMsbz1uKDE0KS5UZW1wbGF0YWJsZVBhdHRlcm4scz1uKDEyKS5QYXR0ZXJuLGw9e1RBR19PUEVOOiJUS19UQUdfT1BFTiIsVEFHX0NMT1NFOiJUS19UQUdfQ0xPU0UiLEFUVFJJQlVURToiVEtfQVRUUklCVVRFIixFUVVBTFM6IlRLX0VRVUFMUyIsVkFMVUU6IlRLX1ZBTFVFIixDT01NRU5UOiJUS19DT01NRU5UIixURVhUOiJUS19URVhUIixVTktOT1dOOiJUS19VTktOT1dOIixTVEFSVDpyLlNUQVJULFJBVzpyLlJBVyxFT0Y6ci5FT0Z9LGM9bmV3IGEoLzxcIS0tLywvLS0+LyksaD1mdW5jdGlvbihlLHQpe2kuY2FsbCh0aGlzLGUsdCksdGhpcy5fY3VycmVudF90YWdfbmFtZT0iIjt2YXIgbj1uZXcgbyh0aGlzLl9pbnB1dCkucmVhZF9vcHRpb25zKHRoaXMuX29wdGlvbnMpLHI9bmV3IHModGhpcy5faW5wdXQpO2lmKHRoaXMuX19wYXR0ZXJucz17d29yZDpuLnVudGlsKC9bXG5cclx0IDxdLyksc2luZ2xlX3F1b3RlOm4udW50aWxfYWZ0ZXIoLycvKSxkb3VibGVfcXVvdGU6bi51bnRpbF9hZnRlcigvIi8pLGF0dHJpYnV0ZTpuLnVudGlsKC9bXG5cclx0ID0+XXxcLz4vKSxlbGVtZW50X25hbWU6bi51bnRpbCgvW1xuXHJcdCA+XC9dLyksaGFuZGxlYmFyc19jb21tZW50OnIuc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLGhhbmRsZWJhcnM6ci5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLGhhbmRsZWJhcnNfb3BlbjpyLnVudGlsKC9bXG5cclx0IH1dLyksaGFuZGxlYmFyc19yYXdfY2xvc2U6ci51bnRpbCgvfX0vKSxjb21tZW50OnIuc3RhcnRpbmdfd2l0aCgvPCEtLS8pLnVudGlsX2FmdGVyKC8tLT4vKSxjZGF0YTpyLnN0YXJ0aW5nX3dpdGgoLzwhXFtDREFUQVxbLykudW50aWxfYWZ0ZXIoL11dPi8pLGNvbmRpdGlvbmFsX2NvbW1lbnQ6ci5zdGFydGluZ193aXRoKC88IVxbLykudW50aWxfYWZ0ZXIoL10+LykscHJvY2Vzc2luZzpyLnN0YXJ0aW5nX3dpdGgoLzxcPy8pLnVudGlsX2FmdGVyKC9cPz4vKX0sdGhpcy5fb3B0aW9ucy5pbmRlbnRfaGFuZGxlYmFycyYmKHRoaXMuX19wYXR0ZXJucy53b3JkPXRoaXMuX19wYXR0ZXJucy53b3JkLmV4Y2x1ZGUoImhhbmRsZWJhcnMiKSksdGhpcy5fdW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI9bnVsbCx0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKXt2YXIgYT10aGlzLl9pbnB1dC5nZXRfbGl0ZXJhbF9yZWdleHAodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcik7dGhpcy5fX3BhdHRlcm5zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyPXIubWF0Y2hpbmcoYSkudW50aWxfYWZ0ZXIoYSl9fTsoaC5wcm90b3R5cGU9bmV3IGkpLl9pc19jb21tZW50PWZ1bmN0aW9uKGUpe3JldHVybiExfSxoLnByb3RvdHlwZS5faXNfb3BlbmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09bC5UQUdfT1BFTn0saC5wcm90b3R5cGUuX2lzX2Nsb3Npbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50eXBlPT09bC5UQUdfQ0xPU0UmJnQmJigoIj4iPT09ZS50ZXh0fHwiLz4iPT09ZS50ZXh0KSYmIjwiPT09dC50ZXh0WzBdfHwifX0iPT09ZS50ZXh0JiYieyI9PT10LnRleHRbMF0mJiJ7Ij09PXQudGV4dFsxXSl9LGgucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRfdGFnX25hbWU9IiJ9LGgucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGw7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgaT10aGlzLl9pbnB1dC5wZWVrKCk7cmV0dXJuIG51bGw9PT1pP3RoaXMuX2NyZWF0ZV90b2tlbihsLkVPRiwiIik6bj0obj0obj0obj0obj0obj0obj0obj0obj1ufHx0aGlzLl9yZWFkX29wZW5faGFuZGxlYmFycyhpLHQpKXx8dGhpcy5fcmVhZF9hdHRyaWJ1dGUoaSxlLHQpKXx8dGhpcy5fcmVhZF9jbG9zZShpLHQpKXx8dGhpcy5fcmVhZF9yYXdfY29udGVudChpLGUsdCkpfHx0aGlzLl9yZWFkX2NvbnRlbnRfd29yZChpKSl8fHRoaXMuX3JlYWRfY29tbWVudF9vcl9jZGF0YShpKSl8fHRoaXMuX3JlYWRfcHJvY2Vzc2luZyhpKSl8fHRoaXMuX3JlYWRfb3BlbihpLHQpKXx8dGhpcy5fY3JlYXRlX3Rva2VuKGwuVU5LTk9XTix0aGlzLl9pbnB1dC5uZXh0KCkpfSxoLnByb3RvdHlwZS5fcmVhZF9jb21tZW50X29yX2NkYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGwsbj1udWxsLGk9bnVsbDsiPCI9PT1lJiYoIiEiPT09dGhpcy5faW5wdXQucGVlaygxKSYmKChuPXRoaXMuX19wYXR0ZXJucy5jb21tZW50LnJlYWQoKSk/KGk9Yy5nZXRfZGlyZWN0aXZlcyhuKSkmJiJzdGFydCI9PT1pLmlnbm9yZSYmKG4rPWMucmVhZElnbm9yZWQodGhpcy5faW5wdXQpKTpuPXRoaXMuX19wYXR0ZXJucy5jZGF0YS5yZWFkKCkpLG4mJigodD10aGlzLl9jcmVhdGVfdG9rZW4obC5DT01NRU5ULG4pKS5kaXJlY3RpdmVzPWkpKTtyZXR1cm4gdH0saC5wcm90b3R5cGUuX3JlYWRfcHJvY2Vzc2luZz1mdW5jdGlvbihlKXt2YXIgdD1udWxsLG49bnVsbDtpZigiPCI9PT1lKXt2YXIgaT10aGlzLl9pbnB1dC5wZWVrKDEpOyIhIiE9PWkmJiI/IiE9PWl8fChuPShuPXRoaXMuX19wYXR0ZXJucy5jb25kaXRpb25hbF9jb21tZW50LnJlYWQoKSl8fHRoaXMuX19wYXR0ZXJucy5wcm9jZXNzaW5nLnJlYWQoKSksbiYmKCh0PXRoaXMuX2NyZWF0ZV90b2tlbihsLkNPTU1FTlQsbikpLmRpcmVjdGl2ZXM9bnVsbCl9cmV0dXJuIHR9LGgucHJvdG90eXBlLl9yZWFkX29wZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsLGk9bnVsbDtyZXR1cm4gdHx8IjwiPT09ZSYmKG49dGhpcy5faW5wdXQubmV4dCgpLCIvIj09PXRoaXMuX2lucHV0LnBlZWsoKSYmKG4rPXRoaXMuX2lucHV0Lm5leHQoKSksbis9dGhpcy5fX3BhdHRlcm5zLmVsZW1lbnRfbmFtZS5yZWFkKCksaT10aGlzLl9jcmVhdGVfdG9rZW4obC5UQUdfT1BFTixuKSksaX0saC5wcm90b3R5cGUuX3JlYWRfb3Blbl9oYW5kbGViYXJzPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbCxpPW51bGw7cmV0dXJuIHR8fHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMmJiJ7Ij09PWUmJiJ7Ij09PXRoaXMuX2lucHV0LnBlZWsoMSkmJigiISI9PT10aGlzLl9pbnB1dC5wZWVrKDIpPyhuPShuPXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpKXx8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMucmVhZCgpLGk9dGhpcy5fY3JlYXRlX3Rva2VuKGwuQ09NTUVOVCxuKSk6KG49dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfb3Blbi5yZWFkKCksaT10aGlzLl9jcmVhdGVfdG9rZW4obC5UQUdfT1BFTixuKSkpLGl9LGgucHJvdG90eXBlLl9yZWFkX2Nsb3NlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbCxpPW51bGw7cmV0dXJuIHQmJigiPCI9PT10LnRleHRbMF0mJigiPiI9PT1lfHwiLyI9PT1lJiYiPiI9PT10aGlzLl9pbnB1dC5wZWVrKDEpKT8obj10aGlzLl9pbnB1dC5uZXh0KCksIi8iPT09ZSYmKG4rPXRoaXMuX2lucHV0Lm5leHQoKSksaT10aGlzLl9jcmVhdGVfdG9rZW4obC5UQUdfQ0xPU0UsbikpOiJ7Ij09PXQudGV4dFswXSYmIn0iPT09ZSYmIn0iPT09dGhpcy5faW5wdXQucGVlaygxKSYmKHRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9pbnB1dC5uZXh0KCksaT10aGlzLl9jcmVhdGVfdG9rZW4obC5UQUdfQ0xPU0UsIn19IikpKSxpfSxoLnByb3RvdHlwZS5fcmVhZF9hdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW51bGwscj0iIjtpZihuJiYiPCI9PT1uLnRleHRbMF0paWYoIj0iPT09ZSlpPXRoaXMuX2NyZWF0ZV90b2tlbihsLkVRVUFMUyx0aGlzLl9pbnB1dC5uZXh0KCkpO2Vsc2UgaWYoJyInPT09ZXx8IiciPT09ZSl7dmFyIGE9dGhpcy5faW5wdXQubmV4dCgpO2ErPSciJz09PWU/dGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZS5yZWFkKCk6dGhpcy5fX3BhdHRlcm5zLnNpbmdsZV9xdW90ZS5yZWFkKCksaT10aGlzLl9jcmVhdGVfdG9rZW4obC5WQUxVRSxhKX1lbHNlKHI9dGhpcy5fX3BhdHRlcm5zLmF0dHJpYnV0ZS5yZWFkKCkpJiYoaT10LnR5cGU9PT1sLkVRVUFMUz90aGlzLl9jcmVhdGVfdG9rZW4obC5WQUxVRSxyKTp0aGlzLl9jcmVhdGVfdG9rZW4obC5BVFRSSUJVVEUscikpO3JldHVybiBpfSxoLnByb3RvdHlwZS5faXNfY29udGVudF91bmZvcm1hdHRlZD1mdW5jdGlvbihlKXtyZXR1cm4tMT09PXRoaXMuX29wdGlvbnMudm9pZF9lbGVtZW50cy5pbmRleE9mKGUpJiYoLTEhPT10aGlzLl9vcHRpb25zLmNvbnRlbnRfdW5mb3JtYXR0ZWQuaW5kZXhPZihlKXx8LTEhPT10aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkLmluZGV4T2YoZSkpfSxoLnByb3RvdHlwZS5fcmVhZF9yYXdfY29udGVudD1mdW5jdGlvbihlLHQsbil7dmFyIGk9IiI7aWYobiYmInsiPT09bi50ZXh0WzBdKWk9dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfcmF3X2Nsb3NlLnJlYWQoKTtlbHNlIGlmKHQudHlwZT09PWwuVEFHX0NMT1NFJiYiPCI9PT10Lm9wZW5lZC50ZXh0WzBdJiYiLyIhPT10LnRleHRbMF0pe3ZhciByPXQub3BlbmVkLnRleHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7aWYoInNjcmlwdCI9PT1yfHwic3R5bGUiPT09cil7dmFyIGE9dGhpcy5fcmVhZF9jb21tZW50X29yX2NkYXRhKGUpO2lmKGEpcmV0dXJuIGEudHlwZT1sLlRFWFQsYTtpPXRoaXMuX2lucHV0LnJlYWRVbnRpbChuZXcgUmVnRXhwKCI8LyIrcisiW1xcblxcclxcdCBdKj8+IiwiaWciKSl9ZWxzZSB0aGlzLl9pc19jb250ZW50X3VuZm9ybWF0dGVkKHIpJiYoaT10aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgiPC8iK3IrIltcXG5cXHJcXHQgXSo/PiIsImlnIikpKX1yZXR1cm4gaT90aGlzLl9jcmVhdGVfdG9rZW4obC5URVhULGkpOm51bGx9LGgucHJvdG90eXBlLl9yZWFkX2NvbnRlbnRfd29yZD1mdW5jdGlvbihlKXt2YXIgdD0iIjtpZih0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyJiZlPT09dGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlclswXSYmKHQ9dGhpcy5fX3BhdHRlcm5zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyLnJlYWQoKSksdHx8KHQ9dGhpcy5fX3BhdHRlcm5zLndvcmQucmVhZCgpKSx0KXJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4obC5URVhULHQpfSxlLmV4cG9ydHMuVG9rZW5pemVyPWgsZS5leHBvcnRzLlRPS0VOPWx9XSx0PXt9O3ZhciBuPWZ1bmN0aW9uIG4oaSl7dmFyIHI9dFtpXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIGE9dFtpXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbaV0oYSxhLmV4cG9ydHMsbiksYS5leHBvcnRzfSgxOCk7YXM9bn0oKSxvcz0oKCk9Pnt2YXIgZT17NDcwOmU9PntmdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG4saT0iIixyPTAsYT0tMSxvPTAscz0wO3M8PWUubGVuZ3RoOysrcyl7aWYoczxlLmxlbmd0aCluPWUuY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09bilicmVhaztuPTQ3fWlmKDQ3PT09bil7aWYoYT09PXMtMXx8MT09PW8pO2Vsc2UgaWYoYSE9PXMtMSYmMj09PW8pe2lmKGkubGVuZ3RoPDJ8fDIhPT1yfHw0NiE9PWkuY2hhckNvZGVBdChpLmxlbmd0aC0xKXx8NDYhPT1pLmNoYXJDb2RlQXQoaS5sZW5ndGgtMikpaWYoaS5sZW5ndGg+Mil7dmFyIGw9aS5sYXN0SW5kZXhPZigiLyIpO2lmKGwhPT1pLmxlbmd0aC0xKXstMT09PWw/KGk9IiIscj0wKTpyPShpPWkuc2xpY2UoMCxsKSkubGVuZ3RoLTEtaS5sYXN0SW5kZXhPZigiLyIpLGE9cyxvPTA7Y29udGludWV9fWVsc2UgaWYoMj09PWkubGVuZ3RofHwxPT09aS5sZW5ndGgpe2k9IiIscj0wLGE9cyxvPTA7Y29udGludWV9dCYmKGkubGVuZ3RoPjA/aSs9Ii8uLiI6aT0iLi4iLHI9Mil9ZWxzZSBpLmxlbmd0aD4wP2krPSIvIitlLnNsaWNlKGErMSxzKTppPWUuc2xpY2UoYSsxLHMpLHI9cy1hLTE7YT1zLG89MH1lbHNlIDQ2PT09biYmLTEhPT1vPysrbzpvPS0xfXJldHVybiBpfXZhciBpPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLGk9IiIscj0hMSxhPWFyZ3VtZW50cy5sZW5ndGgtMTthPj0tMSYmIXI7YS0tKXt2YXIgbzthPj0wP289YXJndW1lbnRzW2FdOih2b2lkIDA9PT1lJiYoZT1wcm9jZXNzLmN3ZCgpKSxvPWUpLHQobyksMCE9PW8ubGVuZ3RoJiYoaT1vKyIvIitpLHI9NDc9PT1vLmNoYXJDb2RlQXQoMCkpfXJldHVybiBpPW4oaSwhcikscj9pLmxlbmd0aD4wPyIvIitpOiIvIjppLmxlbmd0aD4wP2k6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO3ZhciBpPTQ3PT09ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7cmV0dXJuIDAhPT0oZT1uKGUsIWkpKS5sZW5ndGh8fGl8fChlPSIuIiksZS5sZW5ndGg+MCYmciYmKGUrPSIvIiksaT8iLyIrZTplfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLGUubGVuZ3RoPjAmJjQ3PT09ZS5jaGFyQ29kZUF0KDApfSxqb2luOmZ1bmN0aW9uKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgZSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoOysrbil7dmFyIHI9YXJndW1lbnRzW25dO3Qociksci5sZW5ndGg+MCYmKHZvaWQgMD09PWU/ZT1yOmUrPSIvIityKX1yZXR1cm4gdm9pZCAwPT09ZT8iLiI6aS5ub3JtYWxpemUoZSl9LHJlbGF0aXZlOmZ1bmN0aW9uKGUsbil7aWYodChlKSx0KG4pLGU9PT1uKXJldHVybiIiO2lmKChlPWkucmVzb2x2ZShlKSk9PT0obj1pLnJlc29sdmUobikpKXJldHVybiIiO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGgmJjQ3PT09ZS5jaGFyQ29kZUF0KHIpOysrcik7Zm9yKHZhciBhPWUubGVuZ3RoLG89YS1yLHM9MTtzPG4ubGVuZ3RoJiY0Nz09PW4uY2hhckNvZGVBdChzKTsrK3MpO2Zvcih2YXIgbD1uLmxlbmd0aC1zLGM9bzxsP286bCxoPS0xLGQ9MDtkPD1jOysrZCl7aWYoZD09PWMpe2lmKGw+Yyl7aWYoNDc9PT1uLmNoYXJDb2RlQXQocytkKSlyZXR1cm4gbi5zbGljZShzK2QrMSk7aWYoMD09PWQpcmV0dXJuIG4uc2xpY2UocytkKX1lbHNlIG8+YyYmKDQ3PT09ZS5jaGFyQ29kZUF0KHIrZCk/aD1kOjA9PT1kJiYoaD0wKSk7YnJlYWt9dmFyIHU9ZS5jaGFyQ29kZUF0KHIrZCk7aWYodSE9PW4uY2hhckNvZGVBdChzK2QpKWJyZWFrOzQ3PT09dSYmKGg9ZCl9dmFyIG09IiI7Zm9yKGQ9citoKzE7ZDw9YTsrK2QpZCE9PWEmJjQ3IT09ZS5jaGFyQ29kZUF0KGQpfHwoMD09PW0ubGVuZ3RoP20rPSIuLiI6bSs9Ii8uLiIpO3JldHVybiBtLmxlbmd0aD4wP20rbi5zbGljZShzK2gpOihzKz1oLDQ3PT09bi5jaGFyQ29kZUF0KHMpJiYrK3Msbi5zbGljZShzKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZGlybmFtZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBuPWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09bixyPS0xLGE9ITAsbz1lLmxlbmd0aC0xO28+PTE7LS1vKWlmKDQ3PT09KG49ZS5jaGFyQ29kZUF0KG8pKSl7aWYoIWEpe3I9bzticmVha319ZWxzZSBhPSExO3JldHVybi0xPT09cj9pPyIvIjoiLiI6aSYmMT09PXI/Ii8vIjplLnNsaWNlKDAscil9LGJhc2VuYW1lOmZ1bmN0aW9uKGUsbil7aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTt0KGUpO3ZhciBpLHI9MCxhPS0xLG89ITA7aWYodm9pZCAwIT09biYmbi5sZW5ndGg+MCYmbi5sZW5ndGg8PWUubGVuZ3RoKXtpZihuLmxlbmd0aD09PWUubGVuZ3RoJiZuPT09ZSlyZXR1cm4iIjt2YXIgcz1uLmxlbmd0aC0xLGw9LTE7Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGM9ZS5jaGFyQ29kZUF0KGkpO2lmKDQ3PT09Yyl7aWYoIW8pe3I9aSsxO2JyZWFrfX1lbHNlLTE9PT1sJiYobz0hMSxsPWkrMSkscz49MCYmKGM9PT1uLmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKGE9aSk6KHM9LTEsYT1sKSl9cmV0dXJuIHI9PT1hP2E9bDotMT09PWEmJihhPWUubGVuZ3RoKSxlLnNsaWNlKHIsYSl9Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wOy0taSlpZig0Nz09PWUuY2hhckNvZGVBdChpKSl7aWYoIW8pe3I9aSsxO2JyZWFrfX1lbHNlLTE9PT1hJiYobz0hMSxhPWkrMSk7cmV0dXJuLTE9PT1hPyIiOmUuc2xpY2UocixhKX0sZXh0bmFtZTpmdW5jdGlvbihlKXt0KGUpO2Zvcih2YXIgbj0tMSxpPTAscj0tMSxhPSEwLG89MCxzPWUubGVuZ3RoLTE7cz49MDstLXMpe3ZhciBsPWUuY2hhckNvZGVBdChzKTtpZig0NyE9PWwpLTE9PT1yJiYoYT0hMSxyPXMrMSksNDY9PT1sPy0xPT09bj9uPXM6MSE9PW8mJihvPTEpOi0xIT09biYmKG89LTEpO2Vsc2UgaWYoIWEpe2k9cysxO2JyZWFrfX1yZXR1cm4tMT09PW58fC0xPT09cnx8MD09PW98fDE9PT1vJiZuPT09ci0xJiZuPT09aSsxPyIiOmUuc2xpY2UobixyKX0sZm9ybWF0OmZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO3JldHVybiBuPSh0PWUpLmRpcnx8dC5yb290LGk9dC5iYXNlfHwodC5uYW1lfHwiIikrKHQuZXh0fHwiIiksbj9uPT09dC5yb290P24raTpuKyIvIitpOmk7dmFyIHQsbixpfSxwYXJzZTpmdW5jdGlvbihlKXt0KGUpO3ZhciBuPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG47dmFyIGkscj1lLmNoYXJDb2RlQXQoMCksYT00Nz09PXI7YT8obi5yb290PSIvIixpPTEpOmk9MDtmb3IodmFyIG89LTEscz0wLGw9LTEsYz0hMCxoPWUubGVuZ3RoLTEsZD0wO2g+PWk7LS1oKWlmKDQ3IT09KHI9ZS5jaGFyQ29kZUF0KGgpKSktMT09PWwmJihjPSExLGw9aCsxKSw0Nj09PXI/LTE9PT1vP289aDoxIT09ZCYmKGQ9MSk6LTEhPT1vJiYoZD0tMSk7ZWxzZSBpZighYyl7cz1oKzE7YnJlYWt9cmV0dXJuLTE9PT1vfHwtMT09PWx8fDA9PT1kfHwxPT09ZCYmbz09PWwtMSYmbz09PXMrMT8tMSE9PWwmJihuLmJhc2U9bi5uYW1lPTA9PT1zJiZhP2Uuc2xpY2UoMSxsKTplLnNsaWNlKHMsbCkpOigwPT09cyYmYT8obi5uYW1lPWUuc2xpY2UoMSxvKSxuLmJhc2U9ZS5zbGljZSgxLGwpKToobi5uYW1lPWUuc2xpY2UocyxvKSxuLmJhc2U9ZS5zbGljZShzLGwpKSxuLmV4dD1lLnNsaWNlKG8sbCkpLHM+MD9uLmRpcj1lLnNsaWNlKDAscy0xKTphJiYobi5kaXI9Ii8iKSxufSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtpLnBvc2l4PWksZS5leHBvcnRzPWl9LDQ0NzooZSx0LG4pPT57dmFyIGk7aWYobi5yKHQpLG4uZCh0LHtVUkk6KCk9PmYsVXRpbHM6KCk9Pkx9KSwib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3MpaT0id2luMzIiPT09cHJvY2Vzcy5wbGF0Zm9ybTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yKXt2YXIgcj1uYXZpZ2F0b3IudXNlckFnZW50O2k9ci5pbmRleE9mKCJXaW5kb3dzIik+PTB9dmFyIGEsbyxzPShhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWEoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxsPS9eXHdbXHdcZCsuLV0qJC8sYz0vXlwvLyxoPS9eXC9cLy87ZnVuY3Rpb24gZChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJy5jb25jYXQoZS5hdXRob3JpdHksJyIsIHBhdGg6ICInKS5jb25jYXQoZS5wYXRoLCciLCBxdWVyeTogIicpLmNvbmNhdChlLnF1ZXJ5LCciLCBmcmFnbWVudDogIicpLmNvbmNhdChlLmZyYWdtZW50LCcifScpKTtpZihlLnNjaGVtZSYmIWwudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aClpZihlLmF1dGhvcml0eSl7aWYoIWMudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoaC50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9dmFyIHU9IiIsbT0iLyIscD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LyxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpLHIsYSl7dmFyIG8sczt2b2lkIDA9PT1hJiYoYT0hMSksIm9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8dSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8dSx0aGlzLnBhdGg9ZS5wYXRofHx1LHRoaXMucXVlcnk9ZS5xdWVyeXx8dSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fHUpOih0aGlzLnNjaGVtZT0ocz1hLChvPWUpfHxzP286ImZpbGUiKSx0aGlzLmF1dGhvcml0eT10fHx1LHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09bSYmKHQ9bSt0KTp0PW19cmV0dXJuIHR9KHRoaXMuc2NoZW1lLG58fHUpLHRoaXMucXVlcnk9aXx8dSx0aGlzLmZyYWdtZW50PXJ8fHUsZCh0aGlzLGEpKX1yZXR1cm4gZS5pc1VyaT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmInN0cmluZyI9PXR5cGVvZiB0LmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmInN0cmluZyI9PXR5cGVvZiB0LnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIHQuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIHQuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b1N0cmluZ30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzLCExKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciB0PWUuc2NoZW1lLG49ZS5hdXRob3JpdHksaT1lLnBhdGgscj1lLnF1ZXJ5LGE9ZS5mcmFnbWVudDtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD11KSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPXUpLHZvaWQgMD09PWk/aT10aGlzLnBhdGg6bnVsbD09PWkmJihpPXUpLHZvaWQgMD09PXI/cj10aGlzLnF1ZXJ5Om51bGw9PT1yJiYocj11KSx2b2lkIDA9PT1hP2E9dGhpcy5mcmFnbWVudDpudWxsPT09YSYmKGE9dSksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJmk9PT10aGlzLnBhdGgmJnI9PT10aGlzLnF1ZXJ5JiZhPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBiKHQsbixpLHIsYSl9LGUucGFyc2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49cC5leGVjKGUpO3JldHVybiBuP25ldyBiKG5bMl18fHUseChuWzRdfHx1KSx4KG5bNV18fHUpLHgobls3XXx8dSkseChuWzldfHx1KSx0KTpuZXcgYih1LHUsdSx1LHUpfSxlLmZpbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dTtpZihpJiYoZT1lLnJlcGxhY2UoL1xcL2csbSkpLGVbMF09PT1tJiZlWzFdPT09bSl7dmFyIG49ZS5pbmRleE9mKG0sMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9bSk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxtKX1yZXR1cm4gbmV3IGIoImZpbGUiLHQsZSx1LHUpfSxlLmZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGIoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIGQodCwhMCksdH0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxUKHRoaXMsZSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLnJldml2ZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDt2YXIgbj1uZXcgYih0KTtyZXR1cm4gbi5fZm9ybWF0dGVkPXQuZXh0ZXJuYWwsbi5fZnNQYXRoPXQuX3NlcD09PWc/dC5mc1BhdGg6bnVsbCxufXJldHVybiB0fSxlfSgpLGc9aT8xOnZvaWQgMCxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuX2Zvcm1hdHRlZD1udWxsLHQuX2ZzUGF0aD1udWxsLHR9cmV0dXJuIHModCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9eSh0aGlzLCExKSksdGhpcy5fZnNQYXRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZT9UKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9VCh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9ZyksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9LHR9KGYpLF89KChvPXt9KVs1OF09IiUzQSIsb1s0N109IiUyRiIsb1s2M109IiUzRiIsb1szNV09IiUyMyIsb1s5MV09IiU1QiIsb1s5M109IiU1RCIsb1s2NF09IiU0MCIsb1szM109IiUyMSIsb1szNl09IiUyNCIsb1szOF09IiUyNiIsb1szOV09IiUyNyIsb1s0MF09IiUyOCIsb1s0MV09IiUyOSIsb1s0Ml09IiUyQSIsb1s0M109IiUyQiIsb1s0NF09IiUyQyIsb1s1OV09IiUzQiIsb1s2MV09IiUzRCIsb1szMl09IiUyMCIsbyk7ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgbj12b2lkIDAsaT0tMSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWUuY2hhckNvZGVBdChyKTtpZihhPj05NyYmYTw9MTIyfHxhPj02NSYmYTw9OTB8fGE+PTQ4JiZhPD01N3x8NDU9PT1hfHw0Nj09PWF8fDk1PT09YXx8MTI2PT09YXx8dCYmNDc9PT1hKS0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpLHIpKSxpPS0xKSx2b2lkIDAhPT1uJiYobis9ZS5jaGFyQXQocikpO2Vsc2V7dm9pZCAwPT09biYmKG49ZS5zdWJzdHIoMCxyKSk7dmFyIG89X1thXTt2b2lkIDAhPT1vPygtMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcoaSxyKSksaT0tMSksbis9byk6LTE9PT1pJiYoaT1yKX19cmV0dXJuLTEhPT1pJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGkpKSksdm9pZCAwIT09bj9uOmV9ZnVuY3Rpb24gdyhlKXtmb3IodmFyIHQ9dm9pZCAwLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5jaGFyQ29kZUF0KG4pOzM1PT09aXx8NjM9PT1pPyh2b2lkIDA9PT10JiYodD1lLnN1YnN0cigwLG4pKSx0Kz1fW2ldKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIHkoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT8iLy8iLmNvbmNhdChlLmF1dGhvcml0eSkuY29uY2F0KGUucGF0aCk6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxpJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gVChlLHQpe3ZhciBuPXQ/dzp2LGk9IiIscj1lLnNjaGVtZSxhPWUuYXV0aG9yaXR5LG89ZS5wYXRoLHM9ZS5xdWVyeSxsPWUuZnJhZ21lbnQ7aWYociYmKGkrPXIsaSs9IjoiKSwoYXx8ImZpbGUiPT09cikmJihpKz1tLGkrPW0pLGEpe3ZhciBjPWEuaW5kZXhPZigiQCIpO2lmKC0xIT09Yyl7dmFyIGg9YS5zdWJzdHIoMCxjKTthPWEuc3Vic3RyKGMrMSksLTE9PT0oYz1oLmluZGV4T2YoIjoiKSk/aSs9bihoLCExKTooaSs9bihoLnN1YnN0cigwLGMpLCExKSxpKz0iOiIsaSs9bihoLnN1YnN0cihjKzEpLCExKSksaSs9IkAifS0xPT09KGM9KGE9YS50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpP2krPW4oYSwhMSk6KGkrPW4oYS5zdWJzdHIoMCxjKSwhMSksaSs9YS5zdWJzdHIoYykpfWlmKG8pe2lmKG8ubGVuZ3RoPj0zJiY0Nz09PW8uY2hhckNvZGVBdCgwKSYmNTg9PT1vLmNoYXJDb2RlQXQoMikpKGQ9by5jaGFyQ29kZUF0KDEpKT49NjUmJmQ8PTkwJiYobz0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoZCszMiksIjoiKS5jb25jYXQoby5zdWJzdHIoMykpKTtlbHNlIGlmKG8ubGVuZ3RoPj0yJiY1OD09PW8uY2hhckNvZGVBdCgxKSl7dmFyIGQ7KGQ9by5jaGFyQ29kZUF0KDApKT49NjUmJmQ8PTkwJiYobz0iIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShkKzMyKSwiOiIpLmNvbmNhdChvLnN1YnN0cigyKSkpfWkrPW4obywhMCl9cmV0dXJuIHMmJihpKz0iPyIsaSs9bihzLCExKSksbCYmKGkrPSIjIixpKz10P2w6dihsLCExKSksaX1mdW5jdGlvbiBrKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrayhlLnN1YnN0cigzKSk6ZX19dmFyIFM9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24geChlKXtyZXR1cm4gZS5tYXRjaChTKT9lLnJlcGxhY2UoUywoZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSl9KSk6ZX12YXIgTCxDLEU9big0NzApLEE9ZnVuY3Rpb24oZSx0LG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgaSxyPTAsYT10Lmxlbmd0aDtyPGE7cisrKSFpJiZyIGluIHR8fChpfHwoaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAscikpLGlbcl09dFtyXSk7cmV0dXJuIGUuY29uY2F0KGl8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX0sTT1FLnBvc2l4fHxFOyhDPUx8fChMPXt9KSkuam9pblBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUud2l0aCh7cGF0aDpNLmpvaW4uYXBwbHkoTSxBKFtlLnBhdGhdLHQsITEpKX0pfSxDLnJlc29sdmVQYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciBpPWUucGF0aHx8Ii8iO3JldHVybiBlLndpdGgoe3BhdGg6TS5yZXNvbHZlLmFwcGx5KE0sQShbaV0sdCwhMSkpfSl9LEMuZGlybmFtZT1mdW5jdGlvbihlKXt2YXIgdD1NLmRpcm5hbWUoZS5wYXRoKTtyZXR1cm4gMT09PXQubGVuZ3RoJiY0Nj09PXQuY2hhckNvZGVBdCgwKT9lOmUud2l0aCh7cGF0aDp0fSl9LEMuYmFzZW5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE0uYmFzZW5hbWUoZS5wYXRoKX0sQy5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBNLmV4dG5hbWUoZS5wYXRoKX19fSx0PXt9O2Z1bmN0aW9uIG4oaSl7aWYodFtpXSlyZXR1cm4gdFtpXS5leHBvcnRzO3ZhciByPXRbaV09e2V4cG9ydHM6e319O3JldHVybiBlW2ldKHIsci5leHBvcnRzLG4pLHIuZXhwb3J0c31yZXR1cm4gbi5kPShlLHQpPT57Zm9yKHZhciBpIGluIHQpbi5vKHQsaSkmJiFuLm8oZSxpKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7ZW51bWVyYWJsZTohMCxnZXQ6dFtpXX0pfSxuLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG4ucj1lPT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbig0NDcpfSkoKTt2YXJ7VVJJOnBzLFV0aWxzOmZzfT1vcztmdW5jdGlvbiBncyhlKXt2YXIgdD1lWzBdO3JldHVybiB0IT09ZVtlLmxlbmd0aC0xXXx8IiciIT09dCYmJyInIT09dHx8KGU9ZS5zdWJzdHIoMSxlLmxlbmd0aC0yKSksZX1mdW5jdGlvbiBicyhlLHQsbixpLHIsYSl7dmFyIG89Z3Mobik7aWYocz1vLGw9ZS5sYW5ndWFnZUlkLHMubGVuZ3RoJiYoImhhbmRsZWJhcnMiIT09bHx8IS97e3x9fS8udGVzdChzKSkmJi9cYih3W1x3XGQrLi1dKjpcL1wvKT9bXlxzKCk8Pl0rKD86XChbXHdcZF0rXCl8KFteWzpwdW5jdDpdXHNdfFwvPykpLy50ZXN0KHMpKXt2YXIgcyxsO28ubGVuZ3RoPG4ubGVuZ3RoJiYoaSsrLHItLSk7dmFyIGM9ZnVuY3Rpb24oZSx0LG4saSl7aWYoIS9eXHMqamF2YXNjcmlwdFw6L2kudGVzdCh0KSYmIS9bXG5ccl0vLnRlc3QodCkpcmV0dXJuIHQ9dC5yZXBsYWNlKC9eXHMqL2csIiIpLC9eaHR0cHM/OlwvXC8vaS50ZXN0KHQpfHwvXmZpbGU6XC9cLy9pLnRlc3QodCk/dDovXlwjL2kudGVzdCh0KT9lK3Q6L15cL1wvL2kudGVzdCh0KT8oRW8oZSwiaHR0cHM6Ly8iKT8iaHR0cHMiOiJodHRwIikrIjoiK3QucmVwbGFjZSgvXlxzKi9nLCIiKTpuP24ucmVzb2x2ZVJlZmVyZW5jZSh0LGl8fGUpOnR9KGUudXJpLG8sdCxhKTtpZihjJiZmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHBzLnBhcnNlKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oYykpcmV0dXJue3JhbmdlOlFpLmNyZWF0ZShlLnBvc2l0aW9uQXQoaSksZS5wb3NpdGlvbkF0KHIpKSx0YXJnZXQ6Y319fWZ1bmN0aW9uIF9zKGUsdCl7Zm9yKHZhciBuPVtdLGk9eW8oZS5nZXRUZXh0KCksMCkscj1pLnNjYW4oKSxhPXZvaWQgMCxvPSExLHM9dm9pZCAwLGw9e307ciE9PWphLkVPUzspe3N3aXRjaChyKXtjYXNlIGphLlN0YXJ0VGFnOmlmKCFzKW89ImJhc2UiPT09aS5nZXRUb2tlblRleHQoKS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UgamEuQXR0cmlidXRlTmFtZTphPWkuZ2V0VG9rZW5UZXh0KCkudG9Mb3dlckNhc2UoKTticmVhaztjYXNlIGphLkF0dHJpYnV0ZVZhbHVlOmlmKCJzcmMiPT09YXx8ImhyZWYiPT09YSl7dmFyIGM9aS5nZXRUb2tlblRleHQoKTtpZighbykodT1icyhlLHQsYyxpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkVuZCgpLHMpKSYmbi5wdXNoKHUpO28mJnZvaWQgMD09PXMmJihzPWdzKGMpKSYmdCYmKHM9dC5yZXNvbHZlUmVmZXJlbmNlKHMsZS51cmkpKSxvPSExLGE9dm9pZCAwfWVsc2UgaWYoImlkIj09PWEpe2xbZ3MoaS5nZXRUb2tlblRleHQoKSldPWkuZ2V0VG9rZW5PZmZzZXQoKX19cj1pLnNjYW4oKX1mb3IodmFyIGg9MCxkPW47aDxkLmxlbmd0aDtoKyspe3ZhciB1PWRbaF0sbT1lLnVyaSsiIyI7aWYodS50YXJnZXQmJkVvKHUudGFyZ2V0LG0pKXt2YXIgcD1sW3UudGFyZ2V0LnN1YnN0cihtLmxlbmd0aCldO2lmKHZvaWQgMCE9PXApe3ZhciBmPWUucG9zaXRpb25BdChwKTt1LnRhcmdldD0iIi5jb25jYXQobSkuY29uY2F0KGYubGluZSsxLCIsIikuY29uY2F0KGYuY2hhcmFjdGVyKzEpfX19cmV0dXJuIG59ZnVuY3Rpb24gdnMoZSx0LG4pe3ZhciBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7aWYoIXIudGFnKXJldHVybltdO3ZhciBhPVtdLG89VHMoamEuU3RhcnRUYWcsZSxyLnN0YXJ0KSxzPSJudW1iZXIiPT10eXBlb2Ygci5lbmRUYWdTdGFydCYmVHMoamEuRW5kVGFnLGUsci5lbmRUYWdTdGFydCk7cmV0dXJuKG8mJnlzKG8sdCl8fHMmJnlzKHMsdCkpJiYobyYmYS5wdXNoKHtraW5kOnBhLlJlYWQscmFuZ2U6b30pLHMmJmEucHVzaCh7a2luZDpwYS5SZWFkLHJhbmdlOnN9KSksYX1mdW5jdGlvbiB3cyhlLHQpe3JldHVybiBlLmxpbmU8dC5saW5lfHxlLmxpbmU9PT10LmxpbmUmJmUuY2hhcmFjdGVyPD10LmNoYXJhY3Rlcn1mdW5jdGlvbiB5cyhlLHQpe3JldHVybiB3cyhlLnN0YXJ0LHQpJiZ3cyh0LGUuZW5kKX1mdW5jdGlvbiBUcyhlLHQsbil7Zm9yKHZhciBpPXlvKHQuZ2V0VGV4dCgpLG4pLHI9aS5zY2FuKCk7ciE9PWphLkVPUyYmciE9PWU7KXI9aS5zY2FuKCk7cmV0dXJuIHIhPT1qYS5FT1M/e3N0YXJ0OnQucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLGVuZDp0LnBvc2l0aW9uQXQoaS5nZXRUb2tlbkVuZCgpKX06bnVsbH1mdW5jdGlvbiBrcyhlLHQpe3ZhciBuPVtdO3JldHVybiB0LnJvb3RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1NzKGUsdCwiIixuKX0pKSxufWZ1bmN0aW9uIFNzKGUsdCxuLGkpe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGFnO2lmKGUuYXR0cmlidXRlcyl7dmFyIG49ZS5hdHRyaWJ1dGVzLmlkLGk9ZS5hdHRyaWJ1dGVzLmNsYXNzO24mJih0Kz0iIyIuY29uY2F0KG4ucmVwbGFjZSgvW1wiXCddL2csIiIpKSksaSYmKHQrPWkucmVwbGFjZSgvW1wiXCddL2csIiIpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiIuIi5jb25jYXQoZSl9KSkuam9pbigiIikpfXJldHVybiB0fHwiPyJ9KHQpLGE9ZXIuY3JlYXRlKGUudXJpLFFpLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5zdGFydCksZS5wb3NpdGlvbkF0KHQuZW5kKSkpLG89e25hbWU6cixsb2NhdGlvbjphLGNvbnRhaW5lck5hbWU6bixraW5kOmJhLkZpZWxkfTtpLnB1c2gobyksdC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtTcyhlLHQscixpKX0pKX1mdW5jdGlvbiB4cyhlLHQsbixpKXt2YXIgcixhPWUub2Zmc2V0QXQodCksbz1pLmZpbmROb2RlQXQoYSk7aWYoIW8udGFnKXJldHVybiBudWxsO2lmKCFmdW5jdGlvbihlLHQsbil7aWYoZS5lbmRUYWdTdGFydCYmZS5lbmRUYWdTdGFydCsyPD10JiZ0PD1lLmVuZFRhZ1N0YXJ0KzIrbi5sZW5ndGgpcmV0dXJuITA7cmV0dXJuIGUuc3RhcnQrMTw9dCYmdDw9ZS5zdGFydCsxK24ubGVuZ3RofShvLGEsby50YWcpKXJldHVybiBudWxsO3ZhciBzPVtdLGw9e3N0YXJ0OmUucG9zaXRpb25BdChvLnN0YXJ0KzEpLGVuZDplLnBvc2l0aW9uQXQoby5zdGFydCsxK28udGFnLmxlbmd0aCl9O2lmKHMucHVzaCh7cmFuZ2U6bCxuZXdUZXh0Om59KSxvLmVuZFRhZ1N0YXJ0KXt2YXIgYz17c3RhcnQ6ZS5wb3NpdGlvbkF0KG8uZW5kVGFnU3RhcnQrMiksZW5kOmUucG9zaXRpb25BdChvLmVuZFRhZ1N0YXJ0KzIrby50YWcubGVuZ3RoKX07cy5wdXNoKHtyYW5nZTpjLG5ld1RleHQ6bn0pfXJldHVybntjaGFuZ2VzOigocj17fSlbZS51cmkudG9TdHJpbmcoKV09cyxyKX19ZnVuY3Rpb24gTHMoZSx0LG4pe3ZhciBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7aWYoIXIudGFnKXJldHVybiBudWxsO2lmKCFyLmVuZFRhZ1N0YXJ0KXJldHVybiBudWxsO2lmKHIuc3RhcnQrMTw9aSYmaTw9ci5zdGFydCsxK3IudGFnLmxlbmd0aCl7dmFyIGE9aS0xLXIuc3RhcnQrci5lbmRUYWdTdGFydCsyO3JldHVybiBlLnBvc2l0aW9uQXQoYSl9aWYoci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrci50YWcubGVuZ3RoKXthPWktMi1yLmVuZFRhZ1N0YXJ0K3Iuc3RhcnQrMTtyZXR1cm4gZS5wb3NpdGlvbkF0KGEpfXJldHVybiBudWxsfWZ1bmN0aW9uIENzKGUsdCxuKXt2YXIgaT1lLm9mZnNldEF0KHQpLHI9bi5maW5kTm9kZUF0KGkpLGE9ci50YWc/ci50YWcubGVuZ3RoOjA7cmV0dXJuIHIuZW5kVGFnU3RhcnQmJihyLnN0YXJ0KzE8PWkmJmk8PXIuc3RhcnQrMSthfHxyLmVuZFRhZ1N0YXJ0KzI8PWkmJmk8PXIuZW5kVGFnU3RhcnQrMithKT9bUWkuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0KzEpLGUucG9zaXRpb25BdChyLnN0YXJ0KzErYSkpLFFpLmNyZWF0ZShlLnBvc2l0aW9uQXQoci5lbmRUYWdTdGFydCsyKSxlLnBvc2l0aW9uQXQoci5lbmRUYWdTdGFydCsyK2EpKV06bnVsbH1mdW5jdGlvbiBFcyhlLHQpe3ZhciBuPXlvKGUuZ2V0VGV4dCgpKSxpPW4uc2NhbigpLHI9W10sYT1bXSxvPW51bGwscz0tMTtmdW5jdGlvbiBsKGUpe3IucHVzaChlKSxzPWUuc3RhcnRMaW5lfWZvcig7aSE9PWphLkVPUzspe3N3aXRjaChpKXtjYXNlIGphLlN0YXJ0VGFnOnZhciBjPW4uZ2V0VG9rZW5UZXh0KCksaD1lLnBvc2l0aW9uQXQobi5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2EucHVzaCh7c3RhcnRMaW5lOmgsdGFnTmFtZTpjfSksbz1jO2JyZWFrO2Nhc2UgamEuRW5kVGFnOm89bi5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIGphLlN0YXJ0VGFnQ2xvc2U6aWYoIW98fCFTbyhvKSlicmVhaztjYXNlIGphLkVuZFRhZ0Nsb3NlOmNhc2UgamEuU3RhcnRUYWdTZWxmQ2xvc2U6Zm9yKHZhciBkPWEubGVuZ3RoLTE7ZD49MCYmYVtkXS50YWdOYW1lIT09bzspZC0tO2lmKGQ+PTApe3ZhciB1PWFbZF07YS5sZW5ndGg9ZCwocD1lLnBvc2l0aW9uQXQobi5nZXRUb2tlbk9mZnNldCgpKS5saW5lLTEpPihoPXUuc3RhcnRMaW5lKSYmcyE9PWgmJmwoe3N0YXJ0TGluZTpoLGVuZExpbmU6cH0pfWJyZWFrO2Nhc2UgamEuQ29tbWVudDpoPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7dmFyIG09bi5nZXRUb2tlblRleHQoKS5tYXRjaCgvXlxzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKWlmKG1bMV0pYS5wdXNoKHtzdGFydExpbmU6aCx0YWdOYW1lOiIifSk7ZWxzZXtmb3IoZD1hLmxlbmd0aC0xO2Q+PTAmJmFbZF0udGFnTmFtZS5sZW5ndGg7KWQtLTtpZihkPj0wKXt2YXIgcDt1PWFbZF07YS5sZW5ndGg9ZCwocD1oKT4oaD11LnN0YXJ0TGluZSkmJnMhPT1oJiZsKHtzdGFydExpbmU6aCxlbmRMaW5lOnAsa2luZDpoci5SZWdpb259KX19ZWxzZSBoPChwPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpKS5saW5lKSYmbCh7c3RhcnRMaW5lOmgsZW5kTGluZTpwLGtpbmQ6aHIuQ29tbWVudH0pfWk9bi5zY2FuKCl9dmFyIGY9dCYmdC5yYW5nZUxpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFO3JldHVybiByLmxlbmd0aD5mP2Z1bmN0aW9uKGUsdCl7ZT1lLnNvcnQoKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zdGFydExpbmUtdC5zdGFydExpbmU7cmV0dXJuIDA9PT1uJiYobj1lLmVuZExpbmUtdC5lbmRMaW5lKSxufSkpO2Zvcih2YXIgbj12b2lkIDAsaT1bXSxyPVtdLGE9W10sbz1mdW5jdGlvbihlLHQpe3JbZV09dCx0PDMwJiYoYVt0XT0oYVt0XXx8MCkrMSl9LHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXTtpZihuKXtpZihsLnN0YXJ0TGluZT5uLnN0YXJ0TGluZSlpZihsLmVuZExpbmU8PW4uZW5kTGluZSlpLnB1c2gobiksbj1sLG8ocyxpLmxlbmd0aCk7ZWxzZSBpZihsLnN0YXJ0TGluZT5uLmVuZExpbmUpe2Rve249aS5wb3AoKX13aGlsZShuJiZsLnN0YXJ0TGluZT5uLmVuZExpbmUpO24mJmkucHVzaChuKSxuPWwsbyhzLGkubGVuZ3RoKX19ZWxzZSBuPWwsbyhzLDApfXZhciBjPTAsaD0wO2ZvcihzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBkPWFbc107aWYoZCl7aWYoZCtjPnQpe2g9czticmVha31jKz1kfX12YXIgdT1bXTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbT1yW3NdOyJudW1iZXIiPT10eXBlb2YgbSYmKG08aHx8bT09PWgmJmMrKzx0KSYmdS5wdXNoKGVbc10pfXJldHVybiB1fShyLGYpOnJ9ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1mdW5jdGlvbihlLHQpe3ZhciBuPUxvKGUuZ2V0VGV4dCgpKSxpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSksYT1mdW5jdGlvbihlKXt2YXIgdD1lLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRUYWdFbmQmJmUuZW5kVGFnU3RhcnQmJmUuc3RhcnRUYWdFbmQ8ZS5lbmRUYWdTdGFydD9bW2Uuc3RhcnRUYWdFbmQsZS5lbmRUYWdTdGFydF0sW2Uuc3RhcnQsZS5lbmRdXTpbW2Uuc3RhcnQsZS5lbmRdXX0saT1bXTtmb3IoO3QucGFyZW50OyluKHQ9dC5wYXJlbnQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLnB1c2goZSl9KSk7cmV0dXJuIGl9KHIpO2lmKHIuc3RhcnRUYWdFbmQmJiFyLmVuZFRhZ1N0YXJ0KXtpZihyLnN0YXJ0VGFnRW5kIT09ci5lbmQpcmV0dXJuW1tyLnN0YXJ0LHIuZW5kXV07dmFyIG89UWkuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0VGFnRW5kLTIpLGUucG9zaXRpb25BdChyLnN0YXJ0VGFnRW5kKSk7cmV0dXJuIi8+Ij09PWUuZ2V0VGV4dChvKT9hLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTJdKTphLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTFdKSxhPU1zKGUscixpKS5jb25jYXQoYSl9aWYoIXIuc3RhcnRUYWdFbmR8fCFyLmVuZFRhZ1N0YXJ0KXJldHVybiBhO3JldHVybiBhLnVuc2hpZnQoW3Iuc3RhcnQsci5lbmRdKSxyLnN0YXJ0PGkmJmk8ci5zdGFydFRhZ0VuZD8oYS51bnNoaWZ0KFtyLnN0YXJ0KzEsci5zdGFydFRhZ0VuZC0xXSksYT1NcyhlLHIsaSkuY29uY2F0KGEpKTpyLnN0YXJ0VGFnRW5kPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0PyhhLnVuc2hpZnQoW3Iuc3RhcnRUYWdFbmQsci5lbmRUYWdTdGFydF0pLGEpOihpPj1yLmVuZFRhZ1N0YXJ0KzImJmEudW5zaGlmdChbci5lbmRUYWdTdGFydCsyLHIuZW5kLTFdKSxhKX0oZSx0KSxpPXZvaWQgMCxyPXZvaWQgMCxhPW4ubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBvPW5bYV07aSYmb1swXT09PWlbMF0mJm9bMV09PT1pWzFdfHwocj1IYS5jcmVhdGUoUWkuY3JlYXRlKGUucG9zaXRpb25BdChuW2FdWzBdKSxlLnBvc2l0aW9uQXQoblthXVsxXSkpLHIpKSxpPW99cmV0dXJuIHJ8fChyPUhhLmNyZWF0ZShRaS5jcmVhdGUodCx0KSkpLHJ9KSl9ZnVuY3Rpb24gTXMoZSx0LG4pe2Zvcih2YXIgaT1RaS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQuc3RhcnQpLGUucG9zaXRpb25BdCh0LmVuZCkpLHI9ZS5nZXRUZXh0KGkpLGE9bi10LnN0YXJ0LG89eW8ocikscz1vLnNjYW4oKSxsPXQuc3RhcnQsYz1bXSxoPSExLGQ9LTE7cyE9PWphLkVPUzspe3N3aXRjaChzKXtjYXNlIGphLkF0dHJpYnV0ZU5hbWU6aWYoYTxvLmdldFRva2VuT2Zmc2V0KCkpe2g9ITE7YnJlYWt9YTw9by5nZXRUb2tlbkVuZCgpJiZjLnVuc2hpZnQoW28uZ2V0VG9rZW5PZmZzZXQoKSxvLmdldFRva2VuRW5kKCldKSxoPSEwLGQ9by5nZXRUb2tlbk9mZnNldCgpO2JyZWFrO2Nhc2UgamEuQXR0cmlidXRlVmFsdWU6aWYoIWgpYnJlYWs7dmFyIHU9by5nZXRUb2tlblRleHQoKTtpZihhPG8uZ2V0VG9rZW5PZmZzZXQoKSl7Yy5wdXNoKFtkLG8uZ2V0VG9rZW5FbmQoKV0pO2JyZWFrfWE+PW8uZ2V0VG9rZW5PZmZzZXQoKSYmYTw9by5nZXRUb2tlbkVuZCgpJiYoYy51bnNoaWZ0KFtvLmdldFRva2VuT2Zmc2V0KCksby5nZXRUb2tlbkVuZCgpXSksKCciJz09PXVbMF0mJiciJz09PXVbdS5sZW5ndGgtMV18fCInIj09PXVbMF0mJiInIj09PXVbdS5sZW5ndGgtMV0pJiZhPj1vLmdldFRva2VuT2Zmc2V0KCkrMSYmYTw9by5nZXRUb2tlbkVuZCgpLTEmJmMudW5zaGlmdChbby5nZXRUb2tlbk9mZnNldCgpKzEsby5nZXRUb2tlbkVuZCgpLTFdKSxjLnB1c2goW2Qsby5nZXRUb2tlbkVuZCgpXSkpfXM9by5zY2FuKCl9cmV0dXJuIGMubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZVswXStsLGVbMV0rbF19KSl9dmFyIFJzPXt2ZXJzaW9uOjEuMSx0YWdzOlt7bmFtZToiaHRtbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGh0bWwgZWxlbWVudCByZXByZXNlbnRzIHRoZSByb290IG9mIGFuIEhUTUwgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6Im1hbmlmZXN0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIFVSSSBvZiBhIHJlc291cmNlIG1hbmlmZXN0IGluZGljYXRpbmcgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIGJlIGNhY2hlZCBsb2NhbGx5LiBTZWUgW1VzaW5nIHRoZSBhcHBsaWNhdGlvbiBjYWNoZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9Vc2luZ190aGVfYXBwbGljYXRpb25fY2FjaGUpIGZvciBkZXRhaWxzLiJ9fSx7bmFtZToidmVyc2lvbiIsZGVzY3JpcHRpb246J1NwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgSFRNTCBbRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0RURCAiRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uOiBJbiBIVE1MLCB0aGUgZG9jdHlwZSBpcyB0aGUgcmVxdWlyZWQgIjwhRE9DVFlQRSBodG1sPiIgcHJlYW1ibGUgZm91bmQgYXQgdGhlIHRvcCBvZiBhbGwgZG9jdW1lbnRzLiBJdHMgc29sZSBwdXJwb3NlIGlzIHRvIHByZXZlbnQgYSBicm93c2VyIGZyb20gc3dpdGNoaW5nIGludG8gc28tY2FsbGVkIOKAnHF1aXJrcyBtb2Rl4oCdIHdoZW4gcmVuZGVyaW5nIGEgZG9jdW1lbnQ7IHRoYXQgaXMsIHRoZSAiPCFET0NUWVBFIGh0bWw+IiBkb2N0eXBlIGVuc3VyZXMgdGhhdCB0aGUgYnJvd3NlciBtYWtlcyBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgYXQgZm9sbG93aW5nIHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9ucywgcmF0aGVyIHRoYW4gdXNpbmcgYSBkaWZmZXJlbnQgcmVuZGVyaW5nIG1vZGUgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBzb21lIHNwZWNpZmljYXRpb25zLiIpIHRoYXQgZ292ZXJucyB0aGUgY3VycmVudCBkb2N1bWVudC4gVGhpcyBhdHRyaWJ1dGUgaXMgbm90IG5lZWRlZCwgYmVjYXVzZSBpdCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4nfSx7bmFtZToieG1sbnMiLGRlc2NyaXB0aW9uOidTcGVjaWZpZXMgdGhlIFhNTCBOYW1lc3BhY2Ugb2YgdGhlIGRvY3VtZW50LiBEZWZhdWx0IHZhbHVlIGlzIGAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJgLiBUaGlzIGlzIHJlcXVpcmVkIGluIGRvY3VtZW50cyBwYXJzZWQgd2l0aCBYTUwgcGFyc2VycywgYW5kIG9wdGlvbmFsIGluIHRleHQvaHRtbCBkb2N1bWVudHMuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9odG1sIn1dfSx7bmFtZToiaGVhZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlYWQgZWxlbWVudCByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBtZXRhZGF0YSBmb3IgdGhlIERvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJwcm9maWxlIixkZXNjcmlwdGlvbjoiVGhlIFVSSXMgb2Ygb25lIG9yIG1vcmUgbWV0YWRhdGEgcHJvZmlsZXMsIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hlYWQifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpdGxlIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZG9jdW1lbnQncyB0aXRsZSBvciBuYW1lLiBBdXRob3JzIHNob3VsZCB1c2UgdGl0bGVzIHRoYXQgaWRlbnRpZnkgdGhlaXIgZG9jdW1lbnRzIGV2ZW4gd2hlbiB0aGV5IGFyZSB1c2VkIG91dCBvZiBjb250ZXh0LCBmb3IgZXhhbXBsZSBpbiBhIHVzZXIncyBoaXN0b3J5IG9yIGJvb2ttYXJrcywgb3IgaW4gc2VhcmNoIHJlc3VsdHMuIFRoZSBkb2N1bWVudCdzIHRpdGxlIGlzIG9mdGVuIGRpZmZlcmVudCBmcm9tIGl0cyBmaXJzdCBoZWFkaW5nLCBzaW5jZSB0aGUgZmlyc3QgaGVhZGluZyBkb2VzIG5vdCBoYXZlIHRvIHN0YW5kIGFsb25lIHdoZW4gdGFrZW4gb3V0IG9mIGNvbnRleHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGl0bGUifV19LHtuYW1lOiJiYXNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmFzZSBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgdGhlIGRvY3VtZW50IGJhc2UgVVJMIGZvciB0aGUgcHVycG9zZXMgb2YgcmVzb2x2aW5nIHJlbGF0aXZlIFVSTHMsIGFuZCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBicm93c2luZyBjb250ZXh0IGZvciB0aGUgcHVycG9zZXMgb2YgZm9sbG93aW5nIGh5cGVybGlua3MuIFRoZSBlbGVtZW50IGRvZXMgbm90IHJlcHJlc2VudCBhbnkgY29udGVudCBiZXlvbmQgdGhpcyBpbmZvcm1hdGlvbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJhc2UgVVJMIHRvIGJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQgZm9yIHJlbGF0aXZlIFVSTCBhZGRyZXNzZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhpcyBlbGVtZW50IG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGVsZW1lbnRzIHdpdGggYXR0cmlidXRlcyB3aG9zZSB2YWx1ZXMgYXJlIFVSTHMuIEFic29sdXRlIGFuZCByZWxhdGl2ZSBVUkxzIGFyZSBhbGxvd2VkLiJ9fSx7bmFtZToidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIGRpc3BsYXkgdGhlIHJlc3VsdCB3aGVuIGh5cGVybGlua3Mgb3IgZm9ybXMgY2F1c2UgbmF2aWdhdGlvbiwgZm9yIGVsZW1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYW4gZXhwbGljaXQgdGFyZ2V0IHJlZmVyZW5jZS4gSXQgaXMgYSBuYW1lIG9mLCBvciBrZXl3b3JkIGZvciwgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlOiB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IHVubmFtZWQgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3VsdCBpbnRvIHRoZSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBgX3RvcGA6IExvYWQgdGhlIHJlc3VsdCBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgZWxlbWVudCBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIGFyZSBVUkxzLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jhc2UifV19LHtuYW1lOiJsaW5rIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbGluayBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGxpbmsgdGhlaXIgZG9jdW1lbnQgdG8gb3RoZXIgcmVzb3VyY2VzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJocmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIFtVUkxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVVJMICJVUkw6IFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKSBpcyBhIHRleHQgc3RyaW5nIHNwZWNpZnlpbmcgd2hlcmUgYSByZXNvdXJjZSBjYW4gYmUgZm91bmQgb24gdGhlIEludGVybmV0LiIpIG9mIHRoZSBsaW5rZWQgcmVzb3VyY2UuIEEgVVJMIGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4nfX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSBtdXN0IGJlIHVzZWQgd2hlbiBmZXRjaGluZyB0aGUgcmVzb3VyY2UuIFtDT1JTLWVuYWJsZWQgaW1hZ2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfRW5hYmxlZF9JbWFnZSkgY2FuIGJlIHJldXNlZCBpbiB0aGUgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudCB3aXRob3V0IGJlaW5nIF90YWludGVkXy4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTpcblxuYGFub255bW91c2BcblxuQSBjcm9zcy1vcmlnaW4gcmVxdWVzdCAoaS5lLiB3aXRoIGFuIFtgT3JpZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL09yaWdpbiAiVGhlIE9yaWdpbiByZXF1ZXN0IGhlYWRlciBpbmRpY2F0ZXMgd2hlcmUgYSBmZXRjaCBvcmlnaW5hdGVzIGZyb20uIEl0IGRvZXNuXCd0IGluY2x1ZGUgYW55IHBhdGggaW5mb3JtYXRpb24sIGJ1dCBvbmx5IHRoZSBzZXJ2ZXIgbmFtZS4gSXQgaXMgc2VudCB3aXRoIENPUlMgcmVxdWVzdHMsIGFzIHdlbGwgYXMgd2l0aCBQT1NUIHJlcXVlc3RzLiBJdCBpcyBzaW1pbGFyIHRvIHRoZSBSZWZlcmVyIGhlYWRlciwgYnV0LCB1bmxpa2UgdGhpcyBoZWFkZXIsIGl0IGRvZXNuXCd0IGRpc2Nsb3NlIHRoZSB3aG9sZSBwYXRoLiIpIEhUVFAgaGVhZGVyKSBpcyBwZXJmb3JtZWQsIGJ1dCBubyBjcmVkZW50aWFsIGlzIHNlbnQgKGkuZS4gbm8gY29va2llLCBYLjUwOSBjZXJ0aWZpY2F0ZSwgb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbikuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKGJ5IG5vdCBzZXR0aW5nIHRoZSBbYEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4gIlRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4gcmVzcG9uc2UgaGVhZGVyIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXNwb25zZSBjYW4gYmUgc2hhcmVkIHdpdGggcmVxdWVzdGluZyBjb2RlIGZyb20gdGhlIGdpdmVuIG9yaWdpbi4iKSBIVFRQIGhlYWRlcikgdGhlIGltYWdlIHdpbGwgYmUgdGFpbnRlZCBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbmB1c2UtY3JlZGVudGlhbHNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4gd2l0aCBhbiBgT3JpZ2luYCBIVFRQIGhlYWRlcikgaXMgcGVyZm9ybWVkIGFsb25nIHdpdGggYSBjcmVkZW50aWFsIHNlbnQgKGkuZS4gYSBjb29raWUsIGNlcnRpZmljYXRlLCBhbmQvb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQpLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlICh0aHJvdWdoIFtgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgIlRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyByZXNwb25zZSBoZWFkZXIgdGVsbHMgYnJvd3NlcnMgd2hldGhlciB0byBleHBvc2UgdGhlIHJlc3BvbnNlIHRvIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSB3aGVuIHRoZSByZXF1ZXN0XCdzIGNyZWRlbnRpYWxzIG1vZGUgKFJlcXVlc3QuY3JlZGVudGlhbHMpIGlzICJpbmNsdWRlIi4iKSBIVFRQIGhlYWRlciksIHRoZSByZXNvdXJjZSB3aWxsIGJlIF90YWludGVkXyBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbklmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQsIHRoZSByZXNvdXJjZSBpcyBmZXRjaGVkIHdpdGhvdXQgYSBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9DT1JTICJDT1JTOiBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgaXMgYSBzeXN0ZW0sIGNvbnNpc3Rpbmcgb2YgdHJhbnNtaXR0aW5nIEhUVFAgaGVhZGVycywgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYnJvd3NlcnMgYmxvY2sgZnJvbnRlbmQgSmF2YVNjcmlwdCBjb2RlIGZyb20gYWNjZXNzaW5nIHJlc3BvbnNlcyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLiIpIHJlcXVlc3QgKGkuZS4gd2l0aG91dCBzZW5kaW5nIHRoZSBgT3JpZ2luYCBIVFRQIGhlYWRlciksIHByZXZlbnRpbmcgaXRzIG5vbi10YWludGVkIHVzYWdlLiBJZiBpbnZhbGlkLCBpdCBpcyBoYW5kbGVkIGFzIGlmIHRoZSBlbnVtZXJhdGVkIGtleXdvcmQgKiphbm9ueW1vdXMqKiB3YXMgdXNlZC4gU2VlIFtDT1JTIHNldHRpbmdzIGF0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4nfX0se25hbWU6InJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgbmFtZXMgYSByZWxhdGlvbnNoaXAgb2YgdGhlIGxpbmtlZCBkb2N1bWVudCB0byB0aGUgY3VycmVudCBkb2N1bWVudC4gVGhlIGF0dHJpYnV0ZSBtdXN0IGJlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIFtsaW5rIHR5cGVzIHZhbHVlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9MaW5rX3R5cGVzKS4ifX0se25hbWU6Im1lZGlhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIG1lZGlhIHRoYXQgdGhlIGxpbmtlZCByZXNvdXJjZSBhcHBsaWVzIHRvLiBJdHMgdmFsdWUgbXVzdCBiZSBhIG1lZGlhIHR5cGUgLyBbbWVkaWEgcXVlcnldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9NZWRpYV9xdWVyaWVzKS4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFpbmx5IHVzZWZ1bCB3aGVuIGxpbmtpbmcgdG8gZXh0ZXJuYWwgc3R5bGVzaGVldHMg4oCUIGl0IGFsbG93cyB0aGUgdXNlciBhZ2VudCB0byBwaWNrIHRoZSBiZXN0IGFkYXB0ZWQgb25lIGZvciB0aGUgZGV2aWNlIGl0IHJ1bnMgb24uXG5cbioqTm90ZXM6KipcblxuKiAgIEluIEhUTUwgNCwgdGhpcyBjYW4gb25seSBiZSBhIHNpbXBsZSB3aGl0ZS1zcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdGlvbiBsaXRlcmFscywgaS5lLiwgW21lZGlhIHR5cGVzIGFuZCBncm91cHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9AbWVkaWEpLCB3aGVyZSBkZWZpbmVkIGFuZCBhbGxvd2VkIGFzIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUsIHN1Y2ggYXMgYHByaW50YCwgYHNjcmVlbmAsIGBhdXJhbGAsIGBicmFpbGxlYC4gSFRNTDUgZXh0ZW5kZWQgdGhpcyB0byBhbnkga2luZCBvZiBbbWVkaWEgcXVlcmllc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL01lZGlhX3F1ZXJpZXMpLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMgb2YgSFRNTCA0LlxuKiAgIEJyb3dzZXJzIG5vdCBzdXBwb3J0aW5nIFtDU1MzIE1lZGlhIFF1ZXJpZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9NZWRpYV9xdWVyaWVzKSB3b24ndCBuZWNlc3NhcmlseSByZWNvZ25pemUgdGhlIGFkZXF1YXRlIGxpbms7IGRvIG5vdCBmb3JnZXQgdG8gc2V0IGZhbGxiYWNrIGxpbmtzLCB0aGUgcmVzdHJpY3RlZCBzZXQgb2YgbWVkaWEgcXVlcmllcyBkZWZpbmVkIGluIEhUTUwgNC4ifX0se25hbWU6ImhyZWZsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBsaW5rZWQgcmVzb3VyY2UuIEl0IGlzIHB1cmVseSBhZHZpc29yeS4gQWxsb3dlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgW0JDUDQ3XShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dCkuIFVzZSB0aGlzIGF0dHJpYnV0ZSBvbmx5IGlmIHRoZSBbYGhyZWZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSNhdHRyLWhyZWYpIGF0dHJpYnV0ZSBpcyBwcmVzZW50LiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIGNvbnRlbnQgbGlua2VkIHRvLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgYSBNSU1FIHR5cGUgc3VjaCBhcyAqKnRleHQvaHRtbCoqLCAqKnRleHQvY3NzKiosIGFuZCBzbyBvbi4gVGhlIGNvbW1vbiB1c2Ugb2YgdGhpcyBhdHRyaWJ1dGUgaXMgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHN0eWxlc2hlZXQgYmVpbmcgcmVmZXJlbmNlZCAoc3VjaCBhcyAqKnRleHQvY3NzKiopLCBidXQgZ2l2ZW4gdGhhdCBDU1MgaXMgdGhlIG9ubHkgc3R5bGVzaGVldCBsYW5ndWFnZSB1c2VkIG9uIHRoZSB3ZWIsIG5vdCBvbmx5IGlzIGl0IHBvc3NpYmxlIHRvIG9taXQgdGhlIGB0eXBlYCBhdHRyaWJ1dGUsIGJ1dCBpcyBhY3R1YWxseSBub3cgcmVjb21tZW5kZWQgcHJhY3RpY2UuIEl0IGlzIGFsc28gdXNlZCBvbiBgcmVsPSJwcmVsb2FkImAgbGluayB0eXBlcywgdG8gbWFrZSBzdXJlIHRoZSBicm93c2VyIG9ubHkgZG93bmxvYWRzIGZpbGUgdHlwZXMgdGhhdCBpdCBzdXBwb3J0cy4nfX0se25hbWU6InNpemVzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBzaXplcyBvZiB0aGUgaWNvbnMgZm9yIHZpc3VhbCBtZWRpYSBjb250YWluZWQgaW4gdGhlIHJlc291cmNlLiBJdCBtdXN0IGJlIHByZXNlbnQgb25seSBpZiB0aGUgW2ByZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbCkgY29udGFpbnMgYSB2YWx1ZSBvZiBgaWNvbmAgb3IgYSBub24tc3RhbmRhcmQgdHlwZSBzdWNoIGFzIEFwcGxlJ3MgYGFwcGxlLXRvdWNoLWljb25gLiBJdCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBhbnlgLCBtZWFuaW5nIHRoYXQgdGhlIGljb24gY2FuIGJlIHNjYWxlZCB0byBhbnkgc2l6ZSBhcyBpdCBpcyBpbiBhIHZlY3RvciBmb3JtYXQsIGxpa2UgYGltYWdlL3N2Zyt4bWxgLlxuKiAgIGEgd2hpdGUtc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygc2l6ZXMsIGVhY2ggaW4gdGhlIGZvcm1hdCBgXzx3aWR0aCBpbiBwaXhlbHM+X3hfPGhlaWdodCBpbiBwaXhlbHM+X2Agb3IgYF88d2lkdGggaW4gcGl4ZWxzPl9YXzxoZWlnaHQgaW4gcGl4ZWxzPl9gLiBFYWNoIG9mIHRoZXNlIHNpemVzIG11c3QgYmUgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZS5cblxuKipOb3RlOioqIE1vc3QgaWNvbiBmb3JtYXRzIGFyZSBvbmx5IGFibGUgdG8gc3RvcmUgb25lIHNpbmdsZSBpY29uOyB0aGVyZWZvcmUgbW9zdCBvZiB0aGUgdGltZSB0aGUgW2BzaXplc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1zaXplcykgY29udGFpbnMgb25seSBvbmUgZW50cnkuIE1TJ3MgSUNPIGZvcm1hdCBkb2VzLCBhcyB3ZWxsIGFzIEFwcGxlJ3MgSUNOUy4gSUNPIGlzIG1vcmUgdWJpcXVpdG91czsgeW91IHNob3VsZCBkZWZpbml0ZWx5IHVzZSBpdC4ifX0se25hbWU6ImFzIixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaXMgb25seSB1c2VkIHdoZW4gYHJlbD0icHJlbG9hZCJgIG9yIGByZWw9InByZWZldGNoImAgaGFzIGJlZW4gc2V0IG9uIHRoZSBgPGxpbms+YCBlbGVtZW50LiBJdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29udGVudCBiZWluZyBsb2FkZWQgYnkgdGhlIGA8bGluaz5gLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIGNvbnRlbnQgcHJpb3JpdGl6YXRpb24sIHJlcXVlc3QgbWF0Y2hpbmcsIGFwcGxpY2F0aW9uIG9mIGNvcnJlY3QgW2NvbnRlbnQgc2VjdXJpdHkgcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0NTUCksIGFuZCBzZXR0aW5nIG9mIGNvcnJlY3QgW2BBY2NlcHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXB0ICJUaGUgQWNjZXB0IHJlcXVlc3QgSFRUUCBoZWFkZXIgYWR2ZXJ0aXNlcyB3aGljaCBjb250ZW50IHR5cGVzLCBleHByZXNzZWQgYXMgTUlNRSB0eXBlcywgdGhlIGNsaWVudCBpcyBhYmxlIHRvIHVuZGVyc3RhbmQuIFVzaW5nIGNvbnRlbnQgbmVnb3RpYXRpb24sIHRoZSBzZXJ2ZXIgdGhlbiBzZWxlY3RzIG9uZSBvZiB0aGUgcHJvcG9zYWxzLCB1c2VzIGl0IGFuZCBpbmZvcm1zIHRoZSBjbGllbnQgb2YgaXRzIGNob2ljZSB3aXRoIHRoZSBDb250ZW50LVR5cGUgcmVzcG9uc2UgaGVhZGVyLiBCcm93c2VycyBzZXQgYWRlcXVhdGUgdmFsdWVzIGZvciB0aGlzIGhlYWRlciBkZXBlbmRpbmcgb27CoHRoZSBjb250ZXh0IHdoZXJlIHRoZSByZXF1ZXN0IGlzIGRvbmU6IHdoZW4gZmV0Y2hpbmcgYSBDU1Mgc3R5bGVzaGVldCBhIGRpZmZlcmVudCB2YWx1ZSBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0IHRoYW4gd2hlbiBmZXRjaGluZyBhbiBpbWFnZSzCoHZpZGVvIG9yIGEgc2NyaXB0LiIpIHJlcXVlc3QgaGVhZGVyLid9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHRoZSByZXNvdXJjZS4gUHJpb3JpdHkgaGludHMgYXJlIGRlbGVnYXRlZCB1c2luZyB0aGUgdmFsdWVzOiJ9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjonKipgYXV0b2AqKjogSW5kaWNhdGVzwqAqKm5vwqBwcmVmZXJlbmNlKiouIFRoZSBicm93c2VyIG1heSB1c2UgaXRzIG93biBoZXVyaXN0aWNzIHRvIGRlY2lkZSB0aGUgcHJpb3JpdHkgb2YgdGhlIHJlc291cmNlLlxuXG4qKmBoaWdoYCoqOiBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSByZXNvdXJjZSBpcyBvZsKgKipoaWdoKiogcHJpb3JpdHkuXG5cbioqYGxvd2AqKjrCoEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIHJlc291cmNlIGlzIG9mwqAqKmxvdyoqIHByaW9yaXR5LlxuXG4qKk5vdGU6KiogVGhlIGBpbXBvcnRhbmNlYCBhdHRyaWJ1dGUgbWF5IG9ubHkgYmUgdXNlZCBmb3IgdGhlIGA8bGluaz5gIGVsZW1lbnQgaWYgYHJlbD0icHJlbG9hZCJgIG9yIGByZWw9InByZWZldGNoImAgaXMgcHJlc2VudC4nfSx7bmFtZToiaW50ZWdyaXR5IixkZXNjcmlwdGlvbjoiQ29udGFpbnMgaW5saW5lIG1ldGFkYXRhIOKAlCBhIGJhc2U2NC1lbmNvZGVkIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgKGZpbGUpIHlvdeKAmXJlIHRlbGxpbmcgdGhlIGJyb3dzZXIgdG8gZmV0Y2guIFRoZSBicm93c2VyIGNhbiB1c2UgdGhpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2hlZCByZXNvdXJjZSBoYXMgYmVlbiBkZWxpdmVyZWQgZnJlZSBvZiB1bmV4cGVjdGVkIG1hbmlwdWxhdGlvbi4gU2VlIFtTdWJyZXNvdXJjZSBJbnRlZ3JpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1N1YnJlc291cmNlX0ludGVncml0eSkuIn0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonQSBzdHJpbmcgaW5kaWNhdGluZyB3aGljaCByZWZlcnJlciB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgcmVzb3VyY2U6XG5cbiogICBgbm8tcmVmZXJyZXJgIG1lYW5zIHRoYXQgdGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgbWVhbnMgdGhhdCBubyBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBUTFMgKEhUVFBTKS4gVGhpcyBpcyBhIHVzZXIgYWdlbnTigJlzIGRlZmF1bHQgYmVoYXZpb3IsIGlmIG5vIHBvbGljeSBpcyBvdGhlcndpc2Ugc3BlY2lmaWVkLlxuKiAgIGBvcmlnaW5gIG1lYW5zIHRoYXQgdGhlIHJlZmVycmVyIHdpbGwgYmUgdGhlIG9yaWdpbiBvZiB0aGUgcGFnZSwgd2hpY2ggaXMgcm91Z2hseSB0aGUgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LlxuKiAgIGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gIG1lYW5zIHRoYXQgbmF2aWdhdGluZyB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LCB3aGlsZSBuYXZpZ2F0aW5nIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyXCdzIHBhdGguXG4qICAgYHVuc2FmZS11cmxgIG1lYW5zIHRoYXQgdGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIGFuZCB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgZnJhZ21lbnQsIHBhc3N3b3JkLCBvciB1c2VybmFtZSkuIFRoaXMgY2FzZSBpcyB1bnNhZmUgYmVjYXVzZSBpdCBjYW4gbGVhayBvcmlnaW5zIGFuZCBwYXRocyBmcm9tIFRMUy1wcm90ZWN0ZWQgcmVzb3VyY2VzIHRvIGluc2VjdXJlIG9yaWdpbnMuJ30se25hbWU6InRpdGxlIixkZXNjcmlwdGlvbjonVGhlIGB0aXRsZWAgYXR0cmlidXRlIGhhcyBzcGVjaWFsIHNlbWFudGljcyBvbiB0aGUgYDxsaW5rPmAgZWxlbWVudC4gV2hlbiB1c2VkIG9uIGEgYDxsaW5rIHJlbD0ic3R5bGVzaGVldCI+YCBpdCBkZWZpbmVzIGEgW3ByZWZlcnJlZCBvciBhbiBhbHRlcm5hdGUgc3R5bGVzaGVldF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0FsdGVybmF0aXZlX3N0eWxlX3NoZWV0cykuIEluY29ycmVjdGx5IHVzaW5nIGl0IG1heSBbY2F1c2UgdGhlIHN0eWxlc2hlZXQgdG8gYmUgaWdub3JlZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Db3JyZWN0bHlfVXNpbmdfVGl0bGVzX1dpdGhfRXh0ZXJuYWxfU3R5bGVzaGVldHMpLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayJ9XX0se25hbWU6Im1ldGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRhIGVsZW1lbnQgcmVwcmVzZW50cyB2YXJpb3VzIGtpbmRzIG9mIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIGV4cHJlc3NlZCB1c2luZyB0aGUgdGl0bGUsIGJhc2UsIGxpbmssIHN0eWxlLCBhbmQgc2NyaXB0IGVsZW1lbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIGEgcGllY2Ugb2YgZG9jdW1lbnQtbGV2ZWwgbWV0YWRhdGEuIEl0IHNob3VsZCBub3QgYmUgc2V0IGlmIG9uZSBvZiB0aGUgYXR0cmlidXRlcyBbYGl0ZW1wcm9wYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWl0ZW1wcm9wKSwgW2BodHRwLWVxdWl2YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1odHRwLWVxdWl2KSBvciBbYGNoYXJzZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNoYXJzZXQpIGlzIGFsc28gc2V0LlxuXG5UaGlzIG1ldGFkYXRhIG5hbWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBjb250YWluZWQgYnkgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlLiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgbmFtZSBhdHRyaWJ1dGUgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uLW5hbWVgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHdlYiBwYWdlLlxuICAgIFxuICAgICoqTm90ZToqKlxuICAgIFxuICAgICogICBCcm93c2VycyBtYXkgdXNlIHRoaXMgdG8gaWRlbnRpZnkgdGhlIGFwcGxpY2F0aW9uLiBJdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgW2A8dGl0bGU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpdGxlICJUaGUgSFRNTCBUaXRsZSBlbGVtZW50ICg8dGl0bGU+KSBkZWZpbmVzIHRoZSBkb2N1bWVudFwncyB0aXRsZSB0aGF0IGlzIHNob3duIGluIGEgYnJvd3NlclwncyB0aXRsZSBiYXIgb3IgYSBwYWdlXCdzIHRhYi4iKSBlbGVtZW50LCB3aGljaCB1c3VhbGx5IGNvbnRhaW4gdGhlIGFwcGxpY2F0aW9uIG5hbWUsIGJ1dCBtYXkgYWxzbyBjb250YWluIGluZm9ybWF0aW9uIGxpa2UgdGhlIGRvY3VtZW50IG5hbWUgb3IgYSBzdGF0dXMuXG4gICAgKiAgIFNpbXBsZSB3ZWIgcGFnZXMgc2hvdWxkblwndCBkZWZpbmUgYW4gYXBwbGljYXRpb24tbmFtZS5cbiAgICBcbiogICBgYXV0aG9yYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudFwncyBhdXRob3IuXG4qICAgYGRlc2NyaXB0aW9uYCB3aGljaCBjb250YWlucyBhIHNob3J0IGFuZCBhY2N1cmF0ZSBzdW1tYXJ5IG9mIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLiBTZXZlcmFsIGJyb3dzZXJzLCBsaWtlIEZpcmVmb3ggYW5kIE9wZXJhLCB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiBvZiBib29rbWFya2VkIHBhZ2VzLlxuKiAgIGBnZW5lcmF0b3JgIHdoaWNoIGNvbnRhaW5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBzb2Z0d2FyZSB0aGF0IGdlbmVyYXRlZCB0aGUgcGFnZS5cbiogICBga2V5d29yZHNgIHdoaWNoIGNvbnRhaW5zIHdvcmRzIHJlbGV2YW50IHRvIHRoZSBwYWdlXCdzIGNvbnRlbnQgc2VwYXJhdGVkIGJ5IGNvbW1hcy5cbiogICBgcmVmZXJyZXJgIHdoaWNoIGNvbnRyb2xzIHRoZSBbYFJlZmVyZXJgIEhUVFAgaGVhZGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlcikgYXR0YWNoZWQgdG8gcmVxdWVzdHMgc2VudCBmcm9tIHRoZSBkb2N1bWVudDpcbiAgICBcbiAgICBWYWx1ZXMgZm9yIHRoZSBgY29udGVudGAgYXR0cmlidXRlIG9mIGA8bWV0YSBuYW1lPSJyZWZlcnJlciI+YFxuICAgIFxuICAgIGBuby1yZWZlcnJlcmBcbiAgICBcbiAgICBEbyBub3Qgc2VuZCBhIEhUVFAgYFJlZmVycmVyYCBoZWFkZXIuXG4gICAgXG4gICAgYG9yaWdpbmBcbiAgICBcbiAgICBTZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgb2YgdGhlIGRvY3VtZW50LlxuICAgIFxuICAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWBcbiAgICBcbiAgICBTZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgYXMgYSByZWZlcnJlciB0byBVUkxzIGFzIHNlY3VyZSBhcyB0aGUgY3VycmVudCBwYWdlLCAoaHR0cHPihpJodHRwcyksIGJ1dCBkb2VzIG5vdCBzZW5kIGEgcmVmZXJyZXIgdG8gbGVzcyBzZWN1cmUgVVJMcyAoaHR0cHPihpJodHRwKS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuXG4gICAgXG4gICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmBcbiAgICBcbiAgICBTZW5kIHRoZSBmdWxsIFVSTCAoc3RyaXBwZWQgb2YgcGFyYW1ldGVycykgZm9yIHNhbWUtb3JpZ2luIHJlcXVlc3RzLCBidXQgb25seSBzZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgZm9yIG90aGVyIGNhc2VzLlxuICAgIFxuICAgIGBzYW1lLW9yaWdpbmBcbiAgICBcbiAgICBBIHJlZmVycmVyIHdpbGwgYmUgc2VudCBmb3IgW3NhbWUtc2l0ZSBvcmlnaW5zXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kpLCBidXQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzIHdpbGwgY29udGFpbiBubyByZWZlcnJlciBpbmZvcm1hdGlvbi5cbiAgICBcbiAgICBgc3RyaWN0LW9yaWdpbmBcbiAgICBcbiAgICBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHRvIGEtcHJpb3JpIGFzLW11Y2gtc2VjdXJlIGRlc3RpbmF0aW9uIChIVFRQUy0+SFRUUFMpLCBidXQgZG9uXCd0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFApLlxuICAgIFxuICAgIGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYFxuICAgIFxuICAgIFNlbmQgYSBmdWxsIFVSTCB3aGVuIHBlcmZvcm1pbmcgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LCBvbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgdG8gYS1wcmlvcmkgYXMtbXVjaC1zZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQUyksIGFuZCBzZW5kIG5vIGhlYWRlciB0byBhIGxlc3Mgc2VjdXJlIGRlc3RpbmF0aW9uIChIVFRQUy0+SFRUUCkuXG4gICAgXG4gICAgYHVuc2FmZS1VUkxgXG4gICAgXG4gICAgU2VuZCB0aGUgZnVsbCBVUkwgKHN0cmlwcGVkIG9mIHBhcmFtZXRlcnMpIGZvciBzYW1lLW9yaWdpbiBvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuXG4gICAgXG4gICAgKipOb3RlczoqKlxuICAgIFxuICAgICogICBTb21lIGJyb3dzZXJzIHN1cHBvcnQgdGhlIGRlcHJlY2F0ZWQgdmFsdWVzIG9mIGBhbHdheXNgLCBgZGVmYXVsdGAsIGFuZCBgbmV2ZXJgIGZvciByZWZlcnJlci5cbiAgICAqICAgRHluYW1pY2FsbHkgaW5zZXJ0aW5nIGA8bWV0YSBuYW1lPSJyZWZlcnJlciI+YCAod2l0aCBbYGRvY3VtZW50LndyaXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3dyaXRlKSBvciBbYGFwcGVuZENoaWxkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvYXBwZW5kQ2hpbGQpKSBtYWtlcyB0aGUgcmVmZXJyZXIgYmVoYXZpb3VyIHVucHJlZGljdGFibGUuXG4gICAgKiAgIFdoZW4gc2V2ZXJhbCBjb25mbGljdGluZyBwb2xpY2llcyBhcmUgZGVmaW5lZCwgdGhlIG5vLXJlZmVycmVyIHBvbGljeSBpcyBhcHBsaWVkLlxuICAgIFxuXG5UaGlzIGF0dHJpYnV0ZSBtYXkgYWxzbyBoYXZlIGEgdmFsdWUgdGFrZW4gZnJvbSB0aGUgZXh0ZW5kZWQgbGlzdCBkZWZpbmVkIG9uIFtXSEFUV0cgV2lraSBNZXRhRXh0ZW5zaW9ucyBwYWdlXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL01ldGFFeHRlbnNpb25zKS4gQWx0aG91Z2ggbm9uZSBoYXZlIGJlZW4gZm9ybWFsbHkgYWNjZXB0ZWQgeWV0LCBhIGZldyBjb21tb25seSB1c2VkIG5hbWVzIGFyZTpcblxuKiAgIGBjcmVhdG9yYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjcmVhdG9yIG9mIHRoZSBkb2N1bWVudCwgc3VjaCBhcyBhbiBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCBzZXZlcmFsIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudHMgc2hvdWxkIGJlIHVzZWQuXG4qICAgYGdvb2dsZWJvdGAsIGEgc3lub255bSBvZiBgcm9ib3RzYCwgaXMgb25seSBmb2xsb3dlZCBieSBHb29nbGVib3QgKHRoZSBpbmRleGluZyBjcmF3bGVyIGZvciBHb29nbGUpLlxuKiAgIGBwdWJsaXNoZXJgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50XCdzIHB1Ymxpc2hlci5cbiogICBgcm9ib3RzYCB3aGljaCBkZWZpbmVzIHRoZSBiZWhhdmlvdXIgdGhhdCBjb29wZXJhdGl2ZSBjcmF3bGVycywgb3IgInJvYm90cyIsIHNob3VsZCB1c2Ugd2l0aCB0aGUgcGFnZS4gSXQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgdmFsdWVzIGJlbG93OlxuICAgIFxuICAgIFZhbHVlcyBmb3IgdGhlIGNvbnRlbnQgb2YgYDxtZXRhIG5hbWU9InJvYm90cyI+YFxuICAgIFxuICAgIFZhbHVlXG4gICAgXG4gICAgRGVzY3JpcHRpb25cbiAgICBcbiAgICBVc2VkIGJ5XG4gICAgXG4gICAgYGluZGV4YFxuICAgIFxuICAgIEFsbG93cyB0aGUgcm9ib3QgdG8gaW5kZXggdGhlIHBhZ2UgKGRlZmF1bHQpLlxuICAgIFxuICAgIEFsbFxuICAgIFxuICAgIGBub2luZGV4YFxuICAgIFxuICAgIFJlcXVlc3RzIHRoZSByb2JvdCB0byBub3QgaW5kZXggdGhlIHBhZ2UuXG4gICAgXG4gICAgQWxsXG4gICAgXG4gICAgYGZvbGxvd2BcbiAgICBcbiAgICBBbGxvd3MgdGhlIHJvYm90IHRvIGZvbGxvdyB0aGUgbGlua3Mgb24gdGhlIHBhZ2UgKGRlZmF1bHQpLlxuICAgIFxuICAgIEFsbFxuICAgIFxuICAgIGBub2ZvbGxvd2BcbiAgICBcbiAgICBSZXF1ZXN0cyB0aGUgcm9ib3QgdG8gbm90IGZvbGxvdyB0aGUgbGlua3Mgb24gdGhlIHBhZ2UuXG4gICAgXG4gICAgQWxsXG4gICAgXG4gICAgYG5vbmVgXG4gICAgXG4gICAgRXF1aXZhbGVudCB0byBgbm9pbmRleCwgbm9mb2xsb3dgXG4gICAgXG4gICAgW0dvb2dsZV0oaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vd2VibWFzdGVycy9hbnN3ZXIvNzk4MTIpXG4gICAgXG4gICAgYG5vb2RwYFxuICAgIFxuICAgIFByZXZlbnRzIHVzaW5nIHRoZSBbT3BlbiBEaXJlY3RvcnkgUHJvamVjdF0oaHR0cHM6Ly93d3cuZG1vei5vcmcvKSBkZXNjcmlwdGlvbiwgaWYgYW55LCBhcyB0aGUgcGFnZSBkZXNjcmlwdGlvbiBpbiBzZWFyY2ggZW5naW5lIHJlc3VsdHMuXG4gICAgXG4gICAgW0dvb2dsZV0oaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vd2VibWFzdGVycy9hbnN3ZXIvMzU2MjQjbm9kbW96KSwgW1lhaG9vXShodHRwczovL2hlbHAueWFob28uY29tL2tiL3NlYXJjaC1mb3ItZGVza3RvcC9tZXRhLXRhZ3Mtcm9ib3RzdHh0LXlhaG9vLXNlYXJjaC1zbG4yMjEzLmh0bWwjY29udDUpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKVxuICAgIFxuICAgIGBub2FyY2hpdmVgXG4gICAgXG4gICAgUmVxdWVzdHMgdGhlIHNlYXJjaCBlbmdpbmUgbm90IHRvIGNhY2hlIHRoZSBwYWdlIGNvbnRlbnQuXG4gICAgXG4gICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbWWFob29dKGh0dHBzOi8vaGVscC55YWhvby5jb20va2Ivc2VhcmNoLWZvci1kZXNrdG9wL1NMTjIyMTMuaHRtbCksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApXG4gICAgXG4gICAgYG5vc25pcHBldGBcbiAgICBcbiAgICBQcmV2ZW50cyBkaXNwbGF5aW5nIGFueSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFnZSBpbiBzZWFyY2ggZW5naW5lIHJlc3VsdHMuXG4gICAgXG4gICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKVxuICAgIFxuICAgIGBub2ltYWdlaW5kZXhgXG4gICAgXG4gICAgUmVxdWVzdHMgdGhpcyBwYWdlIG5vdCB0byBhcHBlYXIgYXMgdGhlIHJlZmVycmluZyBwYWdlIG9mIGFuIGluZGV4ZWQgaW1hZ2UuXG4gICAgXG4gICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpXG4gICAgXG4gICAgYG5vY2FjaGVgXG4gICAgXG4gICAgU3lub255bSBvZiBgbm9hcmNoaXZlYC5cbiAgICBcbiAgICBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKVxuICAgIFxuICAgICoqTm90ZXM6KipcbiAgICBcbiAgICAqICAgT25seSBjb29wZXJhdGl2ZSByb2JvdHMgZm9sbG93IHRoZXNlIHJ1bGVzLiBEbyBub3QgZXhwZWN0IHRvIHByZXZlbnQgZS1tYWlsIGhhcnZlc3RlcnMgd2l0aCB0aGVtLlxuICAgICogICBUaGUgcm9ib3Qgc3RpbGwgbmVlZHMgdG8gYWNjZXNzIHRoZSBwYWdlIGluIG9yZGVyIHRvIHJlYWQgdGhlc2UgcnVsZXMuIFRvIHByZXZlbnQgYmFuZHdpZHRoIGNvbnN1bXB0aW9uLCB1c2UgYSBfW3JvYm90cy50eHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvcm9ib3RzLnR4dCAicm9ib3RzLnR4dDogUm9ib3RzLnR4dCBpcyBhIGZpbGUgd2hpY2ggaXMgdXN1YWxseSBwbGFjZWQgaW4gdGhlIHJvb3Qgb2YgYW55IHdlYnNpdGUuIEl0IGRlY2lkZXMgd2hldGhlcsKgY3Jhd2xlcnMgYXJlIHBlcm1pdHRlZCBvciBmb3JiaWRkZW4gYWNjZXNzIHRvIHRoZSB3ZWIgc2l0ZS4iKV8gZmlsZS5cbiAgICAqICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIGEgcGFnZSwgYG5vaW5kZXhgIHdpbGwgd29yaywgYnV0IG9ubHkgYWZ0ZXIgdGhlIHJvYm90IHZpc2l0cyB0aGUgcGFnZSBhZ2Fpbi4gRW5zdXJlIHRoYXQgdGhlIGByb2JvdHMudHh0YCBmaWxlIGlzIG5vdCBwcmV2ZW50aW5nIHJldmlzaXRzLlxuICAgICogICBTb21lIHZhbHVlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBsaWtlIGBpbmRleGAgYW5kIGBub2luZGV4YCwgb3IgYGZvbGxvd2AgYW5kIGBub2ZvbGxvd2AuIEluIHRoZXNlIGNhc2VzIHRoZSByb2JvdFwncyBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkIGFuZCBtYXkgdmFyeSBiZXR3ZWVuIHRoZW0uXG4gICAgKiAgIFNvbWUgY3Jhd2xlciByb2JvdHMsIGxpa2UgR29vZ2xlLCBZYWhvbyBhbmQgQmluZywgc3VwcG9ydCB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZSBIVFRQIGhlYWRlciBgWC1Sb2JvdHMtVGFnYDsgdGhpcyBhbGxvd3Mgbm9uLUhUTUwgZG9jdW1lbnRzIGxpa2UgaW1hZ2VzIHRvIHVzZSB0aGVzZSBydWxlcy5cbiAgICBcbiogICBgc2x1cnBgLCBpcyBhIHN5bm9ueW0gb2YgYHJvYm90c2AsIGJ1dCBvbmx5IGZvciBTbHVycCAtIHRoZSBjcmF3bGVyIGZvciBZYWhvbyBTZWFyY2guXG4qICAgYHZpZXdwb3J0YCwgd2hpY2ggZ2l2ZXMgaGludHMgYWJvdXQgdGhlIHNpemUgb2YgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgW3ZpZXdwb3J0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3ZpZXdwb3J0ICJ2aWV3cG9ydDogQSB2aWV3cG9ydCByZXByZXNlbnRzIGEgcG9seWdvbmFsIChub3JtYWxseSByZWN0YW5ndWxhcikgYXJlYSBpbiBjb21wdXRlciBncmFwaGljcyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB2aWV3ZWQuIEluIHdlYiBicm93c2VyIHRlcm1zLCBpdCByZWZlcnMgdG8gdGhlIHBhcnQgb2YgdGhlIGRvY3VtZW50IHlvdVwncmUgdmlld2luZyB3aGljaCBpcyBjdXJyZW50bHkgdmlzaWJsZSBpbiBpdHMgd2luZG93IChvciB0aGUgc2NyZWVuLCBpZiB0aGUgZG9jdW1lbnQgaXMgYmVpbmcgdmlld2VkIGluIGZ1bGwgc2NyZWVuIG1vZGUpLiBDb250ZW50IG91dHNpZGUgdGhlIHZpZXdwb3J0IGlzIG5vdCB2aXNpYmxlIG9uc2NyZWVuIHVudGlsIHNjcm9sbGVkIGludG8gdmlldy4iKS4gVXNlZCBieSBtb2JpbGUgZGV2aWNlcyBvbmx5LlxuICAgIFxuICAgIFZhbHVlcyBmb3IgdGhlIGNvbnRlbnQgb2YgYDxtZXRhIG5hbWU9InZpZXdwb3J0Ij5gXG4gICAgXG4gICAgVmFsdWVcbiAgICBcbiAgICBQb3NzaWJsZSBzdWJ2YWx1ZXNcbiAgICBcbiAgICBEZXNjcmlwdGlvblxuICAgIFxuICAgIGB3aWR0aGBcbiAgICBcbiAgICBBIHBvc2l0aXZlIGludGVnZXIgbnVtYmVyLCBvciB0aGUgdGV4dCBgZGV2aWNlLXdpZHRoYFxuICAgIFxuICAgIERlZmluZXMgdGhlIHBpeGVsIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCB0aGF0IHlvdSB3YW50IHRoZSB3ZWIgc2l0ZSB0byBiZSByZW5kZXJlZCBhdC5cbiAgICBcbiAgICBgaGVpZ2h0YFxuICAgIFxuICAgIEEgcG9zaXRpdmUgaW50ZWdlciwgb3IgdGhlIHRleHQgYGRldmljZS1oZWlnaHRgXG4gICAgXG4gICAgRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4gTm90IHVzZWQgYnkgYW55IGJyb3dzZXIuXG4gICAgXG4gICAgYGluaXRpYWwtc2NhbGVgXG4gICAgXG4gICAgQSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiBgMC4wYCBhbmQgYDEwLjBgXG4gICAgXG4gICAgRGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGV2aWNlIHdpZHRoIChgZGV2aWNlLXdpZHRoYCBpbiBwb3J0cmFpdCBtb2RlIG9yIGBkZXZpY2UtaGVpZ2h0YCBpbiBsYW5kc2NhcGUgbW9kZSkgYW5kIHRoZSB2aWV3cG9ydCBzaXplLlxuICAgIFxuICAgIGBtYXhpbXVtLXNjYWxlYFxuICAgIFxuICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gYDAuMGAgYW5kIGAxMC4wYFxuICAgIFxuICAgIERlZmluZXMgdGhlIG1heGltdW0gYW1vdW50IHRvIHpvb20gaW4uIEl0IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYG1pbmltdW0tc2NhbGVgIG9yIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlIGFuZCBpT1MxMCsgaWdub3JlcyBpdCBieSBkZWZhdWx0LlxuICAgIFxuICAgIGBtaW5pbXVtLXNjYWxlYFxuICAgIFxuICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gYDAuMGAgYW5kIGAxMC4wYFxuICAgIFxuICAgIERlZmluZXMgdGhlIG1pbmltdW0gem9vbSBsZXZlbC4gSXQgbXVzdCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBgbWF4aW11bS1zY2FsZWAgb3IgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuIEJyb3dzZXIgc2V0dGluZ3MgY2FuIGlnbm9yZSB0aGlzIHJ1bGUgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuXG4gICAgXG4gICAgYHVzZXItc2NhbGFibGVgXG4gICAgXG4gICAgYHllc2Agb3IgYG5vYFxuICAgIFxuICAgIElmIHNldCB0byBgbm9gLCB0aGUgdXNlciBpcyBub3QgYWJsZSB0byB6b29tIGluIHRoZSB3ZWJwYWdlLiBUaGUgZGVmYXVsdCBpcyBgeWVzYC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSwgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuXG4gICAgXG4gICAgU3BlY2lmaWNhdGlvblxuICAgIFxuICAgIFN0YXR1c1xuICAgIFxuICAgIENvbW1lbnRcbiAgICBcbiAgICBbQ1NTIERldmljZSBBZGFwdGF0aW9uICBcbiAgICBUaGUgZGVmaW5pdGlvbiBvZiBcJzxtZXRhIG5hbWU9InZpZXdwb3J0Ij5cJyBpbiB0aGF0IHNwZWNpZmljYXRpb24uXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRldmljZS1hZGFwdC8jdmlld3BvcnQtbWV0YSlcbiAgICBcbiAgICBXb3JraW5nIERyYWZ0XG4gICAgXG4gICAgTm9uLW5vcm1hdGl2ZWx5IGRlc2NyaWJlcyB0aGUgVmlld3BvcnQgTUVUQSBlbGVtZW50XG4gICAgXG4gICAgU2VlIGFsc286IFtgQHZpZXdwb3J0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0B2aWV3cG9ydCAiVGhlIEB2aWV3cG9ydCBDU1MgYXQtcnVsZSBsZXRzIHlvdSBjb25maWd1cmUgdGhlIHZpZXdwb3J0IHRocm91Z2ggd2hpY2ggdGhlIGRvY3VtZW50IGlzIHZpZXdlZC4gSXRcJ3MgcHJpbWFyaWx5IHVzZWQgZm9yIG1vYmlsZSBkZXZpY2VzLCBidXQgaXMgYWxzbyB1c2VkIGJ5IGRlc2t0b3AgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGZlYXR1cmVzIGxpa2UgInNuYXAgdG8gZWRnZSIgKHN1Y2ggYXMgTWljcm9zb2Z0IEVkZ2UpLiIpXG4gICAgXG4gICAgKipOb3RlczoqKlxuICAgIFxuICAgICogICBUaG91Z2ggdW5zdGFuZGFyZGl6ZWQsIHRoaXMgZGVjbGFyYXRpb24gaXMgcmVzcGVjdGVkIGJ5IG1vc3QgbW9iaWxlIGJyb3dzZXJzIGR1ZSB0byBkZS1mYWN0byBkb21pbmFuY2UuXG4gICAgKiAgIFRoZSBkZWZhdWx0IHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIGRldmljZXMgYW5kIGJyb3dzZXJzLlxuICAgICogICBUbyBsZWFybiBhYm91dCB0aGlzIGRlY2xhcmF0aW9uIGluIEZpcmVmb3ggZm9yIE1vYmlsZSwgc2VlIFt0aGlzIGFydGljbGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW9iaWxlL1ZpZXdwb3J0X21ldGFfdGFnICJNb2JpbGUvVmlld3BvcnQgbWV0YSB0YWciKS4nfX0se25hbWU6Imh0dHAtZXF1aXYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0RlZmluZXMgYSBwcmFnbWEgZGlyZWN0aXZlLiBUaGUgYXR0cmlidXRlIGlzIG5hbWVkIGAqKmh0dHAtZXF1aXYqKihhbGVudClgIGJlY2F1c2UgYWxsIHRoZSBhbGxvd2VkIHZhbHVlcyBhcmUgbmFtZXMgb2YgcGFydGljdWxhciBIVFRQIGhlYWRlcnM6XG5cbiogICBgImNvbnRlbnQtbGFuZ3VhZ2UiYCAgXG4gICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBsYW5ndWFnZSBvZiB0aGUgcGFnZS4gSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIFtsYW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2xhbmcpIGF0dHJpYnV0ZSBvbiBhbnkgZWxlbWVudC5cbiAgICBcbiAgICAqKldhcm5pbmc6KiogRG8gbm90IHVzZSB0aGlzIHZhbHVlLCBhcyBpdCBpcyBvYnNvbGV0ZS4gUHJlZmVyIHRoZSBgbGFuZ2AgYXR0cmlidXRlIG9uIHRoZSBbYDxodG1sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9odG1sICJUaGUgSFRNTCA8aHRtbD4gZWxlbWVudCByZXByZXNlbnRzIHRoZSByb290ICh0b3AtbGV2ZWwgZWxlbWVudCkgb2YgYW4gSFRNTCBkb2N1bWVudCwgc28gaXQgaXMgYWxzbyByZWZlcnJlZCB0byBhcyB0aGUgcm9vdCBlbGVtZW50LiBBbGwgb3RoZXIgZWxlbWVudHMgbXVzdCBiZSBkZXNjZW5kYW50cyBvZiB0aGlzIGVsZW1lbnQuIikgZWxlbWVudC5cbiAgICBcbiogICBgImNvbnRlbnQtc2VjdXJpdHktcG9saWN5ImAgIFxuICAgIEFsbG93cyBwYWdlIGF1dGhvcnMgdG8gZGVmaW5lIGEgW2NvbnRlbnQgcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9DU1AvQ1NQX3BvbGljeV9kaXJlY3RpdmVzKSBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gQ29udGVudCBwb2xpY2llcyBtb3N0bHkgc3BlY2lmeSBhbGxvd2VkIHNlcnZlciBvcmlnaW5zIGFuZCBzY3JpcHQgZW5kcG9pbnRzIHdoaWNoIGhlbHAgZ3VhcmQgYWdhaW5zdCBjcm9zcy1zaXRlIHNjcmlwdGluZyBhdHRhY2tzLlxuKiAgIGAiY29udGVudC10eXBlImAgIFxuICAgIERlZmluZXMgdGhlIFtNSU1FIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvTUlNRV90eXBlKSBvZiB0aGUgZG9jdW1lbnQsIGZvbGxvd2VkIGJ5IGl0cyBjaGFyYWN0ZXIgZW5jb2RpbmcuIEl0IGZvbGxvd3MgdGhlIHNhbWUgc3ludGF4IGFzIHRoZSBIVFRQIGBjb250ZW50LXR5cGVgIGVudGl0eS1oZWFkZXIgZmllbGQsIGJ1dCBhcyBpdCBpcyBpbnNpZGUgYSBIVE1MIHBhZ2UsIG1vc3QgdmFsdWVzIG90aGVyIHRoYW4gYHRleHQvaHRtbGAgYXJlIGltcG9zc2libGUuIFRoZXJlZm9yZSB0aGUgdmFsaWQgc3ludGF4IGZvciBpdHMgYGNvbnRlbnRgIGlzIHRoZSBzdHJpbmcgXCdgdGV4dC9odG1sYFwnIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIHNldCB3aXRoIHRoZSBmb2xsb3dpbmcgc3ludGF4OiBcJ2A7IGNoYXJzZXQ9X0lBTkFjaGFyc2V0X2BcJywgd2hlcmUgYElBTkFjaGFyc2V0YCBpcyB0aGUgX3ByZWZlcnJlZCBNSU1FIG5hbWVfIGZvciBhIGNoYXJhY3RlciBzZXQgYXMgW2RlZmluZWQgYnkgdGhlIElBTkEuXShodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cylcbiAgICBcbiAgICAqKldhcm5pbmc6KiogRG8gbm90IHVzZSB0aGlzIHZhbHVlLCBhcyBpdCBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYGNoYXJzZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNoYXJzZXQpIGF0dHJpYnV0ZSBvbiB0aGUgW2A8bWV0YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50LlxuICAgIFxuICAgICoqTm90ZToqKiBBcyBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGNhblwndCBjaGFuZ2UgZG9jdW1lbnRzXCcgdHlwZXMgaW4gWEhUTUwgb3IgSFRNTDVcJ3MgWEhUTUwgc2VyaWFsaXphdGlvbiwgbmV2ZXIgc2V0IHRoZSBNSU1FIHR5cGUgdG8gYW4gWEhUTUwgTUlNRSB0eXBlIHdpdGggYDxtZXRhPmAuXG4gICAgXG4qICAgYCJyZWZyZXNoImAgIFxuICAgIFRoaXMgaW5zdHJ1Y3Rpb24gc3BlY2lmaWVzOlxuICAgICogICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgdGhlIHBhZ2Ugc2hvdWxkIGJlIHJlbG9hZGVkIC0gb25seSBpZiB0aGUgW2Bjb250ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jb250ZW50KSBhdHRyaWJ1dGUgY29udGFpbnMgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuICAgICogICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgdGhlIHBhZ2Ugc2hvdWxkIHJlZGlyZWN0IHRvIGFub3RoZXIgLSBvbmx5IGlmIHRoZSBbYGNvbnRlbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZSBjb250YWlucyBhIHBvc2l0aXZlIGludGVnZXIgZm9sbG93ZWQgYnkgdGhlIHN0cmluZyBcJ2A7dXJsPWBcJywgYW5kIGEgdmFsaWQgVVJMLlxuKiAgIGAic2V0LWNvb2tpZSJgICBcbiAgICBEZWZpbmVzIGEgW2Nvb2tpZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9jb29raWUpIGZvciB0aGUgcGFnZS4gSXRzIGNvbnRlbnQgbXVzdCBmb2xsb3cgdGhlIHN5bnRheCBkZWZpbmVkIGluIHRoZSBbSUVURiBIVFRQIENvb2tpZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1odHRwc3RhdGUtY29va2llLTE0KS5cbiAgICBcbiAgICAqKldhcm5pbmc6KiogRG8gbm90IHVzZSB0aGlzIGluc3RydWN0aW9uLCBhcyBpdCBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBIVFRQIGhlYWRlciBbYFNldC1Db29raWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvU2V0LUNvb2tpZSkgaW5zdGVhZC4nfX0se25hbWU6ImNvbnRlbnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIHRoZSB2YWx1ZSBmb3IgdGhlIFtgaHR0cC1lcXVpdmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItaHR0cC1lcXVpdikgb3IgW2BuYW1lYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1uYW1lKSBhdHRyaWJ1dGUsIGRlcGVuZGluZyBvbiB3aGljaCBpcyB1c2VkLiJ9fSx7bmFtZToiY2hhcnNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgZGVjbGFyZXMgdGhlIHBhZ2VcJ3MgY2hhcmFjdGVyIGVuY29kaW5nLiBJdCBtdXN0IGNvbnRhaW4gYSBbc3RhbmRhcmQgSUFOQSBNSU1FIG5hbWUgZm9yIGNoYXJhY3RlciBlbmNvZGluZ3NdKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzKS4gQWx0aG91Z2ggdGhlIHN0YW5kYXJkIGRvZXNuXCd0IHJlcXVlc3QgYSBzcGVjaWZpYyBlbmNvZGluZywgaXQgc3VnZ2VzdHM6XG5cbiogICBBdXRob3JzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSBbYFVURi04YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9VVEYtOCkuXG4qICAgQXV0aG9ycyBzaG91bGQgbm90IHVzZSBBU0NJSS1pbmNvbXBhdGlibGUgZW5jb2RpbmdzIHRvIGF2b2lkIHNlY3VyaXR5IHJpc2s6IGJyb3dzZXJzIG5vdCBzdXBwb3J0aW5nIHRoZW0gbWF5IGludGVycHJldCBoYXJtZnVsIGNvbnRlbnQgYXMgSFRNTC4gVGhpcyBoYXBwZW5zIHdpdGggdGhlIGBKSVNfQzYyMjYtMTk4M2AsIGBKSVNfWDAyMTItMTk5MGAsIGBIWi1HQi0yMzEyYCwgYEpPSEFCYCwgdGhlIElTTy0yMDIyIGZhbWlseSBhbmQgdGhlIEVCQ0RJQyBmYW1pbHkuXG5cbioqTm90ZToqKiBBU0NJSS1pbmNvbXBhdGlibGUgZW5jb2RpbmdzIGFyZSB0aG9zZSB0aGF0IGRvblwndCBtYXAgdGhlIDgtYml0IGNvZGUgcG9pbnRzIGAweDIwYCB0byBgMHg3RWAgdG8gdGhlIGAweDAwMjBgIHRvIGAweDAwN0VgIFVuaWNvZGUgY29kZSBwb2ludHMpXG5cbiogICBBdXRob3JzICoqbXVzdCBub3QqKiB1c2UgYENFU1UtOGAsIGBVVEYtN2AsIGBCT0NVLTFgIGFuZC9vciBgU0NTVWAgYXMgW2Nyb3NzLXNpdGUgc2NyaXB0aW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0Nyb3NzLXNpdGVfc2NyaXB0aW5nKSBhdHRhY2tzIHdpdGggdGhlc2UgZW5jb2RpbmdzIGhhdmUgYmVlbiBkZW1vbnN0cmF0ZWQuXG4qICAgQXV0aG9ycyBzaG91bGQgbm90IHVzZSBgVVRGLTMyYCBiZWNhdXNlIG5vdCBhbGwgSFRNTDUgZW5jb2RpbmcgYWxnb3JpdGhtcyBjYW4gZGlzdGluZ3Vpc2ggaXQgZnJvbSBgVVRGLTE2YC5cblxuKipOb3RlczoqKlxuXG4qICAgVGhlIGRlY2xhcmVkIGNoYXJhY3RlciBlbmNvZGluZyBtdXN0IG1hdGNoIHRoZSBvbmUgdGhlIHBhZ2Ugd2FzIHNhdmVkIHdpdGggdG8gYXZvaWQgZ2FyYmxlZCBjaGFyYWN0ZXJzIGFuZCBzZWN1cml0eSBob2xlcy5cbiogICBUaGUgW2A8bWV0YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50IGRlY2xhcmluZyB0aGUgZW5jb2RpbmcgbXVzdCBiZSBpbnNpZGUgdGhlIFtgPGhlYWQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hlYWQgIlRoZSBIVE1MIDxoZWFkPiBlbGVtZW50IHByb3ZpZGVzIGdlbmVyYWwgaW5mb3JtYXRpb24gKG1ldGFkYXRhKSBhYm91dCB0aGUgZG9jdW1lbnQsIGluY2x1ZGluZyBpdHMgdGl0bGUgYW5kIGxpbmtzIHRvIGl0c8Kgc2NyaXB0cyBhbmQgc3R5bGUgc2hlZXRzLiIpIGVsZW1lbnQgYW5kICoqd2l0aGluIHRoZSBmaXJzdCAxMDI0IGJ5dGVzKiogb2YgdGhlIEhUTUwgYXMgc29tZSBicm93c2VycyBvbmx5IGxvb2sgYXQgdGhvc2UgYnl0ZXMgYmVmb3JlIGNob29zaW5nIGFuIGVuY29kaW5nLlxuKiAgIFRoaXMgW2A8bWV0YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50IGlzIG9ubHkgb25lIHBhcnQgb2YgdGhlIFthbGdvcml0aG0gdG8gZGV0ZXJtaW5lIGEgcGFnZVwncyBjaGFyYWN0ZXIgc2V0XShodHRwczovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2VuY29kaW5nLXNuaWZmaW5nLWFsZ29yaXRobSAiQWxnb3JpdGhtIGNoYXJzZXQgcGFnZSIpLiBUaGUgW2BDb250ZW50LVR5cGVgIGhlYWRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtVHlwZSkgYW5kIGFueSBbQnl0ZS1PcmRlciBNYXJrc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9CeXRlLU9yZGVyX01hcmsgIlRoZSBkZWZpbml0aW9uIG9mIHRoYXQgdGVybSAoQnl0ZS1PcmRlciBNYXJrcykgaGFzIG5vdCBiZWVuIHdyaXR0ZW4geWV0OyBwbGVhc2UgY29uc2lkZXIgY29udHJpYnV0aW5nIGl0ISIpIG92ZXJyaWRlIHRoaXMgZWxlbWVudC5cbiogICBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBkZWZpbmUgdGhlIGNoYXJhY3RlciBlbmNvZGluZy4gSWYgYSBwYWdlXCdzIGVuY29kaW5nIGlzIHVuZGVmaW5lZCwgY3Jvc3Mtc2NyaXB0aW5nIHRlY2huaXF1ZXMgYXJlIHBvc3NpYmxlLCBzdWNoIGFzIHRoZSBbYFVURi03YCBmYWxsYmFjayBjcm9zcy1zY3JpcHRpbmcgdGVjaG5pcXVlXShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvY3R5cGUtbWlycm9yL3dpa2kvQXJ0aWNsZVV0ZjcpLlxuKiAgIFRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgd2l0aCBhIGBjaGFyc2V0YCBhdHRyaWJ1dGUgaXMgYSBzeW5vbnltIGZvciB0aGUgcHJlLUhUTUw1IGA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1fSUFOQWNoYXJzZXRfIj5gLCB3aGVyZSBfYElBTkFjaGFyc2V0YF8gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBlcXVpdmFsZW50IFtgY2hhcnNldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY2hhcnNldCkgYXR0cmlidXRlLiBUaGlzIHN5bnRheCBpcyBzdGlsbCBhbGxvd2VkLCBhbHRob3VnaCBubyBsb25nZXIgcmVjb21tZW5kZWQuJ319LHtuYW1lOiJzY2hlbWUiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBzY2hlbWUgaW4gd2hpY2ggbWV0YWRhdGEgaXMgZGVzY3JpYmVkLiBBIHNjaGVtZSBpcyBhIGNvbnRleHQgbGVhZGluZyB0byB0aGUgY29ycmVjdCBpbnRlcnByZXRhdGlvbnMgb2YgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgdmFsdWUsIGxpa2UgYSBmb3JtYXQuXG5cbioqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBUaGVyZSBpcyBubyByZXBsYWNlbWVudCBhcyB0aGVyZSB3YXMgbm8gcmVhbCB1c2FnZSBmb3IgaXQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhIn1dfSx7bmFtZToic3R5bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdHlsZSBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGVtYmVkIHN0eWxlIGluZm9ybWF0aW9uIGluIHRoZWlyIGRvY3VtZW50cy4gVGhlIHN0eWxlIGVsZW1lbnQgaXMgb25lIG9mIHNldmVyYWwgaW5wdXRzIHRvIHRoZSBzdHlsaW5nIHByb2Nlc3NpbmcgbW9kZWwuIFRoZSBlbGVtZW50IGRvZXMgbm90IHJlcHJlc2VudCBjb250ZW50IGZvciB0aGUgdXNlci4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibWVkaWEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgd2hpY2ggbWVkaWEgdGhlIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIHRvLiBJdHMgdmFsdWUgaXMgYSBbbWVkaWEgcXVlcnldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0d1aWRlL0NTUy9NZWRpYV9xdWVyaWVzKSwgd2hpY2ggZGVmYXVsdHMgdG8gYGFsbGAgaWYgdGhlIGF0dHJpYnV0ZSBpcyBtaXNzaW5nLiJ9fSx7bmFtZToibm9uY2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgY3J5cHRvZ3JhcGhpYyBub25jZSAobnVtYmVyIHVzZWQgb25jZSkgdXNlZCB0byB3aGl0ZWxpc3QgaW5saW5lIHN0eWxlcyBpbiBhIFtzdHlsZS1zcmMgQ29udGVudC1TZWN1cml0eS1Qb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zdHlsZS1zcmMpLiBUaGUgc2VydmVyIG11c3QgZ2VuZXJhdGUgYSB1bmlxdWUgbm9uY2UgdmFsdWUgZWFjaCB0aW1lIGl0IHRyYW5zbWl0cyBhIHBvbGljeS4gSXQgaXMgY3JpdGljYWwgdG8gcHJvdmlkZSBhIG5vbmNlIHRoYXQgY2Fubm90IGJlIGd1ZXNzZWQgYXMgYnlwYXNzaW5nIGEgcmVzb3VyY2XigJlzIHBvbGljeSBpcyBvdGhlcndpc2UgdHJpdmlhbC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIHN0eWxpbmcgbGFuZ3VhZ2UgYXMgYSBNSU1FIHR5cGUgKGNoYXJzZXQgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQpLiBUaGlzIGF0dHJpYnV0ZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gYHRleHQvY3NzYCBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkIOKAlCB0aGVyZSBpcyB2ZXJ5IGxpdHRsZSByZWFzb24gdG8gaW5jbHVkZSB0aGlzIGluIG1vZGVybiB3ZWIgZG9jdW1lbnRzLiJ9fSx7bmFtZToic2NvcGVkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBbYWx0ZXJuYXRpdmUgc3R5bGUgc2hlZXRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9BbHRlcm5hdGl2ZV9zdHlsZV9zaGVldHMpIHNldHMuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdHlsZSJ9XX0se25hbWU6ImJvZHkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBib2R5IGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29udGVudCBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6Im9uYWZ0ZXJwcmludCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgdXNlciBoYXMgcHJpbnRlZCB0aGUgZG9jdW1lbnQuIn19LHtuYW1lOiJvbmJlZm9yZXByaW50IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgcHJpbnRpbmcgb2YgdGhlIGRvY3VtZW50LiJ9fSx7bmFtZToib25iZWZvcmV1bmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgYWJvdXQgdG8gYmUgdW5sb2FkZWQuIn19LHtuYW1lOiJvbmhhc2hjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBwYXJ0IChzdGFydGluZyB3aXRoIHRoZSBoYXNoIChgJyMnYCkgY2hhcmFjdGVyKSBvZiB0aGUgZG9jdW1lbnQncyBjdXJyZW50IGFkZHJlc3MgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbmxhbmd1YWdlY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHByZWZlcnJlZCBsYW5ndWFnZXMgY2hhbmdlZC4ifX0se25hbWU6Im9ubWVzc2FnZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlLiJ9fSx7bmFtZToib25vZmZsaW5lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gbmV0d29yayBjb21tdW5pY2F0aW9uIGhhcyBmYWlsZWQuIn19LHtuYW1lOiJvbm9ubGluZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBoYXMgYmVlbiByZXN0b3JlZC4ifX0se25hbWU6Im9ucGFnZWhpZGUifSx7bmFtZToib25wYWdlc2hvdyJ9LHtuYW1lOiJvbnBvcHN0YXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHVzZXIgaGFzIG5hdmlnYXRlZCBzZXNzaW9uIGhpc3RvcnkuIn19LHtuYW1lOiJvbnN0b3JhZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgc3RvcmFnZSBhcmVhIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib251bmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgZ29pbmcgYXdheS4ifX0se25hbWU6ImFsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgaHlwZXJsaW5rcyB3aGVuIHNlbGVjdGVkLiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbYDphY3RpdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOmFjdGl2ZSAiVGhlIDphY3RpdmUgQ1NTIHBzZXVkby1jbGFzcyByZXByZXNlbnRzIGFuIGVsZW1lbnQgKHN1Y2ggYXMgYSBidXR0b24pIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyLiIpIHBzZXVkby1jbGFzcyBpbnN0ZWFkLl8nfSx7bmFtZToiYmFja2dyb3VuZCIsZGVzY3JpcHRpb246J1VSSSBvZiBhIGltYWdlIHRvIHVzZSBhcyBhIGJhY2tncm91bmQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGJhY2tncm91bmRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYmFja2dyb3VuZCAiVGhlIGJhY2tncm91bmQgc2hvcnRoYW5kIENTUyBwcm9wZXJ0eSBzZXRzIGFsbCBiYWNrZ3JvdW5kIHN0eWxlIHByb3BlcnRpZXMgYXQgb25jZSwgc3VjaCBhcyBjb2xvciwgaW1hZ2UsIG9yaWdpbiBhbmQgc2l6ZSwgb3IgcmVwZWF0IG1ldGhvZC4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToiYmdjb2xvciIsZGVzY3JpcHRpb246J0JhY2tncm91bmQgY29sb3IgZm9yIHRoZSBkb2N1bWVudC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgYmFja2dyb3VuZC1jb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9iYWNrZ3JvdW5kLWNvbG9yICJUaGUgYmFja2dyb3VuZC1jb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBlbGVtZW50LiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJib3R0b21tYXJnaW4iLGRlc2NyaXB0aW9uOidUaGUgbWFyZ2luIG9mIHRoZSBib3R0b20gb2YgdGhlIGJvZHkuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYG1hcmdpbi1ib3R0b21gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLWJvdHRvbSAiVGhlIG1hcmdpbi1ib3R0b20gQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSBib3R0b20gb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToibGVmdG1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIGxlZnQgb2YgdGhlIGJvZHkuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYG1hcmdpbi1sZWZ0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1sZWZ0ICJUaGUgbWFyZ2luLWxlZnQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSBsZWZ0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToibGluayIsZGVzY3JpcHRpb246J0NvbG9yIG9mIHRleHQgZm9yIHVudmlzaXRlZCBoeXBlcnRleHQgbGlua3MuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOmxpbmtgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOmxpbmsgIlRoZSA6bGluayBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgYW4gZWxlbWVudCB0aGF0IGhhcyBub3QgeWV0IGJlZW4gdmlzaXRlZC4gSXQgbWF0Y2hlcyBldmVyeSB1bnZpc2l0ZWQgPGE+LCA8YXJlYT4sIG9yIDxsaW5rPiBlbGVtZW50IHRoYXQgaGFzIGFuIGhyZWYgYXR0cmlidXRlLiIpIHBzZXVkby1jbGFzcyBpbnN0ZWFkLl8nfSx7bmFtZToib25ibHVyIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBsb3NlcyBmb2N1cy4ifSx7bmFtZToib25lcnJvciIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgZmFpbHMgdG8gbG9hZCBwcm9wZXJseS4ifSx7bmFtZToib25mb2N1cyIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgcmVjZWl2ZXMgZm9jdXMuIn0se25hbWU6Im9ubG9hZCIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIn0se25hbWU6Im9ucmVkbyIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbW92ZWQgZm9yd2FyZCBpbiB1bmRvIHRyYW5zYWN0aW9uIGhpc3RvcnkuIn0se25hbWU6Im9ucmVzaXplIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgYmVlbiByZXNpemVkLiJ9LHtuYW1lOiJvbnVuZG8iLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHVzZXIgaGFzIG1vdmVkIGJhY2t3YXJkIGluIHVuZG8gdHJhbnNhY3Rpb24gaGlzdG9yeS4ifSx7bmFtZToicmlnaHRtYXJnaW4iLGRlc2NyaXB0aW9uOidUaGUgbWFyZ2luIG9mIHRoZSByaWdodCBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLXJpZ2h0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1yaWdodCAiVGhlIG1hcmdpbi1yaWdodCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToidGV4dCIsZGVzY3JpcHRpb246J0ZvcmVncm91bmQgY29sb3Igb2YgdGV4dC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6InRvcG1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIHRvcCBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLXRvcGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tdG9wICJUaGUgbWFyZ2luLXRvcCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIHRvcCBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJ2bGluayIsZGVzY3JpcHRpb246J0NvbG9yIG9mIHRleHQgZm9yIHZpc2l0ZWQgaHlwZXJ0ZXh0IGxpbmtzLiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbYDp2aXNpdGVkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTLzp2aXNpdGVkICJUaGUgOnZpc2l0ZWQgQ1NTIHBzZXVkby1jbGFzcyByZXByZXNlbnRzIGxpbmtzIHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgdmlzaXRlZC4gRm9yIHByaXZhY3kgcmVhc29ucywgdGhlIHN0eWxlcyB0aGF0IGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGlzIHNlbGVjdG9yIGFyZSB2ZXJ5IGxpbWl0ZWQuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYm9keSJ9XX0se25hbWU6ImFydGljbGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhcnRpY2xlIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbXBsZXRlLCBvciBzZWxmLWNvbnRhaW5lZCwgY29tcG9zaXRpb24gaW4gYSBkb2N1bWVudCwgcGFnZSwgYXBwbGljYXRpb24sIG9yIHNpdGUgYW5kIHRoYXQgaXMsIGluIHByaW5jaXBsZSwgaW5kZXBlbmRlbnRseSBkaXN0cmlidXRhYmxlIG9yIHJldXNhYmxlLCBlLmcuIGluIHN5bmRpY2F0aW9uLiBUaGlzIGNvdWxkIGJlIGEgZm9ydW0gcG9zdCwgYSBtYWdhemluZSBvciBuZXdzcGFwZXIgYXJ0aWNsZSwgYSBibG9nIGVudHJ5LCBhIHVzZXItc3VibWl0dGVkIGNvbW1lbnQsIGFuIGludGVyYWN0aXZlIHdpZGdldCBvciBnYWRnZXQsIG9yIGFueSBvdGhlciBpbmRlcGVuZGVudCBpdGVtIG9mIGNvbnRlbnQuIEVhY2ggYXJ0aWNsZSBzaG91bGQgYmUgaWRlbnRpZmllZCwgdHlwaWNhbGx5IGJ5IGluY2x1ZGluZyBhIGhlYWRpbmcgKGgx4oCTaDYgZWxlbWVudCkgYXMgYSBjaGlsZCBvZiB0aGUgYXJ0aWNsZSBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FydGljbGUifV19LHtuYW1lOiJzZWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc2VjdGlvbiBlbGVtZW50IHJlcHJlc2VudHMgYSBnZW5lcmljIHNlY3Rpb24gb2YgYSBkb2N1bWVudCBvciBhcHBsaWNhdGlvbi4gQSBzZWN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIGlzIGEgdGhlbWF0aWMgZ3JvdXBpbmcgb2YgY29udGVudC4gRWFjaCBzZWN0aW9uIHNob3VsZCBiZSBpZGVudGlmaWVkLCB0eXBpY2FsbHkgYnkgaW5jbHVkaW5nIGEgaGVhZGluZyAoIGgxLSBoNiBlbGVtZW50KSBhcyBhIGNoaWxkIG9mIHRoZSBzZWN0aW9uIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2VjdGlvbiJ9XX0se25hbWU6Im5hdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hdiBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIG9mIGEgcGFnZSB0aGF0IGxpbmtzIHRvIG90aGVyIHBhZ2VzIG9yIHRvIHBhcnRzIHdpdGhpbiB0aGUgcGFnZTogYSBzZWN0aW9uIHdpdGggbmF2aWdhdGlvbiBsaW5rcy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9uYXYifV19LHtuYW1lOiJhc2lkZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFzaWRlIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gb2YgYSBwYWdlIHRoYXQgY29uc2lzdHMgb2YgY29udGVudCB0aGF0IGlzIHRhbmdlbnRpYWxseSByZWxhdGVkIHRvIHRoZSBjb250ZW50IGFyb3VuZCB0aGUgYXNpZGUgZWxlbWVudCwgYW5kIHdoaWNoIGNvdWxkIGJlIGNvbnNpZGVyZWQgc2VwYXJhdGUgZnJvbSB0aGF0IGNvbnRlbnQuIFN1Y2ggc2VjdGlvbnMgYXJlIG9mdGVuIHJlcHJlc2VudGVkIGFzIHNpZGViYXJzIGluIHByaW50ZWQgdHlwb2dyYXBoeS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hc2lkZSJ9XX0se25hbWU6ImgxIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDEgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoMiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGgyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoMyBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6Img0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDQgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoNSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGg1IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoNiBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6ImhlYWRlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlYWRlciBlbGVtZW50IHJlcHJlc2VudHMgaW50cm9kdWN0b3J5IGNvbnRlbnQgZm9yIGl0cyBuZWFyZXN0IGFuY2VzdG9yIHNlY3Rpb25pbmcgY29udGVudCBvciBzZWN0aW9uaW5nIHJvb3QgZWxlbWVudC4gQSBoZWFkZXIgdHlwaWNhbGx5IGNvbnRhaW5zIGEgZ3JvdXAgb2YgaW50cm9kdWN0b3J5IG9yIG5hdmlnYXRpb25hbCBhaWRzLiBXaGVuIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHNlY3Rpb25pbmcgY29udGVudCBvciBzZWN0aW9uaW5nIHJvb3QgZWxlbWVudCBpcyB0aGUgYm9keSBlbGVtZW50LCB0aGVuIGl0IGFwcGxpZXMgdG8gdGhlIHdob2xlIHBhZ2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaGVhZGVyIn1dfSx7bmFtZToiZm9vdGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZm9vdGVyIGVsZW1lbnQgcmVwcmVzZW50cyBhIGZvb3RlciBmb3IgaXRzIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50LiBBIGZvb3RlciB0eXBpY2FsbHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaXRzIHNlY3Rpb24gc3VjaCBhcyB3aG8gd3JvdGUgaXQsIGxpbmtzIHRvIHJlbGF0ZWQgZG9jdW1lbnRzLCBjb3B5cmlnaHQgZGF0YSwgYW5kIHRoZSBsaWtlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvb3RlciJ9XX0se25hbWU6ImFkZHJlc3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhZGRyZXNzIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiBmb3IgaXRzIG5lYXJlc3QgYXJ0aWNsZSBvciBib2R5IGVsZW1lbnQgYW5jZXN0b3IuIElmIHRoYXQgaXMgdGhlIGJvZHkgZWxlbWVudCwgdGhlbiB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiBhcHBsaWVzIHRvIHRoZSBkb2N1bWVudCBhcyBhIHdob2xlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FkZHJlc3MifV19LHtuYW1lOiJwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcCBlbGVtZW50IHJlcHJlc2VudHMgYSBwYXJhZ3JhcGguIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcCJ9XX0se25hbWU6ImhyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaHIgZWxlbWVudCByZXByZXNlbnRzIGEgcGFyYWdyYXBoLWxldmVsIHRoZW1hdGljIGJyZWFrLCBlLmcuIGEgc2NlbmUgY2hhbmdlIGluIGEgc3RvcnksIG9yIGEgdHJhbnNpdGlvbiB0byBhbm90aGVyIHRvcGljIHdpdGhpbiBhIHNlY3Rpb24gb2YgYSByZWZlcmVuY2UgYm9vay4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHJ1bGUgb24gdGhlIHBhZ2UuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYGxlZnRgLiJ9LHtuYW1lOiJjb2xvciIsZGVzY3JpcHRpb246IlNldHMgdGhlIGNvbG9yIG9mIHRoZSBydWxlIHRocm91Z2ggY29sb3IgbmFtZSBvciBoZXhhZGVjaW1hbCB2YWx1ZS4ifSx7bmFtZToibm9zaGFkZSIsZGVzY3JpcHRpb246IlNldHMgdGhlIHJ1bGUgdG8gaGF2ZSBubyBzaGFkaW5nLiJ9LHtuYW1lOiJzaXplIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgaGVpZ2h0LCBpbiBwaXhlbHMsIG9mIHRoZSBydWxlLiJ9LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246IlNldHMgdGhlIGxlbmd0aCBvZiB0aGUgcnVsZSBvbiB0aGUgcGFnZSB0aHJvdWdoIGEgcGl4ZWwgb3IgcGVyY2VudGFnZSB2YWx1ZS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hyIn1dfSx7bmFtZToicHJlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcHJlIGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHByZWZvcm1hdHRlZCB0ZXh0LCBpbiB3aGljaCBzdHJ1Y3R1cmUgaXMgcmVwcmVzZW50ZWQgYnkgdHlwb2dyYXBoaWMgY29udmVudGlvbnMgcmF0aGVyIHRoYW4gYnkgZWxlbWVudHMuIn0sYXR0cmlidXRlczpbe25hbWU6ImNvbHMiLGRlc2NyaXB0aW9uOidDb250YWlucyB0aGUgX3ByZWZlcnJlZF8gY291bnQgb2YgY2hhcmFjdGVycyB0aGF0IGEgbGluZSBzaG91bGQgaGF2ZS4gSXQgd2FzIGEgbm9uLXN0YW5kYXJkIHN5bm9ueW0gb2YgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wcmUjYXR0ci13aWR0aCkuIFRvIGFjaGlldmUgc3VjaCBhbiBlZmZlY3QsIHVzZSBDU1MgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy93aWR0aCAiVGhlIHdpZHRoIENTUyBwcm9wZXJ0eSBzZXRzIGFuIGVsZW1lbnRcJ3Mgd2lkdGguIEJ5IGRlZmF1bHQgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbnRlbnQgYXJlYSwgYnV0IGlmIGJveC1zaXppbmcgaXMgc2V0IHRvIGJvcmRlci1ib3gsIGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgYXJlYS4iKSBpbnN0ZWFkLid9LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246J0NvbnRhaW5zIHRoZSBfcHJlZmVycmVkXyBjb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgYSBsaW5lIHNob3VsZCBoYXZlLiBUaG91Z2ggdGVjaG5pY2FsbHkgc3RpbGwgaW1wbGVtZW50ZWQsIHRoaXMgYXR0cmlidXRlIGhhcyBubyB2aXN1YWwgZWZmZWN0OyB0byBhY2hpZXZlIHN1Y2ggYW4gZWZmZWN0LCB1c2UgQ1NTIFtgd2lkdGhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvd2lkdGggIlRoZSB3aWR0aCBDU1MgcHJvcGVydHkgc2V0cyBhbiBlbGVtZW50XCdzIHdpZHRoLiBCeSBkZWZhdWx0IGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBjb250ZW50IGFyZWEsIGJ1dCBpZiBib3gtc2l6aW5nIGlzIHNldCB0byBib3JkZXItYm94LCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyIGFyZWEuIikgaW5zdGVhZC4nfSx7bmFtZToid3JhcCIsZGVzY3JpcHRpb246J0lzIGEgX2hpbnRfIGluZGljYXRpbmcgaG93IHRoZSBvdmVyZmxvdyBtdXN0IGhhcHBlbi4gSW4gbW9kZXJuIGJyb3dzZXIgdGhpcyBoaW50IGlzIGlnbm9yZWQgYW5kIG5vIHZpc3VhbCBlZmZlY3QgcmVzdWx0cyBpbiBpdHMgcHJlc2VudDsgdG8gYWNoaWV2ZSBzdWNoIGFuIGVmZmVjdCwgdXNlIENTUyBbYHdoaXRlLXNwYWNlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3doaXRlLXNwYWNlICJUaGUgd2hpdGUtc3BhY2UgQ1NTIHByb3BlcnR5IHNldHMgaG93IHdoaXRlIHNwYWNlIGluc2lkZSBhbiBlbGVtZW50IGlzIGhhbmRsZWQuIikgaW5zdGVhZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ByZSJ9XX0se25hbWU6ImJsb2NrcXVvdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBibG9ja3F1b3RlIGVsZW1lbnQgcmVwcmVzZW50cyBjb250ZW50IHRoYXQgaXMgcXVvdGVkIGZyb20gYW5vdGhlciBzb3VyY2UsIG9wdGlvbmFsbHkgd2l0aCBhIGNpdGF0aW9uIHdoaWNoIG11c3QgYmUgd2l0aGluIGEgZm9vdGVyIG9yIGNpdGUgZWxlbWVudCwgYW5kIG9wdGlvbmFsbHkgd2l0aCBpbi1saW5lIGNoYW5nZXMgc3VjaCBhcyBhbm5vdGF0aW9ucyBhbmQgYWJicmV2aWF0aW9ucy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBVUkwgdGhhdCBkZXNpZ25hdGVzIGEgc291cmNlIGRvY3VtZW50IG9yIG1lc3NhZ2UgZm9yIHRoZSBpbmZvcm1hdGlvbiBxdW90ZWQuIFRoaXMgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHBvaW50IHRvIGluZm9ybWF0aW9uIGV4cGxhaW5pbmcgdGhlIGNvbnRleHQgb3IgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHF1b3RlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jsb2NrcXVvdGUifV19LHtuYW1lOiJvbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG9sIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpc3Qgb2YgaXRlbXMsIHdoZXJlIHRoZSBpdGVtcyBoYXZlIGJlZW4gaW50ZW50aW9uYWxseSBvcmRlcmVkLCBzdWNoIHRoYXQgY2hhbmdpbmcgdGhlIG9yZGVyIHdvdWxkIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InJldmVyc2VkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhhdCB0aGUgaXRlbXMgb2YgdGhlIGxpc3QgYXJlIHNwZWNpZmllZCBpbiByZXZlcnNlZCBvcmRlci4ifX0se25hbWU6InN0YXJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGludGVnZXIgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgc3RhcnQgdmFsdWUgZm9yIG51bWJlcmluZyB0aGUgaW5kaXZpZHVhbCBsaXN0IGl0ZW1zLiBBbHRob3VnaCB0aGUgb3JkZXJpbmcgdHlwZSBvZiBsaXN0IGVsZW1lbnRzIG1pZ2h0IGJlIFJvbWFuIG51bWVyYWxzLCBzdWNoIGFzIFhYWEksIG9yIGxldHRlcnMsIHRoZSB2YWx1ZSBvZiBzdGFydCBpcyBhbHdheXMgcmVwcmVzZW50ZWQgYXMgYSBudW1iZXIuIFRvIHN0YXJ0IG51bWJlcmluZyBlbGVtZW50cyBmcm9tIHRoZSBsZXR0ZXIgIkMiLCB1c2UgYDxvbCBzdGFydD0iMyI+YC5cblxuKipOb3RlKio6IFRoaXMgYXR0cmlidXRlIHdhcyBkZXByZWNhdGVkIGluIEhUTUw0LCBidXQgcmVpbnRyb2R1Y2VkIGluIEhUTUw1Lid9fSx7bmFtZToidHlwZSIsdmFsdWVTZXQ6Imx0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIG51bWJlcmluZyB0eXBlOlxuXG4qICAgYCdhJ2AgaW5kaWNhdGVzIGxvd2VyY2FzZSBsZXR0ZXJzLFxuKiAgIGAnQSdgIGluZGljYXRlcyB1cHBlcmNhc2UgbGV0dGVycyxcbiogICBgJ2knYCBpbmRpY2F0ZXMgbG93ZXJjYXNlIFJvbWFuIG51bWVyYWxzLFxuKiAgIGAnSSdgIGluZGljYXRlcyB1cHBlcmNhc2UgUm9tYW4gbnVtZXJhbHMsXG4qICAgYW5kIGAnMSdgIGluZGljYXRlcyBudW1iZXJzIChkZWZhdWx0KS5cblxuVGhlIHR5cGUgc2V0IGlzIHVzZWQgZm9yIHRoZSBlbnRpcmUgbGlzdCB1bmxlc3MgYSBkaWZmZXJlbnQgW2B0eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpI2F0dHItdHlwZSkgYXR0cmlidXRlIGlzIHVzZWQgd2l0aGluIGFuIGVuY2xvc2VkIFtgPGxpPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saSBcIlRoZSBIVE1MIDxsaT4gZWxlbWVudCBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbiBpdGVtIGluIGEgbGlzdC4gSXQgbXVzdCBiZSBjb250YWluZWQgaW4gYSBwYXJlbnQgZWxlbWVudDogYW4gb3JkZXJlZCBsaXN0ICg8b2w+KSwgYW4gdW5vcmRlcmVkIGxpc3QgKDx1bD4pLCBvciBhIG1lbnUgKDxtZW51PikuIEluIG1lbnVzIGFuZCB1bm9yZGVyZWQgbGlzdHMsIGxpc3QgaXRlbXMgYXJlIHVzdWFsbHkgZGlzcGxheWVkIHVzaW5nIGJ1bGxldCBwb2ludHMuIEluIG9yZGVyZWQgbGlzdHMsIHRoZXkgYXJlIHVzdWFsbHkgZGlzcGxheWVkIHdpdGggYW4gYXNjZW5kaW5nIGNvdW50ZXIgb24gdGhlIGxlZnQsIHN1Y2ggYXMgYSBudW1iZXIgb3IgbGV0dGVyLlwiKSBlbGVtZW50LlxuXG4qKk5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgd2FzIGRlcHJlY2F0ZWQgaW4gSFRNTDQsIGJ1dCByZWludHJvZHVjZWQgaW4gSFRNTDUuXG5cblVubGVzcyB0aGUgdmFsdWUgb2YgdGhlIGxpc3QgbnVtYmVyIG1hdHRlcnMgKGUuZy4gaW4gbGVnYWwgb3IgdGVjaG5pY2FsIGRvY3VtZW50cyB3aGVyZSBpdGVtcyBhcmUgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGVpciBudW1iZXIvbGV0dGVyKSwgdGhlIENTUyBbYGxpc3Qtc3R5bGUtdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9saXN0LXN0eWxlLXR5cGUgXCJUaGUgbGlzdC1zdHlsZS10eXBlIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJrZXIgKHN1Y2ggYXMgYSBkaXNjLCBjaGFyYWN0ZXIsIG9yIGN1c3RvbSBjb3VudGVyIHN0eWxlKSBvZiBhIGxpc3QgaXRlbSBlbGVtZW50LlwiKSBwcm9wZXJ0eSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiJ9fSx7bmFtZToiY29tcGFjdCIsZGVzY3JpcHRpb246J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaGludHMgdGhhdCB0aGUgbGlzdCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYSBjb21wYWN0IHN0eWxlLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBhdHRyaWJ1dGUgZGVwZW5kcyBvbiB0aGUgdXNlciBhZ2VudCBhbmQgaXQgZG9lc25cJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMuXG5cbioqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkOiB0aGUgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKS4gVG8gZ2l2ZSBhbiBlZmZlY3Qgc2ltaWxhciB0byB0aGUgYGNvbXBhY3RgIGF0dHJpYnV0ZSwgdGhlIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKSBwcm9wZXJ0eSBbYGxpbmUtaGVpZ2h0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0ICJUaGUgbGluZS1oZWlnaHQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBsaW5lcywgc3VjaCBhcyBpbiB0ZXh0LiBPbiBibG9jay1sZXZlbCBlbGVtZW50cywgaXQgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBsaW5lIGJveGVzIHdpdGhpbiB0aGUgZWxlbWVudC4gT24gbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cywgaXQgc3BlY2lmaWVzIHRoZSBoZWlnaHQgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBsaW5lIGJveCBoZWlnaHQuIikgY2FuIGJlIHVzZWQgd2l0aCBhIHZhbHVlIG9mIGA4MCVgLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wifV19LHtuYW1lOiJ1bCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpc3Qgb2YgaXRlbXMsIHdoZXJlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgaXMgbm90IGltcG9ydGFudCDigJQgdGhhdCBpcywgd2hlcmUgY2hhbmdpbmcgdGhlIG9yZGVyIHdvdWxkIG5vdCBtYXRlcmlhbGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImNvbXBhY3QiLGRlc2NyaXB0aW9uOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGhpbnRzIHRoYXQgdGhlIGxpc3Qgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgY29tcGFjdCBzdHlsZS4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgYXR0cmlidXRlIGRlcGVuZHMgb24gdGhlIHVzZXIgYWdlbnQgYW5kIGl0IGRvZXNuXCd0IHdvcmsgaW4gYWxsIGJyb3dzZXJzLlxuXG4qKlVzYWdlIG5vdGU6wqAqKkRvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHRoZSBbYDx1bD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdWwgIlRoZSBIVE1MIDx1bD4gZWxlbWVudCByZXByZXNlbnRzIGFuIHVub3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBidWxsZXRlZCBsaXN0LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGdpdmUgYSBzaW1pbGFyIGVmZmVjdCBhcyB0aGUgYGNvbXBhY3RgIGF0dHJpYnV0ZSwgdGhlIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKSBwcm9wZXJ0eSBbbGluZS1oZWlnaHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2xpbmUtaGVpZ2h0KSBjYW4gYmUgdXNlZCB3aXRoIGEgdmFsdWUgb2YgYDgwJWAuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCJ9XX0se25hbWU6ImxpIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbGkgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBpdGVtLiBJZiBpdHMgcGFyZW50IGVsZW1lbnQgaXMgYW4gb2wsIHVsLCBvciBtZW51IGVsZW1lbnQsIHRoZW4gdGhlIGVsZW1lbnQgaXMgYW4gaXRlbSBvZiB0aGUgcGFyZW50IGVsZW1lbnQncyBsaXN0LCBhcyBkZWZpbmVkIGZvciB0aG9zZSBlbGVtZW50cy4gT3RoZXJ3aXNlLCB0aGUgbGlzdCBpdGVtIGhhcyBubyBkZWZpbmVkIGxpc3QtcmVsYXRlZCByZWxhdGlvbnNoaXAgdG8gYW55IG90aGVyIGxpIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGludGVnZXIgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgY3VycmVudCBvcmRpbmFsIHZhbHVlIG9mIHRoZSBsaXN0IGl0ZW0gYXMgZGVmaW5lZCBieSB0aGUgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudC4gVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSBmb3IgdGhpcyBhdHRyaWJ1dGUgaXMgYSBudW1iZXIsIGV2ZW4gaWYgdGhlIGxpc3QgaXMgZGlzcGxheWVkIHdpdGggUm9tYW4gbnVtZXJhbHMgb3IgbGV0dGVycy4gTGlzdCBpdGVtcyB0aGF0IGZvbGxvdyB0aGlzIG9uZSBjb250aW51ZSBudW1iZXJpbmcgZnJvbSB0aGUgdmFsdWUgc2V0LiBUaGUgKip2YWx1ZSoqIGF0dHJpYnV0ZSBoYXMgbm8gbWVhbmluZyBmb3IgdW5vcmRlcmVkIGxpc3RzIChbYDx1bD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdWwgIlRoZSBIVE1MIDx1bD4gZWxlbWVudCByZXByZXNlbnRzIGFuIHVub3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBidWxsZXRlZCBsaXN0LiIpKSBvciBmb3IgbWVudXMgKFtgPG1lbnU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21lbnUgIlRoZSBIVE1MIDxtZW51PiBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBjb21tYW5kcyB0aGF0IGEgdXNlciBjYW4gcGVyZm9ybSBvciBhY3RpdmF0ZS4gVGhpcyBpbmNsdWRlcyBib3RoIGxpc3QgbWVudXMsIHdoaWNoIG1pZ2h0IGFwcGVhciBhY3Jvc3MgdGhlIHRvcCBvZiBhIHNjcmVlbiwgYXMgd2VsbCBhcyBjb250ZXh0IG1lbnVzLCBzdWNoIGFzIHRob3NlIHRoYXQgbWlnaHQgYXBwZWFyIHVuZGVybmVhdGggYSBidXR0b24gYWZ0ZXIgaXQgaGFzIGJlZW4gY2xpY2tlZC4iKSkuXG5cbioqTm90ZSoqOiBUaGlzIGF0dHJpYnV0ZSB3YXMgZGVwcmVjYXRlZCBpbiBIVE1MNCwgYnV0IHJlaW50cm9kdWNlZCBpbiBIVE1MNS5cblxuKipOb3RlOioqIFByaW9yIHRvIEdlY2tvwqA5LjAsIG5lZ2F0aXZlIHZhbHVlcyB3ZXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCB0byAwLiBTdGFydGluZyBpbiBHZWNrb8KgOS4wIGFsbCBpbnRlZ2VyIHZhbHVlcyBhcmUgY29ycmVjdGx5IHBhcnNlZC4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOidUaGlzIGNoYXJhY3RlciBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBudW1iZXJpbmcgdHlwZTpcblxuKiAgIGBhYDogbG93ZXJjYXNlIGxldHRlcnNcbiogICBgQWA6IHVwcGVyY2FzZSBsZXR0ZXJzXG4qICAgYGlgOiBsb3dlcmNhc2UgUm9tYW4gbnVtZXJhbHNcbiogICBgSWA6IHVwcGVyY2FzZSBSb21hbiBudW1lcmFsc1xuKiAgIGAxYDogbnVtYmVyc1xuXG5UaGlzIHR5cGUgb3ZlcnJpZGVzIHRoZSBvbmUgdXNlZCBieSBpdHMgcGFyZW50IFtgPG9sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCAiVGhlIEhUTUwgPG9sPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBudW1iZXJlZCBsaXN0LiIpIGVsZW1lbnQsIGlmIGFueS5cblxuKipVc2FnZSBub3RlOioqIFRoaXMgYXR0cmlidXRlIGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHVzZSB0aGUgQ1NTIFtgbGlzdC1zdHlsZS10eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpc3Qtc3R5bGUtdHlwZSAiVGhlIGxpc3Qtc3R5bGUtdHlwZSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFya2VyIChzdWNoIGFzIGEgZGlzYywgY2hhcmFjdGVyLCBvciBjdXN0b20gY291bnRlciBzdHlsZSkgb2YgYSBsaXN0IGl0ZW0gZWxlbWVudC4iKSBwcm9wZXJ0eSBpbnN0ZWFkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGkifV19LHtuYW1lOiJkbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRsIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBhc3NvY2lhdGlvbiBsaXN0IGNvbnNpc3Rpbmcgb2YgemVybyBvciBtb3JlIG5hbWUtdmFsdWUgZ3JvdXBzIChhIGRlc2NyaXB0aW9uIGxpc3QpLiBBIG5hbWUtdmFsdWUgZ3JvdXAgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbmFtZXMgKGR0IGVsZW1lbnRzKSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB2YWx1ZXMgKGRkIGVsZW1lbnRzKSwgaWdub3JpbmcgYW55IG5vZGVzIG90aGVyIHRoYW4gZHQgYW5kIGRkIGVsZW1lbnRzLiBXaXRoaW4gYSBzaW5nbGUgZGwgZWxlbWVudCwgdGhlcmUgc2hvdWxkIG5vdCBiZSBtb3JlIHRoYW4gb25lIGR0IGVsZW1lbnQgZm9yIGVhY2ggbmFtZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kbCJ9XX0se25hbWU6ImR0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZHQgZWxlbWVudCByZXByZXNlbnRzIHRoZSB0ZXJtLCBvciBuYW1lLCBwYXJ0IG9mIGEgdGVybS1kZXNjcmlwdGlvbiBncm91cCBpbiBhIGRlc2NyaXB0aW9uIGxpc3QgKGRsIGVsZW1lbnQpLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2R0In1dfSx7bmFtZToiZGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGRlc2NyaXB0aW9uLCBkZWZpbml0aW9uLCBvciB2YWx1ZSwgcGFydCBvZiBhIHRlcm0tZGVzY3JpcHRpb24gZ3JvdXAgaW4gYSBkZXNjcmlwdGlvbiBsaXN0IChkbCBlbGVtZW50KS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibm93cmFwIixkZXNjcmlwdGlvbjoiSWYgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byBgeWVzYCwgdGhlIGRlZmluaXRpb24gdGV4dCB3aWxsIG5vdCB3cmFwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbm9gLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGQifV19LHtuYW1lOiJmaWd1cmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWd1cmUgZWxlbWVudCByZXByZXNlbnRzIHNvbWUgZmxvdyBjb250ZW50LCBvcHRpb25hbGx5IHdpdGggYSBjYXB0aW9uLCB0aGF0IGlzIHNlbGYtY29udGFpbmVkIChsaWtlIGEgY29tcGxldGUgc2VudGVuY2UpIGFuZCBpcyB0eXBpY2FsbHkgcmVmZXJlbmNlZCBhcyBhIHNpbmdsZSB1bml0IGZyb20gdGhlIG1haW4gZmxvdyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmlndXJlIn1dfSx7bmFtZToiZmlnY2FwdGlvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpZ2NhcHRpb24gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBvciBsZWdlbmQgZm9yIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlnY2FwdGlvbiBlbGVtZW50J3MgcGFyZW50IGZpZ3VyZSBlbGVtZW50LCBpZiBhbnkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmlnY2FwdGlvbiJ9XX0se25hbWU6Im1haW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYWluIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbWFpbiBjb250ZW50IG9mIHRoZSBib2R5IG9mIGEgZG9jdW1lbnQgb3IgYXBwbGljYXRpb24uIFRoZSBtYWluIGNvbnRlbnQgYXJlYSBjb25zaXN0cyBvZiBjb250ZW50IHRoYXQgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBvciBleHBhbmRzIHVwb24gdGhlIGNlbnRyYWwgdG9waWMgb2YgYSBkb2N1bWVudCBvciBjZW50cmFsIGZ1bmN0aW9uYWxpdHkgb2YgYW4gYXBwbGljYXRpb24uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFpbiJ9XX0se25hbWU6ImRpdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRpdiBlbGVtZW50IGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYXQgYWxsLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4gSXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgY2xhc3MsIGxhbmcsIGFuZCB0aXRsZSBhdHRyaWJ1dGVzIHRvIG1hcmsgdXAgc2VtYW50aWNzIGNvbW1vbiB0byBhIGdyb3VwIG9mIGNvbnNlY3V0aXZlIGVsZW1lbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpdiJ9XX0se25hbWU6ImEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoZSBhIGVsZW1lbnQgaGFzIGFuIGhyZWYgYXR0cmlidXRlLCB0aGVuIGl0IHJlcHJlc2VudHMgYSBoeXBlcmxpbmsgKGEgaHlwZXJ0ZXh0IGFuY2hvcikgbGFiZWxlZCBieSBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbe25hbWU6ImhyZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkNvbnRhaW5zIGEgVVJMIG9yIGEgVVJMIGZyYWdtZW50IHRoYXQgdGhlIGh5cGVybGluayBwb2ludHMgdG8uIn19LHtuYW1lOiJ0YXJnZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NwZWNpZmllcyB3aGVyZSB0byBkaXNwbGF5IHRoZSBsaW5rZWQgVVJMLiBJdCBpcyBhIG5hbWUgb2YsIG9yIGtleXdvcmQgZm9yLCBhIF9icm93c2luZyBjb250ZXh0XzogYSB0YWIsIHdpbmRvdywgb3IgYDxpZnJhbWU+YC4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSBVUkwgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgVVJMIGludG8gYSBuZXcgYnJvd3NpbmcgY29udGV4dC4gVGhpcyBpcyB1c3VhbGx5IGEgdGFiLCBidXQgdXNlcnMgY2FuIGNvbmZpZ3VyZSBicm93c2VycyB0byB1c2UgbmV3IHdpbmRvd3MgaW5zdGVhZC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIFVSTCBpbnRvIHRoZSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogTG9hZCB0aGUgVVJMIGludG8gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0ICh0aGF0IGlzLCB0aGUgImhpZ2hlc3QiIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG5cbioqTm90ZToqKiBXaGVuIHVzaW5nIGB0YXJnZXRgLCBjb25zaWRlciBhZGRpbmcgYHJlbD0ibm9yZWZlcnJlciJgIHRvIGF2b2lkIGV4cGxvaXRhdGlvbiBvZiB0aGUgYHdpbmRvdy5vcGVuZXJgIEFQSS5cblxuKipOb3RlOioqIExpbmtpbmcgdG8gYW5vdGhlciBwYWdlIHVzaW5nIGB0YXJnZXQ9Il9ibGFuayJgIHdpbGwgcnVuIHRoZSBuZXcgcGFnZSBvbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHlvdXIgcGFnZS4gSWYgdGhlIG5ldyBwYWdlIGlzIGV4ZWN1dGluZyBleHBlbnNpdmUgSlMsIHlvdXIgcGFnZVwncyBwZXJmb3JtYW5jZSBtYXkgc3VmZmVyLiBUbyBhdm9pZCB0aGlzIHVzZSBgcmVsPSJub29wZW5lciJgLid9fSx7bmFtZToiZG93bmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluc3RydWN0cyBicm93c2VycyB0byBkb3dubG9hZCBhIFVSTCBpbnN0ZWFkIG9mIG5hdmlnYXRpbmcgdG8gaXQsIHNvIHRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgdG8gc2F2ZSBpdCBhcyBhIGxvY2FsIGZpbGUuIElmIHRoZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUsIGl0IGlzIHVzZWQgYXMgdGhlIHByZS1maWxsZWQgZmlsZSBuYW1lIGluIHRoZSBTYXZlIHByb21wdCAodGhlIHVzZXIgY2FuIHN0aWxsIGNoYW5nZSB0aGUgZmlsZSBuYW1lIGlmIHRoZXkgd2FudCkuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gYWxsb3dlZCB2YWx1ZXMsIHRob3VnaCBgL2AgYW5kIGBcXGAgYXJlIGNvbnZlcnRlZCB0byB1bmRlcnNjb3Jlcy4gTW9zdCBmaWxlIHN5c3RlbXMgbGltaXQgc29tZSBwdW5jdHVhdGlvbiBpbiBmaWxlIG5hbWVzLCBhbmQgYnJvd3NlcnMgd2lsbCBhZGp1c3QgdGhlIHN1Z2dlc3RlZCBuYW1lIGFjY29yZGluZ2x5LlxuXG4qKk5vdGVzOioqXG5cbiogICBUaGlzIGF0dHJpYnV0ZSBvbmx5IHdvcmtzIGZvciBbc2FtZS1vcmlnaW4gVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5KS5cbiogICBBbHRob3VnaCBIVFRQKHMpIFVSTHMgbmVlZCB0byBiZSBpbiB0aGUgc2FtZS1vcmlnaW4sIFtgYmxvYjpgIFVSTHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwuY3JlYXRlT2JqZWN0VVJMKSBhbmQgW2BkYXRhOmAgVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXMpIGFyZSBhbGxvd2VkIHNvIHRoYXQgY29udGVudCBnZW5lcmF0ZWQgYnkgSmF2YVNjcmlwdCwgc3VjaCBhcyBwaWN0dXJlcyBjcmVhdGVkIGluIGFuIGltYWdlLWVkaXRvciBXZWIgYXBwLCBjYW4gYmUgZG93bmxvYWRlZC5cbiogICBJZiB0aGUgSFRUUCBoZWFkZXIgW2BDb250ZW50LURpc3Bvc2l0aW9uOmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LURpc3Bvc2l0aW9uKSBnaXZlcyBhIGRpZmZlcmVudCBmaWxlbmFtZSB0aGFuIHRoaXMgYXR0cmlidXRlLCB0aGUgSFRUUCBoZWFkZXIgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGlzIGF0dHJpYnV0ZS5cbiogICBJZiBgQ29udGVudC1EaXNwb3NpdGlvbjpgIGlzIHNldCB0byBgaW5saW5lYCwgRmlyZWZveCBwcmlvcml0aXplcyBgQ29udGVudC1EaXNwb3NpdGlvbmAsIGxpa2UgdGhlIGZpbGVuYW1lIGNhc2UsIHdoaWxlIENocm9tZSBwcmlvcml0aXplcyB0aGUgYGRvd25sb2FkYCBhdHRyaWJ1dGUuIn19LHtuYW1lOiJwaW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidDb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgdG8gd2hpY2gsIHdoZW4gdGhlIGh5cGVybGluayBpcyBmb2xsb3dlZCwgW2BQT1NUYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9NZXRob2RzL1BPU1QgIlRoZSBIVFRQIFBPU1QgbWV0aG9kIHNlbmRzIGRhdGEgdG8gdGhlIHNlcnZlci4gVGhlIHR5cGUgb2YgdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QgaXMgaW5kaWNhdGVkIGJ5IHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLiIpIHJlcXVlc3RzIHdpdGggdGhlIGJvZHkgYFBJTkdgIHdpbGwgYmUgc2VudCBieSB0aGUgYnJvd3NlciAoaW4gdGhlIGJhY2tncm91bmQpLiBUeXBpY2FsbHkgdXNlZCBmb3IgdHJhY2tpbmcuJ319LHtuYW1lOiJyZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlNwZWNpZmllcyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZSB0YXJnZXQgb2JqZWN0IHRvIHRoZSBsaW5rIG9iamVjdC4gVGhlIHZhbHVlIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgW2xpbmsgdHlwZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvTGlua190eXBlcykuIn19LHtuYW1lOiJocmVmbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBodW1hbiBsYW5ndWFnZSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnksIHdpdGggbm8gYnVpbHQtaW4gZnVuY3Rpb25hbGl0eS4gQWxsb3dlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgW0JDUDQ3XShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dCAiVGFncyBmb3IgSWRlbnRpZnlpbmcgTGFuZ3VhZ2VzIikuJ319LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgaW4gdGhlIGZvcm0gb2YgYSBbTUlNRSB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L01JTUVfdHlwZSAiTUlNRSB0eXBlOiBBwqBNSU1FIHR5cGXCoChub3cgcHJvcGVybHkgY2FsbGVkICJtZWRpYSB0eXBlIiwgYnV0wqBhbHNvIHNvbWV0aW1lcyAiY29udGVudCB0eXBlIikgaXMgYSBzdHJpbmcgc2VudCBhbG9uZ8Kgd2l0aCBhIGZpbGUgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiB0aGUgZmlsZSAoZGVzY3JpYmluZyB0aGUgY29udGVudCBmb3JtYXQsIGZvciBleGFtcGxlLCBhIHNvdW5kIGZpbGUgbWlnaHQgYmUgbGFiZWxlZMKgYXVkaW8vb2dnLCBvciBhbiBpbWFnZSBmaWxlwqBpbWFnZS9wbmcpLiIpIGZvciB0aGUgbGlua2VkIFVSTC4gSXQgaXMgcHVyZWx5IGFkdmlzb3J5LCB3aXRoIG5vIGJ1aWx0LWluIGZ1bmN0aW9uYWxpdHkuJ319LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB3aGljaCBbcmVmZXJyZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIFVSTDpcblxuKiAgIGAnbm8tcmVmZXJyZXInYCBtZWFucyB0aGUgYFJlZmVyZXI6YCBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJ2AgbWVhbnMgbm8gYFJlZmVyZXI6YCBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBIVFRQUy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiogICBgJ29yaWdpbidgIG1lYW5zIHRoZSByZWZlcnJlciB3aWxsIGJlIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgb2YgdGhlIHBhZ2UsIG5vdCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWZ0ZXIgdGhlIGRvbWFpbi5cbiogICBgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidgIG1lYW5pbmcgdGhhdCBuYXZpZ2F0aW9ucyB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQsIHdoaWxlIG5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyJ3MgcGF0aC5cbiogICBgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nYFxuKiAgIGAndW5zYWZlLXVybCdgIG1lYW5zIHRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgcGF0aCwgYnV0IG5vdCB0aGUgZnJhZ21lbnQsIHBhc3N3b3JkLCBvciB1c2VybmFtZS4gVGhpcyBpcyB1bnNhZmUgYmVjYXVzZSBpdCBjYW4gbGVhayBkYXRhIGZyb20gc2VjdXJlIFVSTHMgdG8gaW5zZWN1cmUgb25lcy4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EifV19LHtuYW1lOiJlbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGVtIGVsZW1lbnQgcmVwcmVzZW50cyBzdHJlc3MgZW1waGFzaXMgb2YgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2VtIn1dfSx7bmFtZToic3Ryb25nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3Ryb25nIGVsZW1lbnQgcmVwcmVzZW50cyBzdHJvbmcgaW1wb3J0YW5jZSwgc2VyaW91c25lc3MsIG9yIHVyZ2VuY3kgZm9yIGl0cyBjb250ZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdHJvbmcifV19LHtuYW1lOiJzbWFsbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNtYWxsIGVsZW1lbnQgcmVwcmVzZW50cyBzaWRlIGNvbW1lbnRzIHN1Y2ggYXMgc21hbGwgcHJpbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc21hbGwifV19LHtuYW1lOiJzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcyBlbGVtZW50IHJlcHJlc2VudHMgY29udGVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGFjY3VyYXRlIG9yIG5vIGxvbmdlciByZWxldmFudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zIn1dfSx7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNpdGUgZWxlbWVudCByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGEgY3JlYXRpdmUgd29yay4gSXQgbXVzdCBpbmNsdWRlIHRoZSB0aXRsZSBvZiB0aGUgd29yayBvciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yKHBlcnNvbiwgcGVvcGxlIG9yIG9yZ2FuaXphdGlvbikgb3IgYW4gVVJMIHJlZmVyZW5jZSwgb3IgYSByZWZlcmVuY2UgaW4gYWJicmV2aWF0ZWQgZm9ybSBhcyBwZXIgdGhlIGNvbnZlbnRpb25zIHVzZWQgZm9yIHRoZSBhZGRpdGlvbiBvZiBjaXRhdGlvbiBtZXRhZGF0YS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jaXRlIn1dfSx7bmFtZToicSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHEgZWxlbWVudCByZXByZXNlbnRzIHNvbWUgcGhyYXNpbmcgY29udGVudCBxdW90ZWQgZnJvbSBhbm90aGVyIHNvdXJjZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGEgVVJMIHRoYXQgZGVzaWduYXRlcyBhIHNvdXJjZSBkb2N1bWVudCBvciBtZXNzYWdlIGZvciB0aGUgaW5mb3JtYXRpb24gcXVvdGVkLiBUaGlzIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCB0byBwb2ludCB0byBpbmZvcm1hdGlvbiBleHBsYWluaW5nIHRoZSBjb250ZXh0IG9yIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBxdW90ZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9xIn1dfSx7bmFtZToiZGZuIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGZuIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZGVmaW5pbmcgaW5zdGFuY2Ugb2YgYSB0ZXJtLiBUaGUgcGFyYWdyYXBoLCBkZXNjcmlwdGlvbiBsaXN0IGdyb3VwLCBvciBzZWN0aW9uIHRoYXQgaXMgdGhlIG5lYXJlc3QgYW5jZXN0b3Igb2YgdGhlIGRmbiBlbGVtZW50IG11c3QgYWxzbyBjb250YWluIHRoZSBkZWZpbml0aW9uKHMpIGZvciB0aGUgdGVybSBnaXZlbiBieSB0aGUgZGZuIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGZuIn1dfSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFiYnIgZWxlbWVudCByZXByZXNlbnRzIGFuIGFiYnJldmlhdGlvbiBvciBhY3JvbnltLCBvcHRpb25hbGx5IHdpdGggaXRzIGV4cGFuc2lvbi4gVGhlIHRpdGxlIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGFuIGV4cGFuc2lvbiBvZiB0aGUgYWJicmV2aWF0aW9uLiBUaGUgYXR0cmlidXRlLCBpZiBzcGVjaWZpZWQsIG11c3QgY29udGFpbiBhbiBleHBhbnNpb24gb2YgdGhlIGFiYnJldmlhdGlvbiwgYW5kIG5vdGhpbmcgZWxzZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hYmJyIn1dfSx7bmFtZToicnVieSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJ1YnkgZWxlbWVudCBhbGxvd3Mgb25lIG9yIG1vcmUgc3BhbnMgb2YgcGhyYXNpbmcgY29udGVudCB0byBiZSBtYXJrZWQgd2l0aCBydWJ5IGFubm90YXRpb25zLiBSdWJ5IGFubm90YXRpb25zIGFyZSBzaG9ydCBydW5zIG9mIHRleHQgcHJlc2VudGVkIGFsb25nc2lkZSBiYXNlIHRleHQsIHByaW1hcmlseSB1c2VkIGluIEVhc3QgQXNpYW4gdHlwb2dyYXBoeSBhcyBhIGd1aWRlIGZvciBwcm9udW5jaWF0aW9uIG9yIHRvIGluY2x1ZGUgb3RoZXIgYW5ub3RhdGlvbnMuIEluIEphcGFuZXNlLCB0aGlzIGZvcm0gb2YgdHlwb2dyYXBoeSBpcyBhbHNvIGtub3duIGFzIGZ1cmlnYW5hLiBSdWJ5IHRleHQgY2FuIGFwcGVhciBvbiBlaXRoZXIgc2lkZSwgYW5kIHNvbWV0aW1lcyBib3RoIHNpZGVzLCBvZiB0aGUgYmFzZSB0ZXh0LCBhbmQgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgcG9zaXRpb24gdXNpbmcgQ1NTLiBBIG1vcmUgY29tcGxldGUgaW50cm9kdWN0aW9uIHRvIHJ1YnkgY2FuIGJlIGZvdW5kIGluIHRoZSBVc2UgQ2FzZXMgJiBFeHBsb3JhdG9yeSBBcHByb2FjaGVzIGZvciBSdWJ5IE1hcmt1cCBkb2N1bWVudCBhcyB3ZWxsIGFzIGluIENTUyBSdWJ5IE1vZHVsZSBMZXZlbCAxLiBbUlVCWS1VQ10gW0NTU1JVQlldIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnVieSJ9XX0se25hbWU6InJiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcmIgZWxlbWVudCBtYXJrcyB0aGUgYmFzZSB0ZXh0IGNvbXBvbmVudCBvZiBhIHJ1YnkgYW5ub3RhdGlvbi4gV2hlbiBpdCBpcyB0aGUgY2hpbGQgb2YgYSBydWJ5IGVsZW1lbnQsIGl0IGRvZXNuJ3QgcmVwcmVzZW50IGFueXRoaW5nIGl0c2VsZiwgYnV0IGl0cyBwYXJlbnQgcnVieSBlbGVtZW50IHVzZXMgaXQgYXMgcGFydCBvZiBkZXRlcm1pbmluZyB3aGF0IGl0IHJlcHJlc2VudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcmIifV19LHtuYW1lOiJydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJ0IGVsZW1lbnQgbWFya3MgdGhlIHJ1YnkgdGV4dCBjb21wb25lbnQgb2YgYSBydWJ5IGFubm90YXRpb24uIFdoZW4gaXQgaXMgdGhlIGNoaWxkIG9mIGEgcnVieSBlbGVtZW50IG9yIG9mIGFuIHJ0YyBlbGVtZW50IHRoYXQgaXMgaXRzZWxmIHRoZSBjaGlsZCBvZiBhIHJ1YnkgZWxlbWVudCwgaXQgZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcgaXRzZWxmLCBidXQgaXRzIGFuY2VzdG9yIHJ1YnkgZWxlbWVudCB1c2VzIGl0IGFzIHBhcnQgb2YgZGV0ZXJtaW5pbmcgd2hhdCBpdCByZXByZXNlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3J0In1dfSx7bmFtZToicnAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBycCBlbGVtZW50IGlzIHVzZWQgdG8gcHJvdmlkZSBmYWxsYmFjayB0ZXh0IHRvIGJlIHNob3duIGJ5IHVzZXIgYWdlbnRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBydWJ5IGFubm90YXRpb25zLiBPbmUgd2lkZXNwcmVhZCBjb252ZW50aW9uIGlzIHRvIHByb3ZpZGUgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBydWJ5IHRleHQgY29tcG9uZW50IG9mIGEgcnVieSBhbm5vdGF0aW9uLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3JwIn1dfSx7bmFtZToidGltZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgZWxlbWVudCByZXByZXNlbnRzIGl0cyBjb250ZW50cywgYWxvbmcgd2l0aCBhIG1hY2hpbmUtcmVhZGFibGUgZm9ybSBvZiB0aG9zZSBjb250ZW50cyBpbiB0aGUgZGF0ZXRpbWUgYXR0cmlidXRlLiBUaGUga2luZCBvZiBjb250ZW50IGlzIGxpbWl0ZWQgdG8gdmFyaW91cyBraW5kcyBvZiBkYXRlcywgdGltZXMsIHRpbWUtem9uZSBvZmZzZXRzLCBhbmQgZHVyYXRpb25zLCBhcyBkZXNjcmliZWQgYmVsb3cuIn0sYXR0cmlidXRlczpbe25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHRpbWUgYW5kL29yIGRhdGUgb2YgdGhlIGVsZW1lbnQgYW5kIG11c3QgYmUgaW4gb25lIG9mIHRoZSBmb3JtYXRzIGRlc2NyaWJlZCBiZWxvdy4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aW1lIn1dfSx7bmFtZToiY29kZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvZGUgZWxlbWVudCByZXByZXNlbnRzIGEgZnJhZ21lbnQgb2YgY29tcHV0ZXIgY29kZS4gVGhpcyBjb3VsZCBiZSBhbiBYTUwgZWxlbWVudCBuYW1lLCBhIGZpbGUgbmFtZSwgYSBjb21wdXRlciBwcm9ncmFtLCBvciBhbnkgb3RoZXIgc3RyaW5nIHRoYXQgYSBjb21wdXRlciB3b3VsZCByZWNvZ25pemUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29kZSJ9XX0se25hbWU6InZhciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZhciBlbGVtZW50IHJlcHJlc2VudHMgYSB2YXJpYWJsZS4gVGhpcyBjb3VsZCBiZSBhbiBhY3R1YWwgdmFyaWFibGUgaW4gYSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiBvciBwcm9ncmFtbWluZyBjb250ZXh0LCBhbiBpZGVudGlmaWVyIHJlcHJlc2VudGluZyBhIGNvbnN0YW50LCBhIHN5bWJvbCBpZGVudGlmeWluZyBhIHBoeXNpY2FsIHF1YW50aXR5LCBhIGZ1bmN0aW9uIHBhcmFtZXRlciwgb3IganVzdCBiZSBhIHRlcm0gdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGluIHByb3NlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ZhciJ9XX0se25hbWU6InNhbXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzYW1wIGVsZW1lbnQgcmVwcmVzZW50cyBzYW1wbGUgb3IgcXVvdGVkIG91dHB1dCBmcm9tIGFub3RoZXIgcHJvZ3JhbSBvciBjb21wdXRpbmcgc3lzdGVtLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NhbXAifV19LHtuYW1lOiJrYmQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBrYmQgZWxlbWVudCByZXByZXNlbnRzIHVzZXIgaW5wdXQgKHR5cGljYWxseSBrZXlib2FyZCBpbnB1dCwgYWx0aG91Z2ggaXQgbWF5IGFsc28gYmUgdXNlZCB0byByZXByZXNlbnQgb3RoZXIgaW5wdXQsIHN1Y2ggYXMgdm9pY2UgY29tbWFuZHMpLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2tiZCJ9XX0se25hbWU6InN1YiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1YiBlbGVtZW50IHJlcHJlc2VudHMgYSBzdWJzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3ViIn1dfSx7bmFtZToic3VwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIHN1cGVyc2NyaXB0LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N1cCJ9XX0se25hbWU6ImkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNwYW4gb2YgdGV4dCBpbiBhbiBhbHRlcm5hdGUgdm9pY2Ugb3IgbW9vZCwgb3Igb3RoZXJ3aXNlIG9mZnNldCBmcm9tIHRoZSBub3JtYWwgcHJvc2UgaW4gYSBtYW5uZXIgaW5kaWNhdGluZyBhIGRpZmZlcmVudCBxdWFsaXR5IG9mIHRleHQsIHN1Y2ggYXMgYSB0YXhvbm9taWMgZGVzaWduYXRpb24sIGEgdGVjaG5pY2FsIHRlcm0sIGFuIGlkaW9tYXRpYyBwaHJhc2UgZnJvbSBhbm90aGVyIGxhbmd1YWdlLCB0cmFuc2xpdGVyYXRpb24sIGEgdGhvdWdodCwgb3IgYSBzaGlwIG5hbWUgaW4gV2VzdGVybiB0ZXh0cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pIn1dfSx7bmFtZToiYiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGIgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHRvIHdoaWNoIGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biBmb3IgdXRpbGl0YXJpYW4gcHVycG9zZXMgd2l0aG91dCBjb252ZXlpbmcgYW55IGV4dHJhIGltcG9ydGFuY2UgYW5kIHdpdGggbm8gaW1wbGljYXRpb24gb2YgYW4gYWx0ZXJuYXRlIHZvaWNlIG9yIG1vb2QsIHN1Y2ggYXMga2V5IHdvcmRzIGluIGEgZG9jdW1lbnQgYWJzdHJhY3QsIHByb2R1Y3QgbmFtZXMgaW4gYSByZXZpZXcsIGFjdGlvbmFibGUgd29yZHMgaW4gaW50ZXJhY3RpdmUgdGV4dC1kcml2ZW4gc29mdHdhcmUsIG9yIGFuIGFydGljbGUgbGVkZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iIn1dfSx7bmFtZToidSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHUgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHdpdGggYW4gdW5hcnRpY3VsYXRlZCwgdGhvdWdoIGV4cGxpY2l0bHkgcmVuZGVyZWQsIG5vbi10ZXh0dWFsIGFubm90YXRpb24sIHN1Y2ggYXMgbGFiZWxpbmcgdGhlIHRleHQgYXMgYmVpbmcgYSBwcm9wZXIgbmFtZSBpbiBDaGluZXNlIHRleHQgKGEgQ2hpbmVzZSBwcm9wZXIgbmFtZSBtYXJrKSwgb3IgbGFiZWxpbmcgdGhlIHRleHQgYXMgYmVpbmcgbWlzc3BlbHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdSJ9XX0se25hbWU6Im1hcmsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXJrIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJ1biBvZiB0ZXh0IGluIG9uZSBkb2N1bWVudCBtYXJrZWQgb3IgaGlnaGxpZ2h0ZWQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcywgZHVlIHRvIGl0cyByZWxldmFuY2UgaW4gYW5vdGhlciBjb250ZXh0LiBXaGVuIHVzZWQgaW4gYSBxdW90YXRpb24gb3Igb3RoZXIgYmxvY2sgb2YgdGV4dCByZWZlcnJlZCB0byBmcm9tIHRoZSBwcm9zZSwgaXQgaW5kaWNhdGVzIGEgaGlnaGxpZ2h0IHRoYXQgd2FzIG5vdCBvcmlnaW5hbGx5IHByZXNlbnQgYnV0IHdoaWNoIGhhcyBiZWVuIGFkZGVkIHRvIGJyaW5nIHRoZSByZWFkZXIncyBhdHRlbnRpb24gdG8gYSBwYXJ0IG9mIHRoZSB0ZXh0IHRoYXQgbWlnaHQgbm90IGhhdmUgYmVlbiBjb25zaWRlcmVkIGltcG9ydGFudCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yIHdoZW4gdGhlIGJsb2NrIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4sIGJ1dCB3aGljaCBpcyBub3cgdW5kZXIgcHJldmlvdXNseSB1bmV4cGVjdGVkIHNjcnV0aW55LiBXaGVuIHVzZWQgaW4gdGhlIG1haW4gcHJvc2Ugb2YgYSBkb2N1bWVudCwgaXQgaW5kaWNhdGVzIGEgcGFydCBvZiB0aGUgZG9jdW1lbnQgdGhhdCBoYXMgYmVlbiBoaWdobGlnaHRlZCBkdWUgdG8gaXRzIGxpa2VseSByZWxldmFuY2UgdG8gdGhlIHVzZXIncyBjdXJyZW50IGFjdGl2aXR5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcmsifV19LHtuYW1lOiJiZGkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiZGkgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHRoYXQgaXMgdG8gYmUgaXNvbGF0ZWQgZnJvbSBpdHMgc3Vycm91bmRpbmdzIGZvciB0aGUgcHVycG9zZXMgb2YgYmlkaXJlY3Rpb25hbCB0ZXh0IGZvcm1hdHRpbmcuIFtCSURJXSJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JkaSJ9XX0se25hbWU6ImJkbyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJkbyBlbGVtZW50IHJlcHJlc2VudHMgZXhwbGljaXQgdGV4dCBkaXJlY3Rpb25hbGl0eSBmb3JtYXR0aW5nIGNvbnRyb2wgZm9yIGl0cyBjaGlsZHJlbi4gSXQgYWxsb3dzIGF1dGhvcnMgdG8gb3ZlcnJpZGUgdGhlIFVuaWNvZGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0gYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGEgZGlyZWN0aW9uIG92ZXJyaWRlLiBbQklESV0ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlyIixkZXNjcmlwdGlvbjoiVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0ZXh0IHNob3VsZCBiZSByZW5kZXJlZCBpbiB0aGlzIGVsZW1lbnQncyBjb250ZW50cy4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsdHJgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBzaG91bGQgZ28gaW4gYSBsZWZ0LXRvLXJpZ2h0IGRpcmVjdGlvbi5cbiogICBgcnRsYDogSW5kaWNhdGVzIHRoYXQgdGhlIHRleHQgc2hvdWxkIGdvIGluIGEgcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24uIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iZG8ifV19LHtuYW1lOiJzcGFuIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3BhbiBlbGVtZW50IGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBvbiBpdHMgb3duLCBidXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgZ2xvYmFsIGF0dHJpYnV0ZXMsIGUuZy4gY2xhc3MsIGxhbmcsIG9yIGRpci4gSXQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3BhbiJ9XX0se25hbWU6ImJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYnIgZWxlbWVudCByZXByZXNlbnRzIGEgbGluZSBicmVhay4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2xlYXIiLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgd2hlcmUgdG8gYmVnaW4gdGhlIG5leHQgbGluZSBhZnRlciB0aGUgYnJlYWsuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iciJ9XX0se25hbWU6IndiciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHdiciBlbGVtZW50IHJlcHJlc2VudHMgYSBsaW5lIGJyZWFrIG9wcG9ydHVuaXR5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3diciJ9XX0se25hbWU6ImlucyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucyBlbGVtZW50IHJlcHJlc2VudHMgYW4gYWRkaXRpb24gdG8gdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgVVJJIG9mIGEgcmVzb3VyY2UgdGhhdCBleHBsYWlucyB0aGUgY2hhbmdlLCBzdWNoIGFzIGEgbGluayB0byBtZWV0aW5nIG1pbnV0ZXMgb3IgYSB0aWNrZXQgaW4gYSB0cm91Ymxlc2hvb3Rpbmcgc3lzdGVtLiJ9LHtuYW1lOiJkYXRldGltZSIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQgZGF0ZSBvZiB0aGUgY2hhbmdlIGFuZCBtdXN0IGJlIGEgdmFsaWQgZGF0ZSB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3RyaW5nLiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBhcyBhIGRhdGUgd2l0aCBhbiBvcHRpb25hbCB0aW1lIHN0cmluZywgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuIEZvciB0aGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgd2l0aG91dCBhIHRpbWUsIHNlZSBbRm9ybWF0IG9mIGEgdmFsaWQgZGF0ZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2RhdGVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpZiBpdCBpbmNsdWRlcyBib3RoIGRhdGUgYW5kIHRpbWUgaXMgY292ZXJlZCBpbiBbRm9ybWF0IG9mIGEgdmFsaWQgbG9jYWwgZGF0ZSBhbmQgdGltZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2xvY2FsX2RhdGVfYW5kX3RpbWVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnMifV19LHtuYW1lOiJkZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZWwgZWxlbWVudCByZXByZXNlbnRzIGEgcmVtb3ZhbCBmcm9tIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBVUkkgZm9yIGEgcmVzb3VyY2UgdGhhdCBleHBsYWlucyB0aGUgY2hhbmdlIChmb3IgZXhhbXBsZSwgbWVldGluZyBtaW51dGVzKS4ifX0se25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHRpbWUgYW5kIGRhdGUgb2YgdGhlIGNoYW5nZSBhbmQgbXVzdCBiZSBhIHZhbGlkIGRhdGUgc3RyaW5nIHdpdGggYW4gb3B0aW9uYWwgdGltZS4gSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBkYXRlIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzdHJpbmcsIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCB0aW1lIHN0YW1wLiBGb3IgdGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIHdpdGhvdXQgYSB0aW1lLCBzZWUgW0Zvcm1hdCBvZiBhIHZhbGlkIGRhdGUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9kYXRlX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLiBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaWYgaXQgaW5jbHVkZXMgYm90aCBkYXRlIGFuZCB0aW1lIGlzIGNvdmVyZWQgaW4gW0Zvcm1hdCBvZiBhIHZhbGlkIGxvY2FsIGRhdGUgYW5kIHRpbWUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9sb2NhbF9kYXRlX2FuZF90aW1lX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLid9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RlbCJ9XX0se25hbWU6InBpY3R1cmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwaWN0dXJlIGVsZW1lbnQgaXMgYSBjb250YWluZXIgd2hpY2ggcHJvdmlkZXMgbXVsdGlwbGUgc291cmNlcyB0byBpdHMgY29udGFpbmVkIGltZyBlbGVtZW50IHRvIGFsbG93IGF1dGhvcnMgdG8gZGVjbGFyYXRpdmVseSBjb250cm9sIG9yIGdpdmUgaGludHMgdG8gdGhlIHVzZXIgYWdlbnQgYWJvdXQgd2hpY2ggaW1hZ2UgcmVzb3VyY2UgdG8gdXNlLCBiYXNlZCBvbiB0aGUgc2NyZWVuIHBpeGVsIGRlbnNpdHksIHZpZXdwb3J0IHNpemUsIGltYWdlIGZvcm1hdCwgYW5kIG90aGVyIGZhY3RvcnMuIEl0IHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUifV19LHtuYW1lOiJpbWciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGltZyBlbGVtZW50IHJlcHJlc2VudHMgYW4gaW1hZ2UuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyBhbiBhbHRlcm5hdGl2ZSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZS5cblxuKipOb3RlOioqIEJyb3dzZXJzIGRvIG5vdCBhbHdheXMgZGlzcGxheSB0aGUgaW1hZ2UgcmVmZXJlbmNlZCBieSB0aGUgZWxlbWVudC4gVGhpcyBpcyB0aGUgY2FzZSBmb3Igbm9uLWdyYXBoaWNhbCBicm93c2VycyAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgcGVvcGxlIHdpdGggdmlzdWFsIGltcGFpcm1lbnRzKSwgaWYgdGhlIHVzZXIgY2hvb3NlcyBub3QgdG8gZGlzcGxheSBpbWFnZXMsIG9yIGlmIHRoZSBicm93c2VyIGNhbm5vdCBkaXNwbGF5IHRoZSBpbWFnZSBiZWNhdXNlIGl0IGlzIGludmFsaWQgb3IgYW4gW3Vuc3VwcG9ydGVkIHR5cGVdKCNTdXBwb3J0ZWRfaW1hZ2VfZm9ybWF0cykuIEluIHRoZXNlIGNhc2VzLCB0aGUgYnJvd3NlciBtYXkgcmVwbGFjZSB0aGUgaW1hZ2Ugd2l0aCB0aGUgdGV4dCBkZWZpbmVkIGluIHRoaXMgZWxlbWVudFwncyBgYWx0YCBhdHRyaWJ1dGUuIFlvdSBzaG91bGQsIGZvciB0aGVzZSByZWFzb25zIGFuZCBvdGhlcnMsIHByb3ZpZGUgYSB1c2VmdWwgdmFsdWUgZm9yIGBhbHRgIHdoZW5ldmVyIHBvc3NpYmxlLlxuXG4qKk5vdGU6KiogT21pdHRpbmcgdGhpcyBhdHRyaWJ1dGUgYWx0b2dldGhlciBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UgaXMgYSBrZXkgcGFydCBvZiB0aGUgY29udGVudCwgYW5kIG5vIHRleHR1YWwgZXF1aXZhbGVudCBpcyBhdmFpbGFibGUuIFNldHRpbmcgdGhpcyBhdHRyaWJ1dGUgdG8gYW4gZW1wdHkgc3RyaW5nIChgYWx0PSIiYCkgaW5kaWNhdGVzIHRoYXQgdGhpcyBpbWFnZSBpcyBfbm90XyBhIGtleSBwYXJ0IG9mIHRoZSBjb250ZW50IChkZWNvcmF0aXZlKSwgYW5kIHRoYXQgbm9uLXZpc3VhbCBicm93c2VycyBtYXkgb21pdCBpdCBmcm9tIHJlbmRlcmluZy4nfX0se25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGltYWdlIFVSTC4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGZvciB0aGUgYDxpbWc+YCBlbGVtZW50LiBPbiBicm93c2VycyBzdXBwb3J0aW5nIGBzcmNzZXRgLCBgc3JjYCBpcyB0cmVhdGVkIGxpa2UgYSBjYW5kaWRhdGUgaW1hZ2Ugd2l0aCBhIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvciBgMXhgIHVubGVzcyBhbiBpbWFnZSB3aXRoIHRoaXMgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBgc3Jjc2V0LGAgb3IgdW5sZXNzIGBzcmNzZXRgIGNvbnRhaW5zICdgd2AnIGRlc2NyaXB0b3JzLiJ9fSx7bmFtZToic3Jjc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzIGluZGljYXRpbmcgYSBzZXQgb2YgcG9zc2libGUgaW1hZ2Ugc291cmNlcyBmb3IgdGhlIHVzZXIgYWdlbnQgdG8gdXNlLiBFYWNoIHN0cmluZyBpcyBjb21wb3NlZCBvZjpcblxuMS4gIGEgVVJMIHRvIGFuIGltYWdlLFxuMi4gIG9wdGlvbmFsbHksIHdoaXRlc3BhY2UgZm9sbG93ZWQgYnkgb25lIG9mOlxuICAgICogICBBIHdpZHRoIGRlc2NyaXB0b3IsIG9yIGEgcG9zaXRpdmUgaW50ZWdlciBkaXJlY3RseSBmb2xsb3dlZCBieSAnYHdgJy4gVGhlIHdpZHRoIGRlc2NyaXB0b3IgaXMgZGl2aWRlZCBieSB0aGUgc291cmNlIHNpemUgZ2l2ZW4gaW4gdGhlIGBzaXplc2AgYXR0cmlidXRlIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIHBpeGVsIGRlbnNpdHkuXG4gICAgKiAgIEEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yLCB3aGljaCBpcyBhIHBvc2l0aXZlIGZsb2F0aW5nIHBvaW50IG51bWJlciBkaXJlY3RseSBmb2xsb3dlZCBieSAnYHhgJy5cblxuSWYgbm8gZGVzY3JpcHRvciBpcyBzcGVjaWZpZWQsIHRoZSBzb3VyY2UgaXMgYXNzaWduZWQgdGhlIGRlZmF1bHQgZGVzY3JpcHRvcjogYDF4YC5cblxuSXQgaXMgaW5jb3JyZWN0IHRvIG1peCB3aWR0aCBkZXNjcmlwdG9ycyBhbmQgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9ycyBpbiB0aGUgc2FtZSBgc3Jjc2V0YCBhdHRyaWJ1dGUuIER1cGxpY2F0ZSBkZXNjcmlwdG9ycyAoZm9yIGluc3RhbmNlLCB0d28gc291cmNlcyBpbiB0aGUgc2FtZSBgc3Jjc2V0YCB3aGljaCBhcmUgYm90aCBkZXNjcmliZWQgd2l0aCAnYDJ4YCcpIGFyZSBhbHNvIGludmFsaWQuXG5cblRoZSB1c2VyIGFnZW50IHNlbGVjdHMgYW55IG9uZSBvZiB0aGUgYXZhaWxhYmxlIHNvdXJjZXMgYXQgaXRzIGRpc2NyZXRpb24uIFRoaXMgcHJvdmlkZXMgdGhlbSB3aXRoIHNpZ25pZmljYW50IGxlZXdheSB0byB0YWlsb3IgdGhlaXIgc2VsZWN0aW9uIGJhc2VkIG9uIHRoaW5ncyBsaWtlIHVzZXIgcHJlZmVyZW5jZXMgb3IgYmFuZHdpZHRoIGNvbmRpdGlvbnMuIFNlZSBvdXIgW1Jlc3BvbnNpdmUgaW1hZ2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0xlYXJuL0hUTUwvTXVsdGltZWRpYV9hbmRfZW1iZWRkaW5nL1Jlc3BvbnNpdmVfaW1hZ2VzKSB0dXRvcmlhbCBmb3IgYW4gZXhhbXBsZS4ifX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoZSBmZXRjaGluZyBvZiB0aGUgcmVsYXRlZCBpbWFnZSBtdXN0IGJlIGRvbmUgdXNpbmcgQ09SUyBvciBub3QuIFtDT1JTLWVuYWJsZWQgaW1hZ2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NPUlNfRW5hYmxlZF9JbWFnZSkgY2FuIGJlIHJldXNlZCBpbiB0aGUgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudCB3aXRob3V0IGJlaW5nICJbdGFpbnRlZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX2VuYWJsZWRfaW1hZ2UjV2hhdF9pc19hX3RhaW50ZWRfY2FudmFzKS4iIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6J319LHtuYW1lOiJ1c2VtYXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBwYXJ0aWFsIFVSTCAoc3RhcnRpbmcgd2l0aCBcJyNcJykgb2YgYW4gW2ltYWdlIG1hcF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9IVE1ML0VsZW1lbnQvbWFwKSBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQuXG5cbioqTm90ZToqKiBZb3UgY2Fubm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBpZiB0aGUgYDxpbWc+YCBlbGVtZW50IGlzIGEgZGVzY2VuZGFudCBvZiBhbiBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIikgb3IgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJpc21hcCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIGltYWdlIGlzIHBhcnQgb2YgYSBzZXJ2ZXItc2lkZSBtYXAuIElmIHNvLCB0aGUgcHJlY2lzZSBjb29yZGluYXRlcyBvZiBhIGNsaWNrIGFyZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG5cbioqTm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBpcyBhbGxvd2VkIG9ubHkgaWYgdGhlIGA8aW1nPmAgZWxlbWVudCBpcyBhIGRlc2NlbmRhbnQgb2YgYW4gW2A8YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSAiVGhlIEhUTUwgPGE+IGVsZW1lbnQgKG9yIGFuY2hvciBlbGVtZW50KSBjcmVhdGVzIGEgaHlwZXJsaW5rIHRvIG90aGVyIHdlYiBwYWdlcywgZmlsZXMsIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHNhbWUgcGFnZSwgZW1haWwgYWRkcmVzc2VzLCBvciBhbnkgb3RoZXIgVVJMLiIpIGVsZW1lbnQgd2l0aCBhIHZhbGlkIFtgaHJlZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hI2F0dHItaHJlZikgYXR0cmlidXRlLid9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscy4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGltYWdlIGluIHBpeGVscy4ifX0se25hbWU6ImRlY29kaW5nIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgYW4gaW1hZ2UgZGVjb2RpbmcgaGludCB0byB0aGUgYnJvd3Nlci4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZToifSx7bmFtZToiZGVjb2RpbmciLGRlc2NyaXB0aW9uOiJgc3luY2BcblxuRGVjb2RlIHRoZSBpbWFnZSBzeW5jaHJvbm91c2x5IGZvciBhdG9taWMgcHJlc2VudGF0aW9uIHdpdGggb3RoZXIgY29udGVudC5cblxuYGFzeW5jYFxuXG5EZWNvZGUgdGhlIGltYWdlIGFzeW5jaHJvbm91c2x5IHRvIHJlZHVjZSBkZWxheSBpbiBwcmVzZW50aW5nIG90aGVyIGNvbnRlbnQuXG5cbmBhdXRvYFxuXG5EZWZhdWx0IG1vZGUsIHdoaWNoIGluZGljYXRlcyBubyBwcmVmZXJlbmNlIGZvciB0aGUgZGVjb2RpbmcgbW9kZS4gVGhlIGJyb3dzZXIgZGVjaWRlcyB3aGF0IGlzIGJlc3QgZm9yIHRoZSB1c2VyLiJ9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHRoZSByZXNvdXJjZS4gUHJpb3JpdHkgaGludHMgYXJlIGRlbGVnYXRlZCB1c2luZyB0aGUgdmFsdWVzOiJ9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjoiYGF1dG9gOiBJbmRpY2F0ZXPCoCoqbm/CoHByZWZlcmVuY2UqKi4gVGhlIGJyb3dzZXIgbWF5IHVzZSBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgaW1hZ2UuXG5cbmBoaWdoYDogSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgaW1hZ2UgaXMgb2bCoCoqaGlnaCoqIHByaW9yaXR5LlxuXG5gbG93YDrCoEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIGltYWdlIGlzIG9mwqAqKmxvdyoqIHByaW9yaXR5LiJ9LHtuYW1lOiJpbnRyaW5zaWNzaXplIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgdGVsbHMgdGhlIGJyb3dzZXIgdG8gaWdub3JlIHRoZSBhY3R1YWwgaW50cmluc2ljIHNpemUgb2YgdGhlIGltYWdlIGFuZCBwcmV0ZW5kIGl04oCZcyB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW1hZ2Ugd291bGQgcmFzdGVyIGF0IHRoZXNlIGRpbWVuc2lvbnMgYW5kIGBuYXR1cmFsV2lkdGhgL2BuYXR1cmFsSGVpZ2h0YCBvbiBpbWFnZXMgd291bGQgcmV0dXJuIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIHRoaXMgYXR0cmlidXRlLiBbRXhwbGFpbmVyXShodHRwczovL2dpdGh1Yi5jb20vb2phbnZhZmFpL2ludHJpbnNpY3NpemUtYXR0cmlidXRlKSwgW2V4YW1wbGVzXShodHRwczovL2dvb2dsZWNocm9tZS5naXRodWIuaW8vc2FtcGxlcy9pbnRyaW5zaWMtc2l6ZS9pbmRleC5odG1sKSJ9LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246IkEgc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggcmVmZXJyZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyOmAgVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyIFwiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS5cIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQuXG4qICAgYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlOmAgTm8gYFJlZmVyZXJgIGhlYWRlciB3aWxsIGJlIHNlbnQgd2hlbiBuYXZpZ2F0aW5nIHRvIGFuIG9yaWdpbiB3aXRob3V0IFRMUyAoSFRUUFMpLiBUaGlzIGlzIGEgdXNlciBhZ2VudOKAmXMgZGVmYXVsdCBiZWhhdmlvciBpZiBubyBwb2xpY3kgaXMgb3RoZXJ3aXNlIHNwZWNpZmllZC5cbiogICBgb3JpZ2luOmAgVGhlIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBpbmNsdWRlIHRoZSBwYWdlIG9mIG9yaWdpbidzIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydC5cbiogICBgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luOmAgTmF2aWdhdGluZyB0byBvdGhlciBvcmlnaW5zIHdpbGwgbGltaXQgdGhlIGluY2x1ZGVkIHJlZmVycmFsIGRhdGEgdG8gdGhlIHNjaGVtZSwgdGhlIGhvc3QgYW5kIHRoZSBwb3J0LCB3aGlsZSBuYXZpZ2F0aW5nIGZyb20gdGhlIHNhbWUgb3JpZ2luIHdpbGwgaW5jbHVkZSB0aGUgcmVmZXJyZXIncyBmdWxsIHBhdGguXG4qICAgYHVuc2FmZS11cmw6YCBUaGUgYFJlZmVyZXJgIGhlYWRlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgdGhlIHBhdGgsIGJ1dCBub3QgdGhlIGZyYWdtZW50LCBwYXNzd29yZCwgb3IgdXNlcm5hbWUuIFRoaXMgY2FzZSBpcyB1bnNhZmUgYmVjYXVzZSBpdCBjYW4gbGVhayBvcmlnaW5zIGFuZCBwYXRocyBmcm9tIFRMUy1wcm90ZWN0ZWQgcmVzb3VyY2VzIHRvIGluc2VjdXJlIG9yaWdpbnMuIn0se25hbWU6InNpemVzIixkZXNjcmlwdGlvbjoiQSBsaXN0IG9mIG9uZSBvciBtb3JlIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IGNvbW1hcyBpbmRpY2F0aW5nIGEgc2V0IG9mIHNvdXJjZSBzaXplcy4gRWFjaCBzb3VyY2Ugc2l6ZSBjb25zaXN0cyBvZjpcblxuMS4gIGEgbWVkaWEgY29uZGl0aW9uLiBUaGlzIG11c3QgYmUgb21pdHRlZCBmb3IgdGhlIGxhc3QgaXRlbS5cbjIuICBhIHNvdXJjZSBzaXplIHZhbHVlLlxuXG5Tb3VyY2Ugc2l6ZSB2YWx1ZXMgc3BlY2lmeSB0aGUgaW50ZW5kZWQgZGlzcGxheSBzaXplIG9mIHRoZSBpbWFnZS4gVXNlciBhZ2VudHMgdXNlIHRoZSBjdXJyZW50IHNvdXJjZSBzaXplIHRvIHNlbGVjdCBvbmUgb2YgdGhlIHNvdXJjZXMgc3VwcGxpZWQgYnkgdGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSwgd2hlbiB0aG9zZSBzb3VyY2VzIGFyZSBkZXNjcmliZWQgdXNpbmcgd2lkdGggKCdgd2AnKSBkZXNjcmlwdG9ycy4gVGhlIHNlbGVjdGVkIHNvdXJjZSBzaXplIGFmZmVjdHMgdGhlIGludHJpbnNpYyBzaXplIG9mIHRoZSBpbWFnZSAodGhlIGltYWdl4oCZcyBkaXNwbGF5IHNpemUgaWYgbm8gQ1NTIHN0eWxpbmcgaXMgYXBwbGllZCkuIElmIHRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUgaXMgYWJzZW50LCBvciBjb250YWlucyBubyB2YWx1ZXMgd2l0aCBhIHdpZHRoIChgd2ApIGRlc2NyaXB0b3IsIHRoZW4gdGhlIGBzaXplc2AgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcifV19LHtuYW1lOiJpZnJhbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpZnJhbWUgZWxlbWVudCByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQuIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFVSTCBvZiB0aGUgcGFnZSB0byBlbWJlZC4gVXNlIGEgdmFsdWUgb2YgYGFib3V0OmJsYW5rYCB0byBlbWJlZCBhbiBlbXB0eSBwYWdlIHRoYXQgY29uZm9ybXMgdG8gdGhlIFtzYW1lLW9yaWdpbiBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NhbWUtb3JpZ2luX3BvbGljeSNJbmhlcml0ZWRfb3JpZ2lucykuIEFsc28gbm90ZSB0aGF0IHByb2dyYW1hdGljYWxseSByZW1vdmluZyBhbiBgPGlmcmFtZT5gXCdzIHNyYyBhdHRyaWJ1dGUgKGUuZy4gdmlhIFtgRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlbW92ZUF0dHJpYnV0ZSAiVGhlIEVsZW1lbnQgbWV0aG9kIHJlbW92ZUF0dHJpYnV0ZSgpIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmcm9tIHRoZSBlbGVtZW50LiIpKSBjYXVzZXMgYGFib3V0OmJsYW5rYCB0byBiZSBsb2FkZWQgaW4gdGhlIGZyYW1lIGluIEZpcmVmb3ggKGZyb20gdmVyc2lvbiA2NSksIENocm9taXVtLWJhc2VkIGJyb3dzZXJzLCBhbmQgU2FmYXJpL2lPUy4nfX0se25hbWU6InNyY2RvYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5saW5lIEhUTUwgdG8gZW1iZWQsIG92ZXJyaWRpbmcgdGhlIGBzcmNgIGF0dHJpYnV0ZS4gSWYgYSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzcmNkb2NgIGF0dHJpYnV0ZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIFVSTCBpbiB0aGUgYHNyY2AgYXR0cmlidXRlLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSB0YXJnZXRhYmxlIG5hbWUgZm9yIHRoZSBlbWJlZGRlZCBicm93c2luZyBjb250ZXh0LiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBgdGFyZ2V0YCBhdHRyaWJ1dGUgb2YgdGhlIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSwgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIiksIG9yIFtgPGJhc2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jhc2UgIlRoZSBIVE1MIDxiYXNlPiBlbGVtZW50IHNwZWNpZmllcyB0aGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgcmVsYXRpdmUgVVJMcyBjb250YWluZWQgd2l0aGluIGEgZG9jdW1lbnQuIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSA8YmFzZT4gZWxlbWVudCBpbiBhIGRvY3VtZW50LiIpIGVsZW1lbnRzOyB0aGUgYGZvcm10YXJnZXRgIGF0dHJpYnV0ZSBvZiB0aGUgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgb3IgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIGVsZW1lbnRzOyBvciB0aGUgYHdpbmRvd05hbWVgIHBhcmFtZXRlciBpbiB0aGUgW2B3aW5kb3cub3BlbigpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9vcGVuICJUaGXCoFdpbmRvdyBpbnRlcmZhY2VcJ3Mgb3BlbigpIG1ldGhvZCBsb2FkcyB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGludG8gdGhlIGJyb3dzaW5nIGNvbnRleHQgKHdpbmRvdywgPGlmcmFtZT4gb3IgdGFiKSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gSWYgdGhlIG5hbWUgZG9lc25cJ3QgZXhpc3QsIHRoZW4gYSBuZXcgd2luZG93IGlzIG9wZW5lZCBhbmQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBsb2FkZWQgaW50byBpdHMgYnJvd3NpbmcgY29udGV4dC4iKSBtZXRob2QuJ319LHtuYW1lOiJzYW5kYm94Iix2YWx1ZVNldDoic2IiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0FwcGxpZXMgZXh0cmEgcmVzdHJpY3Rpb25zIHRvIHRoZSBjb250ZW50IGluIHRoZSBmcmFtZS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgY2FuIGVpdGhlciBiZSBlbXB0eSB0byBhcHBseSBhbGwgcmVzdHJpY3Rpb25zLCBvciBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zIHRvIGxpZnQgcGFydGljdWxhciByZXN0cmljdGlvbnM6XG5cbiogICBgYWxsb3ctZm9ybXNgOiBBbGxvd3MgdGhlIHJlc291cmNlIHRvIHN1Ym1pdCBmb3Jtcy4gSWYgdGhpcyBrZXl3b3JkIGlzIG5vdCB1c2VkLCBmb3JtIHN1Ym1pc3Npb24gaXMgYmxvY2tlZC5cbiogICBgYWxsb3ctbW9kYWxzYDogTGV0cyB0aGUgcmVzb3VyY2UgW29wZW4gbW9kYWwgd2luZG93c10oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FuZGJveGVkLW1vZGFscy1mbGFnKS5cbiogICBgYWxsb3ctb3JpZW50YXRpb24tbG9ja2A6IExldHMgdGhlIHJlc291cmNlIFtsb2NrIHRoZSBzY3JlZW4gb3JpZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TY3JlZW4vbG9ja09yaWVudGF0aW9uKS5cbiogICBgYWxsb3ctcG9pbnRlci1sb2NrYDogTGV0cyB0aGUgcmVzb3VyY2UgdXNlIHRoZSBbUG9pbnRlciBMb2NrIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWJBUEkvUG9pbnRlcl9Mb2NrKS5cbiogICBgYWxsb3ctcG9wdXBzYDogQWxsb3dzIHBvcHVwcyAoc3VjaCBhcyBgd2luZG93Lm9wZW4oKWAsIGB0YXJnZXQ9Il9ibGFuayJgLCBvciBgc2hvd01vZGFsRGlhbG9nKClgKS4gSWYgdGhpcyBrZXl3b3JkIGlzIG5vdCB1c2VkLCB0aGUgcG9wdXAgd2lsbCBzaWxlbnRseSBmYWlsIHRvIG9wZW4uXG4qICAgYGFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveGA6IExldHMgdGhlIHNhbmRib3hlZCBkb2N1bWVudCBvcGVuIG5ldyB3aW5kb3dzIHdpdGhvdXQgdGhvc2Ugd2luZG93cyBpbmhlcml0aW5nIHRoZSBzYW5kYm94aW5nLiBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gc2FmZWx5IHNhbmRib3ggYW4gYWR2ZXJ0aXNlbWVudCB3aXRob3V0IGZvcmNpbmcgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIHVwb24gdGhlIHBhZ2UgdGhlIGFkIGxpbmtzIHRvLlxuKiAgIGBhbGxvdy1wcmVzZW50YXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBzdGFydCBhIFtwcmVzZW50YXRpb24gc2Vzc2lvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ByZXNlbnRhdGlvblJlcXVlc3QpLlxuKiAgIGBhbGxvdy1zYW1lLW9yaWdpbmA6IElmIHRoaXMgdG9rZW4gaXMgbm90IHVzZWQsIHRoZSByZXNvdXJjZSBpcyB0cmVhdGVkIGFzIGJlaW5nIGZyb20gYSBzcGVjaWFsIG9yaWdpbiB0aGF0IGFsd2F5cyBmYWlscyB0aGUgW3NhbWUtb3JpZ2luIHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9zYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUtb3JpZ2luIHBvbGljeTogVGhlIHNhbWUtb3JpZ2luIHBvbGljeSBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHJlc3RyaWN0cyBob3cgYSBkb2N1bWVudCBvciBzY3JpcHQgbG9hZGVkIGZyb20gb25lIG9yaWdpbiBjYW4gaW50ZXJhY3Qgd2l0aCBhIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIikuXG4qICAgYGFsbG93LXNjcmlwdHNgOiBMZXRzIHRoZSByZXNvdXJjZSBydW4gc2NyaXB0cyAoYnV0IG5vdCBjcmVhdGUgcG9wdXAgd2luZG93cykuXG4qICAgYGFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5LXVzZXItYWN0aXZhdGlvbmAgOiBMZXRzIHRoZSByZXNvdXJjZSByZXF1ZXN0IGFjY2VzcyB0byB0aGUgcGFyZW50XCdzIHN0b3JhZ2UgY2FwYWJpbGl0aWVzIHdpdGggdGhlIFtTdG9yYWdlIEFjY2VzcyBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TdG9yYWdlX0FjY2Vzc19BUEkpLlxuKiAgIGBhbGxvdy10b3AtbmF2aWdhdGlvbmA6IExldHMgdGhlIHJlc291cmNlIG5hdmlnYXRlIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhlIG9uZSBuYW1lZCBgX3RvcGApLlxuKiAgIGBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBuYXZpZ2F0ZSB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIGJ1dCBvbmx5IGlmIGluaXRpYXRlZCBieSBhIHVzZXIgZ2VzdHVyZS5cblxuKipOb3RlcyBhYm91dCBzYW5kYm94aW5nOioqXG5cbiogICBXaGVuIHRoZSBlbWJlZGRlZCBkb2N1bWVudCBoYXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBlbWJlZGRpbmcgcGFnZSwgaXQgaXMgKipzdHJvbmdseSBkaXNjb3VyYWdlZCoqIHRvIHVzZSBib3RoIGBhbGxvdy1zY3JpcHRzYCBhbmQgYGFsbG93LXNhbWUtb3JpZ2luYCwgYXMgdGhhdCBsZXRzIHRoZSBlbWJlZGRlZCBkb2N1bWVudCByZW1vdmUgdGhlIGBzYW5kYm94YCBhdHRyaWJ1dGUg4oCUIG1ha2luZyBpdCBubyBtb3JlIHNlY3VyZSB0aGFuIG5vdCB1c2luZyB0aGUgYHNhbmRib3hgIGF0dHJpYnV0ZSBhdCBhbGwuXG4qICAgU2FuZGJveGluZyBpcyB1c2VsZXNzIGlmIHRoZSBhdHRhY2tlciBjYW4gZGlzcGxheSBjb250ZW50IG91dHNpZGUgYSBzYW5kYm94ZWQgYGlmcmFtZWAg4oCUIHN1Y2ggYXMgaWYgdGhlIHZpZXdlciBvcGVucyB0aGUgZnJhbWUgaW4gYSBuZXcgdGFiLiBTdWNoIGNvbnRlbnQgc2hvdWxkIGJlIGFsc28gc2VydmVkIGZyb20gYSBfc2VwYXJhdGUgb3JpZ2luXyB0byBsaW1pdCBwb3RlbnRpYWwgZGFtYWdlLlxuKiAgIFRoZSBgc2FuZGJveGAgYXR0cmlidXRlIGlzIHVuc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDkgYW5kIGVhcmxpZXIuJ319LHtuYW1lOiJzZWFtbGVzcyIsdmFsdWVTZXQ6InYifSx7bmFtZToiYWxsb3dmdWxsc2NyZWVuIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonU2V0IHRvIGB0cnVlYCBpZiB0aGUgYDxpZnJhbWU+YCBjYW4gYWN0aXZhdGUgZnVsbHNjcmVlbiBtb2RlIGJ5IGNhbGxpbmcgdGhlIFtgcmVxdWVzdEZ1bGxzY3JlZW4oKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlcXVlc3RGdWxsc2NyZWVuICJUaGUgRWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpIG1ldGhvZCBpc3N1ZXMgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbWFrZSB0aGUgZWxlbWVudCBiZSBkaXNwbGF5ZWQgaW4gZnVsbC1zY3JlZW4gbW9kZS4iKSBtZXRob2QuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHdpZHRoIG9mIHRoZSBmcmFtZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0IGlzIGAzMDBgLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVpZ2h0IG9mIHRoZSBmcmFtZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0IGlzIGAxNTBgLiJ9fSx7bmFtZToiYWxsb3ciLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgYSBbZmVhdHVyZSBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvRmVhdHVyZV9Qb2xpY3kpIGZvciB0aGUgYDxpZnJhbWU+YC4ifSx7bmFtZToiYWxsb3dwYXltZW50cmVxdWVzdCIsZGVzY3JpcHRpb246IlNldCB0byBgdHJ1ZWAgaWYgYSBjcm9zcy1vcmlnaW4gYDxpZnJhbWU+YCBzaG91bGQgYmUgYWxsb3dlZCB0byBpbnZva2UgdGhlIFtQYXltZW50IFJlcXVlc3QgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGF5bWVudF9SZXF1ZXN0X0FQSSkuIn0se25hbWU6ImFsbG93cGF5bWVudHJlcXVlc3QiLGRlc2NyaXB0aW9uOidUaGlzIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIGEgbGVnYWN5IGF0dHJpYnV0ZSBhbmQgcmVkZWZpbmVkIGFzIGBhbGxvdz0icGF5bWVudCJgLid9LHtuYW1lOiJjc3AiLGRlc2NyaXB0aW9uOidBIFtDb250ZW50IFNlY3VyaXR5IFBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1ApIGVuZm9yY2VkIGZvciB0aGUgZW1iZWRkZWQgcmVzb3VyY2UuIFNlZSBbYEhUTUxJRnJhbWVFbGVtZW50LmNzcGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSUZyYW1lRWxlbWVudC9jc3AgIlRoZSBjc3AgcHJvcGVydHkgb2YgdGhlIEhUTUxJRnJhbWVFbGVtZW50IGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgYW4gZW1iZWRkZWQgZG9jdW1lbnQgbXVzdCBhZ3JlZSB0byBlbmZvcmNlIHVwb24gaXRzZWxmLiIpIGZvciBkZXRhaWxzLid9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjoiVGhlIGRvd25sb2FkIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgYDxpZnJhbWU+YCdzIGBzcmNgIGF0dHJpYnV0ZS4gQWxsb3dlZCB2YWx1ZXM6XG5cbmBhdXRvYCAoZGVmYXVsdClcblxuTm8gcHJlZmVyZW5jZS4gVGhlIGJyb3dzZXIgdXNlcyBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UuXG5cbmBoaWdoYFxuXG5UaGUgcmVzb3VyY2Ugc2hvdWxkIGJlIGRvd25sb2FkZWQgYmVmb3JlIG90aGVyIGxvd2VyLXByaW9yaXR5IHBhZ2UgcmVzb3VyY2VzLlxuXG5gbG93YFxuXG5UaGUgcmVzb3VyY2Ugc2hvdWxkIGJlIGRvd25sb2FkZWQgYWZ0ZXIgb3RoZXIgaGlnaGVyLXByaW9yaXR5IHBhZ2UgcmVzb3VyY2VzLiJ9LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246J0luZGljYXRlcyB3aGljaCBbcmVmZXJyZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWZlcnJlcikgdG8gc2VuZCB3aGVuIGZldGNoaW5nIHRoZSBmcmFtZVwncyByZXNvdXJjZTpcblxuKiAgIGBuby1yZWZlcnJlcmA6IFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIChkZWZhdWx0KTogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50IHRvIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvb3JpZ2luICJvcmlnaW46IFdlYiBjb250ZW50XCdzIG9yaWdpbiBpcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWUgKHByb3RvY29sKSwgaG9zdCAoZG9tYWluKSwgYW5kIHBvcnQgb2YgdGhlIFVSTCB1c2VkIHRvIGFjY2VzcyBpdC4gVHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gb25seSB3aGVuIHRoZSBzY2hlbWUsIGhvc3QsIGFuZCBwb3J0IGFsbCBtYXRjaC4iKXMgd2l0aG91dCBbVExTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1RMUyAiVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUyksIHByZXZpb3VzbHkga25vd24gYXMgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCksIGlzIGEgcHJvdG9jb2wgdXNlZCBieSBhcHBsaWNhdGlvbnMgdG8gY29tbXVuaWNhdGUgc2VjdXJlbHkgYWNyb3NzIGEgbmV0d29yaywgcHJldmVudGluZyB0YW1wZXJpbmcgd2l0aCBhbmQgZWF2ZXNkcm9wcGluZyBvbiBlbWFpbCwgd2ViIGJyb3dzaW5nLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBwcm90b2NvbHMuIikgKFtIVFRQU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9IVFRQUyAiSFRUUFM6IEhUVFBTIChIVFRQIFNlY3VyZSkgaXMgYW4gZW5jcnlwdGVkIHZlcnNpb24gb2YgdGhlIEhUVFAgcHJvdG9jb2wuIEl0IHVzdWFsbHkgdXNlcyBTU0wgb3IgVExTIHRvIGVuY3J5cHQgYWxsIGNvbW11bmljYXRpb24gYmV0d2VlbiBhIGNsaWVudCBhbmQgYSBzZXJ2ZXIuIFRoaXMgc2VjdXJlIGNvbm5lY3Rpb24gYWxsb3dzIGNsaWVudHMgdG8gc2FmZWx5IGV4Y2hhbmdlIHNlbnNpdGl2ZSBkYXRhIHdpdGggYSBzZXJ2ZXIsIGZvciBleGFtcGxlIGZvciBiYW5raW5nIGFjdGl2aXRpZXMgb3Igb25saW5lIHNob3BwaW5nLiIpKS5cbiogICBgb3JpZ2luYDogVGhlIHNlbnQgcmVmZXJyZXIgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBvcmlnaW4gb2YgdGhlIHJlZmVycmluZyBwYWdlOiBpdHMgW3NjaGVtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9BcmNoaXZlL01vemlsbGEvVVJJU2NoZW1lKSwgW2hvc3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvaG9zdCAiaG9zdDogQSBob3N0IGlzIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgSW50ZXJuZXQgKG9yIGEgbG9jYWwgbmV0d29yaykuIFNvbWUgaG9zdHMgY2FsbGVkIHNlcnZlcnMgb2ZmZXIgYWRkaXRpb25hbCBzZXJ2aWNlcyBsaWtlIHNlcnZpbmcgd2VicGFnZXMgb3Igc3RvcmluZyBmaWxlcyBhbmQgZW1haWxzLiIpLCBhbmQgW3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvcG9ydCAicG9ydDogRm9yIGEgY29tcHV0ZXIgY29ubmVjdGVkIHRvIGEgbmV0d29yayB3aXRoIGFuIElQIGFkZHJlc3MsIGEgcG9ydCBpcyBhIGNvbW11bmljYXRpb24gZW5kcG9pbnQuIFBvcnRzIGFyZSBkZXNpZ25hdGVkIGJ5IG51bWJlcnMsIGFuZCBiZWxvdyAxMDI0IGVhY2ggcG9ydCBpcyBhc3NvY2lhdGVkIGJ5IGRlZmF1bHQgd2l0aCBhIHNwZWNpZmljIHByb3RvY29sLiIpLlxuKiAgIGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBUaGUgcmVmZXJyZXIgc2VudCB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LiBOYXZpZ2F0aW9ucyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBzdGlsbCBpbmNsdWRlIHRoZSBwYXRoLlxuKiAgIGBzYW1lLW9yaWdpbmA6IEEgcmVmZXJyZXIgd2lsbCBiZSBzZW50IGZvciBbc2FtZSBvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvU2FtZS1vcmlnaW5fcG9saWN5ICJzYW1lIG9yaWdpbjogVGhlIHNhbWUtb3JpZ2luIHBvbGljeSBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHJlc3RyaWN0cyBob3cgYSBkb2N1bWVudCBvciBzY3JpcHQgbG9hZGVkIGZyb20gb25lIG9yaWdpbiBjYW4gaW50ZXJhY3Qgd2l0aCBhIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIiksIGJ1dCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMgd2lsbCBjb250YWluIG5vIHJlZmVycmVyIGluZm9ybWF0aW9uLlxuKiAgIGBzdHJpY3Qtb3JpZ2luYDogT25seSBzZW5kIHRoZSBvcmlnaW4gb2YgdGhlIGRvY3VtZW50IGFzIHRoZSByZWZlcnJlciB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoSFRUUFPihpJIVFRQUyksIGJ1dCBkb25cJ3Qgc2VuZCBpdCB0byBhIGxlc3Mgc2VjdXJlIGRlc3RpbmF0aW9uIChIVFRQU+KGkkhUVFApLlxuKiAgIGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYDogU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIG9ubHkgc2VuZCB0aGUgb3JpZ2luIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChIVFRQU+KGkkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBT4oaSSFRUUCkuXG4qICAgYHVuc2FmZS11cmxgOiBUaGUgcmVmZXJyZXIgd2lsbCBpbmNsdWRlIHRoZSBvcmlnaW4gX2FuZF8gdGhlIHBhdGggKGJ1dCBub3QgdGhlIFtmcmFnbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvaGFzaCksIFtwYXNzd29yZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvcGFzc3dvcmQpLCBvciBbdXNlcm5hbWVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL3VzZXJuYW1lKSkuICoqVGhpcyB2YWx1ZSBpcyB1bnNhZmUqKiwgYmVjYXVzZSBpdCBsZWFrcyBvcmlnaW5zIGFuZCBwYXRocyBmcm9tIFRMUy1wcm90ZWN0ZWQgcmVzb3VyY2VzIHRvIGluc2VjdXJlIG9yaWdpbnMuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pZnJhbWUifV19LHtuYW1lOiJlbWJlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGVtYmVkIGVsZW1lbnQgcHJvdmlkZXMgYW4gaW50ZWdyYXRpb24gcG9pbnQgZm9yIGFuIGV4dGVybmFsICh0eXBpY2FsbHkgbm9uLUhUTUwpIGFwcGxpY2F0aW9uIG9yIGludGVyYWN0aXZlIGNvbnRlbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFVSTMKgb2YgdGhlIHJlc291cmNlIGJlaW5nIGVtYmVkZGVkLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIE1JTUXCoHR5cGUgdG8gdXNlIHRvIHNlbGVjdCB0aGUgcGx1Zy1pbiB0byBpbnN0YW50aWF0ZS4ifX0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlzcGxheWVkIHdpZHRoIG9mIHRoZSByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIFRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSB2YWx1ZTsgcGVyY2VudGFnZXMgYXJlIF9ub3RfIGFsbG93ZWQuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoZSByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIFRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSB2YWx1ZTsgcGVyY2VudGFnZXMgYXJlIF9ub3RfIGFsbG93ZWQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZW1iZWQifV19LHtuYW1lOiJvYmplY3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvYmplY3QgZWxlbWVudCBjYW4gcmVwcmVzZW50IGFuIGV4dGVybmFsIHJlc291cmNlLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSwgd2lsbCBlaXRoZXIgYmUgdHJlYXRlZCBhcyBhbiBpbWFnZSwgYXMgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgb3IgYXMgYW4gZXh0ZXJuYWwgcmVzb3VyY2UgdG8gYmUgcHJvY2Vzc2VkIGJ5IGEgcGx1Z2luLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkYXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb3VyY2UgYXMgYSB2YWxpZCBVUkwuIEF0IGxlYXN0IG9uZSBvZiAqKmRhdGEqKiBhbmQgKip0eXBlKiogbXVzdCBiZSBkZWZpbmVkLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtjb250ZW50IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ29udGVudF90eXBlKSBvZiB0aGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5ICoqZGF0YSoqLiBBdCBsZWFzdCBvbmUgb2YgKipkYXRhKiogYW5kICoqdHlwZSoqIG11c3QgYmUgZGVmaW5lZC4ifX0se25hbWU6InR5cGVtdXN0bWF0Y2giLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGUgKip0eXBlKiogYXR0cmlidXRlIGFuZCB0aGUgYWN0dWFsIFtjb250ZW50IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ29udGVudF90eXBlKSBvZiB0aGUgcmVzb3VyY2UgbXVzdCBtYXRjaCB0byBiZSB1c2VkLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdmFsaWQgYnJvd3NpbmcgY29udGV4dCAoSFRNTDUpLCBvciB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCAoSFRNTCA0KS4ifX0se25hbWU6InVzZW1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBoYXNoLW5hbWUgcmVmZXJlbmNlIHRvIGEgW2A8bWFwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXAgXCJUaGUgSFRNTCA8bWFwPiBlbGVtZW50IGlzIHVzZWQgd2l0aCA8YXJlYT4gZWxlbWVudHMgdG8gZGVmaW5lIGFuIGltYWdlIG1hcCAoYSBjbGlja2FibGUgbGluayBhcmVhKS5cIikgZWxlbWVudDsgdGhhdCBpcyBhICcjJyBmb2xsb3dlZCBieSB0aGUgdmFsdWUgb2YgYSBbYG5hbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFwI2F0dHItbmFtZSkgb2YgYSBtYXAgZWxlbWVudC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQsIGlmIGFueSwgdGhhdCB0aGUgb2JqZWN0IGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgX2Zvcm0gb3duZXJfKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBJRCBvZiBhIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHdpZHRoIG9mIHRoZSBkaXNwbGF5IHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gLS0gKEFic29sdXRlIHZhbHVlcyBvbmx5LiBbTk8gcGVyY2VudGFnZXNdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkaW1lbnNpb24tYXR0cmlidXRlcykpIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWlnaHQgb2YgdGhlIGRpc3BsYXllZCByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIC0tIChBYnNvbHV0ZSB2YWx1ZXMgb25seS4gW05PIHBlcmNlbnRhZ2VzXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjZGltZW5zaW9uLWF0dHJpYnV0ZXMpKSJ9fSx7bmFtZToiYXJjaGl2ZSIsZGVzY3JpcHRpb246IkEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJJcyBmb3IgYXJjaGl2ZXMgb2YgcmVzb3VyY2VzIGZvciB0aGUgb2JqZWN0LiJ9LHtuYW1lOiJib3JkZXIiLGRlc2NyaXB0aW9uOiJUaGUgd2lkdGggb2YgYSBib3JkZXIgYXJvdW5kIHRoZSBjb250cm9sLCBpbiBwaXhlbHMuIn0se25hbWU6ImNsYXNzaWQiLGRlc2NyaXB0aW9uOiJUaGUgVVJJIG9mIHRoZSBvYmplY3QncyBpbXBsZW1lbnRhdGlvbi4gSXQgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCwgb3IgaW4gcGxhY2Ugb2YsIHRoZSAqKmRhdGEqKiBhdHRyaWJ1dGUuIn0se25hbWU6ImNvZGViYXNlIixkZXNjcmlwdGlvbjoiVGhlIGJhc2UgcGF0aCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgVVJJcyBzcGVjaWZpZWQgYnkgKipjbGFzc2lkKiosICoqZGF0YSoqLCBvciAqKmFyY2hpdmUqKi4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgdGhlIGJhc2UgVVJJIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LiJ9LHtuYW1lOiJjb2RldHlwZSIsZGVzY3JpcHRpb246IlRoZSBjb250ZW50IHR5cGUgb2YgdGhlIGRhdGEgc3BlY2lmaWVkIGJ5ICoqY2xhc3NpZCoqLiJ9LHtuYW1lOiJkZWNsYXJlIixkZXNjcmlwdGlvbjoiVGhlIHByZXNlbmNlIG9mIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbWFrZXMgdGhpcyBlbGVtZW50IGEgZGVjbGFyYXRpb24gb25seS4gVGhlIG9iamVjdCBtdXN0IGJlIGluc3RhbnRpYXRlZCBieSBhIHN1YnNlcXVlbnQgYDxvYmplY3Q+YCBlbGVtZW50LiBJbiBIVE1MNSwgcmVwZWF0IHRoZSA8b2JqZWN0PiBlbGVtZW50IGNvbXBsZXRlbHkgZWFjaCB0aGF0IHRoYXQgdGhlIHJlc291cmNlIGlzIHJldXNlZC4ifSx7bmFtZToic3RhbmRieSIsZGVzY3JpcHRpb246IkEgbWVzc2FnZSB0aGF0IHRoZSBicm93c2VyIGNhbiBzaG93IHdoaWxlIGxvYWRpbmcgdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uIGFuZCBkYXRhLiJ9LHtuYW1lOiJ0YWJpbmRleCIsZGVzY3JpcHRpb246IlRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgdGFiYmluZyBuYXZpZ2F0aW9uIG9yZGVyIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29iamVjdCJ9XX0se25hbWU6InBhcmFtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcGFyYW0gZWxlbWVudCBkZWZpbmVzIHBhcmFtZXRlcnMgZm9yIHBsdWdpbnMgaW52b2tlZCBieSBvYmplY3QgZWxlbWVudHMuIEl0IGRvZXMgbm90IHJlcHJlc2VudCBhbnl0aGluZyBvbiBpdHMgb3duLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIn19LHtuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246J09ubHkgdXNlZCBpZiB0aGUgYHZhbHVldHlwZWAgaXMgc2V0IHRvICJyZWYiLiBTcGVjaWZpZXMgdGhlIE1JTUUgdHlwZSBvZiB2YWx1ZXMgZm91bmQgYXQgdGhlIFVSSSBzcGVjaWZpZWQgYnkgdmFsdWUuJ30se25hbWU6InZhbHVldHlwZSIsZGVzY3JpcHRpb246J1NwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBkYXRhOiBEZWZhdWx0IHZhbHVlLiBUaGUgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBvYmplY3RcJ3MgaW1wbGVtZW50YXRpb24gYXMgYSBzdHJpbmcuXG4qICAgcmVmOiBUaGUgdmFsdWUgaXMgYSBVUkkgdG8gYSByZXNvdXJjZSB3aGVyZSBydW4tdGltZSB2YWx1ZXMgYXJlIHN0b3JlZC5cbiogICBvYmplY3Q6IEFuIElEIG9mIGFub3RoZXIgW2A8b2JqZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vYmplY3QgIlRoZSBIVE1MIDxvYmplY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCByZXNvdXJjZSwgd2hpY2ggY2FuIGJlIHRyZWF0ZWQgYXMgYW4gaW1hZ2UsIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIG9yIGEgcmVzb3VyY2UgdG8gYmUgaGFuZGxlZCBieSBhIHBsdWdpbi4iKSBpbiB0aGUgc2FtZSBkb2N1bWVudC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BhcmFtIn1dfSx7bmFtZToidmlkZW8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgdmlkZW8gZWxlbWVudCBpcyB1c2VkIGZvciBwbGF5aW5nIHZpZGVvcyBvciBtb3ZpZXMsIGFuZCBhdWRpbyBmaWxlcyB3aXRoIGNhcHRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMifSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byJ9LHtuYW1lOiJwb3N0ZXIifSx7bmFtZToicHJlbG9hZCIsdmFsdWVTZXQ6InBsIn0se25hbWU6ImF1dG9wbGF5Iix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZTsgaWYgc3BlY2lmaWVkLCB0aGUgdmlkZW8gYXV0b21hdGljYWxseSBiZWdpbnMgdG8gcGxheSBiYWNrIGFzIHNvb24gYXMgaXQgY2FuIGRvIHNvIHdpdGhvdXQgc3RvcHBpbmcgdG8gZmluaXNoIGxvYWRpbmcgdGhlIGRhdGEuIn19LHtuYW1lOiJtZWRpYWdyb3VwIn0se25hbWU6Imxvb3AiLHZhbHVlU2V0OiJ2In0se25hbWU6Im11dGVkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJjb250cm9scyIsdmFsdWVTZXQ6InYifSx7bmFtZToid2lkdGgifSx7bmFtZToiaGVpZ2h0In1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyJ9XX0se25hbWU6ImF1ZGlvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBhdWRpbyBlbGVtZW50IHJlcHJlc2VudHMgYSBzb3VuZCBvciBhdWRpbyBzdHJlYW0uIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFVSTCBvZiB0aGUgYXVkaW8gdG8gZW1iZWQuIFRoaXMgaXMgc3ViamVjdCB0byBbSFRUUCBhY2Nlc3MgY29udHJvbHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRUUF9hY2Nlc3NfY29udHJvbCkuIFRoaXMgaXMgb3B0aW9uYWw7IHlvdSBtYXkgaW5zdGVhZCB1c2UgdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlICJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuIikgZWxlbWVudCB3aXRoaW4gdGhlIGF1ZGlvIGJsb2NrIHRvIHNwZWNpZnkgdGhlIGF1ZGlvIHRvIGVtYmVkLid9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQ09SUyB0byBmZXRjaCB0aGUgcmVsYXRlZCBpbWFnZS4gW0NPUlMtZW5hYmxlZCByZXNvdXJjZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgX3RhaW50ZWRfLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOlxuXG5hbm9ueW1vdXNcblxuU2VuZHMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCB3aXRob3V0IGEgY3JlZGVudGlhbC4gSW4gb3RoZXIgd29yZHMsIGl0IHNlbmRzIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIgd2l0aG91dCBhIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIHBlcmZvcm1pbmcgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAoYnkgbm90IHNldHRpbmcgdGhlIGBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46YCBIVFRQIGhlYWRlciksIHRoZSBpbWFnZSB3aWxsIGJlIF90YWludGVkXywgYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG51c2UtY3JlZGVudGlhbHNcblxuU2VuZHMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCB3aXRoIGEgY3JlZGVudGlhbC4gSW4gb3RoZXIgd29yZHMsIGl0IHNlbmRzIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIgd2l0aCBhIGNvb2tpZSwgYSBjZXJ0aWZpY2F0ZSwgb3IgcGVyZm9ybWluZyBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlICh0aHJvdWdoIGBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsczpgIEhUVFAgaGVhZGVyKSwgdGhlIGltYWdlIHdpbGwgYmUgX3RhaW50ZWRfIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuV2hlbiBub3QgcHJlc2VudCwgdGhlIHJlc291cmNlIGlzIGZldGNoZWQgd2l0aG91dCBhIENPUlMgcmVxdWVzdCAoaS5lLiB3aXRob3V0IHNlbmRpbmcgdGhlIGBPcmlnaW46YCBIVFRQIGhlYWRlciksIHByZXZlbnRpbmcgaXRzIG5vbi10YWludGVkIHVzZWQgaW4gW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudHMuIElmIGludmFsaWQsIGl0IGlzIGhhbmRsZWQgYXMgaWYgdGhlIGVudW1lcmF0ZWQga2V5d29yZCAqKmFub255bW91cyoqIHdhcyB1c2VkLiBTZWUgW0NPUlMgc2V0dGluZ3MgYXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJ319LHtuYW1lOiJwcmVsb2FkIix2YWx1ZVNldDoicGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGhpbnQgdG8gdGhlIGJyb3dzZXIgYWJvdXQgd2hhdCB0aGUgYXV0aG9yIHRoaW5rcyB3aWxsIGxlYWQgdG8gdGhlIGJlc3QgdXNlciBleHBlcmllbmNlLiBJdCBtYXkgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgbm9uZWA6IEluZGljYXRlcyB0aGF0IHRoZSBhdWRpbyBzaG91bGQgbm90IGJlIHByZWxvYWRlZC5cbiogICBgbWV0YWRhdGFgOiBJbmRpY2F0ZXMgdGhhdCBvbmx5IGF1ZGlvIG1ldGFkYXRhIChlLmcuIGxlbmd0aCkgaXMgZmV0Y2hlZC5cbiogICBgYXV0b2A6IEluZGljYXRlcyB0aGF0IHRoZSB3aG9sZSBhdWRpbyBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLCBldmVuIGlmIHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgaXQuXG4qICAgX2VtcHR5IHN0cmluZ186IEEgc3lub255bSBvZiB0aGUgYGF1dG9gIHZhbHVlLlxuXG5JZiBub3Qgc2V0LCBgcHJlbG9hZGAncyBkZWZhdWx0IHZhbHVlIGlzIGJyb3dzZXItZGVmaW5lZCAoaS5lLiBlYWNoIGJyb3dzZXIgbWF5IGhhdmUgaXRzIG93biBkZWZhdWx0IHZhbHVlKS4gVGhlIHNwZWMgYWR2aXNlcyBpdCB0byBiZSBzZXQgdG8gYG1ldGFkYXRhYC5cblxuKipVc2FnZSBub3RlczoqKlxuXG4qICAgVGhlIGBhdXRvcGxheWAgYXR0cmlidXRlIGhhcyBwcmVjZWRlbmNlIG92ZXLCoGBwcmVsb2FkYC4gSWYgYGF1dG9wbGF5YCBpcyBzcGVjaWZpZWQsIHRoZSBicm93c2VyIHdvdWxkIG9idmlvdXNseSBuZWVkIHRvIHN0YXJ0IGRvd25sb2FkaW5nIHRoZSBhdWRpbyBmb3IgcGxheWJhY2suXG4qICAgVGhlIGJyb3dzZXIgaXMgbm90IGZvcmNlZCBieSB0aGUgc3BlY2lmaWNhdGlvbiB0byBmb2xsb3cgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlOyBpdCBpcyBhIG1lcmUgaGludC4ifX0se25hbWU6ImF1dG9wbGF5Iix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZTrCoGlmIHNwZWNpZmllZCwgdGhlIGF1ZGlvIHdpbGwgYXV0b21hdGljYWxseSBiZWdpbiBwbGF5YmFjayBhcyBzb29uIGFzIGl0IGNhbiBkbyBzbywgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgZW50aXJlIGF1ZGlvIGZpbGUgdG8gZmluaXNoIGRvd25sb2FkaW5nLlxuXG4qKk5vdGUqKjogU2l0ZXMgdGhhdCBhdXRvbWF0aWNhbGx5IHBsYXkgYXVkaW8gKG9yIHZpZGVvcyB3aXRoIGFuIGF1ZGlvIHRyYWNrKSBjYW4gYmUgYW4gdW5wbGVhc2FudCBleHBlcmllbmNlIGZvciB1c2Vycywgc28gc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiBwb3NzaWJsZS4gSWYgeW91IG11c3Qgb2ZmZXIgYXV0b3BsYXkgZnVuY3Rpb25hbGl0eSwgeW91IHNob3VsZCBtYWtlIGl0IG9wdC1pbiAocmVxdWlyaW5nIGEgdXNlciB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIGl0KS4gSG93ZXZlciwgdGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gY3JlYXRpbmcgbWVkaWEgZWxlbWVudHMgd2hvc2Ugc291cmNlIHdpbGwgYmUgc2V0IGF0IGEgbGF0ZXIgdGltZSwgdW5kZXIgdXNlciBjb250cm9sLiJ9fSx7bmFtZToibWVkaWFncm91cCJ9LHtuYW1lOiJsb29wIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZTrCoGlmIHNwZWNpZmllZCwgdGhlIGF1ZGlvIHBsYXllciB3aWxswqBhdXRvbWF0aWNhbGx5IHNlZWsgYmFjayB0byB0aGUgc3RhcnTCoHVwb24gcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgYXVkaW8uIn19LHtuYW1lOiJtdXRlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYXVkaW8gd2lsbCBiZSBpbml0aWFsbHkgc2lsZW5jZWQuIEl0cyBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuIn19LHtuYW1lOiJjb250cm9scyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoaXMgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZSBicm93c2VyIHdpbGwgb2ZmZXIgY29udHJvbHMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gY29udHJvbCBhdWRpbyBwbGF5YmFjaywgaW5jbHVkaW5nIHZvbHVtZSwgc2Vla2luZywgYW5kIHBhdXNlL3Jlc3VtZSBwbGF5YmFjay4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyJ9XX0se25hbWU6InNvdXJjZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNvdXJjZSBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgbXVsdGlwbGUgYWx0ZXJuYXRpdmUgbWVkaWEgcmVzb3VyY2VzIGZvciBtZWRpYSBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonUmVxdWlyZWQgZm9yIFtgPGF1ZGlvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyAiVGhlIEhUTUwgPGF1ZGlvPiBlbGVtZW50IGlzIHVzZWQgdG8gZW1iZWQgc291bmQgY29udGVudCBpbiBkb2N1bWVudHMuIEl0IG1heSBjb250YWluIG9uZSBvciBtb3JlIGF1ZGlvIHNvdXJjZXMsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzcmMgYXR0cmlidXRlIG9yIHRoZSA8c291cmNlPiBlbGVtZW50OsKgdGhlIGJyb3dzZXIgd2lsbCBjaG9vc2UgdGhlIG1vc3Qgc3VpdGFibGUgb25lLiBJdCBjYW4gYWxzbyBiZSB0aGUgZGVzdGluYXRpb24gZm9yIHN0cmVhbWVkIG1lZGlhLCB1c2luZyBhIE1lZGlhU3RyZWFtLiIpIGFuZCBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8gIlRoZSBIVE1MIFZpZGVvIGVsZW1lbnQgKDx2aWRlbz4pIGVtYmVkcyBhIG1lZGlhIHBsYXllciB3aGljaCBzdXBwb3J0cyB2aWRlbyBwbGF5YmFjayBpbnRvIHRoZSBkb2N1bWVudC4iKSwgYWRkcmVzcyBvZiB0aGUgbWVkaWEgcmVzb3VyY2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIHdoZW4gdGhlIGA8c291cmNlPmAgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIGEgW2A8cGljdHVyZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSAiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLiIpIGVsZW1lbnQuJ319LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgTUlNRS10eXBlIG9mIHRoZSByZXNvdXJjZSwgb3B0aW9uYWxseSB3aXRoIGEgYGNvZGVjc2AgcGFyYW1ldGVyLiBTZWUgW1JGQyA0MjgxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDI4MSkgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBzcGVjaWZ5IGNvZGVjcy4ifX0se25hbWU6InNpemVzIixkZXNjcmlwdGlvbjonSXMgYSBsaXN0IG9mIHNvdXJjZSBzaXplcyB0aGF0IGRlc2NyaWJlcyB0aGUgZmluYWwgcmVuZGVyZWQgd2lkdGggb2YgdGhlIGltYWdlIHJlcHJlc2VudGVkIGJ5IHRoZSBzb3VyY2UuIEVhY2ggc291cmNlIHNpemUgY29uc2lzdHMgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBjb25kaXRpb24tbGVuZ3RoIHBhaXJzLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgYnkgdGhlIGJyb3dzZXIgdG8gZGV0ZXJtaW5lLCBiZWZvcmUgbGF5aW5nIHRoZSBwYWdlIG91dCwgd2hpY2ggaW1hZ2UgZGVmaW5lZCBpbiBbYHNyY3NldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UjYXR0ci1zcmNzZXQpIHRvIHVzZS4gIFxuVGhlIGBzaXplc2AgYXR0cmlidXRlIGhhcyBhbiBlZmZlY3Qgb25seSB3aGVuIHRoZSBbYDxzb3VyY2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSAiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LiIpIGVsZW1lbnQgaXMgdGhlIGRpcmVjdCBjaGlsZCBvZiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgIlRoZSBIVE1MIDxwaWN0dXJlPiBlbGVtZW50IGNvbnRhaW5zIHplcm8gb3IgbW9yZSA8c291cmNlPiBlbGVtZW50cyBhbmQgb25lIDxpbWc+IGVsZW1lbnQgdG8gcHJvdmlkZSB2ZXJzaW9ucyBvZiBhbiBpbWFnZSBmb3IgZGlmZmVyZW50IGRpc3BsYXkvZGV2aWNlIHNjZW5hcmlvcy4iKSBlbGVtZW50Lid9LHtuYW1lOiJzcmNzZXQiLGRlc2NyaXB0aW9uOiJBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzIGluZGljYXRpbmcgYSBzZXQgb2YgcG9zc2libGUgaW1hZ2VzIHJlcHJlc2VudGVkIGJ5IHRoZSBzb3VyY2UgZm9yIHRoZSBicm93c2VyIHRvIHVzZS4gRWFjaCBzdHJpbmcgaXMgY29tcG9zZWQgb2Y6XG5cbjEuICBvbmUgVVJMIHRvIGFuIGltYWdlLFxuMi4gIGEgd2lkdGggZGVzY3JpcHRvciwgdGhhdCBpcyBhIHBvc2l0aXZlIGludGVnZXIgZGlyZWN0bHkgZm9sbG93ZWQgYnkgYCd3J2AuIFRoZSBkZWZhdWx0IHZhbHVlLCBpZiBtaXNzaW5nLCBpcyB0aGUgaW5maW5pdHkuXG4zLiAgYSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IsIHRoYXQgaXMgYSBwb3NpdGl2ZSBmbG9hdGluZyBudW1iZXIgZGlyZWN0bHkgZm9sbG93ZWQgYnkgYCd4J2AuIFRoZSBkZWZhdWx0IHZhbHVlLCBpZiBtaXNzaW5nLCBpcyBgMXhgLlxuXG5FYWNoIHN0cmluZyBpbiB0aGUgbGlzdCBtdXN0IGhhdmUgYXQgbGVhc3QgYSB3aWR0aCBkZXNjcmlwdG9yIG9yIGEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIHRvIGJlIHZhbGlkLiBBbW9uZyB0aGUgbGlzdCwgdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2FtZSB0dXBsZSBvZiB3aWR0aCBkZXNjcmlwdG9yIGFuZCBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IuICBcblRoZSBicm93c2VyIGNob29zZXMgdGhlIG1vc3QgYWRlcXVhdGUgaW1hZ2UgdG8gZGlzcGxheSBhdCBhIGdpdmVuIHBvaW50IG9mIHRpbWUuICBcblRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUgaGFzIGFuIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlIFwiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LlwiKSBlbGVtZW50IGlzIHRoZSBkaXJlY3QgY2hpbGQgb2YgYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlIFwiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLlwiKSBlbGVtZW50LiJ9LHtuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246J1tNZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvTWVkaWFfcXVlcmllcykgb2YgdGhlIHJlc291cmNlXCdzIGludGVuZGVkIG1lZGlhOyB0aGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlICJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuIikgZWxlbWVudC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSJ9XX0se25hbWU6InRyYWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdHJhY2sgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IGV4cGxpY2l0IGV4dGVybmFsIHRpbWVkIHRleHQgdHJhY2tzIGZvciBtZWRpYSBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sYXR0cmlidXRlczpbe25hbWU6ImRlZmF1bHQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdHJhY2sgc2hvdWxkIGJlIGVuYWJsZWQgdW5sZXNzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgaW5kaWNhdGUgdGhhdCBhbm90aGVyIHRyYWNrIGlzIG1vcmUgYXBwcm9wcmlhdGUuIFRoaXMgbWF5IG9ubHkgYmUgdXNlZCBvbiBvbmUgYHRyYWNrYCBlbGVtZW50IHBlciBtZWRpYSBlbGVtZW50LiJ9fSx7bmFtZToia2luZCIsdmFsdWVTZXQ6InRrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJIb3cgdGhlIHRleHQgdHJhY2sgaXMgbWVhbnQgdG8gYmUgdXNlZC4gSWYgb21pdHRlZCB0aGUgZGVmYXVsdCBraW5kIGlzIGBzdWJ0aXRsZXNgLiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LCBpdCB3aWxsIHVzZSB0aGUgYHN1YnRpdGxlc2AuIElmIHRoZSBhdHRyaWJ1dGUgY29udGFpbnMgYW4gaW52YWxpZCB2YWx1ZSwgaXQgd2lsbCB1c2UgYG1ldGFkYXRhYC4gKFZlcnNpb25zIG9mIENocm9tZSBlYXJsaWVyIHRoYW4gNTIgdHJlYXRlZCBhbiBpbnZhbGlkIHZhbHVlIGFzIGBzdWJ0aXRsZXNgLinCoFRoZSBmb2xsb3dpbmcga2V5d29yZHMgYXJlIGFsbG93ZWQ6XG5cbiogICBgc3VidGl0bGVzYFxuICAgICogICBTdWJ0aXRsZXMgcHJvdmlkZSB0cmFuc2xhdGlvbiBvZiBjb250ZW50IHRoYXQgY2Fubm90IGJlIHVuZGVyc3Rvb2QgYnkgdGhlIHZpZXdlci4gRm9yIGV4YW1wbGUgZGlhbG9ndWUgb3IgdGV4dCB0aGF0IGlzIG5vdCBFbmdsaXNoIGluIGFuIEVuZ2xpc2ggbGFuZ3VhZ2UgZmlsbS5cbiAgICAqICAgU3VidGl0bGVzIG1heSBjb250YWluIGFkZGl0aW9uYWwgY29udGVudCwgdXN1YWxseSBleHRyYSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSB0aGUgdGV4dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBTdGFyIFdhcnMgZmlsbXMsIG9yIHRoZSBkYXRlLCB0aW1lLCBhbmQgbG9jYXRpb24gb2YgYSBzY2VuZS5cbiogICBgY2FwdGlvbnNgXG4gICAgKiAgIENsb3NlZCBjYXB0aW9ucyBwcm92aWRlIGEgdHJhbnNjcmlwdGlvbiBhbmQgcG9zc2libHkgYSB0cmFuc2xhdGlvbiBvZiBhdWRpby5cbiAgICAqICAgSXQgbWF5IGluY2x1ZGUgaW1wb3J0YW50IG5vbi12ZXJiYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBtdXNpYyBjdWVzIG9yIHNvdW5kIGVmZmVjdHMuIEl0IG1heSBpbmRpY2F0ZSB0aGUgY3VlJ3Mgc291cmNlIChlLmcuIG11c2ljLCB0ZXh0LCBjaGFyYWN0ZXIpLlxuICAgICogICBTdWl0YWJsZSBmb3IgdXNlcnMgd2hvIGFyZSBkZWFmIG9yIHdoZW4gdGhlIHNvdW5kIGlzIG11dGVkLlxuKiAgIGBkZXNjcmlwdGlvbnNgXG4gICAgKiAgIFRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHZpZGVvIGNvbnRlbnQuXG4gICAgKiAgIFN1aXRhYmxlIGZvciB1c2VycyB3aG8gYXJlIGJsaW5kIG9yIHdoZXJlIHRoZSB2aWRlbyBjYW5ub3QgYmUgc2Vlbi5cbiogICBgY2hhcHRlcnNgXG4gICAgKiAgIENoYXB0ZXIgdGl0bGVzIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aGUgbWVkaWEgcmVzb3VyY2UuXG4qICAgYG1ldGFkYXRhYFxuICAgICogICBUcmFja3MgdXNlZCBieSBzY3JpcHRzLiBOb3QgdmlzaWJsZSB0byB0aGUgdXNlci4ifX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHVzZXItcmVhZGFibGUgdGl0bGUgb2YgdGhlIHRleHQgdHJhY2sgd2hpY2ggaXMgdXNlZCBieSB0aGUgYnJvd3NlciB3aGVuIGxpc3RpbmcgYXZhaWxhYmxlIHRleHQgdHJhY2tzLiJ9fSx7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBZGRyZXNzIG9mIHRoZSB0cmFjayAoYC52dHRgIGZpbGUpLiBNdXN0IGJlIGEgdmFsaWQgVVJMLiBUaGlzIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCBhbmQgaXRzIFVSTCB2YWx1ZSBtdXN0IGhhdmUgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBkb2N1bWVudCDigJQgdW5sZXNzIHRoZSBbYDxhdWRpbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXVkaW8gIlRoZSBIVE1MIDxhdWRpbz4gZWxlbWVudCBpcyB1c2VkIHRvIGVtYmVkIHNvdW5kIGNvbnRlbnQgaW4gZG9jdW1lbnRzLiBJdCBtYXkgY29udGFpbiBvbmUgb3IgbW9yZSBhdWRpbyBzb3VyY2VzLCByZXByZXNlbnRlZCB1c2luZyB0aGUgc3JjIGF0dHJpYnV0ZSBvciB0aGUgPHNvdXJjZT4gZWxlbWVudDrCoHRoZSBicm93c2VyIHdpbGwgY2hvb3NlIHRoZSBtb3N0IHN1aXRhYmxlIG9uZS4gSXQgY2FuIGFsc28gYmUgdGhlIGRlc3RpbmF0aW9uIGZvciBzdHJlYW1lZCBtZWRpYSwgdXNpbmcgYSBNZWRpYVN0cmVhbS4iKSBvciBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8gIlRoZSBIVE1MIFZpZGVvIGVsZW1lbnQgKDx2aWRlbz4pIGVtYmVkcyBhIG1lZGlhIHBsYXllciB3aGljaCBzdXBwb3J0cyB2aWRlbyBwbGF5YmFjayBpbnRvIHRoZSBkb2N1bWVudC4iKSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgYHRyYWNrYCBlbGVtZW50IGhhcyBhIFtgY3Jvc3NvcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgYXR0cmlidXRlLid9fSx7bmFtZToic3JjbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTGFuZ3VhZ2Ugb2YgdGhlIHRyYWNrIHRleHQgZGF0YS4gSXQgbXVzdCBiZSBhIHZhbGlkIFtCQ1AgNDddKGh0dHBzOi8vcjEyYS5naXRodWIuaW8vYXBwLXN1YnRhZ3MvKSBsYW5ndWFnZSB0YWcuIElmIHRoZSBga2luZGAgYXR0cmlidXRlIGlzIHNldCB0b8KgYHN1YnRpdGxlcyxgIHRoZW4gYHNyY2xhbmdgIG11c3QgYmUgZGVmaW5lZC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90cmFjayJ9XX0se25hbWU6Im1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1hcCBlbGVtZW50LCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuIGltZyBlbGVtZW50IGFuZCBhbnkgYXJlYSBlbGVtZW50IGRlc2NlbmRhbnRzLCBkZWZpbmVzIGFuIGltYWdlIG1hcC4gVGhlIGVsZW1lbnQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIn0sYXR0cmlidXRlczpbe25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIGF0dHJpYnV0ZSBnaXZlcyB0aGUgbWFwIGEgbmFtZSBzbyB0aGF0IGl0IGNhbiBiZSByZWZlcmVuY2VkLiBUaGUgYXR0cmlidXRlIG11c3QgYmUgcHJlc2VudCBhbmQgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IHZhbHVlIHdpdGggbm8gc3BhY2UgY2hhcmFjdGVycy4gVGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSBhIGNvbXBhdGliaWxpdHktY2FzZWxlc3MgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgYW5vdGhlciBtYXAgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gSWYgdGhlIGlkIGF0dHJpYnV0ZSBpcyBhbHNvIHNwZWNpZmllZCwgYm90aCBhdHRyaWJ1dGVzIG11c3QgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXAifV19LHtuYW1lOiJhcmVhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYXJlYSBlbGVtZW50IHJlcHJlc2VudHMgZWl0aGVyIGEgaHlwZXJsaW5rIHdpdGggc29tZSB0ZXh0IGFuZCBhIGNvcnJlc3BvbmRpbmcgYXJlYSBvbiBhbiBpbWFnZSBtYXAsIG9yIGEgZGVhZCBhcmVhIG9uIGFuIGltYWdlIG1hcC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWx0In0se25hbWU6ImNvb3JkcyJ9LHtuYW1lOiJzaGFwZSIsdmFsdWVTZXQ6InNoIn0se25hbWU6ImhyZWYifSx7bmFtZToidGFyZ2V0In0se25hbWU6ImRvd25sb2FkIn0se25hbWU6InBpbmcifSx7bmFtZToicmVsIn0se25hbWU6ImhyZWZsYW5nIn0se25hbWU6InR5cGUifSx7bmFtZToiYWNjZXNza2V5IixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEga2V5Ym9hcmQgbmF2aWdhdGlvbiBhY2NlbGVyYXRvciBmb3IgdGhlIGVsZW1lbnQuIFByZXNzaW5nIEFMVCBvciBhIHNpbWlsYXIga2V5IGluIGFzc29jaWF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2VsZWN0cyB0aGUgZm9ybSBjb250cm9sIGNvcnJlbGF0ZWQgd2l0aCB0aGF0IGtleSBzZXF1ZW5jZS4gUGFnZSBkZXNpZ25lcnMgYXJlIGZvcmV3YXJuZWQgdG8gYXZvaWQga2V5IHNlcXVlbmNlcyBhbHJlYWR5IGJvdW5kIHRvIGJyb3dzZXJzLiBUaGlzIGF0dHJpYnV0ZSBpcyBnbG9iYWwgc2luY2UgSFRNTDUuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hcmVhIn1dfSx7bmFtZToidGFibGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0YWJsZSBlbGVtZW50IHJlcHJlc2VudHMgZGF0YSB3aXRoIG1vcmUgdGhhbiBvbmUgZGltZW5zaW9uLCBpbiB0aGUgZm9ybSBvZiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJib3JkZXIifSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyBob3cgdGhlIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBpbnNpZGUgdGhlIGNvbnRhaW5pbmcgZG9jdW1lbnQuIEl0IG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgbGVmdDogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBkb2N1bWVudDtcbiogICBjZW50ZXI6IHRoZSB0YWJsZSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGNlbnRlciBvZiB0aGUgZG9jdW1lbnQ7XG4qICAgcmlnaHQ6IHRoZSB0YWJsZSBpcyBkaXNwbGF5ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGRvY3VtZW50LlxuXG4qKlVzYWdlIE5vdGUqKlxuXG4qICAgKipEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlKiosIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZSBbYDx0YWJsZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGFibGUgIlRoZSBIVE1MIDx0YWJsZT4gZWxlbWVudCByZXByZXNlbnRzIHRhYnVsYXIgZGF0YSDigJQgdGhhdCBpcywgaW5mb3JtYXRpb24gcHJlc2VudGVkIGluIGEgdHdvLWRpbWVuc2lvbmFsIHRhYmxlIGNvbXByaXNlZCBvZiByb3dzIGFuZCBjb2x1bW5zIG9mIGNlbGxzIGNvbnRhaW5pbmcgZGF0YS4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBTZXQgW2BtYXJnaW4tbGVmdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tbGVmdCAiVGhlIG1hcmdpbi1sZWZ0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgbGVmdCBzaWRlIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgYW5kIFtgbWFyZ2luLXJpZ2h0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1yaWdodCAiVGhlIG1hcmdpbi1yaWdodCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSB0byBgYXV0b2Agb3IgW2BtYXJnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luICJUaGUgbWFyZ2luIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiBhbGwgZm91ciBzaWRlcyBvZiBhbiBlbGVtZW50LiBJdCBpcyBhIHNob3J0aGFuZCBmb3IgbWFyZ2luLXRvcCwgbWFyZ2luLXJpZ2h0LCBtYXJnaW4tYm90dG9tLCBhbmQgbWFyZ2luLWxlZnQuIikgdG8gYDAgYXV0b2AgdG8gYWNoaWV2ZSBhbiBlZmZlY3QgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBhbGlnbiBhdHRyaWJ1dGUuXG4qICAgUHJpb3IgdG8gRmlyZWZveCA0LCBGaXJlZm94IGFsc28gc3VwcG9ydGVkIHRoZSBgbWlkZGxlYCwgYGFic21pZGRsZWAsIGFuZCBgYWJzY2VudGVyYCB2YWx1ZXMgYXMgc3lub255bXMgb2YgYGNlbnRlcmAsIGluIHF1aXJrcyBtb2RlIG9ubHkuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90YWJsZSJ9XX0se25hbWU6ImNhcHRpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjYXB0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgdGl0bGUgb2YgdGhlIHRhYmxlIHRoYXQgaXMgaXRzIHBhcmVudCwgaWYgaXQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyBob3cgdGhlIGNhcHRpb24gbXVzdCBiZSBhbGlnbmVkIHdpdGggcmVzcGVjdCB0byB0aGUgdGFibGUuIEl0IG1heSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuYGxlZnRgXG5cblRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCB0byB0aGUgbGVmdCBvZiB0aGUgdGFibGUuXG5cbmB0b3BgXG5cblRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCBhYm92ZSB0aGUgdGFibGUuXG5cbmByaWdodGBcblxuVGhlIGNhcHRpb24gaXMgZGlzcGxheWVkIHRvIHRoZSByaWdodCBvZiB0aGUgdGFibGUuXG5cbmBib3R0b21gXG5cblRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCBiZWxvdyB0aGUgdGFibGUuXG5cbioqVXNhZ2Ugbm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBUaGUgW2A8Y2FwdGlvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FwdGlvbiAiVGhlIEhUTUwgVGFibGUgQ2FwdGlvbiBlbGVtZW50ICg8Y2FwdGlvbj4pIHNwZWNpZmllcyB0aGUgY2FwdGlvbiAob3IgdGl0bGUpIG9mIGEgdGFibGUsIGFuZCBpZiB1c2VkIGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hpbGQgb2YgYSA8dGFibGU+LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnRpZXMgW2BjYXB0aW9uLXNpZGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY2FwdGlvbi1zaWRlICJUaGUgY2FwdGlvbi1zaWRlIENTUyBwcm9wZXJ0eSBwdXRzIHRoZSBjb250ZW50IG9mIGEgdGFibGVcJ3MgPGNhcHRpb24+IG9uIHRoZSBzcGVjaWZpZWQgc2lkZS4gVGhlIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHdyaXRpbmctbW9kZSBvZiB0aGUgdGFibGUuIikgYW5kIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhcHRpb24ifV19LHtuYW1lOiJjb2xncm91cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvbGdyb3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIHRhYmxlIHRoYXQgaXMgaXRzIHBhcmVudCwgaWYgaXQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3BhbiJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNvbHVtbiBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuIFRoZSBkZXNjZW5kYW50IFtgPGNvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sICJUaGUgSFRNTCA8Y29sPiBlbGVtZW50IGRlZmluZXMgYSBjb2x1bW4gd2l0aGluIGEgdGFibGUgYW5kIGlzIHVzZWQgZm9yIGRlZmluaW5nIGNvbW1vbiBzZW1hbnRpY3Mgb24gYWxsIGNvbW1vbiBjZWxscy4gSXQgaXMgZ2VuZXJhbGx5IGZvdW5kIHdpdGhpbiBhIDxjb2xncm91cD4gZWxlbWVudC4iKSBlbGVtZW50cyBtYXkgb3ZlcnJpZGUgdGhpcyB2YWx1ZSB1c2luZyB0aGVpciBvd24gW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1hbGlnbikgYXR0cmlidXRlLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXM6XG4gICAgKiAgIERvIG5vdCB0cnkgdG8gc2V0IHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gYSBzZWxlY3RvciBnaXZpbmcgYSBbYDxjb2xncm91cD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAgIlRoZSBIVE1MIDxjb2xncm91cD4gZWxlbWVudCBkZWZpbmVzIGEgZ3JvdXAgb2YgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4iKSBlbGVtZW50LiBCZWNhdXNlIFtgPHRkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnRzIGFyZSBub3QgZGVzY2VuZGFudCBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIG9uZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IgcGVyIGNvbHVtbiwgd2hlcmUgYSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZSBhbmQgYiBpcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiB0aGlzIGNvbHVtbiBpbiB0aGUgdGFibGUuIE9ubHkgYWZ0ZXIgdGhpcyBzZWxlY3RvciB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IGNhbiBiZSB1c2VkLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwIn1dfSx7bmFtZToiY29sIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiBhIGNvbCBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgdGhhdCBpcyBhIGNvbGdyb3VwIGVsZW1lbnQgdGhhdCBpdHNlbGYgaGFzIGEgcGFyZW50IHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LCB0aGVuIHRoZSBjb2wgZWxlbWVudCByZXByZXNlbnRzIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIGNvbHVtbiBncm91cCByZXByZXNlbnRlZCBieSB0aGF0IGNvbGdyb3VwLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcGFuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY29sdW1uIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCNhdHRyLWFsaWduKSBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCB0aGlzIGA8Y29sPmAgZWxlbWVudCBiZWxvbmdzIHRvby4gSWYgdGhlcmUgYXJlIG5vbmUsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzOlxuICAgICogICBEbyBub3QgdHJ5IHRvIHNldCB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGEgc2VsZWN0b3IgZ2l2aW5nIGEgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnQuIEJlY2F1c2UgW2A8dGQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkICJUaGUgSFRNTCA8dGQ+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgb2YgYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGRhdGEuIEl0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFibGUgbW9kZWwuIikgZWxlbWVudHMgYXJlIG5vdCBkZXNjZW5kYW50IG9mIHRoZSBbYDxjb2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCAiVGhlIEhUTUwgPGNvbD4gZWxlbWVudCBkZWZpbmVzIGEgY29sdW1uIHdpdGhpbiBhIHRhYmxlIGFuZCBpcyB1c2VkIGZvciBkZWZpbmluZyBjb21tb24gc2VtYW50aWNzIG9uIGFsbCBjb21tb24gY2VsbHMuIEl0IGlzIGdlbmVyYWxseSBmb3VuZCB3aXRoaW4gYSA8Y29sZ3JvdXA+IGVsZW1lbnQuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIHRoZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IuIFNldCBgYWAgdG8gemVybyBhbmQgYGJgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSB0YWJsZSwgZS5nLiBgdGQ6bnRoLWNoaWxkKDIpIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1gIHRvIHJpZ2h0LWFsaWduIHRoZSBzZWNvbmQgY29sdW1uLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wifV19LHtuYW1lOiJ0Ym9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRib2R5IGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIGEgYm9keSBvZiBkYXRhIGZvciB0aGUgcGFyZW50IHRhYmxlIGVsZW1lbnQsIGlmIHRoZSB0Ym9keSBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgaXQgaXMgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBpdC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSJ9XX0se25hbWU6InRoZWFkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGhlYWQgZWxlbWVudCByZXByZXNlbnRzIHRoZSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiB0aGUgY29sdW1uIGxhYmVscyAoaGVhZGVycykgZm9yIHRoZSBwYXJlbnQgdGFibGUgZWxlbWVudCwgaWYgdGhlIHRoZWFkIGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCBpdCBpcyBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGhlYWQjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgdXNlIHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGl0LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkIn1dfSx7bmFtZToidGZvb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0Zm9vdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIHRoZSBjb2x1bW4gc3VtbWFyaWVzIChmb290ZXJzKSBmb3IgdGhlIHBhcmVudCB0YWJsZSBlbGVtZW50LCBpZiB0aGUgdGZvb3QgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIGl0IGlzIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gaXQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QifV19LHtuYW1lOiJ0ciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJvdyBvZiBjZWxscyBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J0EgW2BET01TdHJpbmdgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NU3RyaW5nICJET01TdHJpbmcgaXMgYSBVVEYtMTYgU3RyaW5nLiBBcyBKYXZhU2NyaXB0IGFscmVhZHkgdXNlcyBzdWNoIHN0cmluZ3MsIERPTVN0cmluZyBpcyBtYXBwZWQgZGlyZWN0bHkgdG8gYSBTdHJpbmcuIikgd2hpY2ggc3BlY2lmaWVzIGhvdyB0aGUgY2VsbFwncyBjb250ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGNlbGxzIGluIHRoZSByb3c7IHRoaXMgaXMgc2hvcnRoYW5kIGZvciB1c2luZyBgYWxpZ25gIG9uIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdyBpbmRpdmlkdWFsbHkuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbmBsZWZ0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIGxlZnQgZWRnZS5cblxuYGNlbnRlcmBcblxuQ2VudGVyIHRoZSBjb250ZW50cyBvZiBlYWNoIGNlbGwgYmV0d2VlbiB0aGVpciBsZWZ0IGFuZCByaWdodCBlZGdlcy5cblxuYHJpZ2h0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIHJpZ2h0IGVkZ2UuXG5cbmBqdXN0aWZ5YFxuXG5XaWRlbiB3aGl0ZXNwYWNlcyB3aXRoaW4gdGhlIHRleHQgb2YgZWFjaCBjZWxsIHNvIHRoYXQgdGhlIHRleHQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgZWFjaCBjZWxsIChmdWxsIGp1c3RpZmljYXRpb24pLlxuXG5gY2hhcmBcblxuQWxpZ24gZWFjaCBjZWxsIGluIHRoZSByb3cgb24gYSBzcGVjaWZpYyBjaGFyYWN0ZXIgKHN1Y2ggdGhhdCBlYWNoIHJvdyBpbiB0aGUgY29sdW1uIHRoYXQgaXMgY29uZmlndXJlZCB0aGlzIHdheSB3aWxsIGhvcml6b250YWxseSBhbGlnbiBpdHMgY2VsbHMgb24gdGhhdCBjaGFyYWN0ZXIpLiBUaGlzIHVzZXMgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ciNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHIjYXR0ci1jaGFyb2ZmKSB0byBlc3RhYmxpc2ggdGhlIGFsaWdubWVudCBjaGFyYWN0ZXIgKHR5cGljYWxseSAiLiIgb3IgIiwiIHdoZW4gYWxpZ25pbmcgbnVtZXJpY2FsIGRhdGEpIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgZm9sbG93IHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyLiBUaGlzIGFsaWdubWVudCB0eXBlIHdhcyBuZXZlciB3aWRlbHkgc3VwcG9ydGVkLlxuXG5JZiBubyB2YWx1ZSBpcyBleHByZXNzbHkgc2V0IGZvciBgYWxpZ25gLCB0aGUgcGFyZW50IG5vZGVcJ3MgdmFsdWUgaXMgaW5oZXJpdGVkLlxuXG5JbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYnNvbGV0ZSBgYWxpZ25gIGF0dHJpYnV0ZSwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byBlc3RhYmxpc2ggYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCwgb3IgYGp1c3RpZnlgIGFsaWdubWVudCBmb3IgdGhlIHJvd1wncyBjZWxscy4gVG8gYXBwbHkgY2hhcmFjdGVyLWJhc2VkIGFsaWdubWVudCwgc2V0IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyIChzdWNoIGFzIGAiLiJgIG9yIGAiLCJgKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyIn1dfSx7bmFtZToidGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZCBlbGVtZW50IHJlcHJlc2VudHMgYSBkYXRhIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHV0IHRoZSBhYmJyZXZpYXRlZCBkZXNjcmlwdGlvbiBpbnNpZGUgdGhlIGNlbGwgYW5kIHBsYWNlIHRoZSBsb25nIGNvbnRlbnQgaW4gdGhlICoqdGl0bGUqKiBhdHRyaWJ1dGUuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IHRoZSBjZWxsIGNvbnRlbnRcJ3MgaG9yaXpvbnRhbCBhbGlnbm1lbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgOiBUaGUgY29udGVudCBpcyBhbGlnbmVkIHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsLlxuKiAgIGBjZW50ZXJgOiBUaGUgY29udGVudCBpcyBjZW50ZXJlZCBpbiB0aGUgY2VsbC5cbiogICBgcmlnaHRgOiBUaGUgY29udGVudCBpcyBhbGlnbmVkIHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbC5cbiogICBganVzdGlmeWAgKHdpdGggdGV4dCBvbmx5KTogVGhlIGNvbnRlbnQgaXMgc3RyZXRjaGVkIG91dCBpbnNpZGUgdGhlIGNlbGwgc28gdGhhdCBpdCBjb3ZlcnMgaXRzIGVudGlyZSB3aWR0aC5cbiogICBgY2hhcmAgKHdpdGggdGV4dCBvbmx5KTogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byBhIGNoYXJhY3RlciBpbnNpZGUgdGhlIGA8dGg+YCBlbGVtZW50IHdpdGggbWluaW1hbCBvZmZzZXQuIFRoaXMgY2hhcmFjdGVyIGlzIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5UaGUgZGVmYXVsdCB2YWx1ZSB3aGVuIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXMgYGxlZnRgLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgYXBwbHkgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgdG8gdGhlIGVsZW1lbnQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgZ2l2ZSB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRoZSBzYW1lIHZhbHVlIHlvdSB3b3VsZCB1c2UgZm9yIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jaGFyKS4gVW5pbXBsZW1lbnRlZCBpbiBDU1MzLid9LHtuYW1lOiJheGlzIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmdzLiBFYWNoIHN0cmluZyBpcyB0aGUgYGlkYCBvZiBhIGdyb3VwIG9mIGNlbGxzIHRoYXQgdGhpcyBoZWFkZXIgYXBwbGllcyB0by5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC4ifSx7bmFtZToiYmdjb2xvciIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgZWFjaCBjZWxsIGluIGEgY29sdW1uLiBJdCBjb25zaXN0cyBvZiBhIDYtZGlnaXQgaGV4YWRlY2ltYWwgY29kZSBhcyBkZWZpbmVkIGluIFtzUkdCXShodHRwczovL3d3dy53My5vcmcvR3JhcGhpY3MvQ29sb3Ivc1JHQikgYW5kIGlzIHByZWZpeGVkIGJ5IFwnI1wnLiBUaGlzIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB3aXRoIG9uZSBvZiBzaXh0ZWVuIHByZWRlZmluZWQgY29sb3Igc3RyaW5nczpcblxuwqBcblxuYGJsYWNrYCA9ICIjMDAwMDAwIlxuXG7CoFxuXG5gZ3JlZW5gID0gIiMwMDgwMDAiXG5cbsKgXG5cbmBzaWx2ZXJgID0gIiNDMEMwQzAiXG5cbsKgXG5cbmBsaW1lYCA9ICIjMDBGRjAwIlxuXG7CoFxuXG5gZ3JheWAgPSAiIzgwODA4MCJcblxuwqBcblxuYG9saXZlYCA9ICIjODA4MDAwIlxuXG7CoFxuXG5gd2hpdGVgID0gIiNGRkZGRkYiXG5cbsKgXG5cbmB5ZWxsb3dgID0gIiNGRkZGMDAiXG5cbsKgXG5cbmBtYXJvb25gID0gIiM4MDAwMDAiXG5cbsKgXG5cbmBuYXZ5YCA9ICIjMDAwMDgwIlxuXG7CoFxuXG5gcmVkYCA9ICIjRkYwMDAwIlxuXG7CoFxuXG5gYmx1ZWAgPSAiIzAwMDBGRiJcblxuwqBcblxuYHB1cnBsZWAgPSAiIzgwMDA4MCJcblxuwqBcblxuYHRlYWxgID0gIiMwMDgwODAiXG5cbsKgXG5cbmBmdWNoc2lhYCA9ICIjRkYwMEZGIlxuXG7CoFxuXG5gYXF1YWAgPSAiIzAwRkZGRiJcblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGlzIG5vbi1zdGFuZGFyZCBhbmQgb25seSBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcjogVGhlIFtgPHRkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGNyZWF0ZSBhIHNpbWlsYXIgZWZmZWN0IHVzZSB0aGUgW2BiYWNrZ3JvdW5kLWNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIGluc3RlYWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCJ9XX0se25hbWU6InRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGggZWxlbWVudCByZXByZXNlbnRzIGEgaGVhZGVyIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToic2NvcGUiLHZhbHVlU2V0OiJzIn0se25hbWU6InNvcnRlZCJ9LHtuYW1lOiJhYmJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIHNob3J0IGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjZWxsJ3MgY29udGVudC4gU29tZSB1c2VyLWFnZW50cywgc3VjaCBhcyBzcGVlY2ggcmVhZGVycywgbWF5IHByZXNlbnQgdGhpcyBkZXNjcmlwdGlvbiBiZWZvcmUgdGhlIGNvbnRlbnQgaXRzZWxmLiJ9fSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgdGhlIGNlbGwgY29udGVudFwncyBob3Jpem9udGFsIGFsaWdubWVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGwuXG4qICAgYGNlbnRlcmA6IFRoZSBjb250ZW50IGlzIGNlbnRlcmVkIGluIHRoZSBjZWxsLlxuKiAgIGByaWdodGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsLlxuKiAgIGBqdXN0aWZ5YCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBzdHJldGNoZWQgb3V0IGluc2lkZSB0aGUgY2VsbCBzbyB0aGF0IGl0IGNvdmVycyBpdHMgZW50aXJlIHdpZHRoLlxuKiAgIGBjaGFyYCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBhbGlnbmVkIHRvIGEgY2hhcmFjdGVyIGluc2lkZSB0aGUgYDx0aD5gIGVsZW1lbnQgd2l0aCBtaW5pbWFsIG9mZnNldC4gVGhpcyBjaGFyYWN0ZXIgaXMgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMuXG5cblRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpcyBgbGVmdGAuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCBhcHBseSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byB0aGUgZWxlbWVudC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBnaXZlIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgdGhlIHNhbWUgdmFsdWUgeW91IHdvdWxkIHVzZSBmb3IgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLWNoYXIpLiBVbmltcGxlbWVudGVkIGluIENTUzMuJ30se25hbWU6ImF4aXMiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN0cmluZ3MuIEVhY2ggc3RyaW5nIGlzIHRoZSBgaWRgIG9mIGEgZ3JvdXAgb2YgY2VsbHMgdGhhdCB0aGlzIGhlYWRlciBhcHBsaWVzIHRvLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkOiB1c2UgdGhlIFtgc2NvcGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgjYXR0ci1zY29wZSkgYXR0cmlidXRlIGluc3RlYWQuIn0se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOidUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGVhY2ggY2VsbCBpbiBhIGNvbHVtbi4gSXQgY29uc2lzdHMgb2YgYSA2LWRpZ2l0IGhleGFkZWNpbWFsIGNvZGUgYXMgZGVmaW5lZCBpbiBbc1JHQl0oaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0NvbG9yL3NSR0IpIGFuZCBpcyBwcmVmaXhlZCBieSBcJyNcJy4gVGhpcyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgd2l0aCBvbmUgb2Ygc2l4dGVlbiBwcmVkZWZpbmVkIGNvbG9yIHN0cmluZ3M6XG5cbsKgXG5cbmBibGFja2AgPSAiIzAwMDAwMCJcblxuwqBcblxuYGdyZWVuYCA9ICIjMDA4MDAwIlxuXG7CoFxuXG5gc2lsdmVyYCA9ICIjQzBDMEMwIlxuXG7CoFxuXG5gbGltZWAgPSAiIzAwRkYwMCJcblxuwqBcblxuYGdyYXlgID0gIiM4MDgwODAiXG5cbsKgXG5cbmBvbGl2ZWAgPSAiIzgwODAwMCJcblxuwqBcblxuYHdoaXRlYCA9ICIjRkZGRkZGIlxuXG7CoFxuXG5geWVsbG93YCA9ICIjRkZGRjAwIlxuXG7CoFxuXG5gbWFyb29uYCA9ICIjODAwMDAwIlxuXG7CoFxuXG5gbmF2eWAgPSAiIzAwMDA4MCJcblxuwqBcblxuYHJlZGAgPSAiI0ZGMDAwMCJcblxuwqBcblxuYGJsdWVgID0gIiMwMDAwRkYiXG5cbsKgXG5cbmBwdXJwbGVgID0gIiM4MDAwODAiXG5cbsKgXG5cbmB0ZWFsYCA9ICIjMDA4MDgwIlxuXG7CoFxuXG5gZnVjaHNpYWAgPSAiI0ZGMDBGRiJcblxuwqBcblxuYGFxdWFgID0gIiMwMEZGRkYiXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBpcyBub24tc3RhbmRhcmQgYW5kIG9ubHkgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXI6IFRoZSBbYDx0aD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGggIlRoZSBIVE1MIDx0aD4gZWxlbWVudCBkZWZpbmVzIGEgY2VsbCBhcyBoZWFkZXIgb2YgYSBncm91cCBvZiB0YWJsZSBjZWxscy4gVGhlIGV4YWN0IG5hdHVyZSBvZiB0aGlzIGdyb3VwIGlzIGRlZmluZWQgYnkgdGhlIHNjb3BlIGFuZCBoZWFkZXJzIGF0dHJpYnV0ZXMuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUykuIFRvIGNyZWF0ZSBhIHNpbWlsYXIgZWZmZWN0IHVzZSB0aGUgW2BiYWNrZ3JvdW5kLWNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTKSBpbnN0ZWFkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgifV19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZm9ybSBlbGVtZW50IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cywgc29tZSBvZiB3aGljaCBjYW4gcmVwcmVzZW50IGVkaXRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSBzdWJtaXR0ZWQgdG8gYSBzZXJ2ZXIgZm9yIHByb2Nlc3NpbmcuIn0sYXR0cmlidXRlczpbe25hbWU6ImFjY2VwdC1jaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLSBvciBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRoYXQgdGhlIHNlcnZlciBhY2NlcHRzLiBUaGUgYnJvd3NlciB1c2VzIHRoZW0gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUsIHRoZSByZXNlcnZlZCBzdHJpbmcgYCJVTktOT1dOImAsIGluZGljYXRlcyB0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGF0IG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBmb3JtIGVsZW1lbnQuICBcbkluIHByZXZpb3VzIHZlcnNpb25zIG9mIEhUTUwsIHRoZSBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncyBjb3VsZCBiZSBkZWxpbWl0ZWQgYnkgc3BhY2VzIG9yIGNvbW1hcy4gSW4gSFRNTDUsIG9ubHkgc3BhY2VzIGFyZSBhbGxvd2VkIGFzIGRlbGltaXRlcnMuJ319LHtuYW1lOiJhY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkkgb2YgYSBwcm9ncmFtIHRoYXQgcHJvY2Vzc2VzIHRoZSBmb3JtIGluZm9ybWF0aW9uLiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3JtYWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm1hY3Rpb24pIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZVNldDoibyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXQgZWxlbWVudHMgY2FuIGJ5IGRlZmF1bHQgaGF2ZSB0aGVpciB2YWx1ZXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgYnkgdGhlIGJyb3dzZXIuIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhbiBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBiZWxvbmdpbmcgdG8gdGhlIGZvcm0uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgb2ZmYDogVGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IGVudGVyIGEgdmFsdWUgaW50byBlYWNoIGZpZWxkIGZvciBldmVyeSB1c2UsIG9yIHRoZSBkb2N1bWVudCBwcm92aWRlcyBpdHMgb3duIGF1dG8tY29tcGxldGlvbiBtZXRob2Q7IHRoZSBicm93c2VyIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY29tcGxldGUgZW50cmllcy5cbiogICBgb25gOiBUaGUgYnJvd3NlciBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB2YWx1ZXMgYmFzZWQgb24gdmFsdWVzIHRoYXQgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgZW50ZXJlZCBpbiB0aGUgZm9ybS5cblxuRm9yIG1vc3QgbW9kZXJuIGJyb3dzZXJzIChpbmNsdWRpbmcgRmlyZWZveCAzOCssIEdvb2dsZSBDaHJvbWUgMzQrLCBJRSAxMSspIHNldHRpbmcgdGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgd2lsbCBub3QgcHJldmVudCBhIGJyb3dzZXIncyBwYXNzd29yZCBtYW5hZ2VyIGZyb20gYXNraW5nIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0byBzdG9yZSBsb2dpbiBmaWVsZHMgKHVzZXJuYW1lIGFuZCBwYXNzd29yZCksIGlmIHRoZSB1c2VyIHBlcm1pdHMgdGhlIHN0b3JhZ2UgdGhlIGJyb3dzZXIgd2lsbCBhdXRvZmlsbCB0aGUgbG9naW4gdGhlIG5leHQgdGltZSB0aGUgdXNlciB2aXNpdHMgdGhlIHBhZ2UuIFNlZSBbVGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgYW5kIGxvZ2luIGZpZWxkc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJpbmdfeW91cl9zaXRlL1R1cm5pbmdfb2ZmX2Zvcm1fYXV0b2NvbXBsZXRpb24jVGhlX2F1dG9jb21wbGV0ZV9hdHRyaWJ1dGVfYW5kX2xvZ2luX2ZpZWxkcykuIn19LHtuYW1lOiJlbmN0eXBlIix2YWx1ZVNldDoiZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1doZW4gdGhlIHZhbHVlIG9mIHRoZSBgbWV0aG9kYCBhdHRyaWJ1dGUgaXMgYHBvc3RgLCBlbmN0eXBlIGlzIHRoZSBbTUlNRSB0eXBlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW1lX3R5cGUpIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFRoZSB2YWx1ZSB1c2VkIGZvciBhbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IHdpdGggdGhlIGB0eXBlYCBhdHRyaWJ1dGUgc2V0IHRvICJmaWxlIi5cbiogICBgdGV4dC9wbGFpbmA6IChIVE1MNSlcblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybWVuY3R5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybWVuY3R5cGUpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToibWV0aG9kIix2YWx1ZVNldDoibSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFtIVFRQXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQKSBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW1BPU1QgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS41KSA7IGZvcm0gZGF0YSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSBcJz9cJyBhcyBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cbiogICBgZGlhbG9nYDogVXNlIHdoZW4gdGhlIGZvcm0gaXMgaW5zaWRlIGHCoFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nICJUaGUgSFRNTCA8ZGlhbG9nPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkaWFsb2cgYm94IG9yIG90aGVyIGludGVyYWN0aXZlIGNvbXBvbmVudCwgc3VjaCBhcyBhbiBpbnNwZWN0b3Igb3Igd2luZG93LiIpIGVsZW1lbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIHN1Ym1pdHRlZC5cblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybW1ldGhvZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3JtbWV0aG9kKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBmb3JtLiBJbiBIVE1MIDQsIGl0cyB1c2UgaXMgZGVwcmVjYXRlZCAoYGlkYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkKS4gSXQgbXVzdCBiZSB1bmlxdWUgYW1vbmcgdGhlIGZvcm1zIGluIGEgZG9jdW1lbnQgYW5kIG5vdCBqdXN0IGFuIGVtcHR5IHN0cmluZyBpbiBIVE1MIDUuIn19LHtuYW1lOiJub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZm9ybSBpcyBub3QgdG8gYmUgdmFsaWRhdGVkIHdoZW4gc3VibWl0dGVkLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIChhbmQgdGhlcmVmb3JlIHRoZSBmb3JtIGlzIHZhbGlkYXRlZCksIHRoaXMgZGVmYXVsdCBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3Jtbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3Jtbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQgYmVsb25naW5nIHRvIHRoZSBmb3JtLid9fSx7bmFtZToidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIHRoYXQgaXMgcmVjZWl2ZWQgYWZ0ZXIgc3VibWl0dGluZyB0aGUgZm9ybS4gSW4gSFRNTCA0LCB0aGlzIGlzIHRoZSBuYW1lL2tleXdvcmQgZm9yIGEgZnJhbWUuIEluIEhUTUw1LCBpdCBpcyBhIG5hbWUva2V5d29yZCBmb3IgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlLCB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBzYW1lIEhUTUwgNCBmcmFtZSAob3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dCkgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byBhIG5ldyB1bm5hbWVkIEhUTUwgNCB3aW5kb3cgb3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIEhUTUwgNCBmcmFtZXNldCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIG9yIEhUTUw1IHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogSFRNTCA0OiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBmdWxsIG9yaWdpbmFsIHdpbmRvdywgYW5kIGNhbmNlbCBhbGwgb3RoZXIgZnJhbWVzLiBIVE1MNTogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKGkuZS4sIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBfaWZyYW1lbmFtZV86IFRoZSByZXNwb25zZSBpcyBkaXNwbGF5ZWQgaW4gYSBuYW1lZCBbYDxpZnJhbWU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSAiVGhlIEhUTUwgSW5saW5lIEZyYW1lIGVsZW1lbnQgKDxpZnJhbWU+KSByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGVtYmVkZGluZyBhbm90aGVyIEhUTUwgcGFnZSBpbnRvIHRoZSBjdXJyZW50IG9uZS4iKS5cblxuSFRNTDU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm10YXJnZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybXRhcmdldCkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJhY2NlcHQiLGRlc2NyaXB0aW9uOidBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnQgdHlwZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMuXG5cbioqVXNhZ2Ugbm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkIGluIEhUTUw1IGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGUgW2BhY2NlcHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci1hY2NlcHQpIGF0dHJpYnV0ZSBvZiB0aGUgc3BlY2lmaWMgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGlzIGEgbm9uc3RhbmRhcmQgYXR0cmlidXRlIHVzZWQgYnkgaU9TIFNhZmFyaSBNb2JpbGUgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIGZvciB0ZXh0dWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50cyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSWYgdGhlIGBhdXRvY2FwaXRhbGl6ZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBvbiBhbiBpbmRpdmlkdWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50LCBpdCB0cnVtcHMgdGhlIGZvcm0td2lkZSBgYXV0b2NhcGl0YWxpemVgIHNldHRpbmcuIFRoZSBub24tZGVwcmVjYXRlZCB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBpbiBpT1MgNSBhbmQgbGF0ZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzZW50ZW5jZXNgLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvblxuKiAgIGBzZW50ZW5jZXNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZXMuXG4qICAgYHdvcmRzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygd29yZHMuXG4qICAgYGNoYXJhY3RlcnNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgYWxsIGNoYXJhY3RlcnMuXG4qICAgYG9uYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS5cbiogICBgb2ZmYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0ifV19LHtuYW1lOiJsYWJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxhYmVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gaW4gYSB1c2VyIGludGVyZmFjZS4gVGhlIGNhcHRpb24gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGZvcm0gY29udHJvbCwga25vd24gYXMgdGhlIGxhYmVsIGVsZW1lbnQncyBsYWJlbGVkIGNvbnRyb2wsIGVpdGhlciB1c2luZyB0aGUgZm9yIGF0dHJpYnV0ZSwgb3IgYnkgcHV0dGluZyB0aGUgZm9ybSBjb250cm9sIGluc2lkZSB0aGUgbGFiZWwgZWxlbWVudCBpdHNlbGYuIn0sYXR0cmlidXRlczpbe25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHdpdGggd2hpY2ggdGhlIGxhYmVsIGlzIGFzc29jaWF0ZWQgKGl0cyBfZm9ybSBvd25lcl8pLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzIHRoZSBgaWRgIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gVGhpcyBsZXRzIHlvdSBwbGFjZSBsYWJlbCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaWQpIG9mIGEgW2xhYmVsYWJsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvSFRNTC9Db250ZW50X2NhdGVnb3JpZXMjRm9ybV9sYWJlbGFibGUpIGZvcm0tcmVsYXRlZCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBgPGxhYmVsPmAgZWxlbWVudC4gVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHdpdGggYW4gYGlkYCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIGBmb3JgIGF0dHJpYnV0ZSBpcyB0aGUgX2xhYmVsZWQgY29udHJvbF8gZm9yIHRoaXMgbGFiZWwgZWxlbWVudCwgaWYgaXQgaXMgYSBsYWJlbGFibGUgZWxlbWVudC4gSWYgaXQgaXPCoG5vdCBsYWJlbGFibGUgdGhlbiB0aGUgYGZvcmAgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QuIElmIHRoZXJlIGFyZSBvdGhlciBlbGVtZW50cyB3aGljaCBhbHNvIG1hdGNoIHRoZSBgaWRgIHZhbHVlLCBsYXRlciBpbiB0aGUgZG9jdW1lbnQsIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkLlxuXG4qKk5vdGUqKjogQSBgPGxhYmVsPmAgZWxlbWVudCBjYW4gaGF2ZSBib3RoIGEgYGZvcmAgYXR0cmlidXRlIGFuZCBhIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQsIGFzIGxvbmcgYXMgdGhlIGBmb3JgIGF0dHJpYnV0ZSBwb2ludHMgdG8gdGhlIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGFiZWwifV19LHtuYW1lOiJpbnB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucHV0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHR5cGVkIGRhdGEgZmllbGQsIHVzdWFsbHkgd2l0aCBhIGZvcm0gY29udHJvbCB0byBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSBkYXRhLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhY2NlcHQifSx7bmFtZToiYWx0In0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIn0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYifSx7bmFtZToiY2hlY2tlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJmb3JtYWN0aW9uIn0se25hbWU6ImZvcm1lbmN0eXBlIix2YWx1ZVNldDoiZXQifSx7bmFtZToiZm9ybW1ldGhvZCIsdmFsdWVTZXQ6ImZtIn0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJmb3JtdGFyZ2V0In0se25hbWU6ImhlaWdodCJ9LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJsaXN0In0se25hbWU6Im1heCJ9LHtuYW1lOiJtYXhsZW5ndGgifSx7bmFtZToibWluIn0se25hbWU6Im1pbmxlbmd0aCJ9LHtuYW1lOiJtdWx0aXBsZSIsdmFsdWVTZXQ6InYifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJwYXR0ZXJuIn0se25hbWU6InBsYWNlaG9sZGVyIn0se25hbWU6InJlYWRvbmx5Iix2YWx1ZVNldDoidiJ9LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToic2l6ZSJ9LHtuYW1lOiJzcmMifSx7bmFtZToic3RlcCJ9LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoidCJ9LHtuYW1lOiJ2YWx1ZSJ9LHtuYW1lOiJ3aWR0aCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQifV19LHtuYW1lOiJidXR0b24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBidXR0b24gZWxlbWVudCByZXByZXNlbnRzIGEgYnV0dG9uIGxhYmVsZWQgYnkgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCB0aGUgYnV0dG9uIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMsIHVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgaXQsIGZvciBleGFtcGxlIGJ5IHR5cGluZyBpbiBhIGRpZmZlcmVudCBjb250cm9sLiBPbmx5IG9uZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCBpbiBhIGRvY3VtZW50IGNhbiBoYXZlIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllZC4ifX0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUgYnV0dG9uLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYnV0dG9uIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdpdGggdGhlICoqZGlzYWJsZWQqKiBhdHRyaWJ1dGUgc2V0LCB0aGVuIHRoZSBidXR0b24gaXMgZW5hYmxlZC5cblxuRmlyZWZveCB3aWxsLCB1bmxpa2Ugb3RoZXIgYnJvd3NlcnMsIGJ5IGRlZmF1bHQsIFtwZXJzaXN0IHRoZSBkeW5hbWljIGRpc2FibGVkIHN0YXRlXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTg1ODM5L2J1Zy13aXRoLWZpcmVmb3gtZGlzYWJsZWQtYXR0cmlidXRlLW9mLWlucHV0LW5vdC1yZXNldHRpbmctd2hlbi1yZWZyZXNoaW5nKSBvZiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBhY3Jvc3MgcGFnZSBsb2Fkcy4gVXNlIHRoZSBbYGF1dG9jb21wbGV0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoaXMgZmVhdHVyZS4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYnV0dG9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoaXRzIF9mb3JtIG93bmVyXykuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG11c3QgYmUgdGhlICoqaWQqKiBhdHRyaWJ1dGUgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYDxidXR0b24+YCBlbGVtZW50IHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhbiBhbmNlc3RvciBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50LCBpZiBvbmUgZXhpc3RzLiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBhc3NvY2lhdGUgYDxidXR0b24+YCBlbGVtZW50cyB0byBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudHMuJ319LHtuYW1lOiJmb3JtYWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJJIG9mIGEgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgaW5mb3JtYXRpb24gc3VibWl0dGVkIGJ5IHRoZSBidXR0b24uIElmIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYGFjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItYWN0aW9uKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIn19LHtuYW1lOiJmb3JtZW5jdHlwZSIsdmFsdWVTZXQ6ImV0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFVzZSB0aGlzIHZhbHVlIGlmIHlvdSBhcmUgdXNpbmcgYW4gW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudCB3aXRoIHRoZSBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci10eXBlKSBhdHRyaWJ1dGUgc2V0IHRvIGBmaWxlYC5cbiogICBgdGV4dC9wbGFpbmBcblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgZW5jdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItZW5jdHlwZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b25cJ3MgZm9ybSBvd25lci4nfX0se25hbWU6ImZvcm1tZXRob2QiLHZhbHVlU2V0OiJmbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgSFRUUCBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgYXBwZW5kZWQgdG8gdGhlICoqZm9ybSoqIGF0dHJpYnV0ZSBVUkksIHdpdGggYSAnPycgYXMgYSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cblxuSWYgc3BlY2lmaWVkLCB0aGlzIGF0dHJpYnV0ZSBvdmVycmlkZXMgdGhlIFtgbWV0aG9kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1tZXRob2QpIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4ifX0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGZvcm0gaXMgbm90IHRvIGJlIHZhbGlkYXRlZCB3aGVuIGl0IGlzIHN1Ym1pdHRlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b24ncyBmb3JtIG93bmVyLiJ9fSx7bmFtZToiZm9ybXRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIGlzIGEgbmFtZSBvciBrZXl3b3JkIGluZGljYXRpbmcgd2hlcmUgdG8gZGlzcGxheSB0aGUgcmVzcG9uc2UgdGhhdCBpcyByZWNlaXZlZCBhZnRlciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBUaGlzIGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZSwgdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYHRhcmdldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItdGFyZ2V0KSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gYSBuZXcgdW5uYW1lZCBicm93c2luZyBjb250ZXh0LlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiwgd2hpY2ggaXMgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0gZGF0YS4ifX0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJidCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBzdWJtaXRgOiBUaGUgYnV0dG9uIHN1Ym1pdHMgdGhlIGZvcm0gZGF0YSB0byB0aGUgc2VydmVyLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkeW5hbWljYWxseSBjaGFuZ2VkIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgdmFsdWUuXG4qICAgYHJlc2V0YDogVGhlIGJ1dHRvbiByZXNldHMgYWxsIHRoZSBjb250cm9scyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cbiogICBgYnV0dG9uYDogVGhlIGJ1dHRvbiBoYXMgbm8gZGVmYXVsdCBiZWhhdmlvci4gSXQgY2FuIGhhdmUgY2xpZW50LXNpZGUgc2NyaXB0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQncyBldmVudHMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZXZlbnRzIG9jY3VyLiJ9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidXR0b24uIEl0IGRlZmluZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uIHdoaWNoIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtIGRhdGEuIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgaW4gcGFyYW1zIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjonVGhlIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBpcyBub25zdGFuZGFyZCBhbmQgRmlyZWZveC1zcGVjaWZpYy4gQnkgZGVmYXVsdCwgdW5saWtlIG90aGVyIGJyb3dzZXJzLCBbRmlyZWZveCBwZXJzaXN0cyB0aGUgZHluYW1pYyBkaXNhYmxlZCBzdGF0ZV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTk4NTgzOS9idWctd2l0aC1maXJlZm94LWRpc2FibGVkLWF0dHJpYnV0ZS1vZi1pbnB1dC1ub3QtcmVzZXR0aW5nLXdoZW4tcmVmcmVzaGluZykgb2YgYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgYWNyb3NzIHBhZ2UgbG9hZHMuIFNldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHRvIGBvZmZgIChpLmUuIGBhdXRvY29tcGxldGU9Im9mZiJgKSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFNlZSBbYnVnwqA2NTQwNzJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDA3MiAiaWYgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZCB3aXRoIGphdmFzY3JpcHQsIHRoZSBub3JtYWwgc3RhdGUgZG9lc25cJ3QgcmV0dXJuIGFmdGVyIHJlZnJlc2hpbmcgdGhlIHBhZ2UiKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiJ9XX0se25hbWU6InNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNlbGVjdCBlbGVtZW50IHJlcHJlc2VudHMgYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYW1vbmdzdCBhIHNldCBvZiBvcHRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBbYERPTVN0cmluZ2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01TdHJpbmcgIkRPTVN0cmluZyBpcyBhIFVURi0xNiBTdHJpbmcuIEFzIEphdmFTY3JpcHQgYWxyZWFkeSB1c2VzIHN1Y2ggc3RyaW5ncywgRE9NU3RyaW5nIGlzIG1hcHBlZCBkaXJlY3RseSB0byBhIFN0cmluZy4iKSBwcm92aWRpbmcgYSBoaW50IGZvciBhIFt1c2VyIGFnZW50XCdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3VzZXJfYWdlbnQgInVzZXIgYWdlbnRcJ3M6IEEgdXNlciBhZ2VudCBpcyBhIGNvbXB1dGVyIHByb2dyYW0gcmVwcmVzZW50aW5nIGEgcGVyc29uLCBmb3IgZXhhbXBsZSwgYSBicm93c2VyIGluIGEgV2ViIGNvbnRleHQuIikgYXV0b2NvbXBsZXRlIGZlYXR1cmUuIFNlZSBbVGhlIEhUTUwgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiB2YWx1ZXMgYW5kIGRldGFpbHMgb24gaG93IHRvIHVzZSBhdXRvY29tcGxldGUuJ319LHtuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCBhIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBpbnB1dCBmb2N1cyB3aGVuIHRoZSBwYWdlIGxvYWRzLiBPbmx5IG9uZSBmb3JtIGVsZW1lbnQgaW4gYSBkb2N1bWVudCBjYW4gaGF2ZSB0aGUgYGF1dG9mb2N1c2AgYXR0cmlidXRlLiJ9fSx7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udHJvbCBpbmhlcml0cyBpdHMgc2V0dGluZyBmcm9tIHRoZSBjb250YWluaW5nIGVsZW1lbnQsIGZvciBleGFtcGxlIGBmaWVsZHNldGA7IGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgZWxlbWVudCB3aXRoIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBzZXQsIHRoZW4gdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhlIGZvcm0gZWxlbWVudCB0b8Kgd2hpY2jCoHRoZSBzZWxlY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkwqAodGhhdCBpcywgaXRzICJmb3JtIG93bmVyIikuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXRzIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGBpZGAgb2YgYSBmb3JtIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gcGxhY2Ugc2VsZWN0IGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBmb3JtIGVsZW1lbnRzLid9fSx7bmFtZToibXVsdGlwbGUiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBsaXN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIG9ubHkgb25lIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYXQgYSB0aW1lLiBXaGVuIGBtdWx0aXBsZWAgaXMgc3BlY2lmaWVkLCBtb3N0IGJyb3dzZXJzIHdpbGwgc2hvdyBhIHNjcm9sbGluZyBsaXN0IGJveCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxpbmUgZHJvcGRvd24uIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IGFuIG9wdGlvbiB3aXRoIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSBtdXN0IGJlIHNlbGVjdGVkLiJ9fSx7bmFtZToic2l6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGNvbnRyb2wgaXMgcHJlc2VudGVkIGFzIGEgc2Nyb2xsaW5nIGxpc3QgYm94IChlLmcuIHdoZW4gYG11bHRpcGxlYCBpcyBzcGVjaWZpZWQpLCB0aGlzIGF0dHJpYnV0ZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGlzdCB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIGF0IG9uZSB0aW1lLiBCcm93c2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByZXNlbnQgYSBzZWxlY3QgZWxlbWVudCBhcyBhIHNjcm9sbGVkIGxpc3QgYm94LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLlxuXG4qKk5vdGU6KiogQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc2l6ZSBzaG91bGQgYmUgMTsgaG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoaXMgaGFzIGJlZW4gZm91bmQgdG8gYnJlYWsgc29tZSB3ZWIgc2l0ZXMsIGFuZCBubyBvdGhlciBicm93c2VyIGN1cnJlbnRseSBkb2VzIHRoYXQsIHNvIE1vemlsbGEgaGFzIG9wdGVkIHRvIGNvbnRpbnVlIHRvIHJldHVybiAwIGZvciB0aGUgdGltZSBiZWluZyB3aXRoIEZpcmVmb3guIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2VsZWN0In1dfSx7bmFtZToiZGF0YWxpc3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2Ygb3B0aW9uIGVsZW1lbnRzIHRoYXQgcmVwcmVzZW50IHByZWRlZmluZWQgb3B0aW9ucyBmb3Igb3RoZXIgY29udHJvbHMuIEluIHRoZSByZW5kZXJpbmcsIHRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBhbmQgaXQsIGFsb25nIHdpdGggaXRzIGNoaWxkcmVuLCBzaG91bGQgYmUgaGlkZGVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RhdGFsaXN0In1dfSx7bmFtZToib3B0Z3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvcHRncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBvcHRpb24gZWxlbWVudHMgd2l0aCBhIGNvbW1vbiBsYWJlbC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgbm9uZSBvZiB0aGUgaXRlbXMgaW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgc2VsZWN0YWJsZS4gT2Z0ZW4gYnJvd3NlcnMgZ3JleSBvdXQgc3VjaCBjb250cm9sIGFuZCBpdCB3b24ndCByZWNlaXZlIGFueSBicm93c2luZyBldmVudHMsIGxpa2UgbW91c2UgY2xpY2tzIG9yIGZvY3VzLXJlbGF0ZWQgb25lcy4ifX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgb2Ygb3B0aW9ucywgd2hpY2ggdGhlIGJyb3dzZXIgY2FuIHVzZSB3aGVuIGxhYmVsaW5nIHRoZSBvcHRpb25zIGluIHRoZSB1c2VyIGludGVyZmFjZS4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGlmIHRoaXMgZWxlbWVudCBpcyB1c2VkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGdyb3VwIn1dfSx7bmFtZToib3B0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb3B0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcHRpb24gaW4gYSBzZWxlY3QgZWxlbWVudCBvciBhcyBwYXJ0IG9mIGEgbGlzdCBvZiBzdWdnZXN0aW9ucyBpbiBhIGRhdGFsaXN0IGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSWYgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQsIHRoaXMgb3B0aW9uIGlzIG5vdCBjaGVja2FibGUuIE9mdGVuIGJyb3dzZXJzIGdyZXkgb3V0IHN1Y2ggY29udHJvbCBhbmQgaXQgd29uXCd0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50LCBsaWtlIG1vdXNlIGNsaWNrcyBvciBmb2N1cy1yZWxhdGVkIG9uZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBlbGVtZW50IGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBpZiBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpcyBhIGRpc2FibGVkIFtgPG9wdGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRncm91cCAiVGhlIEhUTUwgPG9wdGdyb3VwPiBlbGVtZW50IGNyZWF0ZXMgYSBncm91cGluZyBvZiBvcHRpb25zIHdpdGhpbiBhIDxzZWxlY3Q+IGVsZW1lbnQuIikgZWxlbWVudC4nfX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB0ZXh0IGZvciB0aGUgbGFiZWwgaW5kaWNhdGluZyB0aGUgbWVhbmluZyBvZiB0aGUgb3B0aW9uLiBJZiB0aGUgYGxhYmVsYCBhdHRyaWJ1dGUgaXNuJ3QgZGVmaW5lZCwgaXRzIHZhbHVlIGlzIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGV4dCBjb250ZW50LiJ9fSx7bmFtZToic2VsZWN0ZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiBwcmVzZW50LCB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb24gaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiBJZiB0aGUgYDxvcHRpb24+YCBlbGVtZW50IGlzIHRoZSBkZXNjZW5kYW50IG9mIGEgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgd2hvc2UgW2BtdWx0aXBsZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QjYXR0ci1tdWx0aXBsZSkgYXR0cmlidXRlIGlzIG5vdCBzZXQsIG9ubHkgb25lIHNpbmdsZSBgPG9wdGlvbj5gIG9mIHRoaXMgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgbWF5IGhhdmUgdGhlIGBzZWxlY3RlZGAgYXR0cmlidXRlLid9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjb250ZW50IG9mIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtLCBzaG91bGQgdGhpcyBvcHRpb24gYmUgc2VsZWN0ZWQuwqBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBvcHRpb24gZWxlbWVudC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRpb24ifV19LHtuYW1lOiJ0ZXh0YXJlYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRleHRhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBhIG11bHRpbGluZSBwbGFpbiB0ZXh0IGVkaXQgY29udHJvbCBmb3IgdGhlIGVsZW1lbnQncyByYXcgdmFsdWUuIFRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZXByZXNlbnQgdGhlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlZCBieSB0aGUgYnJvd3Nlci4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBvZmZgOiBUaGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgZW50ZXIgYSB2YWx1ZSBpbnRvIHRoaXMgZmllbGQgZm9yIGV2ZXJ5IHVzZSwgb3IgdGhlIGRvY3VtZW50IHByb3ZpZGVzIGl0cyBvd24gYXV0by1jb21wbGV0aW9uIG1ldGhvZDsgdGhlIGJyb3dzZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSBjb21wbGV0ZSB0aGUgZW50cnkuXG4qICAgYG9uYDogVGhlIGJyb3dzZXIgY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgdGhlIHZhbHVlIGJhc2VkIG9uIHZhbHVlcyB0aGF0IHRoZSB1c2VyIGhhcyBlbnRlcmVkIGR1cmluZyBwcmV2aW91cyB1c2VzLlxuXG5JZiB0aGUgYGF1dG9jb21wbGV0ZWAgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgb24gYSBgPHRleHRhcmVhPmAgZWxlbWVudCwgdGhlbiB0aGUgYnJvd3NlciB1c2VzIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50XCdzIGZvcm0gb3duZXIuIFRoZSBmb3JtIG93bmVyIGlzIGVpdGhlciB0aGUgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB0aGF0IHRoaXMgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIG9yIHRoZSBmb3JtIGVsZW1lbnQgd2hvc2UgYGlkYCBpcyBzcGVjaWZpZWQgYnkgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSBpbiBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKS4nfX0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IGEgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIE9ubHkgb25lIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IGluIGEgZG9jdW1lbnQgY2FuIGhhdmUgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVkLiJ9fSx7bmFtZToiY29scyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRleHQgY29udHJvbCwgaW4gYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGhzLiBJZiBpdCBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjBgLiJ9fSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250cm9sIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdoZW4gdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIGlzIHNldCwgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSB0aGUgYGlkYCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50IG11c3QgYmUgYSBkZXNjZW5kYW50IG9mIGEgZm9ybSBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBwbGFjZSBgPHRleHRhcmVhPmAgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJtYXhsZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlci4gSWYgdGhpcyB2YWx1ZSBpc24ndCBzcGVjaWZpZWQsIHRoZSB1c2VyIGNhbiBlbnRlciBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJtaW5sZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSByZXF1aXJlZCB0aGF0IHRoZSB1c2VyIHNob3VsZCBlbnRlci4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBjb250cm9sLiJ9fSx7bmFtZToicGxhY2Vob2xkZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgaGludCB0byB0aGUgdXNlciBvZiB3aGF0IGNhbiBiZSBlbnRlcmVkIGluIHRoZSBjb250cm9sLiBDYXJyaWFnZSByZXR1cm5zIG9yIGxpbmUtZmVlZHMgd2l0aGluIHRoZSBwbGFjZWhvbGRlciB0ZXh0IG11c3QgYmUgdHJlYXRlZCBhcyBsaW5lIGJyZWFrcyB3aGVuIHJlbmRlcmluZyB0aGUgaGludC5cblxuKipOb3RlOioqIFBsYWNlaG9sZGVycyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNob3cgYW4gZXhhbXBsZSBvZiB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIGVudGVyZWQgaW50byBhIGZvcm07IHRoZXkgYXJlIF9ub3RfIGEgc3Vic3RpdHV0ZSBmb3IgYSBwcm9wZXIgW2A8bGFiZWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xhYmVsICJUaGUgSFRNTCA8bGFiZWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIGFuIGl0ZW0gaW4gYSB1c2VyIGludGVyZmFjZS4iKSBlbGVtZW50IHRpZWQgdG8gdGhlIGlucHV0LiBTZWUgW0xhYmVscyBhbmQgcGxhY2Vob2xkZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjTGFiZWxzX2FuZF9wbGFjZWhvbGRlcnMgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBpbiBbPGlucHV0PjogVGhlIElucHV0IChGb3JtIElucHV0KSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uLid9fSx7bmFtZToicmVhZG9ubHkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLiBVbmxpa2UgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLCB0aGUgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgZG9lcyBub3QgcHJldmVudCB0aGUgdXNlciBmcm9tIGNsaWNraW5nIG9yIHNlbGVjdGluZyBpbiB0aGUgY29udHJvbC4gVGhlIHZhbHVlIG9mIGEgcmVhZC1vbmx5IGNvbnRyb2wgaXMgc3RpbGwgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0uIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSB1c2VyIG11c3QgZmlsbCBpbiBhIHZhbHVlIGJlZm9yZSBzdWJtaXR0aW5nIGEgZm9ybS4ifX0se25hbWU6InJvd3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbC4ifX0se25hbWU6IndyYXAiLHZhbHVlU2V0OiJ3IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaG93IHRoZSBjb250cm9sIHdyYXBzIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgaGFyZGA6IFRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBsaW5lIGJyZWFrcyAoQ1IrTEYpIHNvIHRoYXQgZWFjaCBsaW5lIGhhcyBubyBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sOyB0aGUgYGNvbHNgIGF0dHJpYnV0ZSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LlxuKiAgIGBzb2Z0YDogVGhlIGJyb3dzZXIgZW5zdXJlcyB0aGF0IGFsbCBsaW5lIGJyZWFrcyBpbiB0aGUgdmFsdWUgY29uc2lzdCBvZiBhIENSK0xGIHBhaXIsIGJ1dCBkb2VzIG5vdCBpbnNlcnQgYW55IGFkZGl0aW9uYWwgbGluZSBicmVha3MuXG4qICAgYG9mZmAgOiBMaWtlIGBzb2Z0YCBidXQgY2hhbmdlcyBhcHBlYXJhbmNlIHRvIGB3aGl0ZS1zcGFjZTogcHJlYCBzbyBsaW5lIHNlZ21lbnRzIGV4Y2VlZGluZyBgY29sc2AgYXJlIG5vdCB3cmFwcGVkIGFuZCB0aGUgYDx0ZXh0YXJlYT5gIGJlY29tZXMgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIGBzb2Z0YCBpcyBpdHMgZGVmYXVsdCB2YWx1ZS4ifX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjoiVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGJ5IFdlYktpdCBvbiBpT1MgKHRoZXJlZm9yZSBuZWFybHkgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgb24gaU9TLCBpbmNsdWRpbmcgU2FmYXJpLCBGaXJlZm94LCBhbmQgQ2hyb21lKSwgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBUaGUgbm9uLWRlcHJlY2F0ZWQgdmFsdWVzIGFyZSBhdmFpbGFibGUgaW4gaU9TIDUgYW5kIGxhdGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvbi5cbiogICBgc2VudGVuY2VzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VzLlxuKiAgIGB3b3Jkc2A6IEF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHdvcmRzLlxuKiAgIGBjaGFyYWN0ZXJzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIGFsbCBjaGFyYWN0ZXJzLlxuKiAgIGBvbmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuXG4qICAgYG9mZmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuIn0se25hbWU6InNwZWxsY2hlY2siLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgd2hldGhlciB0aGUgYDx0ZXh0YXJlYT5gIGlzIHN1YmplY3QgdG8gc3BlbGwgY2hlY2tpbmcgYnkgdGhlIHVuZGVybHlpbmcgYnJvd3Nlci9PUy4gdGhlIHZhbHVlIGNhbiBiZTpcblxuKiAgIGB0cnVlYDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBpdHMgc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tlZC5cbiogICBgZGVmYXVsdGAgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyB0byBhY3QgYWNjb3JkaW5nIHRvIGEgZGVmYXVsdCBiZWhhdmlvciwgcG9zc2libHkgYmFzZWQgb24gdGhlIHBhcmVudCBlbGVtZW50J3Mgb3duIGBzcGVsbGNoZWNrYCB2YWx1ZS5cbiogICBgZmFsc2VgIDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBzcGVsbCBjaGVja2VkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGV4dGFyZWEifV19LHtuYW1lOiJvdXRwdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvdXRwdXQgZWxlbWVudCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBvciB0aGUgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBvdGhlciBlbGVtZW50c+KAmSBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pZClzLCBpbmRpY2F0aW5nIHRoYXQgdGhvc2UgZWxlbWVudHMgY29udHJpYnV0ZWQgaW5wdXQgdmFsdWVzIHRvIChvciBvdGhlcndpc2UgYWZmZWN0ZWQpIHRoZSBjYWxjdWxhdGlvbi4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbZm9ybSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSkgdGhhdCB0aGlzIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBgaWRgIG9mIGEgZm9ybSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IGVsZW1lbnQgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgYSBmb3JtIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIHBsYWNlIG91dHB1dCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIG9mIHRoZSBlbGVtZW50LCBleHBvc2VkIGluIHRoZSBbYEhUTUxGb3JtRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRm9ybUVsZW1lbnQgIlRoZSBIVE1MRm9ybUVsZW1lbnQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8Zm9ybT4gZWxlbWVudCBpbiB0aGUgRE9NOyBpdCBhbGxvd3MgYWNjZXNzIHRvIGFuZCBpbiBzb21lIGNhc2VzIG1vZGlmaWNhdGlvbiBvZiBhc3BlY3RzIG9mIHRoZSBmb3JtLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBpdHMgY29tcG9uZW50IGVsZW1lbnRzLiIpIEFQSS4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vdXRwdXQifV19LHtuYW1lOiJwcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHByb2dyZXNzIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29tcGxldGlvbiBwcm9ncmVzcyBvZiBhIHRhc2suIFRoZSBwcm9ncmVzcyBpcyBlaXRoZXIgaW5kZXRlcm1pbmF0ZSwgaW5kaWNhdGluZyB0aGF0IHByb2dyZXNzIGlzIGJlaW5nIG1hZGUgYnV0IHRoYXQgaXQgaXMgbm90IGNsZWFyIGhvdyBtdWNoIG1vcmUgd29yayByZW1haW5zIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvbXBsZXRlIChlLmcuIGJlY2F1c2UgdGhlIHRhc2sgaXMgd2FpdGluZyBmb3IgYSByZW1vdGUgaG9zdCB0byByZXNwb25kKSwgb3IgdGhlIHByb2dyZXNzIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSB6ZXJvIHRvIGEgbWF4aW11bSwgZ2l2aW5nIHRoZSBmcmFjdGlvbiBvZiB3b3JrIHRoYXQgaGFzIHNvIGZhciBiZWVuIGNvbXBsZXRlZC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgbXVjaCBvZiB0aGUgdGFzayB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgbXVzdCBiZSBhIHZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIGBtYXhgLCBvciBiZXR3ZWVuIDAgYW5kIDEgaWYgYG1heGAgaXMgb21pdHRlZC4gSWYgdGhlcmUgaXMgbm8gYHZhbHVlYCBhdHRyaWJ1dGUsIHRoZSBwcm9ncmVzcyBiYXIgaXMgaW5kZXRlcm1pbmF0ZTsgdGhpcyBpbmRpY2F0ZXMgdGhhdCBhbiBhY3Rpdml0eSBpcyBvbmdvaW5nIHdpdGggbm8gaW5kaWNhdGlvbiBvZiBob3cgbG9uZyBpdCBpcyBleHBlY3RlZCB0byB0YWtlLiJ9fSx7bmFtZToibWF4IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZXNjcmliZXMgaG93IG11Y2ggd29yayB0aGUgdGFzayBpbmRpY2F0ZWQgYnkgdGhlIGBwcm9ncmVzc2AgZWxlbWVudCByZXF1aXJlcy4gVGhlIGBtYXhgIGF0dHJpYnV0ZSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGJlIGEgdmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Byb2dyZXNzIn1dfSx7bmFtZToibWV0ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRlciBlbGVtZW50IHJlcHJlc2VudHMgYSBzY2FsYXIgbWVhc3VyZW1lbnQgd2l0aGluIGEga25vd24gcmFuZ2UsIG9yIGEgZnJhY3Rpb25hbCB2YWx1ZTsgZm9yIGV4YW1wbGUgZGlzayB1c2FnZSwgdGhlIHJlbGV2YW5jZSBvZiBhIHF1ZXJ5IHJlc3VsdCwgb3IgdGhlIGZyYWN0aW9uIG9mIGEgdm90aW5nIHBvcHVsYXRpb24gdG8gaGF2ZSBzZWxlY3RlZCBhIHBhcnRpY3VsYXIgY2FuZGlkYXRlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZS4gVGhpcyBtdXN0IGJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIChgbWluYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSkgaWYgdGhleSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCBvciBtYWxmb3JtZWQsIHRoZSB2YWx1ZSBpcyAwLiBJZiBzcGVjaWZpZWQsIGJ1dCBub3Qgd2l0aGluIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbmVhcmVzdCBlbmQgb2YgdGhlIHJhbmdlLlxuXG4qKlVzYWdlIG5vdGU6KiogVW5sZXNzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZSBpcyBiZXR3ZWVuIGAwYCBhbmQgYDFgIChpbmNsdXNpdmUpLCB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMgc2hvdWxkIGRlZmluZSB0aGUgcmFuZ2Ugc28gdGhhdCB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB3aXRoaW4gaXQuIn19LHtuYW1lOiJtaW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsb3dlciBudW1lcmljIGJvdW5kIG9mIHRoZSBtZWFzdXJlZCByYW5nZS4gVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAoYG1heGAgYXR0cmlidXRlKSwgaWYgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgMC4ifX0se25hbWU6Im1heCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVwcGVyIG51bWVyaWMgYm91bmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIChgbWluYCBhdHRyaWJ1dGUpLCBpZiBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgbWF4aW11bSB2YWx1ZSBpcyAxLiJ9fSx7bmFtZToibG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXBwZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgbG93IGVuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgKGBtaW5gIGF0dHJpYnV0ZSksIGFuZCBpdCBhbHNvIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBoaWdoIHZhbHVlIGFuZCBtYXhpbXVtIHZhbHVlIChgaGlnaGAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHJlc3BlY3RpdmVseSksIGlmIGFueSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgb3IgaWYgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlLCB0aGUgYGxvd2AgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmFsdWUuIn19LHtuYW1lOiJoaWdoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbG93ZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgaGlnaCBlbmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIChgbWF4YCBhdHRyaWJ1dGUpLCBhbmQgaXQgYWxzbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbG93IHZhbHVlIGFuZCBtaW5pbXVtIHZhbHVlIChgbG93YCBhdHRyaWJ1dGUgYW5kICoqbWluKiogYXR0cmlidXRlLCByZXNwZWN0aXZlbHkpLCBpZiBhbnkgYXJlIHNwZWNpZmllZC4gSWYgdW5zcGVjaWZpZWQsIG9yIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSwgdGhlIGBoaWdoYCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSB2YWx1ZS4ifX0se25hbWU6Im9wdGltdW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgb3B0aW1hbCBudW1lcmljIHZhbHVlLiBJdCBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgKGFzIGRlZmluZWQgYnkgdGhlIGBtaW5gIGF0dHJpYnV0ZSBhbmQgYG1heGAgYXR0cmlidXRlKS4gV2hlbiB1c2VkIHdpdGggdGhlIGBsb3dgIGF0dHJpYnV0ZSBhbmQgYGhpZ2hgIGF0dHJpYnV0ZSwgaXQgZ2l2ZXMgYW4gaW5kaWNhdGlvbiB3aGVyZSBhbG9uZyB0aGUgcmFuZ2UgaXMgY29uc2lkZXJlZCBwcmVmZXJhYmxlLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgYmV0d2VlbiB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCB0aGUgYGxvd2AgYXR0cmlidXRlLCB0aGVuIHRoZSBsb3dlciByYW5nZSBpcyBjb25zaWRlcmVkIHByZWZlcnJlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBhc3NvY2lhdGVzIHRoZSBlbGVtZW50IHdpdGggYSBgZm9ybWAgZWxlbWVudCB0aGF0IGhhcyBvd25lcnNoaXAgb2YgdGhlIGBtZXRlcmAgZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgYG1ldGVyYCBtaWdodCBiZSBkaXNwbGF5aW5nIGEgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbiBgaW5wdXRgIGVsZW1lbnQgb2YgYHR5cGVgIF9udW1iZXJfLiBUaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgaWYgdGhlIGBtZXRlcmAgZWxlbWVudCBpcyBiZWluZyB1c2VkIGFzIGEgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQ7IGV2ZW4gdGhlbiwgaXQgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgYXBwZWFycyBhcyBhIGRlc2NlbmRhbnQgb2YgYSBgZm9ybWAgZWxlbWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGVyIn1dfSx7bmFtZToiZmllbGRzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWVsZHNldCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2YgZm9ybSBjb250cm9scyBvcHRpb25hbGx5IGdyb3VwZWQgdW5kZXIgYSBjb21tb24gbmFtZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgYWxsIGZvcm0gY29udHJvbHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIGA8ZmllbGRzZXQ+YCwgYXJlIGRpc2FibGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vdCBlZGl0YWJsZSBhbmQgd29uJ3QgYmUgc3VibWl0dGVkIGFsb25nIHdpdGggdGhlIGA8Zm9ybT5gLiBUaGV5IHdvbid0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3Mgb3IgZm9jdXMtcmVsYXRlZCBldmVudHMuIEJ5IGRlZmF1bHQgYnJvd3NlcnMgZGlzcGxheSBzdWNoIGNvbnRyb2xzIGdyYXllZCBvdXQuIE5vdGUgdGhhdCBmb3JtIGVsZW1lbnRzIGluc2lkZSB0aGUgW2A8bGVnZW5kPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQgXCJUaGUgSFRNTCA8bGVnZW5kPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgY29udGVudCBvZiBpdHMgcGFyZW50IDxmaWVsZHNldD4uXCIpIGVsZW1lbnQgd29uJ3QgYmUgZGlzYWJsZWQuIn19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB5b3Ugd2FudCB0aGUgYDxmaWVsZHNldD5gIHRvIGJlIHBhcnQgb2YsIGV2ZW4gaWYgaXQgaXMgbm90IGluc2lkZSB0aGUgZm9ybS4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3JvdXAuXG5cbioqTm90ZSoqOiBUaGUgY2FwdGlvbiBmb3IgdGhlIGZpZWxkc2V0IGlzIGdpdmVuIGJ5IHRoZSBmaXJzdCBbYDxsZWdlbmQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCAiVGhlIEhUTUwgPGxlZ2VuZD4gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBmb3IgdGhlIGNvbnRlbnQgb2YgaXRzIHBhcmVudCA8ZmllbGRzZXQ+LiIpIGVsZW1lbnQgbmVzdGVkIGluc2lkZSBpdC4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWVsZHNldCJ9XX0se25hbWU6ImxlZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxlZ2VuZCBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGxlZ2VuZCBlbGVtZW50J3MgcGFyZW50IGZpZWxkc2V0IGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQifV19LHtuYW1lOiJkZXRhaWxzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGV0YWlscyBlbGVtZW50IHJlcHJlc2VudHMgYSBkaXNjbG9zdXJlIHdpZGdldCBmcm9tIHdoaWNoIHRoZSB1c2VyIGNhbiBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBjb250cm9scy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib3BlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXRhaWxzIOKAlCB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlIGA8ZGV0YWlscz5gIGVsZW1lbnQg4oCUIGFyZSBjdXJyZW50bHkgdmlzaWJsZS4gVGhlIGRlZmF1bHQsIGBmYWxzZWAsIG1lYW5zIHRoZSBkZXRhaWxzIGFyZSBub3QgdmlzaWJsZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZXRhaWxzIn1dfSx7bmFtZToic3VtbWFyeSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1bW1hcnkgZWxlbWVudCByZXByZXNlbnRzIGEgc3VtbWFyeSwgY2FwdGlvbiwgb3IgbGVnZW5kIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIHN1bW1hcnkgZWxlbWVudCdzIHBhcmVudCBkZXRhaWxzIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdW1tYXJ5In1dfSx7bmFtZToiZGlhbG9nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlhbG9nIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gdGhhdCBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdG8gcGVyZm9ybSBhIHRhc2ssIGZvciBleGFtcGxlIGEgZGlhbG9nIGJveCwgaW5zcGVjdG9yLCBvciB3aW5kb3cuIn0sYXR0cmlidXRlczpbe25hbWU6Im9wZW4iLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhhdCB0aGUgZGlhbG9nIGlzIGFjdGl2ZSBhbmQgYXZhaWxhYmxlIGZvciBpbnRlcmFjdGlvbi4gV2hlbiB0aGUgYG9wZW5gIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgZGlhbG9nIHNob3VsZG4ndCBiZSBzaG93biB0byB0aGUgdXNlci4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZyJ9XX0se25hbWU6InNjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNjcmlwdCBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGluY2x1ZGUgZHluYW1pYyBzY3JpcHQgYW5kIGRhdGEgYmxvY2tzIGluIHRoZWlyIGRvY3VtZW50cy4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgVVJJIG9mIGFuIGV4dGVybmFsIHNjcmlwdDsgdGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWJlZGRpbmcgYSBzY3JpcHQgZGlyZWN0bHkgd2l0aGluIGEgZG9jdW1lbnQuXG5cbklmIGEgYHNjcmlwdGAgZWxlbWVudCBoYXMgYSBgc3JjYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLCBpdCBzaG91bGQgbm90IGhhdmUgYSBzY3JpcHQgZW1iZWRkZWQgaW5zaWRlIGl0cyB0YWdzLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHNjcmlwdCByZXByZXNlbnRlZC4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczpcblxuKiAgICoqT21pdHRlZCBvciBhIEphdmFTY3JpcHQgTUlNRSB0eXBlOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhpcyBpbmRpY2F0ZXMgdGhlIHNjcmlwdCBpcyBKYXZhU2NyaXB0LiBIVE1MNSBzcGVjaWZpY2F0aW9uIHVyZ2VzIGF1dGhvcnMgdG8gb21pdCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIHByb3ZpZGUgYSByZWR1bmRhbnQgTUlNRSB0eXBlLiBJbiBlYXJsaWVyIGJyb3dzZXJzLCB0aGlzIGlkZW50aWZpZWQgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBvZiB0aGUgZW1iZWRkZWQgb3IgaW1wb3J0ZWQgKHZpYSB0aGUgYHNyY2AgYXR0cmlidXRlKSBjb2RlLiBKYXZhU2NyaXB0IE1JTUUgdHlwZXMgYXJlIFtsaXN0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcyNKYXZhU2NyaXB0X3R5cGVzKS5cbiogICAqKmBtb2R1bGVgOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhlIGNvZGUgaXMgdHJlYXRlZCBhcyBhIEphdmFTY3JpcHQgbW9kdWxlLiBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgc2NyaXB0IGNvbnRlbnRzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgYGNoYXJzZXRgIGFuZCBgZGVmZXJgIGF0dHJpYnV0ZXMuIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBgbW9kdWxlYCwgc2VlIFtFUzYgaW4gRGVwdGg6IE1vZHVsZXNdKGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxNS8wOC9lczYtaW4tZGVwdGgtbW9kdWxlcy8pLiBDb2RlIG1heSBiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiB0aGUgYG1vZHVsZWAga2V5d29yZCBpcyB1c2VkLlxuKiAgICoqQW55IG90aGVyIHZhbHVlOioqIFRoZSBlbWJlZGRlZCBjb250ZW50IGlzIHRyZWF0ZWQgYXMgYSBkYXRhIGJsb2NrIHdoaWNoIHdvblwndCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJyb3dzZXIuIERldmVsb3BlcnMgbXVzdCB1c2UgYSB2YWxpZCBNSU1FIHR5cGUgdGhhdCBpcyBub3QgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSB0byBkZW5vdGUgZGF0YSBibG9ja3MuIFRoZSBgc3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSBpZ25vcmVkLlxuXG4qKk5vdGU6KiogaW4gRmlyZWZveCB5b3UgY291bGQgc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBKYXZhU2NyaXB0IGNvbnRhaW5lZCBpbiBhIGA8c2NyaXB0PmAgZWxlbWVudCBieSBpbmNsdWRpbmcgYSBub24tc3RhbmRhcmQgYHZlcnNpb25gIHBhcmFtZXRlciBpbnNpZGUgdGhlIGB0eXBlYCBhdHRyaWJ1dGUg4oCUIGZvciBleGFtcGxlIGB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQ7dmVyc2lvbj0xLjgiYC4gVGhpcyBoYXMgYmVlbiByZW1vdmVkIGluIEZpcmVmb3ggNTkgKHNlZSBbYnVnwqAxNDI4NzQ1XShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI4NzQ1ICJGSVhFRDogUmVtb3ZlIHN1cHBvcnQgZm9yIHZlcnNpb24gcGFyYW1ldGVyIGZyb20gc2NyaXB0IGxvYWRlciIpKS4nfX0se25hbWU6ImNoYXJzZXQifSx7bmFtZToiYXN5bmMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGlzIGEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IHRoZSBicm93c2VyIHNob3VsZCwgaWYgcG9zc2libGUsIGxvYWQgdGhlIHNjcmlwdCBhc3luY2hyb25vdXNseS5cblxuVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCBpZiB0aGUgYHNyY2AgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLiBJZiBpdCBpcyBpbmNsdWRlZCBpbiB0aGlzIGNhc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC5cblxuQnJvd3NlcnMgdXN1YWxseSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gYW5kIGxvYWQgc2NyaXB0cyBzeW5jaHJvbm91c2x5LCAoaS5lLiBgYXN5bmM9ImZhbHNlImApIGR1cmluZyBIVE1MIHBhcnNpbmcuXG5cbkR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdHMgKHVzaW5nIFtgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2NyZWF0ZUVsZW1lbnQgIkluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCkgbWV0aG9kIGNyZWF0ZXMgdGhlIEhUTUwgZWxlbWVudCBzcGVjaWZpZWQgYnkgdGFnTmFtZSwgb3IgYW4gSFRNTFVua25vd25FbGVtZW50IGlmIHRhZ05hbWUgaXNuXCd0IHJlY29nbml6ZWQuIikpIGxvYWQgYXN5bmNocm9ub3VzbHkgYnkgZGVmYXVsdCwgc28gdG8gdHVybiBvbiBzeW5jaHJvbm91cyBsb2FkaW5nIChpLmUuIHNjcmlwdHMgbG9hZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc2VydGVkKSBzZXQgYGFzeW5jPSJmYWxzZSJgLlxuXG5TZWUgW0Jyb3dzZXIgY29tcGF0aWJpbGl0eV0oI0Jyb3dzZXJfY29tcGF0aWJpbGl0eSkgZm9yIG5vdGVzIG9uIGJyb3dzZXIgc3VwcG9ydC4gU2VlIGFsc28gW0FzeW5jIHNjcmlwdHMgZm9yIGFzbS5qc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HYW1lcy9UZWNobmlxdWVzL0FzeW5jX3NjcmlwdHMpLid9fSx7bmFtZToiZGVmZXIiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCB0byBpbmRpY2F0ZSB0byBhIGJyb3dzZXIgdGhhdCB0aGUgc2NyaXB0IGlzIG1lYW50IHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBwYXJzZWQsIGJ1dCBiZWZvcmUgZmlyaW5nIFtgRE9NQ29udGVudExvYWRlZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ET01Db250ZW50TG9hZGVkICIvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL0RPTUNvbnRlbnRMb2FkZWQiKS5cblxuU2NyaXB0cyB3aXRoIHRoZSBgZGVmZXJgIGF0dHJpYnV0ZSB3aWxsIHByZXZlbnQgdGhlIGBET01Db250ZW50TG9hZGVkYCBldmVudCBmcm9tIGZpcmluZyB1bnRpbCB0aGUgc2NyaXB0IGhhcyBsb2FkZWQgYW5kIGZpbmlzaGVkIGV2YWx1YXRpbmcuXG5cblRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIGBzcmNgIGF0dHJpYnV0ZSBpcyBhYnNlbnQgKGkuZS4gZm9yIGlubGluZSBzY3JpcHRzKSwgaW4gdGhpcyBjYXNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0LlxuXG5UbyBhY2hpZXZlIGEgc2ltaWxhciBlZmZlY3QgZm9yIGR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdHMgdXNlIGBhc3luYz0iZmFsc2UiYCBpbnN0ZWFkLiBTY3JpcHRzIHdpdGggdGhlIGBkZWZlcmAgYXR0cmlidXRlIHdpbGwgZXhlY3V0ZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIGRvY3VtZW50Lid9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonTm9ybWFsIGBzY3JpcHRgIGVsZW1lbnRzIHBhc3MgbWluaW1hbCBpbmZvcm1hdGlvbiB0byB0aGUgW2B3aW5kb3cub25lcnJvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxFdmVudEhhbmRsZXJzL29uZXJyb3IgIlRoZSBvbmVycm9yIHByb3BlcnR5IG9mIHRoZSBHbG9iYWxFdmVudEhhbmRsZXJzIG1peGluIGlzIGFuIEV2ZW50SGFuZGxlciB0aGF0IHByb2Nlc3NlcyBlcnJvciBldmVudHMuIikgZm9yIHNjcmlwdHMgd2hpY2ggZG8gbm90IHBhc3MgdGhlIHN0YW5kYXJkIFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NPUlMgIkNPUlM6IENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBpcyBhIHN5c3RlbSwgY29uc2lzdGluZyBvZiB0cmFuc21pdHRpbmcgSFRUUCBoZWFkZXJzLCB0aGF0IGRldGVybWluZXMgd2hldGhlciBicm93c2VycyBibG9jayBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhY2Nlc3NpbmcgcmVzcG9uc2VzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuIikgY2hlY2tzLiBUbyBhbGxvdyBlcnJvciBsb2dnaW5nIGZvciBzaXRlcyB3aGljaCB1c2UgYSBzZXBhcmF0ZSBkb21haW4gZm9yIHN0YXRpYyBtZWRpYSwgdXNlIHRoaXMgYXR0cmlidXRlLiBTZWUgW0NPUlMgc2V0dGluZ3MgYXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciBhIG1vcmUgZGVzY3JpcHRpdmUgZXhwbGFuYXRpb24gb2YgaXRzIHZhbGlkIGFyZ3VtZW50cy4nfX0se25hbWU6Im5vbmNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNyeXB0b2dyYXBoaWMgbm9uY2UgKG51bWJlciB1c2VkIG9uY2UpIHRvIHdoaXRlbGlzdCBpbmxpbmUgc2NyaXB0cyBpbiBhIFtzY3JpcHQtc3JjIENvbnRlbnQtU2VjdXJpdHktUG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvc2NyaXB0LXNyYykuIFRoZSBzZXJ2ZXIgbXVzdCBnZW5lcmF0ZSBhIHVuaXF1ZSBub25jZSB2YWx1ZSBlYWNoIHRpbWUgaXQgdHJhbnNtaXRzIGEgcG9saWN5LiBJdCBpcyBjcml0aWNhbCB0byBwcm92aWRlIGEgbm9uY2UgdGhhdCBjYW5ub3QgYmUgZ3Vlc3NlZCBhcyBieXBhc3NpbmcgYSByZXNvdXJjZSdzIHBvbGljeSBpcyBvdGhlcndpc2UgdHJpdmlhbC4ifX0se25hbWU6ImludGVncml0eSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGlubGluZSBtZXRhZGF0YSB0aGF0IGEgdXNlciBhZ2VudCBjYW4gdXNlIHRvIHZlcmlmeSB0aGF0IGEgZmV0Y2hlZCByZXNvdXJjZSBoYXMgYmVlbiBkZWxpdmVyZWQgZnJlZSBvZiB1bmV4cGVjdGVkIG1hbmlwdWxhdGlvbi4gU2VlIFtTdWJyZXNvdXJjZSBJbnRlZ3JpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1N1YnJlc291cmNlX0ludGVncml0eSkuIn0se25hbWU6Im5vbW9kdWxlIixkZXNjcmlwdGlvbjoiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2NyaXB0IHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IFtFUzIwMTUgbW9kdWxlc10oaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDE1LzA4L2VzNi1pbi1kZXB0aC1tb2R1bGVzLykg4oCUIGluIGVmZmVjdCwgdGhpcyBjYW4gYmUgdXNlZCB0byBzZXJ2ZSBmYWxsYmFjayBzY3JpcHRzIHRvIG9sZGVyIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgbW9kdWxhciBKYXZhU2NyaXB0IGNvZGUuIn0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlZmVycmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIHNjcmlwdCwgb3IgcmVzb3VyY2VzIGZldGNoZWQgYnkgdGhlIHNjcmlwdDpcblxuKiAgIGBuby1yZWZlcnJlcmA6IFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIChkZWZhdWx0KTogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50IHRvIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvb3JpZ2luICJvcmlnaW46IFdlYiBjb250ZW50XCdzIG9yaWdpbiBpcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWUgKHByb3RvY29sKSwgaG9zdCAoZG9tYWluKSwgYW5kIHBvcnQgb2YgdGhlIFVSTCB1c2VkIHRvIGFjY2VzcyBpdC4gVHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gb25seSB3aGVuIHRoZSBzY2hlbWUsIGhvc3QsIGFuZCBwb3J0IGFsbCBtYXRjaC4iKXMgd2l0aG91dCBbVExTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1RMUyAiVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUyksIHByZXZpb3VzbHkga25vd24gYXMgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCksIGlzIGEgcHJvdG9jb2wgdXNlZCBieSBhcHBsaWNhdGlvbnMgdG8gY29tbXVuaWNhdGUgc2VjdXJlbHkgYWNyb3NzIGEgbmV0d29yaywgcHJldmVudGluZyB0YW1wZXJpbmcgd2l0aCBhbmQgZWF2ZXNkcm9wcGluZyBvbiBlbWFpbCwgd2ViIGJyb3dzaW5nLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBwcm90b2NvbHMuIikgKFtIVFRQU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9IVFRQUyAiSFRUUFM6IEhUVFBTIChIVFRQIFNlY3VyZSkgaXMgYW4gZW5jcnlwdGVkIHZlcnNpb24gb2YgdGhlIEhUVFAgcHJvdG9jb2wuIEl0IHVzdWFsbHkgdXNlcyBTU0wgb3IgVExTIHRvIGVuY3J5cHQgYWxsIGNvbW11bmljYXRpb24gYmV0d2VlbiBhIGNsaWVudCBhbmQgYSBzZXJ2ZXIuIFRoaXMgc2VjdXJlIGNvbm5lY3Rpb24gYWxsb3dzIGNsaWVudHMgdG8gc2FmZWx5IGV4Y2hhbmdlIHNlbnNpdGl2ZSBkYXRhIHdpdGggYSBzZXJ2ZXIsIGZvciBleGFtcGxlIGZvciBiYW5raW5nIGFjdGl2aXRpZXMgb3Igb25saW5lIHNob3BwaW5nLiIpKS5cbiogICBgb3JpZ2luYDogVGhlIHNlbnQgcmVmZXJyZXIgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBvcmlnaW4gb2YgdGhlIHJlZmVycmluZyBwYWdlOiBpdHMgW3NjaGVtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9BcmNoaXZlL01vemlsbGEvVVJJU2NoZW1lKSwgW2hvc3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvaG9zdCAiaG9zdDogQSBob3N0IGlzIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgSW50ZXJuZXQgKG9yIGEgbG9jYWwgbmV0d29yaykuIFNvbWUgaG9zdHMgY2FsbGVkIHNlcnZlcnMgb2ZmZXIgYWRkaXRpb25hbCBzZXJ2aWNlcyBsaWtlIHNlcnZpbmcgd2VicGFnZXMgb3Igc3RvcmluZyBmaWxlcyBhbmQgZW1haWxzLiIpLCBhbmQgW3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvcG9ydCAicG9ydDogRm9yIGEgY29tcHV0ZXIgY29ubmVjdGVkIHRvIGEgbmV0d29yayB3aXRoIGFuIElQIGFkZHJlc3MsIGEgcG9ydCBpcyBhIGNvbW11bmljYXRpb24gZW5kcG9pbnQuIFBvcnRzIGFyZSBkZXNpZ25hdGVkIGJ5IG51bWJlcnMsIGFuZCBiZWxvdyAxMDI0IGVhY2ggcG9ydCBpcyBhc3NvY2lhdGVkIGJ5IGRlZmF1bHQgd2l0aCBhIHNwZWNpZmljIHByb3RvY29sLiIpLlxuKiAgIGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBUaGUgcmVmZXJyZXIgc2VudCB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LiBOYXZpZ2F0aW9ucyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBzdGlsbCBpbmNsdWRlIHRoZSBwYXRoLlxuKiAgIGBzYW1lLW9yaWdpbmA6IEEgcmVmZXJyZXIgd2lsbCBiZSBzZW50IGZvciBbc2FtZSBvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvU2FtZS1vcmlnaW5fcG9saWN5ICJzYW1lIG9yaWdpbjogVGhlIHNhbWUtb3JpZ2luIHBvbGljeSBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHJlc3RyaWN0cyBob3cgYSBkb2N1bWVudCBvciBzY3JpcHQgbG9hZGVkIGZyb20gb25lIG9yaWdpbiBjYW4gaW50ZXJhY3Qgd2l0aCBhIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIiksIGJ1dCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMgd2lsbCBjb250YWluIG5vIHJlZmVycmVyIGluZm9ybWF0aW9uLlxuKiAgIGBzdHJpY3Qtb3JpZ2luYDogT25seSBzZW5kIHRoZSBvcmlnaW4gb2YgdGhlIGRvY3VtZW50IGFzIHRoZSByZWZlcnJlciB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoZS5nLiBIVFRQU+KGkkhUVFBTKSwgYnV0IGRvblwndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKGUuZy4gSFRUUFPihpJIVFRQKS5cbiogICBgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFNlbmQgYSBmdWxsIFVSTCB3aGVuIHBlcmZvcm1pbmcgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LCBidXQgb25seSBzZW5kIHRoZSBvcmlnaW4gd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKGUuZy5IVFRQU+KGkkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKGUuZy4gSFRUUFPihpJIVFRQKS5cbiogICBgdW5zYWZlLXVybGA6IFRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBfYW5kXyB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgW2ZyYWdtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9oYXNoKSwgW3Bhc3N3b3JkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9wYXNzd29yZCksIG9yIFt1c2VybmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvdXNlcm5hbWUpKS4gKipUaGlzIHZhbHVlIGlzIHVuc2FmZSoqLCBiZWNhdXNlIGl0IGxlYWtzIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy5cblxuKipOb3RlKio6IEFuIGVtcHR5IHN0cmluZyB2YWx1ZSAoYCIiYCkgaXMgYm90aCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGEgZmFsbGJhY2sgdmFsdWUgaWYgYHJlZmVycmVycG9saWN5YCBpcyBub3Qgc3VwcG9ydGVkLiBJZiBgcmVmZXJyZXJwb2xpY3lgIGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBvbiB0aGUgYDxzY3JpcHQ+YCBlbGVtZW50LCBpdCB3aWxsIGFkb3B0IGEgaGlnaGVyLWxldmVsIHJlZmVycmVyIHBvbGljeSwgaS5lLiBvbmUgc2V0IG9uIHRoZSB3aG9sZSBkb2N1bWVudCBvciBkb21haW4uIElmIGEgaGlnaGVyLWxldmVsIHBvbGljeSBpcyBub3QgYXZhaWxhYmxlLMKgdGhlIGVtcHR5IHN0cmluZyBpcyB0cmVhdGVkIGFzIGJlaW5nIGVxdWl2YWxlbnQgdG8gYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlYC4nfSx7bmFtZToidGV4dCIsZGVzY3JpcHRpb246Ikxpa2UgdGhlIGB0ZXh0Q29udGVudGAgYXR0cmlidXRlLCB0aGlzIGF0dHJpYnV0ZSBzZXRzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuIFVubGlrZSB0aGUgYHRleHRDb250ZW50YCBhdHRyaWJ1dGUsIGhvd2V2ZXIsIHRoaXMgYXR0cmlidXRlIGlzIGV2YWx1YXRlZCBhcyBleGVjdXRhYmxlIGNvZGUgYWZ0ZXIgdGhlIG5vZGUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0In1dfSx7bmFtZToibm9zY3JpcHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBub3NjcmlwdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBpZiBzY3JpcHRpbmcgaXMgZW5hYmxlZCwgYW5kIHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuIGlmIHNjcmlwdGluZyBpcyBkaXNhYmxlZC4gSXQgaXMgdXNlZCB0byBwcmVzZW50IGRpZmZlcmVudCBtYXJrdXAgdG8gdXNlciBhZ2VudHMgdGhhdCBzdXBwb3J0IHNjcmlwdGluZyBhbmQgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IHNjcmlwdGluZywgYnkgYWZmZWN0aW5nIGhvdyB0aGUgZG9jdW1lbnQgaXMgcGFyc2VkLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L25vc2NyaXB0In1dfSx7bmFtZToidGVtcGxhdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZW1wbGF0ZSBlbGVtZW50IGlzIHVzZWQgdG8gZGVjbGFyZSBmcmFnbWVudHMgb2YgSFRNTCB0aGF0IGNhbiBiZSBjbG9uZWQgYW5kIGluc2VydGVkIGluIHRoZSBkb2N1bWVudCBieSBzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGUifV19LHtuYW1lOiJjYW52YXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjYW52YXMgZWxlbWVudCBwcm92aWRlcyBzY3JpcHRzIHdpdGggYSByZXNvbHV0aW9uLWRlcGVuZGVudCBiaXRtYXAgY2FudmFzLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIGdyYXBocywgZ2FtZSBncmFwaGljcywgYXJ0LCBvciBvdGhlciB2aXN1YWwgaW1hZ2VzIG9uIHRoZSBmbHkuIn0sYXR0cmlidXRlczpbe25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2lkdGggb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdHMgdG8gMzAwLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVpZ2h0IG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGluIENTUyBwaXhlbHMuIERlZmF1bHRzIHRvIDE1MC4ifX0se25hbWU6Im1vei1vcGFxdWUiLGRlc2NyaXB0aW9uOiJMZXRzIHRoZSBjYW52YXMga25vdyB3aGV0aGVyIG9yIG5vdCB0cmFuc2x1Y2VuY3kgd2lsbCBiZSBhIGZhY3Rvci4gSWYgdGhlIGNhbnZhcyBrbm93cyB0aGVyZSdzIG5vIHRyYW5zbHVjZW5jeSwgcGFpbnRpbmcgcGVyZm9ybWFuY2UgY2FuIGJlIG9wdGltaXplZC4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzOyB1c2UgdGhlIHN0YW5kYXJkaXplZCBbYGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IGZhbHNlIH0pYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxDYW52YXNFbGVtZW50L2dldENvbnRleHQgXCJUaGUgSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgpIG1ldGhvZCByZXR1cm5zIGEgZHJhd2luZyBjb250ZXh0IG9uIHRoZSBjYW52YXMsIG9yIG51bGwgaWYgdGhlIGNvbnRleHQgaWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLlwiKSBpbnN0ZWFkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzIn1dfV0sZ2xvYmFsQXR0cmlidXRlczpbe25hbWU6ImFjY2Vzc2tleSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvdmlkZXMgYSBoaW50IGZvciBnZW5lcmF0aW5nIGEga2V5Ym9hcmQgc2hvcnRjdXQgZm9yIHRoZSBjdXJyZW50IGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGNvbnNpc3RzIG9mIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVycy4gVGhlIGJyb3dzZXIgc2hvdWxkIHVzZSB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzIG9uIHRoZSBjb21wdXRlciBrZXlib2FyZCBsYXlvdXQuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9hY2Nlc3NrZXkifV19LHtuYW1lOiJhdXRvY2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udHJvbHMgd2hldGhlciBhbmQgaG93IHRleHQgaW5wdXQgaXMgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgb2ZmYCBvciBgbm9uZWAsIG5vIGF1dG9jYXBpdGFsaXphdGlvbiBpcyBhcHBsaWVkIChhbGwgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZSlcbiogICBgb25gIG9yIGBzZW50ZW5jZXNgLCB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggc2VudGVuY2UgZGVmYXVsdHMgdG8gYSBjYXBpdGFsIGxldHRlcjsgYWxsIG90aGVyIGxldHRlcnMgZGVmYXVsdCB0byBsb3dlcmNhc2VcbiogICBgd29yZHNgLCB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBkZWZhdWx0cyB0byBhIGNhcGl0YWwgbGV0dGVyOyBhbGwgb3RoZXIgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZVxuKiAgIGBjaGFyYWN0ZXJzYCwgYWxsIGxldHRlcnMgc2hvdWxkIGRlZmF1bHQgdG8gdXBwZXJjYXNlIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9hdXRvY2FwaXRhbGl6ZSJ9XX0se25hbWU6ImNsYXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBjbGFzc2VzIG9mIHRoZSBlbGVtZW50LiBDbGFzc2VzIGFsbG93cyBDU1MgYW5kIEphdmFTY3JpcHQgdG8gc2VsZWN0IGFuZCBhY2Nlc3Mgc3BlY2lmaWMgZWxlbWVudHMgdmlhIHRoZSBbY2xhc3Mgc2VsZWN0b3JzXSgvZW4tVVMvZG9jcy9XZWIvQ1NTL0NsYXNzX3NlbGVjdG9ycykgb3IgZnVuY3Rpb25zIGxpa2UgdGhlIG1ldGhvZCBbYERvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKWBdKC9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAicmV0dXJucyBhbiBhcnJheS1saWtlIG9iamVjdCBvZiBhbGwgY2hpbGQgZWxlbWVudHMgd2hpY2ggaGF2ZSBhbGwgb2YgdGhlIGdpdmVuIGNsYXNzIG5hbWVzLiIpLid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvY2xhc3MifV19LHtuYW1lOiJjb250ZW50ZWRpdGFibGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgaWYgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLiBJZiBzbywgdGhlIGJyb3dzZXIgbW9kaWZpZXMgaXRzIHdpZGdldCB0byBhbGxvdyBlZGl0aW5nLiBUaGUgYXR0cmlidXRlIG11c3QgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgdHJ1ZWAgb3IgdGhlIF9lbXB0eSBzdHJpbmdfLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtdXN0IGJlIGVkaXRhYmxlO1xuKiAgIGBmYWxzZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG11c3Qgbm90IGJlIGVkaXRhYmxlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvY29udGVudGVkaXRhYmxlIn1dfSx7bmFtZToiY29udGV4dG1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBgWyoqaWQqKl0oI2F0dHItaWQpYCBvZiBhIFtgPG1lbnU+YF0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZW51ICJUaGUgSFRNTCA8bWVudT4gZWxlbWVudCByZXByZXNlbnRzIGEgZ3JvdXAgb2YgY29tbWFuZHMgdGhhdCBhIHVzZXIgY2FuIHBlcmZvcm0gb3IgYWN0aXZhdGUuIFRoaXMgaW5jbHVkZXMgYm90aCBsaXN0IG1lbnVzLCB3aGljaCBtaWdodCBhcHBlYXIgYWNyb3NzIHRoZSB0b3Agb2YgYSBzY3JlZW4sIGFzIHdlbGwgYXMgY29udGV4dCBtZW51cywgc3VjaCBhcyB0aG9zZSB0aGF0IG1pZ2h0IGFwcGVhciB1bmRlcm5lYXRoIGEgYnV0dG9uIGFmdGVyIGl0IGhhcyBiZWVuIGNsaWNrZWQuIikgdG8gdXNlIGFzIHRoZSBjb250ZXh0dWFsIG1lbnUgZm9yIHRoaXMgZWxlbWVudC4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2NvbnRleHRtZW51In1dfSx7bmFtZToiZGlyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGx0cmAsIHdoaWNoIG1lYW5zIF9sZWZ0IHRvIHJpZ2h0XyBhbmQgaXMgdG8gYmUgdXNlZCBmb3IgbGFuZ3VhZ2VzIHRoYXQgYXJlIHdyaXR0ZW4gZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgKGxpa2UgRW5nbGlzaCk7XG4qICAgYHJ0bGAsIHdoaWNoIG1lYW5zIF9yaWdodCB0byBsZWZ0XyBhbmQgaXMgdG8gYmUgdXNlZCBmb3IgbGFuZ3VhZ2VzIHRoYXQgYXJlIHdyaXR0ZW4gZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQgKGxpa2UgQXJhYmljKTtcbiogICBgYXV0b2AsIHdoaWNoIGxldHMgdGhlIHVzZXIgYWdlbnQgZGVjaWRlLiBJdCB1c2VzIGEgYmFzaWMgYWxnb3JpdGhtIGFzIGl0IHBhcnNlcyB0aGUgY2hhcmFjdGVycyBpbnNpZGUgdGhlIGVsZW1lbnQgdW50aWwgaXQgZmluZHMgYSBjaGFyYWN0ZXIgd2l0aCBhIHN0cm9uZyBkaXJlY3Rpb25hbGl0eSwgdGhlbiBpdCBhcHBsaWVzIHRoYXQgZGlyZWN0aW9uYWxpdHkgdG8gdGhlIHdob2xlIGVsZW1lbnQuIn0sdmFsdWVTZXQ6ImQiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZGlyIn1dfSx7bmFtZToiZHJhZ2dhYmxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGVsZW1lbnQgY2FuIGJlIGRyYWdnZWQsIHVzaW5nIHRoZSBbRHJhZyBhbmQgRHJvcCBBUEldKC9lbi11cy9kb2NzL0RyYWdEcm9wL0RyYWdfYW5kX0Ryb3ApLiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbWF5IGJlIGRyYWdnZWRcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtYXkgbm90IGJlIGRyYWdnZWQuIn0sdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZHJhZ2dhYmxlIn1dfSx7bmFtZToiZHJvcHpvbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgd2hhdCB0eXBlcyBvZiBjb250ZW50IGNhbiBiZSBkcm9wcGVkIG9uIGFuIGVsZW1lbnQsIHVzaW5nIHRoZSBbRHJhZyBhbmQgRHJvcCBBUEldKC9lbi1VUy9kb2NzL0RyYWdEcm9wL0RyYWdfYW5kX0Ryb3ApLiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBjb3B5YCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgZHJvcHBpbmcgd2lsbCBjcmVhdGUgYSBjb3B5IG9mIHRoZSBlbGVtZW50IHRoYXQgd2FzIGRyYWdnZWRcbiogICBgbW92ZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHRoYXQgd2FzIGRyYWdnZWQgd2lsbCBiZSBtb3ZlZCB0byB0aGlzIG5ldyBsb2NhdGlvbi5cbiogICBgbGlua2AsIHdpbGwgY3JlYXRlIGEgbGluayB0byB0aGUgZHJhZ2dlZCBkYXRhLiJ9fSx7bmFtZToiZXhwb3J0cGFydHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlVzZWQgdG8gdHJhbnNpdGl2ZWx5IGV4cG9ydCBzaGFkb3cgcGFydHMgZnJvbSBhIG5lc3RlZCBzaGFkb3cgdHJlZSBpbnRvIGEgY29udGFpbmluZyBsaWdodCB0cmVlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZXhwb3J0cGFydHMifV19LHtuYW1lOiJoaWRkZW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgbm90IHlldCwgb3IgaXMgbm8gbG9uZ2VyLCBfcmVsZXZhbnRfLiBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIHVzZWQgdG8gaGlkZSBlbGVtZW50cyBvZiB0aGUgcGFnZSB0aGF0IGNhbid0IGJlIHVzZWQgdW50aWwgdGhlIGxvZ2luIHByb2Nlc3MgaGFzIGJlZW4gY29tcGxldGVkLiBUaGUgYnJvd3NlciB3b24ndCByZW5kZXIgc3VjaCBlbGVtZW50cy4gVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCB0byBoaWRlIGNvbnRlbnQgdGhhdCBjb3VsZCBsZWdpdGltYXRlbHkgYmUgc2hvd24uIn0sdmFsdWVTZXQ6InYiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaGlkZGVuIn1dfSx7bmFtZToiaWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSB1bmlxdWUgaWRlbnRpZmllciAoSUQpIHdoaWNoIG11c3QgYmUgdW5pcXVlIGluIHRoZSB3aG9sZSBkb2N1bWVudC4gSXRzIHB1cnBvc2UgaXMgdG8gaWRlbnRpZnkgdGhlIGVsZW1lbnQgd2hlbiBsaW5raW5nICh1c2luZyBhIGZyYWdtZW50IGlkZW50aWZpZXIpLCBzY3JpcHRpbmcsIG9yIHN0eWxpbmcgKHdpdGggQ1NTKS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lkIn1dfSx7bmFtZToiaW5wdXRtb2RlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidQcm92aWRlcyBhIGhpbnQgdG8gYnJvd3NlcnMgYXMgdG8gdGhlIHR5cGUgb2YgdmlydHVhbCBrZXlib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSB3aGVuIGVkaXRpbmcgdGhpcyBlbGVtZW50IG9yIGl0cyBjb250ZW50cy4gVXNlZCBwcmltYXJpbHkgb24gW2A8aW5wdXQ+YF0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnRzLCBidXQgaXMgdXNhYmxlIG9uIGFueSBlbGVtZW50IHdoaWxlIGluIGBbY29udGVudGVkaXRhYmxlXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWNvbnRlbnRlZGl0YWJsZSlgIG1vZGUuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pbnB1dG1vZGUifV19LHtuYW1lOiJpcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoYXQgYSBzdGFuZGFyZCBIVE1MIGVsZW1lbnQgc2hvdWxkIGJlaGF2ZSBsaWtlIGEgcmVnaXN0ZXJlZCBjdXN0b20gYnVpbHQtaW4gZWxlbWVudCAoc2VlIFtVc2luZyBjdXN0b20gZWxlbWVudHNdKC9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpIGZvciBtb3JlIGRldGFpbHMpLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXMifV19LHtuYW1lOiJpdGVtaWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1bmlxdWUsIGdsb2JhbCBpZGVudGlmaWVyIG9mIGFuIGl0ZW0uIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pdGVtaWQifV19LHtuYW1lOiJpdGVtcHJvcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVXNlZCB0byBhZGQgcHJvcGVydGllcyB0byBhbiBpdGVtLiBFdmVyeSBIVE1MIGVsZW1lbnQgbWF5IGhhdmUgYW4gYGl0ZW1wcm9wYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLCB3aGVyZSBhbiBgaXRlbXByb3BgIGNvbnNpc3RzIG9mIGEgbmFtZSBhbmQgdmFsdWUgcGFpci4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1wcm9wIn1dfSx7bmFtZToiaXRlbXJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvcGVydGllcyB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgYW4gZWxlbWVudCB3aXRoIHRoZSBgaXRlbXNjb3BlYCBhdHRyaWJ1dGUgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXRlbSB1c2luZyBhbiBgaXRlbXJlZmAuIEl0IHByb3ZpZGVzIGEgbGlzdCBvZiBlbGVtZW50IGlkcyAobm90IGBpdGVtaWRgcykgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZWxzZXdoZXJlIGluIHRoZSBkb2N1bWVudC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1yZWYifV19LHtuYW1lOiJpdGVtc2NvcGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6ImBpdGVtc2NvcGVgICh1c3VhbGx5KSB3b3JrcyBhbG9uZyB3aXRoIGBbaXRlbXR5cGVdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaXRlbXR5cGUpYCB0byBzcGVjaWZ5IHRoYXQgdGhlIEhUTUwgY29udGFpbmVkIGluIGEgYmxvY2sgaXMgYWJvdXQgYSBwYXJ0aWN1bGFyIGl0ZW0uIGBpdGVtc2NvcGVgIGNyZWF0ZXMgdGhlIEl0ZW0gYW5kIGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoZSBgaXRlbXR5cGVgIGFzc29jaWF0ZWQgd2l0aCBpdC4gYGl0ZW10eXBlYCBpcyBhIHZhbGlkIFVSTCBvZiBhIHZvY2FidWxhcnkgKHN1Y2ggYXMgW3NjaGVtYS5vcmddKGh0dHBzOi8vc2NoZW1hLm9yZy8pKSB0aGF0IGRlc2NyaWJlcyB0aGUgaXRlbSBhbmQgaXRzIHByb3BlcnRpZXMgY29udGV4dC4ifSx2YWx1ZVNldDoidiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pdGVtc2NvcGUifV19LHtuYW1lOiJpdGVtdHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIHZvY2FidWxhcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVmaW5lIGBpdGVtcHJvcGBzIChpdGVtIHByb3BlcnRpZXMpIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gYFtpdGVtc2NvcGVdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaXRlbXNjb3BlKWAgaXMgdXNlZCB0byBzZXQgdGhlIHNjb3BlIG9mIHdoZXJlIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGUgdm9jYWJ1bGFyeSBzZXQgYnkgYGl0ZW10eXBlYCB3aWxsIGJlIGFjdGl2ZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW10eXBlIn1dfSx7bmFtZToibGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSGVscHMgZGVmaW5lIHRoZSBsYW5ndWFnZSBvZiBhbiBlbGVtZW50OiB0aGUgbGFuZ3VhZ2UgdGhhdCBub24tZWRpdGFibGUgZWxlbWVudHMgYXJlIGluLCBvciB0aGUgbGFuZ3VhZ2UgdGhhdCBlZGl0YWJsZSBlbGVtZW50cyBzaG91bGQgYmUgd3JpdHRlbiBpbiBieSB0aGUgdXNlci4gVGhlIGF0dHJpYnV0ZSBjb250YWlucyBvbmUg4oCcbGFuZ3VhZ2UgdGFn4oCdIChtYWRlIG9mIGh5cGhlbi1zZXBhcmF0ZWQg4oCcbGFuZ3VhZ2Ugc3VidGFnc+KAnSkgaW4gdGhlIGZvcm1hdCBkZWZpbmVkIGluIFtfVGFncyBmb3IgSWRlbnRpZnlpbmcgTGFuZ3VhZ2VzIChCQ1A0NylfXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dCkuIFsqKnhtbDpsYW5nKipdKCNhdHRyLXhtbDpsYW5nKSBoYXMgcHJpb3JpdHkgb3ZlciBpdC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2xhbmcifV19LHtuYW1lOiJwYXJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBwYXJ0IG5hbWVzIG9mIHRoZSBlbGVtZW50LiBQYXJ0IG5hbWVzIGFsbG93cyBDU1MgdG8gc2VsZWN0IGFuZCBzdHlsZSBzcGVjaWZpYyBlbGVtZW50cyBpbiBhIHNoYWRvdyB0cmVlIHZpYSB0aGUgW2A6OnBhcnRgXSgvZW4tVVMvZG9jcy9XZWIvQ1NTLzo6cGFydCAiVGhlIDo6cGFydCBDU1MgcHNldWRvLWVsZW1lbnQgcmVwcmVzZW50cyBhbnkgZWxlbWVudCB3aXRoaW4gYSBzaGFkb3cgdHJlZSB0aGF0IGhhcyBhIG1hdGNoaW5nIHBhcnQgYXR0cmlidXRlLiIpIHBzZXVkby1lbGVtZW50Lid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvcGFydCJ9XX0se25hbWU6InJvbGUiLHZhbHVlU2V0OiJyb2xlcyJ9LHtuYW1lOiJzbG90IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBc3NpZ25zIGEgc2xvdCBpbiBhIFtzaGFkb3cgRE9NXSgvZW4tVVMvZG9jcy9XZWIvV2ViX0NvbXBvbmVudHMvU2hhZG93X0RPTSkgc2hhZG93IHRyZWUgdG8gYW4gZWxlbWVudDogQW4gZWxlbWVudCB3aXRoIGEgYHNsb3RgIGF0dHJpYnV0ZSBpcyBhc3NpZ25lZCB0byB0aGUgc2xvdCBjcmVhdGVkIGJ5IHRoZSBbYDxzbG90PmBdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCBcIlRoZSBIVE1MIDxzbG90PiBlbGVtZW504oCUcGFydCBvZiB0aGUgV2ViIENvbXBvbmVudHMgdGVjaG5vbG9neSBzdWl0ZeKAlGlzIGEgcGxhY2Vob2xkZXIgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gZmlsbCB3aXRoIHlvdXIgb3duIG1hcmt1cCwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlIHNlcGFyYXRlIERPTSB0cmVlcyBhbmQgcHJlc2VudCB0aGVtIHRvZ2V0aGVyLlwiKSBlbGVtZW50IHdob3NlIGBbbmFtZV0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90I2F0dHItbmFtZSlgIGF0dHJpYnV0ZSdzIHZhbHVlIG1hdGNoZXMgdGhhdCBgc2xvdGAgYXR0cmlidXRlJ3MgdmFsdWUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zbG90In1dfSx7bmFtZToic3BlbGxjaGVjayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgZGVmaW5lcyB3aGV0aGVyIHRoZSBlbGVtZW50IG1heSBiZSBjaGVja2VkIGZvciBzcGVsbGluZyBlcnJvcnMuIEl0IG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYHRydWVgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUsIGlmIHBvc3NpYmxlLCBjaGVja2VkIGZvciBzcGVsbGluZyBlcnJvcnM7XG4qICAgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzcGVsbGluZyBlcnJvcnMuIn0sdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc3BlbGxjaGVjayJ9XX0se25hbWU6InN0eWxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidDb250YWlucyBbQ1NTXSgvZW4tVVMvZG9jcy9XZWIvQ1NTKSBzdHlsaW5nIGRlY2xhcmF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQgZm9yIHN0eWxlcyB0byBiZSBkZWZpbmVkIGluIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcy4gVGhpcyBhdHRyaWJ1dGUgYW5kIHRoZSBbYDxzdHlsZT5gXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0eWxlICJUaGUgSFRNTCA8c3R5bGU+IGVsZW1lbnQgY29udGFpbnMgc3R5bGUgaW5mb3JtYXRpb24gZm9yIGEgZG9jdW1lbnQsIG9yIHBhcnQgb2YgYSBkb2N1bWVudC4iKSBlbGVtZW50IGhhdmUgbWFpbmx5IHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIGZvciBxdWljayBzdHlsaW5nLCBmb3IgZXhhbXBsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3N0eWxlIn1dfSx7bmFtZToidGFiaW5kZXgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGludGVnZXIgYXR0cmlidXRlIGluZGljYXRpbmcgaWYgdGhlIGVsZW1lbnQgY2FuIHRha2UgaW5wdXQgZm9jdXMgKGlzIF9mb2N1c2FibGVfKSwgaWYgaXQgc2hvdWxkIHBhcnRpY2lwYXRlIHRvIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbiwgYW5kIGlmIHNvLCBhdCB3aGF0IHBvc2l0aW9uLiBJdCBjYW4gdGFrZSBzZXZlcmFsIHZhbHVlczpcblxuKiAgIGEgX25lZ2F0aXZlIHZhbHVlXyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUsIGJ1dCBzaG91bGQgbm90IGJlIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uO1xuKiAgIGAwYCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUgYW5kIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uLCBidXQgaXRzIHJlbGF0aXZlIG9yZGVyIGlzIGRlZmluZWQgYnkgdGhlIHBsYXRmb3JtIGNvbnZlbnRpb247XG4qICAgYSBfcG9zaXRpdmUgdmFsdWVfIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzZXF1ZW50aWFsIGtleWJvYXJkIG5hdmlnYXRpb247IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZWxlbWVudHMgYXJlIGZvY3VzZWQgaXMgdGhlIGluY3JlYXNpbmcgdmFsdWUgb2YgdGhlIFsqKnRhYmluZGV4KipdKCNhdHRyLXRhYmluZGV4KS4gSWYgc2V2ZXJhbCBlbGVtZW50cyBzaGFyZSB0aGUgc2FtZSB0YWJpbmRleCwgdGhlaXIgcmVsYXRpdmUgb3JkZXIgZm9sbG93cyB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMgaW4gdGhlIGRvY3VtZW50LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSB0ZXh0IHJlcHJlc2VudGluZyBhZHZpc29yeSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBlbGVtZW50IGl0IGJlbG9uZ3MgdG8uIFN1Y2ggaW5mb3JtYXRpb24gY2FuIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFzIGEgdG9vbHRpcC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RpdGxlIn1dfSx7bmFtZToidHJhbnNsYXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB0aGF0IGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIG9mIGl0cyBbYFRleHRgXSgvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHQgXCJUaGUgVGV4dCBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgdGV4dHVhbCBjb250ZW50IG9mIEVsZW1lbnQgb3IgQXR0ci4gSWYgYW4gZWxlbWVudCBoYXMgbm8gbWFya3VwIHdpdGhpbiBpdHMgY29udGVudCwgaXQgaGFzIGEgc2luZ2xlIGNoaWxkIGltcGxlbWVudGluZyBUZXh0IHRoYXQgY29udGFpbnMgdGhlIGVsZW1lbnQncyB0ZXh0LiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCBjb250YWlucyBtYXJrdXAsIGl0IGlzIHBhcnNlZCBpbnRvIGluZm9ybWF0aW9uIGl0ZW1zIGFuZCBUZXh0IG5vZGVzIHRoYXQgZm9ybSBpdHMgY2hpbGRyZW4uXCIpIG5vZGUgY2hpbGRyZW4gYXJlIHRvIGJlIHRyYW5zbGF0ZWQgd2hlbiB0aGUgcGFnZSBpcyBsb2NhbGl6ZWQsIG9yIHdoZXRoZXIgdG8gbGVhdmUgdGhlbSB1bmNoYW5nZWQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgZW1wdHkgc3RyaW5nIGFuZCBgeWVzYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSB0cmFuc2xhdGVkLlxuKiAgIGBub2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGJlIHRyYW5zbGF0ZWQuIn0sdmFsdWVTZXQ6InkiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdHJhbnNsYXRlIn1dfSx7bmFtZToib25hYm9ydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxvYWRpbmcgb2YgYSByZXNvdXJjZSBoYXMgYmVlbiBhYm9ydGVkLiJ9fSx7bmFtZToib25ibHVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25jYW5wbGF5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXNlciBhZ2VudCBjYW4gcGxheSB0aGUgbWVkaWEsIGJ1dCBlc3RpbWF0ZXMgdGhhdCBub3QgZW5vdWdoIGRhdGEgaGFzIGJlZW4gbG9hZGVkIHRvIHBsYXkgdGhlIG1lZGlhIHVwIHRvIGl0cyBlbmQgd2l0aG91dCBoYXZpbmcgdG8gc3RvcCBmb3IgZnVydGhlciBidWZmZXJpbmcgb2YgY29udGVudC4ifX0se25hbWU6Im9uY2FucGxheXRocm91Z2giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIGFnZW50IGNhbiBwbGF5IHRoZSBtZWRpYSB1cCB0byBpdHMgZW5kIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3AgZm9yIGZ1cnRoZXIgYnVmZmVyaW5nIG9mIGNvbnRlbnQuIn19LHtuYW1lOiJvbmNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgPGlucHV0PiwgPHNlbGVjdD4sIGFuZCA8dGV4dGFyZWE+IGVsZW1lbnRzIHdoZW4gYSBjaGFuZ2UgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZSBpcyBjb21taXR0ZWQgYnkgdGhlIHVzZXIuIn19LHtuYW1lOiJvbmNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBhbmQgcmVsZWFzZWQgb24gYW4gZWxlbWVudC4ifX0se25hbWU6Im9uY29udGV4dG1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgKGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCkuIn19LHtuYW1lOiJvbmRibGNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaXMgY2xpY2tlZCB0d2ljZSBvbiBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25kcmFnIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGlzIGJlaW5nIGRyYWdnZWQgKGV2ZXJ5IDM1MG1zKS4ifX0se25hbWU6Im9uZHJhZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnIG9wZXJhdGlvbiBpcyBiZWluZyBlbmRlZCAoYnkgcmVsZWFzaW5nIGEgbW91c2UgYnV0dG9uIG9yIGhpdHRpbmcgdGhlIGVzY2FwZSBrZXkpLiJ9fSx7bmFtZToib25kcmFnZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGVudGVycyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnbGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGxlYXZlcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnb3ZlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZWxlbWVudCBvciB0ZXh0IHNlbGVjdGlvbiBpcyBiZWluZyBkcmFnZ2VkIG92ZXIgYSB2YWxpZCBkcm9wIHRhcmdldCAoZXZlcnkgMzUwbXMpLiJ9fSx7bmFtZToib25kcmFnc3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uLiJ9fSx7bmFtZToib25kcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC4ifX0se25hbWU6Im9uZHVyYXRpb25jaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdXJhdGlvbiBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9uZW1wdGllZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1lZGlhIGhhcyBiZWNvbWUgZW1wdHk7IGZvciBleGFtcGxlLCB0aGlzIGV2ZW50IGlzIHNlbnQgaWYgdGhlIG1lZGlhIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIChvciBwYXJ0aWFsbHkgbG9hZGVkKSwgYW5kIHRoZSBsb2FkKCkgbWV0aG9kIGlzIGNhbGxlZCB0byByZWxvYWQgaXQuIn19LHtuYW1lOiJvbmVuZGVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIHRoZSBlbmQgb2YgdGhlIG1lZGlhIHdhcyByZWFjaGVkLiJ9fSx7bmFtZToib25lcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4ifX0se25hbWU6Im9uZm9jdXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaGFzIHJlY2VpdmVkIGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25mb3JtY2hhbmdlIn0se25hbWU6Im9uZm9ybWlucHV0In0se25hbWU6Im9uaW5wdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IGNoYW5nZXMgb3IgdGhlIGNvbnRlbnQgb2YgYW4gZWxlbWVudCB3aXRoIHRoZSBhdHRyaWJ1dGUgY29udGVudGVkaXRhYmxlIGlzIG1vZGlmaWVkLiJ9fSx7bmFtZToib25pbnZhbGlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHN1Ym1pdHRhYmxlIGVsZW1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhbmQgZG9lc24ndCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50cy4ifX0se25hbWU6Im9ua2V5ZG93biIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duLiJ9fSx7bmFtZToib25rZXlwcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duIGFuZCB0aGF0IGtleSBub3JtYWxseSBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSAodXNlIGlucHV0IGluc3RlYWQpLiJ9fSx7bmFtZToib25rZXl1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcmVsZWFzZWQuIn19LHtuYW1lOiJvbmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcmVzb3VyY2UgYW5kIGl0cyBkZXBlbmRlbnQgcmVzb3VyY2VzIGhhdmUgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBtZWRpYSBoYXMgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkbWV0YWRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRhZGF0YSBoYXMgYmVlbiBsb2FkZWQuIn19LHtuYW1lOiJvbmxvYWRzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvZ3Jlc3MgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25tb3VzZWRvd24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIG9uIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNlbW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb3ZlciBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25tb3VzZW91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvZmYgb25lIG9mIGl0cyBjaGlsZHJlbi4ifX0se25hbWU6Im9ubW91c2VvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvbnRvIG9uZSBvZiBpdHMgY2hpbGRyZW4uIn19LHtuYW1lOiJvbm1vdXNldXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNld2hlZWwifSx7bmFtZToib25tb3VzZWVudGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ubW91c2VsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ucGF1c2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBiZWVuIHBhdXNlZC4ifX0se25hbWU6Im9ucGxheSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUGxheWJhY2sgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25wbGF5aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBpcyByZWFkeSB0byBzdGFydCBhZnRlciBoYXZpbmcgYmVlbiBwYXVzZWQgb3IgZGVsYXllZCBkdWUgdG8gbGFjayBvZiBkYXRhLiJ9fSx7bmFtZToib25wcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW4gcHJvZ3Jlc3MuIn19LHtuYW1lOiJvbnJhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwbGF5YmFjayByYXRlIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25yZXNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHJlc2V0LiJ9fSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IGhhcyBiZWVuIHJlc2l6ZWQuIn19LHtuYW1lOiJvbnJlYWR5c3RhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBvZiBhIGRvY3VtZW50IGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25zY3JvbGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IG9yIGFuIGVsZW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQuIn19LHtuYW1lOiJvbnNlZWtlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzZWVrIG9wZXJhdGlvbiBjb21wbGV0ZWQuIn19LHtuYW1lOiJvbnNlZWtpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgc2VlayBvcGVyYXRpb24gYmVnYW4uIn19LHtuYW1lOiJvbnNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU29tZSB0ZXh0IGlzIGJlaW5nIHNlbGVjdGVkLiJ9fSx7bmFtZToib25zaG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNvbnRleHRtZW51IGV2ZW50IHdhcyBmaXJlZCBvbi9idWJibGVkIHRvIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBjb250ZXh0bWVudSBhdHRyaWJ1dGUifX0se25hbWU6Im9uc3RhbGxlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgYWdlbnQgaXMgdHJ5aW5nIHRvIGZldGNoIG1lZGlhIGRhdGEsIGJ1dCBkYXRhIGlzIHVuZXhwZWN0ZWRseSBub3QgZm9ydGhjb21pbmcuIn19LHtuYW1lOiJvbnN1Ym1pdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHN1Ym1pdHRlZC4ifX0se25hbWU6Im9uc3VzcGVuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTWVkaWEgZGF0YSBsb2FkaW5nIGhhcyBiZWVuIHN1c3BlbmRlZC4ifX0se25hbWU6Im9udGltZXVwZGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgaW5kaWNhdGVkIGJ5IHRoZSBjdXJyZW50VGltZSBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9udm9sdW1lY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdm9sdW1lIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib253YWl0aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGxhY2sgb2YgZGF0YS4ifX0se25hbWU6Im9ucG9pbnRlcmNhbmNlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgaXMgdW5saWtlbHkgdG8gcHJvZHVjZSBhbnkgbW9yZSBldmVudHMuIn19LHtuYW1lOiJvbnBvaW50ZXJkb3duIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBlbnRlcnMgdGhlIGFjdGl2ZSBidXR0b25zIHN0YXRlLiJ9fSx7bmFtZToib25wb2ludGVyZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBpbnNpZGUgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybG9ja2NoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgd2FzIGxvY2tlZCBvciByZWxlYXNlZC4ifX0se25hbWU6Im9ucG9pbnRlcmxvY2tlcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSXQgd2FzIGltcG9zc2libGUgdG8gbG9jayB0aGUgcG9pbnRlciBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgb3IgYmVjYXVzZSB0aGUgcGVybWlzc2lvbiB3YXMgZGVuaWVkLiJ9fSx7bmFtZToib25wb2ludGVybW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgY2hhbmdlZCBjb29yZGluYXRlcy4ifX0se25hbWU6Im9ucG9pbnRlcm91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50aW5nIGRldmljZSBtb3ZlZCBvdXQgb2YgaGl0LXRlc3RpbmcgYm91bmRhcnkgb3IgbGVhdmVzIGRldGVjdGFibGUgaG92ZXIgcmFuZ2UuIn19LHtuYW1lOiJvbnBvaW50ZXJvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVydXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGVyIGxlYXZlcyB0aGUgYWN0aXZlIGJ1dHRvbnMgc3RhdGUuIn19LHtuYW1lOiJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIFtgY29tcG9zaXRlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jY29tcG9zaXRlKSB3aWRnZXQsIFtgdGV4dGJveGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RleHRib3gpLCBbYGdyb3VwYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JvdXApLCBvciBbYGFwcGxpY2F0aW9uYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXBwbGljYXRpb24pLiJ9fSx7bmFtZToiYXJpYS1hdG9taWMiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYXRvbWljIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIFthc3Npc3RpdmUgdGVjaG5vbG9naWVzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tYXNzaXN0aXZlLXRlY2hub2xvZ3kpIHdpbGwgcHJlc2VudCBhbGwsIG9yIG9ubHkgcGFydHMgb2YsIHRoZSBjaGFuZ2VkIHJlZ2lvbiBiYXNlZCBvbiB0aGUgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgW2BhcmlhLXJlbGV2YW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCkgYXR0cmlidXRlLiJ9fSx7bmFtZToiYXJpYS1hdXRvY29tcGxldGUiLHZhbHVlU2V0OiJhdXRvY29tcGxldGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdXRvY29tcGxldGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXR0aW5nIHRleHQgY291bGQgdHJpZ2dlciBkaXNwbGF5IG9mIG9uZSBvciBtb3JlIHByZWRpY3Rpb25zIG9mIHRoZSB1c2VyJ3MgaW50ZW5kZWQgdmFsdWUgZm9yIGFuIGlucHV0IGFuZCBzcGVjaWZpZXMgaG93IHByZWRpY3Rpb25zIHdvdWxkIGJlIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLiJ9fSx7bmFtZToiYXJpYS1idXN5Iix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWJ1c3kifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBfTUFZXyB3YW50IHRvIHdhaXQgdW50aWwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbXBsZXRlIGJlZm9yZSBleHBvc2luZyB0aGVtIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToiYXJpYS1jaGVja2VkIix2YWx1ZVNldDoidHJpc3RhdGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIGNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGFuZCBvdGhlciBbd2lkZ2V0c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKSBhbmQgW2BhcmlhLXNlbGVjdGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCkuJ319LHtuYW1lOiJhcmlhLWNvbGNvdW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbGluZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xpbmRleCkuIn19LHtuYW1lOiJhcmlhLWNvbGluZGV4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29saW5kZXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudCdzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jb2xjb3VudGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQpIGFuZCBbYGFyaWEtY29sc3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sc3BhbikuIn19LHtuYW1lOiJhcmlhLWNvbHNwYW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHNwYW5uZWQgYnkgYSBjZWxsIG9yIGdyaWRjZWxsIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29saW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbGluZGV4KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1jb250cm9scyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbnRyb2xzIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB3aG9zZSBjb250ZW50cyBvciBwcmVzZW5jZSBhcmUgY29udHJvbGxlZCBieSB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtb3duc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3ducykuIn19LHtuYW1lOiJhcmlhLWN1cnJlbnQiLHZhbHVlU2V0OiJjdXJyZW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY3VycmVudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGl0ZW0gd2l0aGluIGEgY29udGFpbmVyIG9yIHNldCBvZiByZWxhdGVkIGVsZW1lbnRzLiJ9fSx7bmFtZToiYXJpYS1kZXNjcmliZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB0aGF0IGRlc2NyaWJlcyB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtZGlzYWJsZWQiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgW3BlcmNlaXZhYmxlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcGVyY2VpdmFibGUpIGJ1dCBkaXNhYmxlZCwgc28gaXQgaXMgbm90IGVkaXRhYmxlIG9yIG90aGVyd2lzZSBbb3BlcmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vcGVyYWJsZSkuIFNlZSByZWxhdGVkIFtgYXJpYS1oaWRkZW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhpZGRlbikgYW5kIFtgYXJpYS1yZWFkb25seWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkpLiJ9fSx7bmFtZToiYXJpYS1kcm9wZWZmZWN0Iix2YWx1ZVNldDoiZHJvcGVmZmVjdCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRyb3BlZmZlY3QifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiXFxbRGVwcmVjYXRlZCBpbiBBUklBIDEuMVxcXSBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToiYXJpYS1lcnJvcm1lc3NhZ2UiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1lcnJvcm1lc3NhZ2UifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWludmFsaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWludmFsaWQpIGFuZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEtZXhwYW5kZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXhwYW5kZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQsIG9yIGFub3RoZXIgZ3JvdXBpbmcgZWxlbWVudCBpdCBjb250cm9scywgaXMgY3VycmVudGx5IGV4cGFuZGVkIG9yIGNvbGxhcHNlZC4ifX0se25hbWU6ImFyaWEtZmxvd3RvIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZmxvd3RvIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIG5leHQgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIGFuIGFsdGVybmF0ZSByZWFkaW5nIG9yZGVyIG9mIGNvbnRlbnQgd2hpY2gsIGF0IHRoZSB1c2VyJ3MgZGlzY3JldGlvbiwgYWxsb3dzIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRvIG92ZXJyaWRlIHRoZSBnZW5lcmFsIGRlZmF1bHQgb2YgcmVhZGluZyBpbiBkb2N1bWVudCBzb3VyY2Ugb3JkZXIuIn19LHtuYW1lOiJhcmlhLWdyYWJiZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZ3JhYmJlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidcXFtEZXByZWNhdGVkIGluIEFSSUEgMS4xXFxdIEluZGljYXRlcyBhbiBlbGVtZW50XCdzICJncmFiYmVkIiBbc3RhdGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1zdGF0ZSkgaW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4nfX0se25hbWU6ImFyaWEtaGFzcG9wdXAiLHZhbHVlU2V0OiJoYXNwb3B1cCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhhc3BvcHVwIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgYXZhaWxhYmlsaXR5IGFuZCB0eXBlIG9mIGludGVyYWN0aXZlIHBvcHVwIGVsZW1lbnQsIHN1Y2ggYXMgbWVudSBvciBkaWFsb2csIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpLiJ9fSx7bmFtZToiYXJpYS1oaWRkZW4iLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaGlkZGVuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGlzIGV4cG9zZWQgdG8gYW4gYWNjZXNzaWJpbGl0eSBBUEkuIFNlZSByZWxhdGVkIFtgYXJpYS1kaXNhYmxlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQpLiJ9fSx7bmFtZToiYXJpYS1pbnZhbGlkIix2YWx1ZVNldDoiaW52YWxpZCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWludmFsaWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBlbnRlcmVkIHZhbHVlIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSB0aGUgYXBwbGljYXRpb24uIFNlZSByZWxhdGVkIFtgYXJpYS1lcnJvcm1lc3NhZ2VgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWVycm9ybWVzc2FnZSkuIn19LHtuYW1lOiJhcmlhLWxhYmVsIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbGFiZWwifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIHN0cmluZyB2YWx1ZSB0aGF0IGxhYmVscyB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtbGFiZWxsZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbGFiZWxsZWRieSkuIn19LHtuYW1lOiJhcmlhLWxhYmVsbGVkYnkiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB0aGF0IGxhYmVscyB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEtbGV2ZWwiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sZXZlbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBoaWVyYXJjaGljYWwgbGV2ZWwgb2YgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB3aXRoaW4gYSBzdHJ1Y3R1cmUuIn19LHtuYW1lOiJhcmlhLWxpdmUiLHZhbHVlU2V0OiJsaXZlIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbGl2ZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhhdCBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHdpbGwgYmUgdXBkYXRlZCwgYW5kIGRlc2NyaWJlcyB0aGUgdHlwZXMgb2YgdXBkYXRlcyB0aGUgW3VzZXIgYWdlbnRzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tdXNlci1hZ2VudCksIFthc3Npc3RpdmUgdGVjaG5vbG9naWVzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tYXNzaXN0aXZlLXRlY2hub2xvZ3kpLCBhbmQgdXNlciBjYW4gZXhwZWN0IGZyb20gdGhlIFtsaXZlIHJlZ2lvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWxpdmUtcmVnaW9uKS4ifX0se25hbWU6ImFyaWEtbW9kYWwiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbW9kYWwifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBpcyBtb2RhbCB3aGVuIGRpc3BsYXllZC4ifX0se25hbWU6ImFyaWEtbXVsdGlsaW5lIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLW11bHRpbGluZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciBhIHRleHQgYm94IGFjY2VwdHMgbXVsdGlwbGUgbGluZXMgb2YgaW5wdXQgb3Igb25seSBhIHNpbmdsZSBsaW5lLiJ9fSx7bmFtZToiYXJpYS1tdWx0aXNlbGVjdGFibGUiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbXVsdGlzZWxlY3RhYmxlIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IHRoZSB1c2VyIG1heSBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0YWJsZSBkZXNjZW5kYW50cy4ifX0se25hbWU6ImFyaWEtb3JpZW50YXRpb24iLHZhbHVlU2V0OiJvcmllbnRhdGlvbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLW9yaWVudGF0aW9uIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIHRoZSBlbGVtZW50J3Mgb3JpZW50YXRpb24gaXMgaG9yaXpvbnRhbCwgdmVydGljYWwsIG9yIHVua25vd24vYW1iaWd1b3VzLiJ9fSx7bmFtZToiYXJpYS1vd25zIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3ducyJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZGVudGlmaWVzIGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSBpbiBvcmRlciB0byBkZWZpbmUgYSB2aXN1YWwsIGZ1bmN0aW9uYWwsIG9yIGNvbnRleHR1YWwgcGFyZW50L2NoaWxkIFtyZWxhdGlvbnNoaXBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1yZWxhdGlvbnNoaXApIGJldHdlZW4gRE9NIGVsZW1lbnRzIHdoZXJlIHRoZSBET00gaGllcmFyY2h5IGNhbm5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29udHJvbHNgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbnRyb2xzKS4ifX0se25hbWU6ImFyaWEtcGxhY2Vob2xkZXIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wbGFjZWhvbGRlciJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgc2hvcnQgaGludCAoYSB3b3JkIG9yIHNob3J0IHBocmFzZSkgaW50ZW5kZWQgdG8gYWlkIHRoZSB1c2VyIHdpdGggZGF0YSBlbnRyeSB3aGVuIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZS4gQSBoaW50IGNvdWxkIGJlIGEgc2FtcGxlIHZhbHVlIG9yIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGV4cGVjdGVkIGZvcm1hdC4ifX0se25hbWU6ImFyaWEtcG9zaW5zZXQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wb3NpbnNldCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkncyBudW1iZXIgb3IgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLiBTZWUgcmVsYXRlZCBbYGFyaWEtc2V0c2l6ZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2V0c2l6ZSkuIn19LHtuYW1lOiJhcmlhLXByZXNzZWQiLHZhbHVlU2V0OiJ0cmlzdGF0ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXByZXNzZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSW5kaWNhdGVzIHRoZSBjdXJyZW50ICJwcmVzc2VkIiBbc3RhdGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1zdGF0ZSkgb2YgdG9nZ2xlIGJ1dHRvbnMuIFNlZSByZWxhdGVkIFtgYXJpYS1jaGVja2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkKSBhbmQgW2BhcmlhLXNlbGVjdGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCkuJ319LHtuYW1lOiJhcmlhLXJlYWRvbmx5Iix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlYWRvbmx5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGlzIG5vdCBlZGl0YWJsZSwgYnV0IGlzIG90aGVyd2lzZSBbb3BlcmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vcGVyYWJsZSkuIFNlZSByZWxhdGVkIFtgYXJpYS1kaXNhYmxlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQpLiJ9fSx7bmFtZToiYXJpYS1yZWxldmFudCIsdmFsdWVTZXQ6InJlbGV2YW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVsZXZhbnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoYXQgbm90aWZpY2F0aW9ucyB0aGUgdXNlciBhZ2VudCB3aWxsIHRyaWdnZXIgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpdGhpbiBhIGxpdmUgcmVnaW9uIGlzIG1vZGlmaWVkLiBTZWUgcmVsYXRlZCBbYGFyaWEtYXRvbWljYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdG9taWMpLiJ9fSx7bmFtZToiYXJpYS1yZXF1aXJlZCIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZXF1aXJlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhhdCB1c2VyIGlucHV0IGlzIHJlcXVpcmVkIG9uIHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGJlZm9yZSBhIGZvcm0gbWF5IGJlIHN1Ym1pdHRlZC4ifX0se25hbWU6ImFyaWEtcm9sZWRlc2NyaXB0aW9uIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm9sZWRlc2NyaXB0aW9uIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSBodW1hbi1yZWFkYWJsZSwgYXV0aG9yLWxvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIFtyb2xlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcm9sZSkgb2YgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KS4ifX0se25hbWU6ImFyaWEtcm93Y291bnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3djb3VudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyBpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtcm93aW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2luZGV4KS4ifX0se25hbWU6ImFyaWEtcm93aW5kZXgiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dpbmRleCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGFuIFtlbGVtZW50J3NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSByb3cgaW5kZXggb3IgcG9zaXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXJvd2NvdW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3djb3VudCkgYW5kIFtgYXJpYS1yb3dzcGFuYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dzcGFuKS4ifX0se25hbWU6ImFyaWEtcm93c3BhbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3Mgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1yb3dpbmRleGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93aW5kZXgpIGFuZCBbYGFyaWEtY29sc3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sc3BhbikuIn19LHtuYW1lOiJhcmlhLXNlbGVjdGVkIix2YWx1ZVNldDoidSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNlbGVjdGVkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAic2VsZWN0ZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBvZiB2YXJpb3VzIFt3aWRnZXRzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNoZWNrZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNoZWNrZWQpIGFuZCBbYGFyaWEtcHJlc3NlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcHJlc3NlZCkuJ319LHtuYW1lOiJhcmlhLXNldHNpemUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZXRzaXplIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY3VycmVudCBzZXQgb2YgbGlzdGl0ZW1zIG9yIHRyZWVpdGVtcy4gTm90IHJlcXVpcmVkIGlmIGFsbCBlbGVtZW50cyBpbiB0aGUgc2V0IGFyZSBwcmVzZW50IGluIHRoZSBET00uIFNlZSByZWxhdGVkIFtgYXJpYS1wb3NpbnNldGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcG9zaW5zZXQpLiJ9fSx7bmFtZToiYXJpYS1zb3J0Iix2YWx1ZVNldDoic29ydCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNvcnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGlmIGl0ZW1zIGluIGEgdGFibGUgb3IgZ3JpZCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLiJ9fSx7bmFtZToiYXJpYS12YWx1ZW1heCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbWF4In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtdmFsdWVtaW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW1pbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgZm9yIGEgcmFuZ2UgW3dpZGdldF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIn19LHtuYW1lOiJhcmlhLXZhbHVlbm93IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVub3cifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXZhbHVldGV4dGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWV0ZXh0KS4ifX0se25hbWU6ImFyaWEtdmFsdWV0ZXh0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWV0ZXh0In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgW2BhcmlhLXZhbHVlbm93YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW5vdykgZm9yIGEgcmFuZ2UgW3dpZGdldF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIn19LHtuYW1lOiJhcmlhLWRldGFpbHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgdGhhdCBwcm92aWRlcyBhIGRldGFpbGVkLCBleHRlbmRlZCBkZXNjcmlwdGlvbiBmb3IgdGhlIFtvYmplY3RdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vYmplY3QpLiBTZWUgcmVsYXRlZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEta2V5c2hvcnRjdXRzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYW4gYXV0aG9yIGhhcyBpbXBsZW1lbnRlZCB0byBhY3RpdmF0ZSBvciBnaXZlIGZvY3VzIHRvIGFuIGVsZW1lbnQuIn19XSx2YWx1ZVNldHM6W3tuYW1lOiJiIix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn1dfSx7bmFtZToidSIsdmFsdWVzOlt7bmFtZToidHJ1ZSJ9LHtuYW1lOiJmYWxzZSJ9LHtuYW1lOiJ1bmRlZmluZWQifV19LHtuYW1lOiJvIix2YWx1ZXM6W3tuYW1lOiJvbiJ9LHtuYW1lOiJvZmYifV19LHtuYW1lOiJ5Iix2YWx1ZXM6W3tuYW1lOiJ5ZXMifSx7bmFtZToibm8ifV19LHtuYW1lOiJ3Iix2YWx1ZXM6W3tuYW1lOiJzb2Z0In0se25hbWU6ImhhcmQifV19LHtuYW1lOiJkIix2YWx1ZXM6W3tuYW1lOiJsdHIifSx7bmFtZToicnRsIn0se25hbWU6ImF1dG8ifV19LHtuYW1lOiJtIix2YWx1ZXM6W3tuYW1lOiJnZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkNvcnJlc3BvbmRzIHRvIHRoZSBIVFRQIFtHRVQgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS4zKTsgZm9ybSBkYXRhIGFyZSBhcHBlbmRlZCB0byB0aGUgYGFjdGlvbmAgYXR0cmlidXRlIFVSSSB3aXRoIGEgJz8nIGFzIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHRpbmcgVVJJIGlzIHNlbnQgdG8gdGhlIHNlcnZlci4gVXNlIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGZvcm0gaGFzIG5vIHNpZGUtZWZmZWN0cyBhbmQgY29udGFpbnMgb25seSBBU0NJSSBjaGFyYWN0ZXJzLiJ9fSx7bmFtZToicG9zdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW1BPU1QgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS41KTsgZm9ybSBkYXRhIGFyZSBpbmNsdWRlZCBpbiB0aGUgYm9keSBvZiB0aGUgZm9ybSBhbmQgc2VudCB0byB0aGUgc2VydmVyLiJ9fSx7bmFtZToiZGlhbG9nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJVc2Ugd2hlbiB0aGUgZm9ybSBpcyBpbnNpZGUgYSBbYDxkaWFsb2c+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZykgZWxlbWVudCB0byBjbG9zZSB0aGUgZGlhbG9nIHdoZW4gc3VibWl0dGVkLiJ9fV19LHtuYW1lOiJmbSIsdmFsdWVzOlt7bmFtZToiZ2V0In0se25hbWU6InBvc3QifV19LHtuYW1lOiJzIix2YWx1ZXM6W3tuYW1lOiJyb3cifSx7bmFtZToiY29sIn0se25hbWU6InJvd2dyb3VwIn0se25hbWU6ImNvbGdyb3VwIn1dfSx7bmFtZToidCIsdmFsdWVzOlt7bmFtZToiaGlkZGVuIn0se25hbWU6InRleHQifSx7bmFtZToic2VhcmNoIn0se25hbWU6InRlbCJ9LHtuYW1lOiJ1cmwifSx7bmFtZToiZW1haWwifSx7bmFtZToicGFzc3dvcmQifSx7bmFtZToiZGF0ZXRpbWUifSx7bmFtZToiZGF0ZSJ9LHtuYW1lOiJtb250aCJ9LHtuYW1lOiJ3ZWVrIn0se25hbWU6InRpbWUifSx7bmFtZToiZGF0ZXRpbWUtbG9jYWwifSx7bmFtZToibnVtYmVyIn0se25hbWU6InJhbmdlIn0se25hbWU6ImNvbG9yIn0se25hbWU6ImNoZWNrYm94In0se25hbWU6InJhZGlvIn0se25hbWU6ImZpbGUifSx7bmFtZToic3VibWl0In0se25hbWU6ImltYWdlIn0se25hbWU6InJlc2V0In0se25hbWU6ImJ1dHRvbiJ9XX0se25hbWU6ImltIix2YWx1ZXM6W3tuYW1lOiJ2ZXJiYXRpbSJ9LHtuYW1lOiJsYXRpbiJ9LHtuYW1lOiJsYXRpbi1uYW1lIn0se25hbWU6ImxhdGluLXByb3NlIn0se25hbWU6ImZ1bGwtd2lkdGgtbGF0aW4ifSx7bmFtZToia2FuYSJ9LHtuYW1lOiJrYW5hLW5hbWUifSx7bmFtZToia2F0YWthbmEifSx7bmFtZToibnVtZXJpYyJ9LHtuYW1lOiJ0ZWwifSx7bmFtZToiZW1haWwifSx7bmFtZToidXJsIn1dfSx7bmFtZToiYnQiLHZhbHVlczpbe25hbWU6ImJ1dHRvbiJ9LHtuYW1lOiJzdWJtaXQifSx7bmFtZToicmVzZXQifSx7bmFtZToibWVudSJ9XX0se25hbWU6Imx0Iix2YWx1ZXM6W3tuYW1lOiIxIn0se25hbWU6ImEifSx7bmFtZToiQSJ9LHtuYW1lOiJpIn0se25hbWU6IkkifV19LHtuYW1lOiJtdCIsdmFsdWVzOlt7bmFtZToiY29udGV4dCJ9LHtuYW1lOiJ0b29sYmFyIn1dfSx7bmFtZToibWl0Iix2YWx1ZXM6W3tuYW1lOiJjb21tYW5kIn0se25hbWU6ImNoZWNrYm94In0se25hbWU6InJhZGlvIn1dfSx7bmFtZToiZXQiLHZhbHVlczpbe25hbWU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LHtuYW1lOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn0se25hbWU6InRleHQvcGxhaW4ifV19LHtuYW1lOiJ0ayIsdmFsdWVzOlt7bmFtZToic3VidGl0bGVzIn0se25hbWU6ImNhcHRpb25zIn0se25hbWU6ImRlc2NyaXB0aW9ucyJ9LHtuYW1lOiJjaGFwdGVycyJ9LHtuYW1lOiJtZXRhZGF0YSJ9XX0se25hbWU6InBsIix2YWx1ZXM6W3tuYW1lOiJub25lIn0se25hbWU6Im1ldGFkYXRhIn0se25hbWU6ImF1dG8ifV19LHtuYW1lOiJzaCIsdmFsdWVzOlt7bmFtZToiY2lyY2xlIn0se25hbWU6ImRlZmF1bHQifSx7bmFtZToicG9seSJ9LHtuYW1lOiJyZWN0In1dfSx7bmFtZToieG8iLHZhbHVlczpbe25hbWU6ImFub255bW91cyJ9LHtuYW1lOiJ1c2UtY3JlZGVudGlhbHMifV19LHtuYW1lOiJzYiIsdmFsdWVzOlt7bmFtZToiYWxsb3ctZm9ybXMifSx7bmFtZToiYWxsb3ctbW9kYWxzIn0se25hbWU6ImFsbG93LXBvaW50ZXItbG9jayJ9LHtuYW1lOiJhbGxvdy1wb3B1cHMifSx7bmFtZToiYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94In0se25hbWU6ImFsbG93LXNhbWUtb3JpZ2luIn0se25hbWU6ImFsbG93LXNjcmlwdHMifSx7bmFtZToiYWxsb3ctdG9wLW5hdmlnYXRpb24ifV19LHtuYW1lOiJ0cmlzdGF0ZSIsdmFsdWVzOlt7bmFtZToidHJ1ZSJ9LHtuYW1lOiJmYWxzZSJ9LHtuYW1lOiJtaXhlZCJ9LHtuYW1lOiJ1bmRlZmluZWQifV19LHtuYW1lOiJpbnB1dGF1dG9jb21wbGV0ZSIsdmFsdWVzOlt7bmFtZToiYWRkaXRpb25hbC1uYW1lIn0se25hbWU6ImFkZHJlc3MtbGV2ZWwxIn0se25hbWU6ImFkZHJlc3MtbGV2ZWwyIn0se25hbWU6ImFkZHJlc3MtbGV2ZWwzIn0se25hbWU6ImFkZHJlc3MtbGV2ZWw0In0se25hbWU6ImFkZHJlc3MtbGluZTEifSx7bmFtZToiYWRkcmVzcy1saW5lMiJ9LHtuYW1lOiJhZGRyZXNzLWxpbmUzIn0se25hbWU6ImJkYXkifSx7bmFtZToiYmRheS15ZWFyIn0se25hbWU6ImJkYXktZGF5In0se25hbWU6ImJkYXktbW9udGgifSx7bmFtZToiYmlsbGluZyJ9LHtuYW1lOiJjYy1hZGRpdGlvbmFsLW5hbWUifSx7bmFtZToiY2MtY3NjIn0se25hbWU6ImNjLWV4cCJ9LHtuYW1lOiJjYy1leHAtbW9udGgifSx7bmFtZToiY2MtZXhwLXllYXIifSx7bmFtZToiY2MtZmFtaWx5LW5hbWUifSx7bmFtZToiY2MtZ2l2ZW4tbmFtZSJ9LHtuYW1lOiJjYy1uYW1lIn0se25hbWU6ImNjLW51bWJlciJ9LHtuYW1lOiJjYy10eXBlIn0se25hbWU6ImNvdW50cnkifSx7bmFtZToiY291bnRyeS1uYW1lIn0se25hbWU6ImN1cnJlbnQtcGFzc3dvcmQifSx7bmFtZToiZW1haWwifSx7bmFtZToiZmFtaWx5LW5hbWUifSx7bmFtZToiZmF4In0se25hbWU6ImdpdmVuLW5hbWUifSx7bmFtZToiaG9tZSJ9LHtuYW1lOiJob25vcmlmaWMtcHJlZml4In0se25hbWU6Imhvbm9yaWZpYy1zdWZmaXgifSx7bmFtZToiaW1wcCJ9LHtuYW1lOiJsYW5ndWFnZSJ9LHtuYW1lOiJtb2JpbGUifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJuZXctcGFzc3dvcmQifSx7bmFtZToibmlja25hbWUifSx7bmFtZToib3JnYW5pemF0aW9uIn0se25hbWU6Im9yZ2FuaXphdGlvbi10aXRsZSJ9LHtuYW1lOiJwYWdlciJ9LHtuYW1lOiJwaG90byJ9LHtuYW1lOiJwb3N0YWwtY29kZSJ9LHtuYW1lOiJzZXgifSx7bmFtZToic2hpcHBpbmcifSx7bmFtZToic3RyZWV0LWFkZHJlc3MifSx7bmFtZToidGVsLWFyZWEtY29kZSJ9LHtuYW1lOiJ0ZWwifSx7bmFtZToidGVsLWNvdW50cnktY29kZSJ9LHtuYW1lOiJ0ZWwtZXh0ZW5zaW9uIn0se25hbWU6InRlbC1sb2NhbCJ9LHtuYW1lOiJ0ZWwtbG9jYWwtcHJlZml4In0se25hbWU6InRlbC1sb2NhbC1zdWZmaXgifSx7bmFtZToidGVsLW5hdGlvbmFsIn0se25hbWU6InRyYW5zYWN0aW9uLWFtb3VudCJ9LHtuYW1lOiJ0cmFuc2FjdGlvbi1jdXJyZW5jeSJ9LHtuYW1lOiJ1cmwifSx7bmFtZToidXNlcm5hbWUifSx7bmFtZToid29yayJ9XX0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVzOlt7bmFtZToiaW5saW5lIn0se25hbWU6Imxpc3QifSx7bmFtZToiYm90aCJ9LHtuYW1lOiJub25lIn1dfSx7bmFtZToiY3VycmVudCIsdmFsdWVzOlt7bmFtZToicGFnZSJ9LHtuYW1lOiJzdGVwIn0se25hbWU6ImxvY2F0aW9uIn0se25hbWU6ImRhdGUifSx7bmFtZToidGltZSJ9LHtuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn1dfSx7bmFtZToiZHJvcGVmZmVjdCIsdmFsdWVzOlt7bmFtZToiY29weSJ9LHtuYW1lOiJtb3ZlIn0se25hbWU6ImxpbmsifSx7bmFtZToiZXhlY3V0ZSJ9LHtuYW1lOiJwb3B1cCJ9LHtuYW1lOiJub25lIn1dfSx7bmFtZToiaW52YWxpZCIsdmFsdWVzOlt7bmFtZToiZ3JhbW1hciJ9LHtuYW1lOiJmYWxzZSJ9LHtuYW1lOiJzcGVsbGluZyJ9LHtuYW1lOiJ0cnVlIn1dfSx7bmFtZToibGl2ZSIsdmFsdWVzOlt7bmFtZToib2ZmIn0se25hbWU6InBvbGl0ZSJ9LHtuYW1lOiJhc3NlcnRpdmUifV19LHtuYW1lOiJvcmllbnRhdGlvbiIsdmFsdWVzOlt7bmFtZToidmVydGljYWwifSx7bmFtZToiaG9yaXpvbnRhbCJ9LHtuYW1lOiJ1bmRlZmluZWQifV19LHtuYW1lOiJyZWxldmFudCIsdmFsdWVzOlt7bmFtZToiYWRkaXRpb25zIn0se25hbWU6InJlbW92YWxzIn0se25hbWU6InRleHQifSx7bmFtZToiYWxsIn0se25hbWU6ImFkZGl0aW9ucyB0ZXh0In1dfSx7bmFtZToic29ydCIsdmFsdWVzOlt7bmFtZToiYXNjZW5kaW5nIn0se25hbWU6ImRlc2NlbmRpbmcifSx7bmFtZToibm9uZSJ9LHtuYW1lOiJvdGhlciJ9XX0se25hbWU6InJvbGVzIix2YWx1ZXM6W3tuYW1lOiJhbGVydCJ9LHtuYW1lOiJhbGVydGRpYWxvZyJ9LHtuYW1lOiJidXR0b24ifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToiZGlhbG9nIn0se25hbWU6ImdyaWRjZWxsIn0se25hbWU6ImxpbmsifSx7bmFtZToibG9nIn0se25hbWU6Im1hcnF1ZWUifSx7bmFtZToibWVudWl0ZW0ifSx7bmFtZToibWVudWl0ZW1jaGVja2JveCJ9LHtuYW1lOiJtZW51aXRlbXJhZGlvIn0se25hbWU6Im9wdGlvbiJ9LHtuYW1lOiJwcm9ncmVzc2JhciJ9LHtuYW1lOiJyYWRpbyJ9LHtuYW1lOiJzY3JvbGxiYXIifSx7bmFtZToic2VhcmNoYm94In0se25hbWU6InNsaWRlciJ9LHtuYW1lOiJzcGluYnV0dG9uIn0se25hbWU6InN0YXR1cyJ9LHtuYW1lOiJzd2l0Y2gifSx7bmFtZToidGFiIn0se25hbWU6InRhYnBhbmVsIn0se25hbWU6InRleHRib3gifSx7bmFtZToidGltZXIifSx7bmFtZToidG9vbHRpcCJ9LHtuYW1lOiJ0cmVlaXRlbSJ9LHtuYW1lOiJjb21ib2JveCJ9LHtuYW1lOiJncmlkIn0se25hbWU6Imxpc3Rib3gifSx7bmFtZToibWVudSJ9LHtuYW1lOiJtZW51YmFyIn0se25hbWU6InJhZGlvZ3JvdXAifSx7bmFtZToidGFibGlzdCJ9LHtuYW1lOiJ0cmVlIn0se25hbWU6InRyZWVncmlkIn0se25hbWU6ImFwcGxpY2F0aW9uIn0se25hbWU6ImFydGljbGUifSx7bmFtZToiY2VsbCJ9LHtuYW1lOiJjb2x1bW5oZWFkZXIifSx7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJkaXJlY3RvcnkifSx7bmFtZToiZG9jdW1lbnQifSx7bmFtZToiZmVlZCJ9LHtuYW1lOiJmaWd1cmUifSx7bmFtZToiZ3JvdXAifSx7bmFtZToiaGVhZGluZyJ9LHtuYW1lOiJpbWcifSx7bmFtZToibGlzdCJ9LHtuYW1lOiJsaXN0aXRlbSJ9LHtuYW1lOiJtYXRoIn0se25hbWU6Im5vbmUifSx7bmFtZToibm90ZSJ9LHtuYW1lOiJwcmVzZW50YXRpb24ifSx7bmFtZToicmVnaW9uIn0se25hbWU6InJvdyJ9LHtuYW1lOiJyb3dncm91cCJ9LHtuYW1lOiJyb3doZWFkZXIifSx7bmFtZToic2VwYXJhdG9yIn0se25hbWU6InRhYmxlIn0se25hbWU6InRlcm0ifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJ0b29sYmFyIn0se25hbWU6ImJhbm5lciJ9LHtuYW1lOiJjb21wbGVtZW50YXJ5In0se25hbWU6ImNvbnRlbnRpbmZvIn0se25hbWU6ImZvcm0ifSx7bmFtZToibWFpbiJ9LHtuYW1lOiJuYXZpZ2F0aW9uIn0se25hbWU6InJlZ2lvbiJ9LHtuYW1lOiJzZWFyY2gifSx7bmFtZToiZG9jLWFic3RyYWN0In0se25hbWU6ImRvYy1hY2tub3dsZWRnbWVudHMifSx7bmFtZToiZG9jLWFmdGVyd29yZCJ9LHtuYW1lOiJkb2MtYXBwZW5kaXgifSx7bmFtZToiZG9jLWJhY2tsaW5rIn0se25hbWU6ImRvYy1iaWJsaW9lbnRyeSJ9LHtuYW1lOiJkb2MtYmlibGlvZ3JhcGh5In0se25hbWU6ImRvYy1iaWJsaW9yZWYifSx7bmFtZToiZG9jLWNoYXB0ZXIifSx7bmFtZToiZG9jLWNvbG9waG9uIn0se25hbWU6ImRvYy1jb25jbHVzaW9uIn0se25hbWU6ImRvYy1jb3ZlciJ9LHtuYW1lOiJkb2MtY3JlZGl0In0se25hbWU6ImRvYy1jcmVkaXRzIn0se25hbWU6ImRvYy1kZWRpY2F0aW9uIn0se25hbWU6ImRvYy1lbmRub3RlIn0se25hbWU6ImRvYy1lbmRub3RlcyJ9LHtuYW1lOiJkb2MtZXBpZ3JhcGgifSx7bmFtZToiZG9jLWVwaWxvZ3VlIn0se25hbWU6ImRvYy1lcnJhdGEifSx7bmFtZToiZG9jLWV4YW1wbGUifSx7bmFtZToiZG9jLWZvb3Rub3RlIn0se25hbWU6ImRvYy1mb3Jld29yZCJ9LHtuYW1lOiJkb2MtZ2xvc3NhcnkifSx7bmFtZToiZG9jLWdsb3NzcmVmIn0se25hbWU6ImRvYy1pbmRleCJ9LHtuYW1lOiJkb2MtaW50cm9kdWN0aW9uIn0se25hbWU6ImRvYy1ub3RlcmVmIn0se25hbWU6ImRvYy1ub3RpY2UifSx7bmFtZToiZG9jLXBhZ2VicmVhayJ9LHtuYW1lOiJkb2MtcGFnZWxpc3QifSx7bmFtZToiZG9jLXBhcnQifSx7bmFtZToiZG9jLXByZWZhY2UifSx7bmFtZToiZG9jLXByb2xvZ3VlIn0se25hbWU6ImRvYy1wdWxscXVvdGUifSx7bmFtZToiZG9jLXFuYSJ9LHtuYW1lOiJkb2Mtc3VidGl0bGUifSx7bmFtZToiZG9jLXRpcCJ9LHtuYW1lOiJkb2MtdG9jIn1dfSx7bmFtZToibWV0YW5hbWVzIix2YWx1ZXM6W3tuYW1lOiJhcHBsaWNhdGlvbi1uYW1lIn0se25hbWU6ImF1dGhvciJ9LHtuYW1lOiJkZXNjcmlwdGlvbiJ9LHtuYW1lOiJmb3JtYXQtZGV0ZWN0aW9uIn0se25hbWU6ImdlbmVyYXRvciJ9LHtuYW1lOiJrZXl3b3JkcyJ9LHtuYW1lOiJwdWJsaXNoZXIifSx7bmFtZToicmVmZXJyZXIifSx7bmFtZToicm9ib3RzIn0se25hbWU6InRoZW1lLWNvbG9yIn0se25hbWU6InZpZXdwb3J0In1dfSx7bmFtZToiaGFzcG9wdXAiLHZhbHVlczpbe25hbWU6ImZhbHNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiIoZGVmYXVsdCkgSW5kaWNhdGVzIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBwb3B1cC4ifX0se25hbWU6InRydWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBtZW51LiJ9fSx7bmFtZToibWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIG1lbnUuIn19LHtuYW1lOiJsaXN0Ym94IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgbGlzdGJveC4ifX0se25hbWU6InRyZWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSB0cmVlLiJ9fSx7bmFtZToiZ3JpZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIGdyaWQuIn19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBkaWFsb2cuIn19XX1dfSxOcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5kYXRhUHJvdmlkZXJzPVtdLHRoaXMuc2V0RGF0YVByb3ZpZGVycyghMSE9PWUudXNlRGVmYXVsdERhdGFQcm92aWRlcixlLmN1c3RvbURhdGFQcm92aWRlcnN8fFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RGF0YVByb3ZpZGVycz1mdW5jdGlvbihlLHQpe3ZhciBuO3RoaXMuZGF0YVByb3ZpZGVycz1bXSxlJiZ0aGlzLmRhdGFQcm92aWRlcnMucHVzaChuZXcgV28oImh0bWw1IixScykpLChuPXRoaXMuZGF0YVByb3ZpZGVycykucHVzaC5hcHBseShuLHQpfSxlLnByb3RvdHlwZS5nZXREYXRhUHJvdmlkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyc30sZX0oKSxJcz17fTtmdW5jdGlvbiBVcyhlLHQpe3JldHVybiBuZXcgV28oZSx0KX1zZWxmLm9ubWVzc2FnZT0oKT0+e0JpKCgoZSx0KT0+bmV3IGNsYXNze19jdHg7X2xhbmd1YWdlU2VydmljZTtfbGFuZ3VhZ2VTZXR0aW5ncztfbGFuZ3VhZ2VJZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkO2NvbnN0IG49dGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncy5kYXRhLGk9bj8udXNlRGVmYXVsdERhdGFQcm92aWRlcixyPVtdO2lmKG4/LmRhdGFQcm92aWRlcnMpZm9yKGNvbnN0IGUgaW4gbi5kYXRhUHJvdmlkZXJzKXIucHVzaChVcyhlLG4uZGF0YVByb3ZpZGVyc1tlXSkpO3RoaXMuX2xhbmd1YWdlU2VydmljZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1Jcyk7dmFyIHQ9bmV3IE5zKGUpLG49bmV3IGlzKGUsdCksaT1uZXcgWG8oZSx0KTtyZXR1cm57c2V0RGF0YVByb3ZpZGVyczp0LnNldERhdGFQcm92aWRlcnMuYmluZCh0KSxjcmVhdGVTY2FubmVyOnlvLHBhcnNlSFRNTERvY3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiBMbyhlLmdldFRleHQoKSl9LGRvQ29tcGxldGU6aS5kb0NvbXBsZXRlLmJpbmQoaSksZG9Db21wbGV0ZTI6aS5kb0NvbXBsZXRlMi5iaW5kKGkpLHNldENvbXBsZXRpb25QYXJ0aWNpcGFudHM6aS5zZXRDb21wbGV0aW9uUGFydGljaXBhbnRzLmJpbmQoaSksZG9Ib3ZlcjpuLmRvSG92ZXIuYmluZChuKSxmb3JtYXQ6bHMsZmluZERvY3VtZW50SGlnaGxpZ2h0czp2cyxmaW5kRG9jdW1lbnRMaW5rczpfcyxmaW5kRG9jdW1lbnRTeW1ib2xzOmtzLGdldEZvbGRpbmdSYW5nZXM6RXMsZ2V0U2VsZWN0aW9uUmFuZ2VzOkFzLGRvUXVvdGVDb21wbGV0ZTppLmRvUXVvdGVDb21wbGV0ZS5iaW5kKGkpLGRvVGFnQ29tcGxldGU6aS5kb1RhZ0NvbXBsZXRlLmJpbmQoaSksZG9SZW5hbWU6eHMsZmluZE1hdGNoaW5nVGFnUG9zaXRpb246THMsZmluZE9uVHlwZVJlbmFtZVJhbmdlczpDcyxmaW5kTGlua2VkRWRpdGluZ1JhbmdlczpDc319KHt1c2VEZWZhdWx0RGF0YVByb3ZpZGVyOmksY3VzdG9tRGF0YVByb3ZpZGVyczpyfSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQsaSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzJiZ0aGlzLl9sYW5ndWFnZVNldHRpbmdzLnN1Z2dlc3QpKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCBpPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighaSlyZXR1cm5bXTtsZXQgcj17Li4udGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncy5mb3JtYXQsLi4ubn0sYT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KGksdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KG4pLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LGkpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50SGlnaGxpZ2h0cyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobikscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50SGlnaGxpZ2h0cyhuLHQsaSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRMaW5rcyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudExpbmtzKHQsbnVsbCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQodCksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIGRvUmVuYW1lKGUsdCxuKXtsZXQgaT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KGkpLGE9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVuYW1lKGksdCxuLHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoYSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIFZhLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fShlLHQpKSl9fSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1odG1sLndvcmtlci5qcy5tYXAKCg==', null, false);
4
- /* eslint-enable */
5
-
6
- export { WorkerFactory as default };