@sd-angular/core 1.0.47 → 1.0.48

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 (468) hide show
  1. package/assets/img/file-types/eps/001-file.eps +143 -143
  2. package/assets/img/file-types/eps/002-file-1.eps +136 -136
  3. package/assets/img/file-types/eps/003-file-2.eps +130 -130
  4. package/assets/img/file-types/eps/004-file-3.eps +127 -127
  5. package/assets/img/file-types/eps/005-file-4.eps +120 -120
  6. package/assets/img/file-types/eps/006-file-5.eps +133 -133
  7. package/assets/img/file-types/eps/007-file-6.eps +133 -133
  8. package/assets/img/file-types/eps/008-file-7.eps +144 -144
  9. package/assets/img/file-types/eps/009-file-8.eps +150 -150
  10. package/assets/img/file-types/eps/010-file-9.eps +155 -155
  11. package/assets/img/file-types/eps/011-file-10.eps +124 -124
  12. package/assets/img/file-types/eps/012-file-11.eps +147 -147
  13. package/assets/img/file-types/eps/013-file-12.eps +125 -125
  14. package/assets/img/file-types/eps/014-file-13.eps +129 -129
  15. package/assets/img/file-types/eps/015-file-14.eps +143 -143
  16. package/assets/img/file-types/eps/016-file-15.eps +130 -130
  17. package/assets/img/file-types/eps/017-file-16.eps +197 -197
  18. package/assets/img/file-types/eps/018-file-17.eps +146 -146
  19. package/assets/img/file-types/eps/019-file-18.eps +131 -131
  20. package/assets/img/file-types/eps/020-file-19.eps +137 -137
  21. package/assets/img/file-types/eps/021-file-20.eps +134 -134
  22. package/assets/img/file-types/eps/022-file-21.eps +130 -130
  23. package/assets/img/file-types/eps/023-file-22.eps +161 -161
  24. package/assets/img/file-types/eps/024-file-23.eps +144 -144
  25. package/assets/img/file-types/eps/025-file-24.eps +164 -164
  26. package/assets/img/file-types/eps/026-file-25.eps +135 -135
  27. package/assets/img/file-types/eps/027-file-26.eps +124 -124
  28. package/assets/img/file-types/eps/028-file-27.eps +120 -120
  29. package/assets/img/file-types/eps/029-file-28.eps +141 -141
  30. package/assets/img/file-types/eps/030-file-29.eps +130 -130
  31. package/assets/img/file-types/eps/031-file-30.eps +157 -157
  32. package/assets/img/file-types/eps/032-file-31.eps +139 -139
  33. package/assets/img/file-types/eps/033-file-32.eps +139 -139
  34. package/assets/img/file-types/eps/034-file-33.eps +189 -189
  35. package/assets/img/file-types/eps/035-file-34.eps +162 -162
  36. package/assets/img/file-types/eps/036-file-35.eps +142 -142
  37. package/assets/img/file-types/eps/037-file-36.eps +123 -123
  38. package/assets/img/file-types/eps/038-file-37.eps +127 -127
  39. package/assets/img/file-types/eps/039-file-38.eps +146 -146
  40. package/assets/img/file-types/eps/040-file-39.eps +126 -126
  41. package/assets/img/file-types/eps/041-file-40.eps +117 -117
  42. package/assets/img/file-types/eps/042-file-41.eps +156 -156
  43. package/assets/img/file-types/eps/043-file-42.eps +118 -118
  44. package/assets/img/file-types/eps/044-file-43.eps +172 -172
  45. package/assets/img/file-types/eps/045-file-44.eps +201 -201
  46. package/assets/img/file-types/eps/046-file-45.eps +94 -94
  47. package/assets/img/file-types/eps/047-file-46.eps +176 -176
  48. package/assets/img/file-types/eps/048-file-47.eps +238 -238
  49. package/assets/img/file-types/eps/049-file-48.eps +187 -187
  50. package/assets/img/file-types/eps/050-file-49.eps +137 -137
  51. package/bundles/sd-angular-core-grid-material.umd.js +7 -2
  52. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  53. package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
  54. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  55. package/esm2015/api/index.js +1 -1
  56. package/esm2015/api/sd-angular-core-api.js +1 -1
  57. package/esm2015/api/src/lib/api.model.js +1 -1
  58. package/esm2015/api/src/lib/api.module.js +1 -1
  59. package/esm2015/api/src/lib/api.service.js +1 -1
  60. package/esm2015/api/src/lib/http.interceptor.js +1 -1
  61. package/esm2015/api/src/lib/http.service.js +1 -1
  62. package/esm2015/api/src/lib/token.service.js +1 -1
  63. package/esm2015/api/src/public-api.js +1 -1
  64. package/esm2015/autocomplete/index.js +1 -1
  65. package/esm2015/autocomplete/sd-angular-core-autocomplete.js +1 -1
  66. package/esm2015/autocomplete/src/lib/autocomplete-display-def.directive.js +1 -1
  67. package/esm2015/autocomplete/src/lib/autocomplete.component.js +1 -1
  68. package/esm2015/autocomplete/src/lib/autocomplete.module.js +1 -1
  69. package/esm2015/autocomplete/src/public-api.js +1 -1
  70. package/esm2015/badge/index.js +1 -1
  71. package/esm2015/badge/sd-angular-core-badge.js +1 -1
  72. package/esm2015/badge/src/lib/badge.component.js +1 -1
  73. package/esm2015/badge/src/lib/badge.module.js +1 -1
  74. package/esm2015/badge/src/public-api.js +1 -1
  75. package/esm2015/button/index.js +1 -1
  76. package/esm2015/button/sd-angular-core-button.js +1 -1
  77. package/esm2015/button/src/lib/button.component.js +1 -1
  78. package/esm2015/button/src/lib/button.module.js +1 -1
  79. package/esm2015/button/src/public-api.js +1 -1
  80. package/esm2015/cache/index.js +1 -1
  81. package/esm2015/cache/sd-angular-core-cache.js +1 -1
  82. package/esm2015/cache/src/lib/cache.model.js +1 -1
  83. package/esm2015/cache/src/lib/cache.service.js +1 -1
  84. package/esm2015/cache/src/public-api.js +1 -1
  85. package/esm2015/chart/index.js +1 -1
  86. package/esm2015/chart/sd-angular-core-chart.js +1 -1
  87. package/esm2015/chart/src/lib/chart.component.js +1 -1
  88. package/esm2015/chart/src/lib/chart.model.js +1 -1
  89. package/esm2015/chart/src/lib/chart.module.js +1 -1
  90. package/esm2015/chart/src/public-api.js +1 -1
  91. package/esm2015/checkbox/index.js +1 -1
  92. package/esm2015/checkbox/sd-angular-core-checkbox.js +1 -1
  93. package/esm2015/checkbox/src/lib/checkbox.component.js +1 -1
  94. package/esm2015/checkbox/src/lib/checkbox.module.js +1 -1
  95. package/esm2015/checkbox/src/public-api.js +1 -1
  96. package/esm2015/chip/index.js +1 -1
  97. package/esm2015/chip/sd-angular-core-chip.js +1 -1
  98. package/esm2015/chip/src/lib/chip.component.js +1 -1
  99. package/esm2015/chip/src/lib/chip.model.js +1 -1
  100. package/esm2015/chip/src/lib/chip.module.js +1 -1
  101. package/esm2015/chip/src/lib/directives/sd-chip-display-def.directive.js +1 -1
  102. package/esm2015/chip/src/lib/pipes/removable-chip.pipe.js +1 -1
  103. package/esm2015/chip/src/public-api.js +1 -1
  104. package/esm2015/comment/index.js +1 -1
  105. package/esm2015/comment/sd-angular-core-comment.js +1 -1
  106. package/esm2015/comment/src/lib/comment.component.js +1 -1
  107. package/esm2015/comment/src/lib/comment.model.js +1 -1
  108. package/esm2015/comment/src/lib/comment.module.js +1 -1
  109. package/esm2015/comment/src/public-api.js +1 -1
  110. package/esm2015/common/index.js +1 -1
  111. package/esm2015/common/sd-angular-core-common.js +1 -1
  112. package/esm2015/common/src/lib/common.module.js +1 -1
  113. package/esm2015/common/src/lib/directives/sd-let.directive.js +1 -1
  114. package/esm2015/common/src/lib/directives/sd-scroll.directive.js +1 -1
  115. package/esm2015/common/src/lib/directives/sd-suffix.directive.js +1 -1
  116. package/esm2015/common/src/lib/directives/view-def.directive.js +1 -1
  117. package/esm2015/common/src/lib/models/sd-form-control.js +1 -1
  118. package/esm2015/common/src/lib/services/browser.service.js +1 -1
  119. package/esm2015/common/src/lib/typings/array.extension.js +1 -1
  120. package/esm2015/common/src/lib/typings/date.extension.js +1 -1
  121. package/esm2015/common/src/lib/typings/number.extension.js +1 -1
  122. package/esm2015/common/src/lib/typings/string.extension.js +1 -1
  123. package/esm2015/common/src/public-api.js +1 -1
  124. package/esm2015/date-range/index.js +1 -1
  125. package/esm2015/date-range/sd-angular-core-date-range.js +1 -1
  126. package/esm2015/date-range/src/lib/date-range.component.js +1 -1
  127. package/esm2015/date-range/src/lib/date-range.module.js +1 -1
  128. package/esm2015/date-range/src/public-api.js +1 -1
  129. package/esm2015/date-time/index.js +1 -1
  130. package/esm2015/date-time/sd-angular-core-date-time.js +1 -1
  131. package/esm2015/date-time/src/lib/date-time.component.js +1 -1
  132. package/esm2015/date-time/src/lib/date-time.module.js +1 -1
  133. package/esm2015/date-time/src/public-api.js +1 -1
  134. package/esm2015/dynamic-report/index.js +1 -1
  135. package/esm2015/dynamic-report/sd-angular-core-dynamic-report.js +1 -1
  136. package/esm2015/dynamic-report/src/lib/dynamic-report.component.js +1 -1
  137. package/esm2015/dynamic-report/src/lib/dynamic-report.module.js +1 -1
  138. package/esm2015/dynamic-report/src/public-api.js +1 -1
  139. package/esm2015/editor/index.js +1 -1
  140. package/esm2015/editor/sd-angular-core-editor.js +1 -1
  141. package/esm2015/editor/src/lib/constant.js +1 -1
  142. package/esm2015/editor/src/lib/editor.component.js +1 -1
  143. package/esm2015/editor/src/lib/editor.module.js +1 -1
  144. package/esm2015/editor/src/public-api.js +1 -1
  145. package/esm2015/excel/index.js +1 -1
  146. package/esm2015/excel/sd-angular-core-excel.js +1 -1
  147. package/esm2015/excel/src/lib/excel.model.js +1 -1
  148. package/esm2015/excel/src/lib/excel.service.js +1 -1
  149. package/esm2015/excel/src/public-api.js +1 -1
  150. package/esm2015/export/index.js +1 -1
  151. package/esm2015/export/sd-angular-core-export.js +1 -1
  152. package/esm2015/export/src/lib/export.model.js +1 -1
  153. package/esm2015/export/src/lib/export.service.js +1 -1
  154. package/esm2015/export/src/public-api.js +1 -1
  155. package/esm2015/filter/index.js +1 -1
  156. package/esm2015/filter/sd-angular-core-filter.js +1 -1
  157. package/esm2015/filter/src/lib/directives/sd-filter-def.directive.js +1 -1
  158. package/esm2015/filter/src/lib/filter.component.js +1 -1
  159. package/esm2015/filter/src/lib/filter.model.js +1 -1
  160. package/esm2015/filter/src/lib/filter.module.js +1 -1
  161. package/esm2015/filter/src/lib/filter.service.js +1 -1
  162. package/esm2015/filter/src/lib/pipes/values-local.pipe.js +1 -1
  163. package/esm2015/filter/src/lib/pipes/values-server.pipe.js +1 -1
  164. package/esm2015/filter/src/public-api.js +1 -1
  165. package/esm2015/form/index.js +1 -1
  166. package/esm2015/form/sd-angular-core-form.js +1 -1
  167. package/esm2015/form/src/lib/form.module.js +1 -1
  168. package/esm2015/form/src/public-api.js +1 -1
  169. package/esm2015/grid/index.js +1 -1
  170. package/esm2015/grid/sd-angular-core-grid.js +1 -1
  171. package/esm2015/grid/src/lib/components/grid-config/grid-config.component.js +1 -1
  172. package/esm2015/grid/src/lib/components/grid-config/grid-config.model.js +1 -1
  173. package/esm2015/grid/src/lib/components/grid-desktop-column-children-view/grid-desktop-column-children-view.component.js +1 -1
  174. package/esm2015/grid/src/lib/components/grid-desktop-column-edit/grid-desktop-column-edit.component.js +1 -1
  175. package/esm2015/grid/src/lib/components/grid-desktop-column-view/grid-desktop-column-view.component.js +1 -1
  176. package/esm2015/grid/src/lib/components/grid-desktop-inline-filter/grid-desktop-inline-filter.component.js +1 -1
  177. package/esm2015/grid/src/lib/components/grid-import-excel/grid-import-excel.component.js +1 -1
  178. package/esm2015/grid/src/lib/components/grid-mobile-item-view/grid-mobile-item-view.component.js +1 -1
  179. package/esm2015/grid/src/lib/components/grid-popup-editor/grid-popup-editor.component.js +1 -1
  180. package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.js +1 -1
  181. package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.js +1 -1
  182. package/esm2015/grid/src/lib/components/grid-popup-filter/grid-popup-filter.component.js +1 -1
  183. package/esm2015/grid/src/lib/components/grid-popup-filter/grid-popup-filter.model.js +1 -1
  184. package/esm2015/grid/src/lib/components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component.js +1 -1
  185. package/esm2015/grid/src/lib/components/grid-sub-information/grid-sub-information.component.js +1 -1
  186. package/esm2015/grid/src/lib/directives/cell-def.directive.js +1 -1
  187. package/esm2015/grid/src/lib/directives/cell-editor-def.directive.js +1 -1
  188. package/esm2015/grid/src/lib/directives/cell-footer-def.directive.js +1 -1
  189. package/esm2015/grid/src/lib/directives/sub-information-header-def.directive.js +1 -1
  190. package/esm2015/grid/src/lib/grid.component.js +1 -1
  191. package/esm2015/grid/src/lib/grid.model.js +1 -1
  192. package/esm2015/grid/src/lib/grid.module.js +1 -1
  193. package/esm2015/grid/src/lib/models/filter-info.model.js +1 -1
  194. package/esm2015/grid/src/lib/models/grid-configuration.model.js +1 -1
  195. package/esm2015/grid/src/lib/models/handler-dotnet.js +1 -1
  196. package/esm2015/grid/src/lib/models/handler-local.js +1 -1
  197. package/esm2015/grid/src/lib/models/handler.js +1 -1
  198. package/esm2015/grid/src/lib/pipes/cell-desktop-class-name.pipe.js +1 -1
  199. package/esm2015/grid/src/lib/pipes/cell-mobile-class-name.pipe.js +1 -1
  200. package/esm2015/grid/src/lib/pipes/column-command-filter.pipe.js +1 -1
  201. package/esm2015/grid/src/lib/pipes/column-html-template.pipe.js +1 -1
  202. package/esm2015/grid/src/lib/pipes/column-title.pipe.js +1 -1
  203. package/esm2015/grid/src/lib/pipes/column-values.pipe.js +1 -1
  204. package/esm2015/grid/src/lib/pipes/command-disabled.pipe.js +1 -1
  205. package/esm2015/grid/src/lib/pipes/command-filter.pipe.js +1 -1
  206. package/esm2015/grid/src/lib/pipes/command-hidden.pipe.js +1 -1
  207. package/esm2015/grid/src/lib/pipes/command-icon.pipe.js +1 -1
  208. package/esm2015/grid/src/lib/pipes/command-title.pipe.js +1 -1
  209. package/esm2015/grid/src/lib/pipes/dynamic-items.pipe.js +1 -1
  210. package/esm2015/grid/src/lib/pipes/editor-dynamic-item.pipe.js +1 -1
  211. package/esm2015/grid/src/lib/pipes/editor-handler.pipe.js +1 -1
  212. package/esm2015/grid/src/lib/pipes/editor-popup-visible.pipe.js +1 -1
  213. package/esm2015/grid/src/lib/pipes/editor-sub-information-handler.pipe.js +1 -1
  214. package/esm2015/grid/src/lib/pipes/editor-validate.pipe.js +1 -1
  215. package/esm2015/grid/src/lib/pipes/filter-mobile.pipe.js +1 -1
  216. package/esm2015/grid/src/lib/pipes/mobile-command-filter.js +1 -1
  217. package/esm2015/grid/src/lib/pipes/mobile-view-html-template.pipe.js +1 -1
  218. package/esm2015/grid/src/lib/pipes/value-transform.pipe.js +1 -1
  219. package/esm2015/grid/src/public-api.js +1 -1
  220. package/esm2015/grid-material/index.js +1 -1
  221. package/esm2015/grid-material/sd-angular-core-grid-material.js +1 -1
  222. package/esm2015/grid-material/src/lib/components/column-inline-filter/column-inline-filter.component.js +1 -1
  223. package/esm2015/grid-material/src/lib/components/desktop-cell/desktop-cell.component.js +1 -1
  224. package/esm2015/grid-material/src/lib/components/desktop-cell-children-view/desktop-cell-children-view.component.js +1 -1
  225. package/esm2015/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.js +1 -1
  226. package/esm2015/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +2 -2
  227. package/esm2015/grid-material/src/lib/components/desktop-command/desktop-command.component.js +1 -1
  228. package/esm2015/grid-material/src/lib/components/desktop-editor-validation/desktop-editor-validation.component.js +1 -1
  229. package/esm2015/grid-material/src/lib/components/dynamic-column/dynamic-column.component.js +1 -1
  230. package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +1 -1
  231. package/esm2015/grid-material/src/lib/components/popup-export/popup-export.component.js +1 -1
  232. package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +1 -1
  233. package/esm2015/grid-material/src/lib/components/popup-grid-configuration/popup-grid-configuration.component.js +1 -1
  234. package/esm2015/grid-material/src/lib/components/quick-action/quick-action.component.js +1 -1
  235. package/esm2015/grid-material/src/lib/directives/sd-material-cell-def.directive.js +1 -1
  236. package/esm2015/grid-material/src/lib/directives/sd-material-empty-data-def.directive.js +1 -1
  237. package/esm2015/grid-material/src/lib/directives/sd-material-filter-def.directive.js +1 -1
  238. package/esm2015/grid-material/src/lib/directives/sd-material-footer-def.directive.js +1 -1
  239. package/esm2015/grid-material/src/lib/directives/sd-material-sub-information-def.directive.js +1 -1
  240. package/esm2015/grid-material/src/lib/grid-material.component.js +1 -1
  241. package/esm2015/grid-material/src/lib/grid-material.module.js +1 -1
  242. package/esm2015/grid-material/src/lib/models/grid-action.model.js +1 -1
  243. package/esm2015/grid-material/src/lib/models/grid-cell.model.js +1 -1
  244. package/esm2015/grid-material/src/lib/models/grid-column.model.js +1 -1
  245. package/esm2015/grid-material/src/lib/models/grid-command.model.js +1 -1
  246. package/esm2015/grid-material/src/lib/models/grid-config.model.js +1 -1
  247. package/esm2015/grid-material/src/lib/models/grid-configuration.model.js +1 -1
  248. package/esm2015/grid-material/src/lib/models/grid-editor.model.js +1 -1
  249. package/esm2015/grid-material/src/lib/models/grid-export.model.js +1 -1
  250. package/esm2015/grid-material/src/lib/models/grid-filter.model.js +1 -1
  251. package/esm2015/grid-material/src/lib/models/grid-option.model.js +1 -1
  252. package/esm2015/grid-material/src/lib/models/grid-reload.model.js +1 -1
  253. package/esm2015/grid-material/src/lib/models/grid-selection.model.js +1 -1
  254. package/esm2015/grid-material/src/lib/models/grid-style.model.js +1 -1
  255. package/esm2015/grid-material/src/lib/models/grid-sub-information.model.js +1 -1
  256. package/esm2015/grid-material/src/lib/models/grid.model.js +1 -1
  257. package/esm2015/grid-material/src/lib/pipes/cell-view.pipe.js +5 -1
  258. package/esm2015/grid-material/src/lib/pipes/column-badge.pipe.js +1 -1
  259. package/esm2015/grid-material/src/lib/pipes/column-children-filter.pipe.js +1 -1
  260. package/esm2015/grid-material/src/lib/pipes/column-html-template.pipe.js +1 -1
  261. package/esm2015/grid-material/src/lib/pipes/column-title.pipe.js +1 -1
  262. package/esm2015/grid-material/src/lib/pipes/column-tooltip.pipe.js +1 -1
  263. package/esm2015/grid-material/src/lib/pipes/column-transform.pipe.js +1 -1
  264. package/esm2015/grid-material/src/lib/pipes/column-values.pipe.js +1 -1
  265. package/esm2015/grid-material/src/lib/pipes/command-disable.pipe.js +1 -1
  266. package/esm2015/grid-material/src/lib/pipes/command-filter.pipe.js +1 -1
  267. package/esm2015/grid-material/src/lib/pipes/command-icon.pipe.js +1 -1
  268. package/esm2015/grid-material/src/lib/pipes/command-title.pipe.js +1 -1
  269. package/esm2015/grid-material/src/lib/pipes/editor-handler-column.pipe.js +1 -1
  270. package/esm2015/grid-material/src/lib/pipes/editor-handler-row.pipe.js +1 -1
  271. package/esm2015/grid-material/src/lib/pipes/editor-validate.pipe.js +1 -1
  272. package/esm2015/grid-material/src/lib/pipes/filter-column.pipe.js +1 -1
  273. package/esm2015/grid-material/src/lib/pipes/filter-external.pipe.js +1 -1
  274. package/esm2015/grid-material/src/lib/pipes/grid-configuration-result.pipe.js +1 -1
  275. package/esm2015/grid-material/src/lib/pipes/sd-id.pipe.js +1 -1
  276. package/esm2015/grid-material/src/lib/pipes/selection-action-filter.pipe.js +1 -1
  277. package/esm2015/grid-material/src/lib/pipes/selection-disable.pipe.js +1 -1
  278. package/esm2015/grid-material/src/lib/pipes/selection-visible-select-all.pipe.js +1 -1
  279. package/esm2015/grid-material/src/lib/pipes/selection-visible.pipe.js +1 -1
  280. package/esm2015/grid-material/src/lib/pipes/style-row-css.pipe.js +1 -1
  281. package/esm2015/grid-material/src/lib/services/generated-column/generated-column.model.js +1 -1
  282. package/esm2015/grid-material/src/lib/services/generated-column/generated-column.service.js +1 -1
  283. package/esm2015/grid-material/src/lib/services/grid-configuration.service.js +1 -1
  284. package/esm2015/grid-material/src/lib/services/grid-filter.service.js +1 -1
  285. package/esm2015/grid-material/src/public-api.js +1 -1
  286. package/esm2015/image-preview/index.js +1 -1
  287. package/esm2015/image-preview/sd-angular-core-image-preview.js +1 -1
  288. package/esm2015/image-preview/src/lib/directives/image-preview.directive.js +1 -1
  289. package/esm2015/image-preview/src/lib/image-preview/image-preview.component.js +1 -1
  290. package/esm2015/image-preview/src/lib/image-preview/image-preview.module.js +1 -1
  291. package/esm2015/image-preview/src/lib/models/image-preview.model.js +1 -1
  292. package/esm2015/image-preview/src/public-api.js +1 -1
  293. package/esm2015/input/index.js +1 -1
  294. package/esm2015/input/sd-angular-core-input.js +1 -1
  295. package/esm2015/input/src/lib/directives/input-suffix.directive.js +1 -1
  296. package/esm2015/input/src/lib/directives/touch.directive.js +1 -1
  297. package/esm2015/input/src/lib/input-tooltip.pipe.js +1 -1
  298. package/esm2015/input/src/lib/input.component.js +1 -1
  299. package/esm2015/input/src/lib/input.module.js +1 -1
  300. package/esm2015/input/src/public-api.js +1 -1
  301. package/esm2015/input-currency/index.js +1 -1
  302. package/esm2015/input-currency/sd-angular-core-input-currency.js +1 -1
  303. package/esm2015/input-currency/src/lib/input-currency-tooltip.pipe.js +1 -1
  304. package/esm2015/input-currency/src/lib/input-currency.component.js +1 -1
  305. package/esm2015/input-currency/src/lib/input-currency.module.js +1 -1
  306. package/esm2015/input-currency/src/public-api.js +1 -1
  307. package/esm2015/input-dropdown/index.js +1 -1
  308. package/esm2015/input-dropdown/sd-angular-core-input-dropdown.js +1 -1
  309. package/esm2015/input-dropdown/src/lib/input-tooltip.pipe.js +1 -1
  310. package/esm2015/input-dropdown/src/lib/input.component.js +1 -1
  311. package/esm2015/input-dropdown/src/lib/input.module.js +1 -1
  312. package/esm2015/input-dropdown/src/public-api.js +1 -1
  313. package/esm2015/input-upload-file/index.js +1 -1
  314. package/esm2015/input-upload-file/sd-angular-core-input-upload-file.js +1 -1
  315. package/esm2015/input-upload-file/src/lib/input-upload-file.component.js +1 -1
  316. package/esm2015/input-upload-file/src/lib/input-upload-file.module.js +1 -1
  317. package/esm2015/input-upload-file/src/public-api.js +1 -1
  318. package/esm2015/konva/index.js +1 -1
  319. package/esm2015/konva/sd-angular-core-konva.js +1 -1
  320. package/esm2015/konva/src/lib/konva.module.js +1 -1
  321. package/esm2015/konva/src/lib/merge-images/merge-images.component.js +1 -1
  322. package/esm2015/konva/src/public-api.js +1 -1
  323. package/esm2015/label/index.js +1 -1
  324. package/esm2015/label/sd-angular-core-label.js +1 -1
  325. package/esm2015/label/src/lib/label.component.js +1 -1
  326. package/esm2015/label/src/lib/label.module.js +1 -1
  327. package/esm2015/label/src/public-api.js +1 -1
  328. package/esm2015/lib/core.module.js +1 -1
  329. package/esm2015/lib/material.module.js +1 -1
  330. package/esm2015/loading/index.js +1 -1
  331. package/esm2015/loading/sd-angular-core-loading.js +1 -1
  332. package/esm2015/loading/src/lib/loading.service.js +1 -1
  333. package/esm2015/loading/src/public-api.js +1 -1
  334. package/esm2015/modal/index.js +1 -1
  335. package/esm2015/modal/sd-angular-core-modal.js +1 -1
  336. package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-body/bottom-sheet-body.component.js +1 -1
  337. package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-footer/bottom-sheet-footer.component.js +1 -1
  338. package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-header/bottom-sheet-header.component.js +1 -1
  339. package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet.component.js +1 -1
  340. package/esm2015/modal/src/lib/modal/modal-body/modal-body.component.js +1 -1
  341. package/esm2015/modal/src/lib/modal/modal-footer/modal-footer.component.js +1 -1
  342. package/esm2015/modal/src/lib/modal/modal-header/modal-header.component.js +1 -1
  343. package/esm2015/modal/src/lib/modal/modal.component.js +1 -1
  344. package/esm2015/modal/src/lib/modal.module.js +1 -1
  345. package/esm2015/modal/src/public-api.js +1 -1
  346. package/esm2015/modal-resizable/index.js +1 -1
  347. package/esm2015/modal-resizable/sd-angular-core-modal-resizable.js +1 -1
  348. package/esm2015/modal-resizable/src/lib/modal-resizable/modal-resizable.component.js +1 -1
  349. package/esm2015/modal-resizable/src/lib/modal-resizable.module.js +1 -1
  350. package/esm2015/modal-resizable/src/public-api.js +1 -1
  351. package/esm2015/notify/index.js +1 -1
  352. package/esm2015/notify/sd-angular-core-notify.js +1 -1
  353. package/esm2015/notify/src/lib/components/dialog-confirm/dialog-confirm.component.js +1 -1
  354. package/esm2015/notify/src/lib/notify.module.js +1 -1
  355. package/esm2015/notify/src/lib/notify.service.js +1 -1
  356. package/esm2015/notify/src/public-api.js +1 -1
  357. package/esm2015/popover/index.js +1 -1
  358. package/esm2015/popover/sd-angular-core-popover.js +1 -1
  359. package/esm2015/popover/src/lib/directives/popover-trigger.directive.js +1 -1
  360. package/esm2015/popover/src/lib/popover/popover.component.js +1 -1
  361. package/esm2015/popover/src/lib/popover.model.js +1 -1
  362. package/esm2015/popover/src/lib/popover.module.js +1 -1
  363. package/esm2015/popover/src/public-api.js +1 -1
  364. package/esm2015/public-api.js +1 -1
  365. package/esm2015/quick-action/index.js +1 -1
  366. package/esm2015/quick-action/sd-angular-core-quick-action.js +1 -1
  367. package/esm2015/quick-action/src/lib/quick-action.component.js +1 -1
  368. package/esm2015/quick-action/src/lib/quick-action.module.js +1 -1
  369. package/esm2015/quick-action/src/public-api.js +1 -1
  370. package/esm2015/radio/index.js +1 -1
  371. package/esm2015/radio/sd-angular-core-radio.js +1 -1
  372. package/esm2015/radio/src/lib/radio.component.js +1 -1
  373. package/esm2015/radio/src/lib/radio.module.js +1 -1
  374. package/esm2015/radio/src/public-api.js +1 -1
  375. package/esm2015/sd-angular-core.js +1 -1
  376. package/esm2015/select/index.js +1 -1
  377. package/esm2015/select/sd-angular-core-select.js +1 -1
  378. package/esm2015/select/src/lib/select-display-def.directive.js +1 -1
  379. package/esm2015/select/src/lib/select.component.js +1 -1
  380. package/esm2015/select/src/lib/select.module.js +1 -1
  381. package/esm2015/select/src/public-api.js +1 -1
  382. package/esm2015/select-editor/index.js +1 -1
  383. package/esm2015/select-editor/sd-angular-core-select-editor.js +1 -1
  384. package/esm2015/select-editor/src/lib/select-editor.component.js +1 -1
  385. package/esm2015/select-editor/src/lib/select-editor.module.js +1 -1
  386. package/esm2015/select-editor/src/public-api.js +1 -1
  387. package/esm2015/service/index.js +1 -1
  388. package/esm2015/service/sd-angular-core-service.js +1 -1
  389. package/esm2015/service/src/lib/service.module.js +1 -1
  390. package/esm2015/service/src/public-api.js +1 -1
  391. package/esm2015/setting/index.js +1 -1
  392. package/esm2015/setting/sd-angular-core-setting.js +1 -1
  393. package/esm2015/setting/src/lib/setting.model.js +1 -1
  394. package/esm2015/setting/src/lib/setting.service.js +1 -1
  395. package/esm2015/setting/src/public-api.js +1 -1
  396. package/esm2015/side-drawer/index.js +1 -1
  397. package/esm2015/side-drawer/sd-angular-core-side-drawer.js +1 -1
  398. package/esm2015/side-drawer/src/lib/side-drawer/side-drawer.component.js +1 -1
  399. package/esm2015/side-drawer/src/lib/side-drawer.module.js +1 -1
  400. package/esm2015/side-drawer/src/public-api.js +1 -1
  401. package/esm2015/switch/index.js +1 -1
  402. package/esm2015/switch/sd-angular-core-switch.js +1 -1
  403. package/esm2015/switch/src/lib/switch.component.js +1 -1
  404. package/esm2015/switch/src/lib/switch.module.js +1 -1
  405. package/esm2015/switch/src/public-api.js +1 -1
  406. package/esm2015/tab-router/index.js +1 -1
  407. package/esm2015/tab-router/sd-angular-core-tab-router.js +1 -1
  408. package/esm2015/tab-router/src/lib/actions/tab-router.action.js +1 -1
  409. package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +1 -1
  410. package/esm2015/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.js +1 -1
  411. package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +1 -1
  412. package/esm2015/tab-router/src/lib/decorators/tab.decorator.js +1 -1
  413. package/esm2015/tab-router/src/lib/events/tab-router.event.js +1 -1
  414. package/esm2015/tab-router/src/lib/models/tab-router.model.js +1 -1
  415. package/esm2015/tab-router/src/lib/pipes/tab-info.pipe.js +1 -1
  416. package/esm2015/tab-router/src/lib/services/tab-decorator.service.js +1 -1
  417. package/esm2015/tab-router/src/lib/services/tab-router.service.js +1 -1
  418. package/esm2015/tab-router/src/lib/tab-router.module.js +1 -1
  419. package/esm2015/tab-router/src/public-api.js +1 -1
  420. package/esm2015/textarea/index.js +1 -1
  421. package/esm2015/textarea/sd-angular-core-textarea.js +1 -1
  422. package/esm2015/textarea/src/lib/textarea.component.js +1 -1
  423. package/esm2015/textarea/src/lib/textarea.module.js +1 -1
  424. package/esm2015/textarea/src/public-api.js +1 -1
  425. package/esm2015/time/index.js +1 -1
  426. package/esm2015/time/sd-angular-core-time.js +1 -1
  427. package/esm2015/time/src/lib/time.component.js +1 -1
  428. package/esm2015/time/src/lib/time.module.js +1 -1
  429. package/esm2015/time/src/public-api.js +1 -1
  430. package/esm2015/translate/index.js +1 -1
  431. package/esm2015/translate/sd-angular-core-translate.js +1 -1
  432. package/esm2015/translate/src/lib/translate.model.js +1 -1
  433. package/esm2015/translate/src/lib/translate.module.js +1 -1
  434. package/esm2015/translate/src/lib/translate.pipe.js +1 -1
  435. package/esm2015/translate/src/lib/translate.service.js +1 -1
  436. package/esm2015/upload-excel/index.js +1 -1
  437. package/esm2015/upload-excel/sd-angular-core-upload-excel.js +1 -1
  438. package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -1
  439. package/esm2015/upload-excel/src/lib/upload-excel.model.js +1 -1
  440. package/esm2015/upload-excel/src/lib/upload-excel.module.js +1 -1
  441. package/esm2015/upload-excel/src/public-api.js +1 -1
  442. package/esm2015/upload-file/index.js +1 -1
  443. package/esm2015/upload-file/sd-angular-core-upload-file.js +1 -1
  444. package/esm2015/upload-file/src/lib/upload-file.component.js +1 -1
  445. package/esm2015/upload-file/src/lib/upload-file.module.js +1 -1
  446. package/esm2015/upload-file/src/public-api.js +1 -1
  447. package/esm2015/utility/index.js +1 -1
  448. package/esm2015/utility/sd-angular-core-utility.js +1 -1
  449. package/esm2015/utility/src/lib/directives/desktop.directive.js +1 -1
  450. package/esm2015/utility/src/lib/directives/mobile-tablet.directive.js +1 -1
  451. package/esm2015/utility/src/lib/directives/mobile.directive.js +1 -1
  452. package/esm2015/utility/src/lib/directives/tablet.directive.js +1 -1
  453. package/esm2015/utility/src/lib/pipes/currency.pipe.js +1 -1
  454. package/esm2015/utility/src/lib/pipes/safe-html.pipe.js +1 -1
  455. package/esm2015/utility/src/lib/pipes/time-different.pipe.js +1 -1
  456. package/esm2015/utility/src/lib/utility.module.js +1 -1
  457. package/esm2015/utility/src/lib/utility.service.js +1 -1
  458. package/esm2015/utility/src/public-api.js +1 -1
  459. package/esm2015/view/index.js +1 -1
  460. package/esm2015/view/sd-angular-core-view.js +1 -1
  461. package/esm2015/view/src/lib/view.module.js +1 -1
  462. package/esm2015/view/src/public-api.js +1 -1
  463. package/fesm2015/sd-angular-core-grid-material.js +5 -1
  464. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  465. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  466. package/grid-material/src/lib/models/grid-column.model.d.ts +1 -1
  467. package/package.json +1 -1
  468. package/{sd-angular-core-1.0.47.tgz → sd-angular-core-1.0.48.tgz} +0 -0
@@ -1295,4 +1295,4 @@ SdGrid.propDecorators = {
1295
1295
  paginator: [{ type: ViewChild, args: [MatPaginator,] }],
1296
1296
  option: [{ type: Input }]
1297
1297
  };
1298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvdXNlci9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL2xpYi9ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixlQUFlLEVBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkIsT0FBTyxFQUNMLFlBQVksRUFDYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTCxjQUFjLEVBR2YsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFnQixpQkFBaUIsRUFBZ0QsTUFBTSxjQUFjLENBQUM7QUFJN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNM0MsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFF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T0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUM3RSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTt3QkFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7NkJBQ3JHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2xJLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2hELE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3FCQUNwQjt5QkFBTTt3QkFDTCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMs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QW1CZixnQkFBZ0I7WUFkaEIsWUFBWTtZQUlaLGNBQWM7WUFNZCxlQUFlO1lBZVIsaUJBQWlCOzs7MkJBc0V2QixZQUFZLFNBQUMsYUFBYTswQkFDMUIsWUFBWSxTQUFDLFdBQVc7aUNBRXhCLFNBQVMsU0FBQyxvQkFBb0I7NEJBQzlCLFNBQVMsU0FBQyxlQUFlOzRCQUV6QixTQUFTLFNBQUMsZUFBZTt5QkFDekIsU0FBUyxTQUFDLFlBQVk7dUJBQ3RCLFNBQVMsU0FBQyxVQUFVOzJCQUVwQixTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQ0FDMUMsU0FBUyxTQUFDLG1CQUFtQjtnQ0FFN0IsU0FBUyxTQUFDLG1CQUFtQjt3QkFDN0IsU0FBUyxTQUFDLFdBQVc7cUNBRXJCLFNBQVMsU0FBQyx3QkFBd0I7Z0NBQ2xDLFNBQVMsU0FBQyxtQkFBbUI7dUJBRTdCLGVBQWUsU0FBQyxrQkFBa0I7NkJBS2xDLGVBQWUsU0FBQyx3QkFBd0I7NkJBS3hDLGVBQWUsU0FBQyx3QkFBd0I7d0JBUXhDLFNBQVMsU0FBQyxZQUFZO3FCQU90QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBJbmplY3QsXHJcbiAgT3B0aW9uYWwsXHJcbiAgQ29udGVudENoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkQXBpU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvYXBpJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RFeGNlbFNlcnZpY2UsXHJcbiAgRXhjZWxDb25maWcsXHJcbiAgRXhjZWxUZW1wYXRlQ29sdW1uXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leGNlbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuXHJcbmltcG9ydCB7IFNkR3JpZE9wdGlvbiwgZGVmYXVsdEdyaWRPcHRpb24sIEdyaWRJdGVtLCBTZEdyaWRDb2x1bW4sIFNkR3JpZEV4dGVybmFsRmlsdGVyIH0gZnJvbSAnLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0b3JIYW5kbGVyUGlwZSB9IGZyb20gJy4vcGlwZXMvZWRpdG9yLWhhbmRsZXIucGlwZSc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRWRpdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZWRpdG9yL2dyaWQtcG9wdXAtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRmlsdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZmlsdGVyL2dyaWQtcG9wdXAtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkUG9wdXBFeHBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgRmlsdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWZpbHRlci9ncmlkLXBvcHVwLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFNkR3JpZEZpbHRlckluZm8gfSBmcm9tICcuL21vZGVscy9maWx0ZXItaW5mby5tb2RlbCc7XHJcblxyXG5pbXBvcnQgeyBJR3JpZENvbmZpZ3VyYXRpb24sIEdSSURfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2RDZWxsRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NlbGwtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsLWZvb3Rlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3ItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElIYW5kbGVyU2VydmVyLCBJSGFuZGxlckxvY2FsIH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlcic7XHJcbmltcG9ydCB7IEhhbmRsZXJMb2NhbCB9IGZyb20gJy4vbW9kZWxzL2hhbmRsZXItbG9jYWwnO1xyXG5pbXBvcnQgeyBIYW5kbGVyRG90bmV0IH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlci1kb3RuZXQnO1xyXG5pbXBvcnQgeyBTZEdyaWRJbXBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWltcG9ydC1leGNlbC9ncmlkLWltcG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGhhbmRsZXI6IElIYW5kbGVyU2VydmVyIHwgSUhhbmRsZXJMb2NhbDtcclxuICBpc01vYmlsZU9yVGFibGV0ID0gZmFsc2U7XHJcbiAgZGlzcGxheUtleSA9ICdTRENVU1RPTSc7XHJcbiAgZ3JpZE9wdGlvbjogU2RHcmlkT3B0aW9uO1xyXG4gIG9yZGVyQnk6IHN0cmluZztcclxuICBvcmRlckRpcmVjdGlvbjogJ0FTQycgfCAnREVTQyc7XHJcbiAgbG9jYWxJdGVtczogR3JpZEl0ZW1bXSA9IFtdO1xyXG4gIGl0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgdG90YWw6IG51bWJlcjtcclxuICBmaWx0ZXI6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueVxyXG4gIH0gPSB7fTtcclxuICBleHRlcm5hbEZpbHRlcjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55XHJcbiAgfSA9IHt9O1xyXG4gIGhpZGRlblBhZ2luYXRlID0gZmFsc2U7XHJcbiAgaW5saW5lRXh0ZXJuYWw6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XHJcbiAgfSA9IHt9O1xyXG4gIGlubGluZUNvbHVtbjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcclxuICB9ID0ge307XHJcbiAgcXVpY2tGaWx0ZXJzOiBRdWlja0ZpbHRlcltdID0gW107XHJcbiAgc2VsZWN0ZWRRdWlja0ZpbHRlcjogc3RyaW5nO1xyXG4gIC8vIFBhZ2luYXRlXHJcbiAgcGFnZXMgPSBbMV07XHJcbiAgcGFnZUNvdW50ID0gNTtcclxuICB0b3RhbFBhZ2UgPSAxO1xyXG5cclxuICAvLyBMb2FkaW5nXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHZpZXdJdGVtczogR3JpZEl0ZW1bXSA9IFtdO1xyXG4gIHN1bWFyaXplOiBzdHJpbmc7XHJcblxyXG4gIGZpeGVkQ29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuICBub3JtYWxDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGNvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcblxyXG4gIGlzQ2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpeGVkSGVhZGVyJykgcHJpdmF0ZSBmaXhlZEhlYWRlcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKCdmaXhlZEJvZHknKSBwcml2YXRlIGZpeGVkQm9kaWVzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpeGVkR3JpZENvbnRhaW5lcicpIGZpeGVkR3JpZENvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkRml4ZWRCb2R5JykgZ3JpZEZpeGVkQm9keTogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpIGdyaWRDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZEhlYWRlcicpIGdyaWRIZWFkZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZEJvZHknKSBncmlkQm9keTogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkQ29uZmlnJywgeyBzdGF0aWM6IHRydWUgfSkgc2RHcmlkQ29uZmlnOiBTZEdyaWRDb25maWc7XHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkUG9wdXBFZGl0b3InKSBzZEdyaWRQb3B1cEVkaXRvcjogU2RHcmlkUG9wdXBFZGl0b3I7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZFBvcHVwRmlsdGVyJykgc2RHcmlkUG9wdXBGaWx0ZXI6IFNkR3JpZFBvcHVwRmlsdGVyO1xyXG4gIEBWaWV3Q2hpbGQoJ21hdFNlbGVjdCcpIG1hdFNlbGVjdDogTWF0U2VsZWN0O1xyXG5cclxuICBAVmlld0NoaWxkKCdzZEdyaWRQb3B1cEV4cG9ydEV4Y2VsJykgc2RHcmlkUG9wdXBFeHBvcnRFeGNlbDogU2RHcmlkUG9wdXBFeHBvcnRFeGNlbDtcclxuICBAVmlld0NoaWxkKCdzZEdyaWRJbXBvcnRFeGNlbCcpIHNkR3JpZEltcG9ydEV4Y2VsOiBTZEdyaWRJbXBvcnRFeGNlbDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZENlbGxEZWZEaXJlY3RpdmUpIGNlbGxEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZENlbGxEZWZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbERlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RDZWxsRGVmRGlyZWN0aXZlXHJcbiAgfSA9IHt9O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZSkgY2VsbEVkaXRvckRlZnMgPSBuZXcgUXVlcnlMaXN0PFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZT4oKTtcclxuICBjZWxsRWRpdG9yRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlKSBjZWxsRm9vdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlPigpO1xyXG4gIGNlbGxGb290ZXJEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZVtdO1xyXG4gIH0gPSB7fTtcclxuICAjbnVtYmVyT2ZGb290ZXJSb3dzID0gMDtcclxuICBmb290ZXJSb3dzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAjcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHNldCBwYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIGlmIChwYWdpbmF0b3IgJiYgdGhpcy4jcGFnaW5hdG9yICE9PSBwYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy4jcGFnaW5hdG9yID0gcGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHBhZ2luYXRvci5wYWdlLnN1YnNjcmliZSh0aGlzLnNlbGVjdFBhZ2UpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBvcHRpb24odmFsdWU6IFNkR3JpZE9wdGlvbikge1xyXG4gICAgdGhpcy5zZXRPcHRpb24odmFsdWUpO1xyXG4gIH1cclxuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICByb3dIYW5kbGVyID0ge1xyXG4gICAgY2xpY2s6IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm9uQ2xpY2tSb3cpIHtcclxuICAgICAgICB0aGlzLmdyaWRPcHRpb24ub25DbGlja1JvdyhpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRibENsaWNrOiAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5vbkRibENsaWNrUm93KSB7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9uLm9uRGJsQ2xpY2tSb3coaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldE9wdGlvbiA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgb3B0aW9uID0gdGhpcy5pbml0Q29uZmlndXJhdGlvbihvcHRpb24pO1xyXG4gICAgb3B0aW9uID0gdGhpcy5pbml0VHJhbnNsYXRlKG9wdGlvbik7XHJcbiAgICBkZWxldGUgdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgLy8gTG/huqFpIGLhu48gbmjhu69uZyBjb21tYW5kIGLhu4sg4bqpblxyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmNvbW1hbmRzID0gdGhpcy5ncmlkT3B0aW9uLmNvbW1hbmRzLmZpbHRlcihjb21tYW5kID0+IHtcclxuICAgICAgY29uc3QgaGlkZGVuID0gY29tbWFuZC5oaWRkZW47XHJcbiAgICAgIGlmIChoaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKGhpZGRlbikgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgcmV0dXJuICFoaWRkZW47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGhpZGRlbikgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiAhaGlkZGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2RHcmlkQ29uZmlnLnNldE9wdGlvbih7XHJcbiAgICAgIGtleTogb3B0aW9uLmtleSxcclxuICAgICAgcGFnZVNpemU6IHRoaXMuZ3JpZE9wdGlvbi5wYWdpbmF0ZS5wYWdlU2l6ZSxcclxuICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnNcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbml0RXh0ZXJuYWxGaWx0ZXIoKTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24gPSAob3B0aW9uOiBTZEdyaWRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IGdyaWRDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgLy8gRmlsdGVyXHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LnR5cGUgJiYgZ3JpZENvbmZpZ3VyYXRpb24/LmZpbHRlcj8udHlwZSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgdHlwZTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnR5cGVcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbi5maWx0ZXIudHlwZSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LmNvbHVtbklubGluZSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5jb2x1bW5JbmxpbmUpIHtcclxuICAgICAgaWYgKCFvcHRpb24uZmlsdGVyKSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlciA9IHtcclxuICAgICAgICAgIGNvbHVtbklubGluZTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLmNvbHVtbklubGluZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci5jb2x1bW5JbmxpbmUgPSBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIuY29sdW1uSW5saW5lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LnF1aWNrRmlsdGVyVmlzaWJpbGl0eSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5xdWlja0ZpbHRlclZpc2liaWxpdHkpIHtcclxuICAgICAgaWYgKCFvcHRpb24uZmlsdGVyKSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlciA9IHtcclxuICAgICAgICAgIHF1aWNrRmlsdGVyVmlzaWJpbGl0eTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnF1aWNrRmlsdGVyVmlzaWJpbGl0eVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci5xdWlja0ZpbHRlclZpc2liaWxpdHkgPSBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIucXVpY2tGaWx0ZXJWaXNpYmlsaXR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUcmFuc2xhdGVcclxuICAgIG9wdGlvbi50cmFuc2xhdGUgPSBvcHRpb24udHJhbnNsYXRlID8/IGdyaWRDb25maWd1cmF0aW9uPy50cmFuc2xhdGU7XHJcbiAgICBzd2l0Y2ggKG9wdGlvbi50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2xvY2FsJzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmhhbmRsZXJMb2NhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZG90bmV0JzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmhhbmRsZXJEb3RuZXQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gb3B0aW9uLmhhbmRsZXJDdXN0b20gfHwgZ3JpZENvbmZpZ3VyYXRpb24/LmhhbmRsZXJDdXN0b207XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhbmRsZXIpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhgSGFuZGxlciBjdXN0b20gd2FzIG5vdCBmb3VuZGApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB7IC4uLmRlZmF1bHRHcmlkT3B0aW9uLCAuLi5vcHRpb24gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFRyYW5zbGF0ZSA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIG9wdGlvbi5jb21tYW5kcz8uZm9yRWFjaChjb21tYW5kID0+IHtcclxuICAgICAgaWYgKCFvcHRpb24udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgKGNvbW1hbmQudGl0bGUpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbW1hbmQudGl0bGUgPSB0cmFuc2xhdGUoY29tbWFuZC50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCdjaGlsZHJlbicgaW4gY29tbWFuZCkge1xyXG4gICAgICAgIGNvbW1hbmQuY2hpbGRyZW4/LmZvckVhY2goY2hpbGRDb21tYW5kID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGNoaWxkQ29tbWFuZC50aXRsZSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29tbWFuZC50aXRsZSA9IHRyYW5zbGF0ZShjaGlsZENvbW1hbmQudGl0bGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9wdGlvbi5jb2x1bW5zPy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHJhbnNsYXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9uLnRyYW5zbGF0ZSB8fCBjb2x1bW4udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgY29sdW1uLnRpdGxlID0gdHJhbnNsYXRlKGNvbHVtbi50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgY29sdW1uPy5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHJhbnNsYXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnRyYW5zbGF0ZSB8fCBjaGlsZENvbHVtbi50cmFuc2xhdGUpIHtcclxuICAgICAgICAgICAgY2hpbGRDb2x1bW4udGl0bGUgPSB0cmFuc2xhdGUoY2hpbGRDb2x1bW4udGl0bGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycz8uZm9yRWFjaChleHRlcm5hbEZpbHRlciA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXIudGl0bGUgPSB0cmFuc2xhdGUoZXh0ZXJuYWxGaWx0ZXIudGl0bGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvcHRpb247XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoR1JJRF9DT05GSUcpIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWd1cmF0aW9uOiBJR3JpZENvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGhhbmRsZXJMb2NhbDogSGFuZGxlckxvY2FsLFxyXG4gICAgcHJpdmF0ZSBoYW5kbGVyRG90bmV0OiBIYW5kbGVyRG90bmV0LFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBTZFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgbG9hZGluZ1NlcnZpY2U6IFNkTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFNkQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhjZWxTZXJ2aWNlOiBTZEV4Y2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0b3JWaXNpYmxlUGlwZTogRWRpdG9ySGFuZGxlclBpcGUpIHtcclxuICAgIHRoaXMuaXNNb2JpbGVPclRhYmxldCA9ICFkZXZpY2VTZXJ2aWNlLmlzRGVza3RvcCgpO1xyXG4gICAgLy8gdGhpcy5yZWYuZGV0YWNoKCk7XHJcbiAgICAvLyBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgLy8gfSwgMTAwMCk7XHJcbiAgICAvLyByZWYuZGV0YWNoKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZml4ZWRIZWFkZXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmaXhlZEhlYWRlcnMgPSB0aGlzLmZpeGVkSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgaWYgKGZpeGVkSGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRIZWFkZXJzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkSGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5jc3MoeyBsZWZ0IH0pO1xyXG4gICAgICAgICAgICBsZWZ0ICs9ICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChtZXJnZSh0aGlzLmZpeGVkQm9kaWVzLmNoYW5nZXMsIHRoaXMuY2VsbEZvb3RlckRlZnMuY2hhbmdlcykucGlwZShzdGFydFdpdGgoe30pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmaXhlZEJvZGllcyA9IHRoaXMuZml4ZWRCb2RpZXMudG9BcnJheSgpO1xyXG4gICAgICAgIGlmIChmaXhlZEJvZGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmaXhlZFBlclJvdyA9IHRoaXMuZml4ZWRCb2RpZXMubGVuZ3RoIC8gKHRoaXMudmlld0l0ZW1zLmxlbmd0aCArIHRoaXMuI251bWJlck9mRm9vdGVyUm93cyk7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRCb2RpZXNbMF0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZml4ZWRCb2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgJSBmaXhlZFBlclJvdyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGxlZnQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoZml4ZWRCb2RpZXNbaV0ubmF0aXZlRWxlbWVudCkuY3NzKHsgbGVmdCB9KTtcclxuICAgICAgICAgICAgbGVmdCArPSAkKGZpeGVkQm9kaWVzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpeGVkSGVhZGVycyA9IHRoaXMuZml4ZWRIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgICAgICBpZiAoZml4ZWRIZWFkZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBsZWZ0ID0gJChmaXhlZEhlYWRlcnNbMF0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZml4ZWRIZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLmNzcyh7IGxlZnQgfSk7XHJcbiAgICAgICAgICAgIGxlZnQgKz0gJChmaXhlZEhlYWRlcnNbaV0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbERlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbERlZiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxEZWYgb2YgdGhpcy5jZWxsRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRGVmLnNkQ2VsbERlZikge1xyXG4gICAgICAgICAgdGhpcy5jZWxsRGVmW2NlbGxEZWYuc2RDZWxsRGVmXSA9IGNlbGxEZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbEVkaXRvckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbEVkaXRvckRlZiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxFZGl0b3JEZWYgb2YgdGhpcy5jZWxsRWRpdG9yRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRWRpdG9yRGVmLnNkQ2VsbEVkaXRvckRlZikge1xyXG4gICAgICAgICAgdGhpcy5jZWxsRWRpdG9yRGVmW2NlbGxFZGl0b3JEZWYuc2RDZWxsRWRpdG9yRGVmXSA9IGNlbGxFZGl0b3JEZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbEZvb3RlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbEZvb3RlckRlZiA9IHt9O1xyXG4gICAgICB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MgPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxGb290ZXJEZWYgb2YgdGhpcy5jZWxsRm9vdGVyRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZikge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2VsbEZvb3RlckRlZltjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZl0gPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2VsbEZvb3RlckRlZltjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZl0ucHVzaChjZWxsRm9vdGVyRGVmKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLmxlbmd0aCA+IHRoaXMuI251bWJlck9mRm9vdGVyUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MgPSB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb290ZXJSb3dzID0gQXJyYXkodGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzKS5maWxsKDApLm1hcCgodiwgaSkgPT4gaSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKGdyaWRJdGVtcz86IGFueVtdKSA9PiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSAodGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IDUwO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlICE9PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlciBhcyBJSGFuZGxlclNlcnZlcjtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBoYW5kbGVyLm1hcFJlcXVlc3QodGhpcy5nZXRGaWx0ZXJJbmZvKGN1cnJlbnRQYWdlLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLmZpbHRlcihrZXkgPT4gZmlsdGVyW2tleV0gIT09IG51bGwgJiYgZmlsdGVyW2tleV0gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4ga2V5ICsgJz0nICsgZmlsdGVyW2tleV0pLmpvaW4oJyYnKTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ3JpZE9wdGlvbi51cmwuaW5jbHVkZXMoJz8nKSA/IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9JiR7cXVlcnlTdHJpbmd9YCA6IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9PyR7cXVlcnlTdHJpbmd9YDtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldCh1cmwpO1xyXG4gICAgICAgICAgY29uc3QgeyBpdGVtcywgdG90YWwgfSA9IGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHRoaXMuZ3JpZE9wdGlvbi51cmwsIGZpbHRlcik7XHJcbiAgICAgICAgICBjb25zdCB7IGl0ZW1zLCB0b3RhbCB9ID0gaGFuZGxlci5tYXBSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJMb2NhbDtcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmdyaWRPcHRpb24uaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxJdGVtcyA9IGdyaWRJdGVtcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5pdGVtcyA9IGdyaWRJdGVtcyB8fCB0aGlzLmdyaWRPcHRpb24uaXRlbXM7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gaGFuZGxlci5maWx0ZXIodGhpcy5sb2NhbEl0ZW1zLCB7XHJcbiAgICAgICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLFxyXG4gICAgICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcclxuICAgICAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICAgICAgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwYWdlU2l6ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICB0aGlzLnRvdGFsID0gcmVzcG9uc2UudG90YWw7XHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5vcmlnaW5JdGVtID0geyAuLi5pdGVtIH0pO1xyXG4gICAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLiNzZXRTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ3JpZE9wdGlvbj8ub25SZWxvYWRDb21wbGV0ZWQ/Lih0aGlzLml0ZW1zKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVZpZXdJdGVtcygpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFuZGxlcnMoKTtcclxuICAgICAgJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLnNjcm9sbFRvcCgwKTtcclxuICAgICAgaWYgKGN1cnJlbnRQYWdlID4gMSAmJiAhdGhpcy52aWV3SXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuI3BhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbG9hZEl0ZW0oZGF0YTogeyBbaWQ6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZChlID0+ICEhZS5pZCAmJiBlLmlkID09PSBpZCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGRhdGFbaWRdW2NvbHVtbi5maWVsZF0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gIT09IGRhdGFbaWRdW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibGluayhpdGVtLCBjb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgZGF0YVtpZF0pO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuc3RvcEJsaW5rKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBibGluayhpdGVtOiBHcmlkSXRlbSwgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaXRlbS5ibGlua2VyID0gaXRlbS5ibGlua2VyIHx8IHt9O1xyXG4gICAgaXRlbS5ibGlua2VyW2ZpZWxkXSA9IHRydWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RvcEJsaW5rKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5ibGlua2VyID0ge307XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMTUwMCk7XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVmlld0l0ZW1zKCkge1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSAodGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IDUwO1xyXG4gICAgZGVsZXRlIHRoaXMudmlld0l0ZW1zO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemVcclxuICAgICAgICAgICYmIGluZGV4IDwgY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmJsaW5rZXIgPSBpdGVtLmJsaW5rZXIgfHwge307XHJcbiAgICAgIGl0ZW0uc3ViSW5mb3JtYXRpb24gPSBpdGVtLnN1YkluZm9ybWF0aW9uIHx8IHt9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZWRpdGVkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5vcmlnaW5JdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGl0ZW0ub3JpZ2luSXRlbSkuc29tZShrZXkgPT4gaXRlbS5vcmlnaW5JdGVtW2tleV0gIT09IGl0ZW1ba2V5XSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLnJlc3VsdCB9ID0gaXRlbTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UGFnZSA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnJlbG9hZCh0aGlzLmxvY2FsSXRlbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpbHRlciA9IChwYXJhbT86IHsgZmlsdGVyOiBhbnksIGV4dGVybmFsRmlsdGVyOiBhbnkgfSkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXIgPSBwYXJhbT8uZmlsdGVyIHx8IHRoaXMuZmlsdGVyO1xyXG4gICAgdGhpcy5leHRlcm5hbEZpbHRlciA9IHBhcmFtPy5leHRlcm5hbEZpbHRlciB8fCB0aGlzLmV4dGVybmFsRmlsdGVyO1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgdGhpcy5yZWxvYWQodGhpcy5sb2NhbEl0ZW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIENoZWNrYWJsZVxyXG5cclxuICAjc2V0U2VsZWN0ZWRJdGVtcyA9ICgpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQpXHJcbiAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB0ZW1wb3JhcnksXHJcbiAgICAgICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICAgIGVkaXRpbmdTdGF0dXMsXHJcbiAgICAgICAgICBpc0NoZWNrZWQsXHJcbiAgICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICAgIGJsaW5rZXIsXHJcbiAgICAgICAgICAuLi5yZXN1bHQgfSA9IGl0ZW07XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrID0gKGl0ZW06IEdyaWRJdGVtLCBpc0NoZWNrYm94PzogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmdyaWRPcHRpb24uY2hlY2thYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXNDaGVja2JveCkge1xyXG4gICAgICBpdGVtLmlzQ2hlY2tlZCA9ICFpdGVtLmlzQ2hlY2tlZDtcclxuICAgIH1cclxuICAgIHRoaXMuaXNDaGVja2VkQWxsID0gdGhpcy5pdGVtcy5sZW5ndGggPT09IHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc0NoZWNrZWQpLmxlbmd0aDtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrPy4odGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlLmlzQ2hlY2tlZCksIGl0ZW0pO1xyXG4gICAgdGhpcy4jc2V0U2VsZWN0ZWRJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGwoaXNDaGVja2VkQWxsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IGlzQ2hlY2tlZEFsbDtcclxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWRBbGwpO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrKSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrKHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQpKTtcclxuICAgIH1cclxuICAgIHRoaXMuI3NldFNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gU29ydFxyXG4gIHNvcnQgPSAoY29sdW1uOiBTZEdyaWRDb2x1bW4pID0+IHtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3J0YWJsZSA9IHRoaXMuZ3JpZE9wdGlvbi5zb3J0YWJsZSA/PyB0cnVlO1xyXG4gICAgY29uc3QgY29sdW1uU29ydGFibGUgPSBjb2x1bW4uc29ydGFibGUgPz8gdHJ1ZTtcclxuICAgIGlmICghc29ydGFibGUgfHwgIWNvbHVtblNvcnRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9yZGVyQnkgPT09IGNvbHVtbi5maWVsZCkge1xyXG4gICAgICB0aGlzLm9yZGVyRGlyZWN0aW9uID0gdGhpcy5vcmRlckRpcmVjdGlvbiA9PT0gJ0FTQycgPyAnREVTQycgOiAnQVNDJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3JkZXJCeSA9IGNvbHVtbi5maWVsZDtcclxuICAgICAgdGhpcy5vcmRlckRpcmVjdGlvbiA9ICdBU0MnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKHRoaXMubG9jYWxJdGVtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8gI3JlZ2lvbiBSZXNpemUgR3JpZFxyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmhlaWdodCkge1xyXG4gICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5ncmlkT3B0aW9uLmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt3aW5kb3cuaW5uZXJIZWlnaHQgLSAzMDB9cHhgO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIEzhuqV5IG9mZnNldCB0b3AgxJHhu4MgxJFp4buBdSBjaOG7iW5oIGvDrWNoIHRoxrDhu5tjIEdyaWQgduG7q2EgduG7m2kgbcOgbiBow6xuaFxyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgLy8gY29uc3QgdG9wID0gJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLnRvcDtcclxuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmdyaWRPcHRpb24uaGlkZUZvb3RlciA/IDAgOiAodGhpcy5pc01vYmlsZU9yVGFibGV0ID8gNDUgOiA1NSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgNTAwKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KGhlaWdodD86IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbXBvcnQsIEV4cG9ydCwgQ29uZmlnXHJcblxyXG4gIGxvYWRDb25maWcoY29uZmlnUmVzdWx0OiBDb25maWdSZXN1bHQpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5wYWdpbmF0ZS5wYWdlU2l6ZSA9IGNvbmZpZ1Jlc3VsdC5wYWdlU2l6ZTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zID0gY29uZmlnUmVzdWx0LmNvbHVtbnM7XHJcbiAgICB0aGlzLmZpeGVkQ29sdW1ucyA9IGNvbmZpZ1Jlc3VsdC5maXhlZENvbHVtbnM7XHJcbiAgICB0aGlzLm5vcm1hbENvbHVtbnMgPSBjb25maWdSZXN1bHQubm9ybWFsQ29sdW1ucztcclxuICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmZpeGVkQ29sdW1ucywgLi4udGhpcy5ub3JtYWxDb2x1bW5zXTtcclxuICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgdGhpcy5pbml0RGljdGlvbmFyeUNvbHVtblZhbHVlcygpO1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZpbHRlcigpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgLy8gR8OhbiBnacOhIHRy4buLIGZpbHRlciBt4bq3YyDEkeG7i25oIGNobyB04burbmcgY+G7mXRcclxuICAgICAgdGhpcy5maWx0ZXJbY29sdW1uLmZpZWxkXSA9IHRoaXMuZmlsdGVyW2NvbHVtbi5maWVsZF0gPz8gJyc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdERpY3Rpb25hcnlDb2x1bW5WYWx1ZXMoKSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICBjb2x1bW4uZGljdGlvbmFyeSA9IHt9O1xyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVzKSB7XHJcbiAgICAgICAgICBjb2x1bW4udmFsdWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5kaWN0aW9uYXJ5W2UudmFsdWUudG9TdHJpbmcoKV0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgIGljb246IGUuaWNvbixcclxuICAgICAgICAgICAgICBjb2xvcjogZS5jb2xvcixcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGUuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uLmRpY3Rpb25hcnkgPSB7fTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgIGNoaWxkQ29sdW1uLnZhbHVlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDb2x1bW4uZGljdGlvbmFyeVtlLnZhbHVlLnRvU3RyaW5nKCldID0ge1xyXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgIGljb246IGUuaWNvbixcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUVkaXRvckhhbmRsZXJzKCkge1xyXG4gICAgdGhpcy52aWV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW06IEdyaWRJdGVtKSB7XHJcbiAgICAvLyBpdGVtLmVkaXRvckhhbmRsZXIgPSBpdGVtLmVkaXRvckhhbmRsZXIgfHwge307XHJcbiAgICB0aGlzLmVkaXRvclZpc2libGVQaXBlLnRyYW5zZm9ybShudWxsLCBpdGVtLCB0aGlzLmdyaWRPcHRpb24pO1xyXG4gIH1cclxuICB0cmFja0J5SWQoaW5kZXgsIGl0ZW0pIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRmlsdGVyaW5nKCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXIpLnNvbWUodmFsdWUgPT4gISF2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlclBvcHVwKCkge1xyXG4gICAgY29uc3QgZjEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcik7XHJcbiAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZXh0ZXJuYWxGaWx0ZXIpO1xyXG4gICAgY29uc3QgZmlsdGVyID0gSlNPTi5wYXJzZShmMSk7XHJcbiAgICBjb25zdCBleHRlcm5hbEZpbHRlciA9IEpTT04ucGFyc2UoZjIpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5vcGVuKHRoaXMuZml4ZWRDb2x1bW5zLCB0aGlzLm5vcm1hbENvbHVtbnMsIGZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyID0ge307XHJcbiAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0ge307XHJcbiAgICB0aGlzLmluaXRGaWx0ZXIoKTtcclxuICAgIHRoaXMuaW5pdEV4dGVybmFsRmlsdGVyKCk7XHJcbiAgICBpZiAodGhpcy5zZEdyaWRQb3B1cEZpbHRlcikge1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyLmZpbHRlciA9IHRoaXMuZmlsdGVyO1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyLmV4dGVybmFsRmlsdGVyID0gdGhpcy5leHRlcm5hbEZpbHRlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kT3JDb2xsYXBzZSA9IGFzeW5jIChncmlkSXRlbTogR3JpZEl0ZW0pID0+IHtcclxuICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICBlZGl0b3JIYW5kbGVyLFxyXG4gICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICBpc0NoZWNrZWQsXHJcbiAgICAgIHN1YkluZm9ybWF0aW9uLFxyXG4gICAgICAuLi5pdGVtIH0gPSBncmlkSXRlbTtcclxuICAgIGlmICghdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChncmlkSXRlbS5zdWJJbmZvcm1hdGlvbj8uaXNPcGVuZWQpIHtcclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5sYXp5TG9hZGluZyAmJiAhZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24/LmlzTG9hZGVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMgPSBhd2FpdCB0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ub25Mb2FkKGl0ZW0pO1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcykpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5hbGVydC53YXJuaW5nKGBEYXRhIGlzIG5vdCBhbiBhcnJheWApO1xyXG4gICAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5sYXp5TG9hZGluZyA9PT0gZmFsc2UgJiYgIWdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gZ3JpZEl0ZW1bdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uLmZpZWxkXTtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zKSkge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5hbGVydC53YXJuaW5nKGBEYXRhIGlzIG5vdCBhbiBhcnJheWApO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gW107XHJcbiAgICAgIH1cclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIEVkaXRhYmxlXHJcbiAgb25DcmVhdGUgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB7IHR5cGUsIGVkaXRvciwgY29sdW1ucyB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaWYgKCFlZGl0b3I/LmFkZGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbTogR3JpZEl0ZW0gPSB7fTtcclxuICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXHJcbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZWRpdG9yLm9uQWRkPy4oaXRlbSk7XHJcbiAgICAvLyDEkMawYSBpdGVtIGzDqm4gZMOybmcgxJHhuqd1IHRpw6puIG7hur91IHR5cGUga2jDoWMgcG9wdXBcclxuICAgIGlmIChlZGl0b3IudHlwZSAhPT0gJ3BvcHVwJykge1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMub25VcGRhdGUoaXRlbSwgZmFsc2UpO1xyXG4gIH1cclxuICBvblVwZGF0ZSA9IChpdGVtOiBHcmlkSXRlbSwgaXNNb2RpZmllZD86IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHsgZWRpdG9yLCBjb2x1bW5zIH0gPSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSBpc01vZGlmaWVkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcclxuICAgIGl0ZW0udGVtcG9yYXJ5ID0geyAuLi5pdGVtIH07XHJcbiAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtKTtcclxuICAgIGlmIChlZGl0b3IudHlwZSA9PT0gJ3BvcHVwJykge1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRWRpdG9yLm9wZW4oaXRlbSwgY29sdW1ucywgaXNNb2RpZmllZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIG9uU2F2ZSA9IGFzeW5jIChpdGVtOiBHcmlkSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGl0ZW0uZWRpdG9ySGFuZGxlci5zYXZpbmcgPSB0cnVlO1xyXG4gICAgICBpZiAoZWRpdG9yLnZhbGlkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRpdG9yLnZhbGlkYXRlKGl0ZW0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVzdWx0O1xyXG4gICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbWVzc2FnZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlZGl0b3Iub25TYXZlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRpdG9yLm9uU2F2ZShpdGVtKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgYXdhaXQgcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGl0ZW0uZWRpdGluZ1N0YXR1cyA9PT0gJ2NyZWF0ZScgJiYgZWRpdG9yLnR5cGUgPT09ICdwb3B1cCcpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGl0ZW0uZWRpdGluZ1N0YXR1cyA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGVycik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBpdGVtLmVkaXRvckhhbmRsZXIuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsID0gKGl0ZW06IEdyaWRJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IGVkaXRvciB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaWYgKGVkaXRvci50eXBlID09PSAnaW5saW5lJykge1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICBjb25zdCBpZHgxID0gdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGlkeDEsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlkeDIgPSB0aGlzLnZpZXdJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoaWR4MiwgMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmVkaXRpbmdTdGF0dXMgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIGlmIChlZGl0b3IudHlwZSAhPT0gJ3BvcHVwJykge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld0l0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBpdGVtLnRlbXBvcmFyeSk7XHJcbiAgICAgIGl0ZW0uZWRpdGluZ1N0YXR1cyA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEV4dGVybmFsRmlsdGVyID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuZXh0ZXJuYWxGaWx0ZXJzLmZvckVhY2goZXh0ZXJuYWxGaWx0ZXIgPT4ge1xyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSBleHRlcm5hbEZpbHRlci5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnZGF0ZXJhbmdlJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2V4dGVybmFsRmlsdGVyLmZpZWxkXSA9IHtcclxuICAgICAgICAgICAgZnJvbTogZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0bzogZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdFRvID8/IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLnR5cGUgPT09ICdkYXRlcmFuZ2VmdWxsJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAndmFsdWVzJykgeyAvLyBhbmRuMVxyXG4gICAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSBleHRlcm5hbEZpbHRlci5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25TZWFyY2ggPSAoc2VhcmNoVmFsdWU6IHN0cmluZywgaXRlbTogR3JpZEl0ZW0sIGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBzZWFyY2hWYWx1ZTtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ29uZmlndXJhdGlvbkxvYWRlZCA9IChwYXJhbTogRmlsdGVyQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5xdWlja0ZpbHRlcnMgPSBwYXJhbS5xdWlja0ZpbHRlcnMgfHwgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIgPSBwYXJhbS5zZWxlY3RlZFF1aWNrRmlsdGVyIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcikge1xyXG4gICAgICBjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMucXVpY2tGaWx0ZXJzLmZpbmQoZSA9PiBlLmNvZGUgPT09IHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcik7XHJcbiAgICAgIGlmIChxdWlja0ZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkocXVpY2tGaWx0ZXIuZmlsdGVyKTtcclxuICAgICAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmV4dGVybmFsRmlsdGVyKTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSB0aGlzLnJlZnJlc2hFeHRlcm5hbEZpbHRlcih0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLCBKU09OLnBhcnNlKGYyKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5saW5lRXh0ZXJuYWwgPSBwYXJhbS5pbmxpbmVFeHRlcm5hbCB8fCB7fTtcclxuICAgIHRoaXMuaW5saW5lQ29sdW1uID0gcGFyYW0uaW5saW5lQ29sdW1uIHx8IHt9O1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0UXVpY2tGaWx0ZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVycy5maW5kKGUgPT4gZS5jb2RlID09PSB2YWx1ZSk7XHJcbiAgICBpZiAocXVpY2tGaWx0ZXI/LmNvZGUpIHtcclxuICAgICAgY29uc3QgZjEgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5maWx0ZXIpO1xyXG4gICAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmV4dGVybmFsRmlsdGVyKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gcXVpY2tGaWx0ZXI/LmNvZGU7XHJcbiAgICAgIHRoaXMuZmlsdGVyID0gSlNPTi5wYXJzZShmMSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSB0aGlzLnJlZnJlc2hFeHRlcm5hbEZpbHRlcih0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLCBKU09OLnBhcnNlKGYyKSk7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIgPSAnJztcclxuICAgICAgdGhpcy5vbkNsZWFyRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy51cGRhdGVDb25maWd1cmF0aW9uKHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4cG9ydEl0ZW1zID0gYXN5bmMgKHBhZ2VOdW1iZXI6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSAxMDAwMCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSAhPT0gJ2xvY2FsJykge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJTZXJ2ZXI7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gaGFuZGxlci5tYXBSZXF1ZXN0KHRoaXMuZ2V0RmlsdGVySW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLmZpbHRlcihrZXkgPT4gZmlsdGVyW2tleV0gIT09IG51bGwgJiYgZmlsdGVyW2tleV0gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4ga2V5ICsgJz0nICsgZmlsdGVyW2tleV0pLmpvaW4oJyYnKTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ3JpZE9wdGlvbi51cmwuaW5jbHVkZXMoJz8nKSA/IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9JiR7cXVlcnlTdHJpbmd9YCA6IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9PyR7cXVlcnlTdHJpbmd9YDtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldCh1cmwpO1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpLml0ZW1zO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHRoaXMuZ3JpZE9wdGlvbi51cmwsIGZpbHRlcik7XHJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlci5tYXBSZXNwb25zZShyZXNwb25zZSkuaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBsb2NhbEl0ZW1zID0gW107XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlciBhcyBJSGFuZGxlckxvY2FsO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuZ3JpZE9wdGlvbi5pdGVtcykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoKTtcclxuICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBsb2NhbEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2FsSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGhhbmRsZXIuZmlsdGVyKGxvY2FsSXRlbXMsIHtcclxuICAgICAgICAgIGN1c3RvbUZpbHRlcjogdGhpcy5ncmlkT3B0aW9uLmZpbHRlci5jdXN0b21GaWx0ZXIsXHJcbiAgICAgICAgICByYXdGaWx0ZXI6IHRoaXMuZmlsdGVyLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsXHJcbiAgICAgICAgICByYXdFeHRlcm5hbEZpbHRlcjogdGhpcy5leHRlcm5hbEZpbHRlcixcclxuICAgICAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy5ncmlkT3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5LFxyXG4gICAgICAgICAgb3JkZXJEaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24sXHJcbiAgICAgICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmZvID0gKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFNkR3JpZEZpbHRlckluZm8gPT4ge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZmlsdGVyW2tleV0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyW2tleV0gPSB0aGlzLmZpbHRlcltrZXldLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5leHRlcm5hbEZpbHRlcikpIHtcclxuICAgICAgaWYgKHR5cGVvZiAodGhpcy5leHRlcm5hbEZpbHRlcltrZXldKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2tleV0gPSB0aGlzLmV4dGVybmFsRmlsdGVyW2tleV0udHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICByYXdGaWx0ZXI6IHRoaXMuZmlsdGVyLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy5ncmlkT3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICBvcmRlckJ5OiB0aGlzLm9yZGVyQnksXHJcbiAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICBwYWdlU2l6ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0QnlUZW1wbGF0ZSA9IGFzeW5jIChwYXJhbXM6IHsgZXhjZWxDb25maWc6IEV4Y2VsQ29uZmlnLCBleGNlbENvbHVtbnM6IEV4Y2VsVGVtcGF0ZUNvbHVtbltdIH0pID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGxldCBleHBvcnRJdGVtcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy5nZXRGaWx0ZXJJbmZvKDEsIDEwMDAwKSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydEl0ZW1zKCkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lm1hcHBpbmcpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQubWFwcGluZyhleHBvcnRJdGVtcywgcGFyYW1zLmV4Y2VsQ29uZmlnLm5hbWUpO1xyXG4gICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXhwb3J0SXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLCAuLi4odGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uY29sdW1ucyB8fCBbXSldO1xyXG4gICAgY29uc3QgaXRlbXMgPSBleHBvcnRJdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IChjb2x1bW46IFNkR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50cmFuc2Zvcm0pIHtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbHVtbi50eXBlID09PSAnY29sb3InKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50cnVlVmFsdWUgfHwgJ1RydWUnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uZmFsc2VWYWx1ZSB8fCAnRmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGV0aW1lIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIHRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdISDptbTpzcycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgdmFsdWVzIHRow6wgbOG6pXkgZ2nDoSB0cuG7iyBj4bunYSB2YWx1ZSDEkcaw4bujYyBjaOG7jW5cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjb2x1bW4udmFsdWVzLmZpbmQoZSA9PiBlLnZhbHVlID09PSBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBkYXRhLnRleHQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gY29sdW1uLnZhbHVlcy5maW5kKGUgPT4gZVtjb2x1bW4udmFsdWVGaWVsZF0gPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGRhdGFbY29sdW1uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmV4Y2VsU2VydmljZS5nZW5lcmF0ZUV4Y2VsRGF0YUJ5VGVtcGxhdGUocGFyYW1zLmV4Y2VsQ29uZmlnLmZ1bGxQYXRoLCBwYXJhbXMuZXhjZWxDb2x1bW5zLCBpdGVtcywgcGFyYW1zLmV4Y2VsQ29uZmlnLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgYmlnRXhwb3J0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSAxMDAwO1xyXG4gICAgbGV0IHBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIGxldCBmaWxlUGF0aDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgbGF0ZXN0Um93ID0gMDtcclxuICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXMpIHtcclxuICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy5nZXRGaWx0ZXJJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0SXRlbXMocGFnZU51bWJlciwgcGFnZVNpemUpLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lm1hcHBpbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Lm1hcHBpbmcoZXhwb3J0SXRlbXMpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmdyaWRPcHRpb24uY29sdW1ucywgLi4uKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/LmNvbHVtbnMgfHwgW10pXTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGV4cG9ydEl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoY29sdW1uOiBTZEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udHJhbnNmb3JtKGl0ZW1bY29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICdjb2xvcicpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRydWVWYWx1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLmZhbHNlVmFsdWUgfHwgJ0ZhbHNlJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCBkYXRlIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXkgSEg6bW06c3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIHRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIHZhbHVlcyB0aMOsIGzhuqV5IGdpw6EgdHLhu4sgY+G7p2EgdmFsdWUgxJHGsOG7o2MgY2jhu41uXHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNvbHVtbi52YWx1ZXMuZmluZChlID0+IGUudmFsdWUgPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YS50ZXh0O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gY29sdW1uLnZhbHVlcy5maW5kKGUgPT4gZVtjb2x1bW4udmFsdWVGaWVsZF0gPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YVtjb2x1bW4uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGhhbmRsZSk7XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLmJpZ0V4cG9ydCh7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBsYXRlc3RSb3csXHJcbiAgICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGF0ZXN0Um93ID0gcmVzdWx0LmxhdGVzdFJvdztcclxuICAgICAgICBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgICBkZXN0aW5hdGlvbiA9IHJlc3VsdC5kZXN0aW5hdGlvbjtcclxuICAgICAgICBpZiAoKHBhZ2VOdW1iZXIgLSAxKSAqIHBhZ2VTaXplICsgaXRlbXMubGVuZ3RoID49IHRoaXMudG90YWwpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLmRvd25sb2FkKGZpbGVQYXRoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWdlTnVtYmVyKys7XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGludmFsaWRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuZWRpdG9ySGFuZGxlcj8uZXJyb3JNZXNzYWdlKS5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbSxcclxuICAgICAgICBtZXNzYWdlOiBlLmVkaXRvckhhbmRsZXIuZXJyb3JNZXNzYWdlXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBncmlkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRvckNoYW5nZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgb25TZWxlY3RQYWdlU2l6ZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVmcmVzaEV4dGVybmFsRmlsdGVyID0gKGV4dGVybmFsRmlsdGVyczogU2RHcmlkRXh0ZXJuYWxGaWx0ZXJbXSwgZXh0ZXJuYWxGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXIgPSBleHRlcm5hbEZpbHRlciB8fCB7fTtcclxuICAgIGV4dGVybmFsRmlsdGVycyA9IGV4dGVybmFsRmlsdGVycyB8fCBbXTtcclxuICAgIGV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IHtcclxuICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy5mcm9tID8/IGUuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy50byA/PyBlLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZWZ1bGwnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IChleHRlcm5hbEZpbHRlcltlLmZpZWxkXSB8fCBlLmRlZmF1bHQpID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBvbkNyZWF0ZVF1aWNrRmlsdGVyID0gKGV2PzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25DcmVhdGVRdWlja0ZpbHRlcihldik7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRRdWlja0ZpbHRlciA9IChldjogRXZlbnQsIHF1aWNrRmlsdGVyPzogUXVpY2tGaWx0ZXIpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25FZGl0UXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUXVpY2tGaWx0ZXIgPSAoZXY6IEV2ZW50LCBxdWlja0ZpbHRlcj86IFF1aWNrRmlsdGVyKSA9PiB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdD8uY2xvc2UoKTtcclxuICAgIHRoaXMub25GaWx0ZXJQb3B1cCgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8uY2xvc2UoKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXI/Lm9uRGVsZXRlUXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcbn1cclxuIl19
1298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL2xpYi9ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixlQUFlLEVBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkIsT0FBTyxFQUNMLFlBQVksRUFDYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTCxjQUFjLEVBR2YsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFnQixpQkFBaUIsRUFBZ0QsTUFBTSxjQUFjLENBQUM7QUFJN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNM0MsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7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TUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUM3RSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTt3QkFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7NkJBQ3JHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2xJLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2hELE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3FCQUNwQjt5QkFBTTt3QkFDTCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUks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a0I7WUF2QlgsUUFBUTtZQW1CZixnQkFBZ0I7WUFkaEIsWUFBWTtZQUlaLGNBQWM7WUFNZCxlQUFlO1lBZVIsaUJBQWlCOzs7MkJBc0V2QixZQUFZLFNBQUMsYUFBYTswQkFDMUIsWUFBWSxTQUFDLFdBQVc7aUNBRXhCLFNBQVMsU0FBQyxvQkFBb0I7NEJBQzlCLFNBQVMsU0FBQyxlQUFlOzRCQUV6QixTQUFTLFNBQUMsZUFBZTt5QkFDekIsU0FBUyxTQUFDLFlBQVk7dUJBQ3RCLFNBQVMsU0FBQyxVQUFVOzJCQUVwQixTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQ0FDMUMsU0FBUyxTQUFDLG1CQUFtQjtnQ0FFN0IsU0FBUyxTQUFDLG1CQUFtQjt3QkFDN0IsU0FBUyxTQUFDLFdBQVc7cUNBRXJCLFNBQVMsU0FBQyx3QkFBd0I7Z0NBQ2xDLFNBQVMsU0FBQyxtQkFBbUI7dUJBRTdCLGVBQWUsU0FBQyxrQkFBa0I7NkJBS2xDLGVBQWUsU0FBQyx3QkFBd0I7NkJBS3hDLGVBQWUsU0FBQyx3QkFBd0I7d0JBUXhDLFNBQVMsU0FBQyxZQUFZO3FCQU90QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBJbmplY3QsXHJcbiAgT3B0aW9uYWwsXHJcbiAgQ29udGVudENoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkQXBpU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvYXBpJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RFeGNlbFNlcnZpY2UsXHJcbiAgRXhjZWxDb25maWcsXHJcbiAgRXhjZWxUZW1wYXRlQ29sdW1uXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leGNlbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuXHJcbmltcG9ydCB7IFNkR3JpZE9wdGlvbiwgZGVmYXVsdEdyaWRPcHRpb24sIEdyaWRJdGVtLCBTZEdyaWRDb2x1bW4sIFNkR3JpZEV4dGVybmFsRmlsdGVyIH0gZnJvbSAnLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0b3JIYW5kbGVyUGlwZSB9IGZyb20gJy4vcGlwZXMvZWRpdG9yLWhhbmRsZXIucGlwZSc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRWRpdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZWRpdG9yL2dyaWQtcG9wdXAtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRmlsdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZmlsdGVyL2dyaWQtcG9wdXAtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkUG9wdXBFeHBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgRmlsdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWZpbHRlci9ncmlkLXBvcHVwLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFNkR3JpZEZpbHRlckluZm8gfSBmcm9tICcuL21vZGVscy9maWx0ZXItaW5mby5tb2RlbCc7XHJcblxyXG5pbXBvcnQgeyBJR3JpZENvbmZpZ3VyYXRpb24sIEdSSURfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2RDZWxsRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NlbGwtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsLWZvb3Rlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3ItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElIYW5kbGVyU2VydmVyLCBJSGFuZGxlckxvY2FsIH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlcic7XHJcbmltcG9ydCB7IEhhbmRsZXJMb2NhbCB9IGZyb20gJy4vbW9kZWxzL2hhbmRsZXItbG9jYWwnO1xyXG5pbXBvcnQgeyBIYW5kbGVyRG90bmV0IH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlci1kb3RuZXQnO1xyXG5pbXBvcnQgeyBTZEdyaWRJbXBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWltcG9ydC1leGNlbC9ncmlkLWltcG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGhhbmRsZXI6IElIYW5kbGVyU2VydmVyIHwgSUhhbmRsZXJMb2NhbDtcclxuICBpc01vYmlsZU9yVGFibGV0ID0gZmFsc2U7XHJcbiAgZGlzcGxheUtleSA9ICdTRENVU1RPTSc7XHJcbiAgZ3JpZE9wdGlvbjogU2RHcmlkT3B0aW9uO1xyXG4gIG9yZGVyQnk6IHN0cmluZztcclxuICBvcmRlckRpcmVjdGlvbjogJ0FTQycgfCAnREVTQyc7XHJcbiAgbG9jYWxJdGVtczogR3JpZEl0ZW1bXSA9IFtdO1xyXG4gIGl0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgdG90YWw6IG51bWJlcjtcclxuICBmaWx0ZXI6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueVxyXG4gIH0gPSB7fTtcclxuICBleHRlcm5hbEZpbHRlcjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55XHJcbiAgfSA9IHt9O1xyXG4gIGhpZGRlblBhZ2luYXRlID0gZmFsc2U7XHJcbiAgaW5saW5lRXh0ZXJuYWw6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XHJcbiAgfSA9IHt9O1xyXG4gIGlubGluZUNvbHVtbjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcclxuICB9ID0ge307XHJcbiAgcXVpY2tGaWx0ZXJzOiBRdWlja0ZpbHRlcltdID0gW107XHJcbiAgc2VsZWN0ZWRRdWlja0ZpbHRlcjogc3RyaW5nO1xyXG4gIC8vIFBhZ2luYXRlXHJcbiAgcGFnZXMgPSBbMV07XHJcbiAgcGFnZUNvdW50ID0gNTtcclxuICB0b3RhbFBhZ2UgPSAxO1xyXG5cclxuICAvLyBMb2FkaW5nXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHZpZXdJdGVtczogR3JpZEl0ZW1bXSA9IFtdO1xyXG4gIHN1bWFyaXplOiBzdHJpbmc7XHJcblxyXG4gIGZpeGVkQ29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuICBub3JtYWxDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGNvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcblxyXG4gIGlzQ2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpeGVkSGVhZGVyJykgcHJpdmF0ZSBmaXhlZEhlYWRlcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKCdmaXhlZEJvZHknKSBwcml2YXRlIGZpeGVkQm9kaWVzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpeGVkR3JpZENvbnRhaW5lcicpIGZpeGVkR3JpZENvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkRml4ZWRCb2R5JykgZ3JpZEZpeGVkQm9keTogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpIGdyaWRDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZEhlYWRlcicpIGdyaWRIZWFkZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZEJvZHknKSBncmlkQm9keTogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkQ29uZmlnJywgeyBzdGF0aWM6IHRydWUgfSkgc2RHcmlkQ29uZmlnOiBTZEdyaWRDb25maWc7XHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkUG9wdXBFZGl0b3InKSBzZEdyaWRQb3B1cEVkaXRvcjogU2RHcmlkUG9wdXBFZGl0b3I7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZFBvcHVwRmlsdGVyJykgc2RHcmlkUG9wdXBGaWx0ZXI6IFNkR3JpZFBvcHVwRmlsdGVyO1xyXG4gIEBWaWV3Q2hpbGQoJ21hdFNlbGVjdCcpIG1hdFNlbGVjdDogTWF0U2VsZWN0O1xyXG5cclxuICBAVmlld0NoaWxkKCdzZEdyaWRQb3B1cEV4cG9ydEV4Y2VsJykgc2RHcmlkUG9wdXBFeHBvcnRFeGNlbDogU2RHcmlkUG9wdXBFeHBvcnRFeGNlbDtcclxuICBAVmlld0NoaWxkKCdzZEdyaWRJbXBvcnRFeGNlbCcpIHNkR3JpZEltcG9ydEV4Y2VsOiBTZEdyaWRJbXBvcnRFeGNlbDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZENlbGxEZWZEaXJlY3RpdmUpIGNlbGxEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZENlbGxEZWZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbERlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RDZWxsRGVmRGlyZWN0aXZlXHJcbiAgfSA9IHt9O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZSkgY2VsbEVkaXRvckRlZnMgPSBuZXcgUXVlcnlMaXN0PFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZT4oKTtcclxuICBjZWxsRWRpdG9yRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlKSBjZWxsRm9vdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlPigpO1xyXG4gIGNlbGxGb290ZXJEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZVtdO1xyXG4gIH0gPSB7fTtcclxuICAjbnVtYmVyT2ZGb290ZXJSb3dzID0gMDtcclxuICBmb290ZXJSb3dzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAjcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHNldCBwYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIGlmIChwYWdpbmF0b3IgJiYgdGhpcy4jcGFnaW5hdG9yICE9PSBwYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy4jcGFnaW5hdG9yID0gcGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHBhZ2luYXRvci5wYWdlLnN1YnNjcmliZSh0aGlzLnNlbGVjdFBhZ2UpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBvcHRpb24odmFsdWU6IFNkR3JpZE9wdGlvbikge1xyXG4gICAgdGhpcy5zZXRPcHRpb24odmFsdWUpO1xyXG4gIH1cclxuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICByb3dIYW5kbGVyID0ge1xyXG4gICAgY2xpY2s6IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm9uQ2xpY2tSb3cpIHtcclxuICAgICAgICB0aGlzLmdyaWRPcHRpb24ub25DbGlja1JvdyhpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRibENsaWNrOiAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5vbkRibENsaWNrUm93KSB7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9uLm9uRGJsQ2xpY2tSb3coaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldE9wdGlvbiA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgb3B0aW9uID0gdGhpcy5pbml0Q29uZmlndXJhdGlvbihvcHRpb24pO1xyXG4gICAgb3B0aW9uID0gdGhpcy5pbml0VHJhbnNsYXRlKG9wdGlvbik7XHJcbiAgICBkZWxldGUgdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgLy8gTG/huqFpIGLhu48gbmjhu69uZyBjb21tYW5kIGLhu4sg4bqpblxyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmNvbW1hbmRzID0gdGhpcy5ncmlkT3B0aW9uLmNvbW1hbmRzLmZpbHRlcihjb21tYW5kID0+IHtcclxuICAgICAgY29uc3QgaGlkZGVuID0gY29tbWFuZC5oaWRkZW47XHJcbiAgICAgIGlmIChoaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKGhpZGRlbikgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgcmV0dXJuICFoaWRkZW47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGhpZGRlbikgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiAhaGlkZGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2RHcmlkQ29uZmlnLnNldE9wdGlvbih7XHJcbiAgICAgIGtleTogb3B0aW9uLmtleSxcclxuICAgICAgcGFnZVNpemU6IHRoaXMuZ3JpZE9wdGlvbi5wYWdpbmF0ZS5wYWdlU2l6ZSxcclxuICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnNcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbml0RXh0ZXJuYWxGaWx0ZXIoKTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24gPSAob3B0aW9uOiBTZEdyaWRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IGdyaWRDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgLy8gRmlsdGVyXHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LnR5cGUgJiYgZ3JpZENvbmZpZ3VyYXRpb24/LmZpbHRlcj8udHlwZSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgdHlwZTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnR5cGVcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbi5maWx0ZXIudHlwZSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LmNvbHVtbklubGluZSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5jb2x1bW5JbmxpbmUpIHtcclxuICAgICAgaWYgKCFvcHRpb24uZmlsdGVyKSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlciA9IHtcclxuICAgICAgICAgIGNvbHVtbklubGluZTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLmNvbHVtbklubGluZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci5jb2x1bW5JbmxpbmUgPSBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIuY29sdW1uSW5saW5lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbi5maWx0ZXI/LnF1aWNrRmlsdGVyVmlzaWJpbGl0eSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5xdWlja0ZpbHRlclZpc2liaWxpdHkpIHtcclxuICAgICAgaWYgKCFvcHRpb24uZmlsdGVyKSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlciA9IHtcclxuICAgICAgICAgIHF1aWNrRmlsdGVyVmlzaWJpbGl0eTogZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnF1aWNrRmlsdGVyVmlzaWJpbGl0eVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci5xdWlja0ZpbHRlclZpc2liaWxpdHkgPSBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIucXVpY2tGaWx0ZXJWaXNpYmlsaXR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUcmFuc2xhdGVcclxuICAgIG9wdGlvbi50cmFuc2xhdGUgPSBvcHRpb24udHJhbnNsYXRlID8/IGdyaWRDb25maWd1cmF0aW9uPy50cmFuc2xhdGU7XHJcbiAgICBzd2l0Y2ggKG9wdGlvbi50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2xvY2FsJzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmhhbmRsZXJMb2NhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZG90bmV0JzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmhhbmRsZXJEb3RuZXQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gb3B0aW9uLmhhbmRsZXJDdXN0b20gfHwgZ3JpZENvbmZpZ3VyYXRpb24/LmhhbmRsZXJDdXN0b207XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhbmRsZXIpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhgSGFuZGxlciBjdXN0b20gd2FzIG5vdCBmb3VuZGApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB7IC4uLmRlZmF1bHRHcmlkT3B0aW9uLCAuLi5vcHRpb24gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFRyYW5zbGF0ZSA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIG9wdGlvbi5jb21tYW5kcz8uZm9yRWFjaChjb21tYW5kID0+IHtcclxuICAgICAgaWYgKCFvcHRpb24udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgKGNvbW1hbmQudGl0bGUpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbW1hbmQudGl0bGUgPSB0cmFuc2xhdGUoY29tbWFuZC50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCdjaGlsZHJlbicgaW4gY29tbWFuZCkge1xyXG4gICAgICAgIGNvbW1hbmQuY2hpbGRyZW4/LmZvckVhY2goY2hpbGRDb21tYW5kID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGNoaWxkQ29tbWFuZC50aXRsZSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29tbWFuZC50aXRsZSA9IHRyYW5zbGF0ZShjaGlsZENvbW1hbmQudGl0bGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9wdGlvbi5jb2x1bW5zPy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHJhbnNsYXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9uLnRyYW5zbGF0ZSB8fCBjb2x1bW4udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgY29sdW1uLnRpdGxlID0gdHJhbnNsYXRlKGNvbHVtbi50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgY29sdW1uPy5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHJhbnNsYXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnRyYW5zbGF0ZSB8fCBjaGlsZENvbHVtbi50cmFuc2xhdGUpIHtcclxuICAgICAgICAgICAgY2hpbGRDb2x1bW4udGl0bGUgPSB0cmFuc2xhdGUoY2hpbGRDb2x1bW4udGl0bGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycz8uZm9yRWFjaChleHRlcm5hbEZpbHRlciA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXIudGl0bGUgPSB0cmFuc2xhdGUoZXh0ZXJuYWxGaWx0ZXIudGl0bGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvcHRpb247XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoR1JJRF9DT05GSUcpIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWd1cmF0aW9uOiBJR3JpZENvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGhhbmRsZXJMb2NhbDogSGFuZGxlckxvY2FsLFxyXG4gICAgcHJpdmF0ZSBoYW5kbGVyRG90bmV0OiBIYW5kbGVyRG90bmV0LFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBTZFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgbG9hZGluZ1NlcnZpY2U6IFNkTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFNkQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhjZWxTZXJ2aWNlOiBTZEV4Y2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0b3JWaXNpYmxlUGlwZTogRWRpdG9ySGFuZGxlclBpcGUpIHtcclxuICAgIHRoaXMuaXNNb2JpbGVPclRhYmxldCA9ICFkZXZpY2VTZXJ2aWNlLmlzRGVza3RvcCgpO1xyXG4gICAgLy8gdGhpcy5yZWYuZGV0YWNoKCk7XHJcbiAgICAvLyBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgLy8gfSwgMTAwMCk7XHJcbiAgICAvLyByZWYuZGV0YWNoKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZml4ZWRIZWFkZXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmaXhlZEhlYWRlcnMgPSB0aGlzLmZpeGVkSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgaWYgKGZpeGVkSGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRIZWFkZXJzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkSGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5jc3MoeyBsZWZ0IH0pO1xyXG4gICAgICAgICAgICBsZWZ0ICs9ICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChtZXJnZSh0aGlzLmZpeGVkQm9kaWVzLmNoYW5nZXMsIHRoaXMuY2VsbEZvb3RlckRlZnMuY2hhbmdlcykucGlwZShzdGFydFdpdGgoe30pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmaXhlZEJvZGllcyA9IHRoaXMuZml4ZWRCb2RpZXMudG9BcnJheSgpO1xyXG4gICAgICAgIGlmIChmaXhlZEJvZGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmaXhlZFBlclJvdyA9IHRoaXMuZml4ZWRCb2RpZXMubGVuZ3RoIC8gKHRoaXMudmlld0l0ZW1zLmxlbmd0aCArIHRoaXMuI251bWJlck9mRm9vdGVyUm93cyk7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRCb2RpZXNbMF0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZml4ZWRCb2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgJSBmaXhlZFBlclJvdyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGxlZnQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoZml4ZWRCb2RpZXNbaV0ubmF0aXZlRWxlbWVudCkuY3NzKHsgbGVmdCB9KTtcclxuICAgICAgICAgICAgbGVmdCArPSAkKGZpeGVkQm9kaWVzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpeGVkSGVhZGVycyA9IHRoaXMuZml4ZWRIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgICAgICBpZiAoZml4ZWRIZWFkZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBsZWZ0ID0gJChmaXhlZEhlYWRlcnNbMF0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZml4ZWRIZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLmNzcyh7IGxlZnQgfSk7XHJcbiAgICAgICAgICAgIGxlZnQgKz0gJChmaXhlZEhlYWRlcnNbaV0ubmF0aXZlRWxlbWVudCkub3V0ZXJXaWR0aCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbERlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbERlZiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxEZWYgb2YgdGhpcy5jZWxsRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRGVmLnNkQ2VsbERlZikge1xyXG4gICAgICAgICAgdGhpcy5jZWxsRGVmW2NlbGxEZWYuc2RDZWxsRGVmXSA9IGNlbGxEZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbEVkaXRvckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbEVkaXRvckRlZiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxFZGl0b3JEZWYgb2YgdGhpcy5jZWxsRWRpdG9yRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRWRpdG9yRGVmLnNkQ2VsbEVkaXRvckRlZikge1xyXG4gICAgICAgICAgdGhpcy5jZWxsRWRpdG9yRGVmW2NlbGxFZGl0b3JEZWYuc2RDZWxsRWRpdG9yRGVmXSA9IGNlbGxFZGl0b3JEZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuY2VsbEZvb3RlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2VsbEZvb3RlckRlZiA9IHt9O1xyXG4gICAgICB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MgPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGxGb290ZXJEZWYgb2YgdGhpcy5jZWxsRm9vdGVyRGVmcykge1xyXG4gICAgICAgIGlmIChjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZikge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2VsbEZvb3RlckRlZltjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZl0gPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2VsbEZvb3RlckRlZltjZWxsRm9vdGVyRGVmLnNkQ2VsbEZvb3RlckRlZl0ucHVzaChjZWxsRm9vdGVyRGVmKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLmxlbmd0aCA+IHRoaXMuI251bWJlck9mRm9vdGVyUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MgPSB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb290ZXJSb3dzID0gQXJyYXkodGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzKS5maWxsKDApLm1hcCgodiwgaSkgPT4gaSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKGdyaWRJdGVtcz86IGFueVtdKSA9PiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSAodGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IDUwO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlICE9PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlciBhcyBJSGFuZGxlclNlcnZlcjtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBoYW5kbGVyLm1hcFJlcXVlc3QodGhpcy5nZXRGaWx0ZXJJbmZvKGN1cnJlbnRQYWdlLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLmZpbHRlcihrZXkgPT4gZmlsdGVyW2tleV0gIT09IG51bGwgJiYgZmlsdGVyW2tleV0gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4ga2V5ICsgJz0nICsgZmlsdGVyW2tleV0pLmpvaW4oJyYnKTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ3JpZE9wdGlvbi51cmwuaW5jbHVkZXMoJz8nKSA/IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9JiR7cXVlcnlTdHJpbmd9YCA6IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9PyR7cXVlcnlTdHJpbmd9YDtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldCh1cmwpO1xyXG4gICAgICAgICAgY29uc3QgeyBpdGVtcywgdG90YWwgfSA9IGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHRoaXMuZ3JpZE9wdGlvbi51cmwsIGZpbHRlcik7XHJcbiAgICAgICAgICBjb25zdCB7IGl0ZW1zLCB0b3RhbCB9ID0gaGFuZGxlci5tYXBSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJMb2NhbDtcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmdyaWRPcHRpb24uaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxJdGVtcyA9IGdyaWRJdGVtcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5pdGVtcyA9IGdyaWRJdGVtcyB8fCB0aGlzLmdyaWRPcHRpb24uaXRlbXM7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gaGFuZGxlci5maWx0ZXIodGhpcy5sb2NhbEl0ZW1zLCB7XHJcbiAgICAgICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLFxyXG4gICAgICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcclxuICAgICAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICAgICAgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwYWdlU2l6ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICB0aGlzLnRvdGFsID0gcmVzcG9uc2UudG90YWw7XHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5vcmlnaW5JdGVtID0geyAuLi5pdGVtIH0pO1xyXG4gICAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLiNzZXRTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ3JpZE9wdGlvbj8ub25SZWxvYWRDb21wbGV0ZWQ/Lih0aGlzLml0ZW1zKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVZpZXdJdGVtcygpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFuZGxlcnMoKTtcclxuICAgICAgJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLnNjcm9sbFRvcCgwKTtcclxuICAgICAgaWYgKGN1cnJlbnRQYWdlID4gMSAmJiAhdGhpcy52aWV3SXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuI3BhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbG9hZEl0ZW0oZGF0YTogeyBbaWQ6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZChlID0+ICEhZS5pZCAmJiBlLmlkID09PSBpZCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGRhdGFbaWRdW2NvbHVtbi5maWVsZF0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gIT09IGRhdGFbaWRdW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibGluayhpdGVtLCBjb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgZGF0YVtpZF0pO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuc3RvcEJsaW5rKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBibGluayhpdGVtOiBHcmlkSXRlbSwgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaXRlbS5ibGlua2VyID0gaXRlbS5ibGlua2VyIHx8IHt9O1xyXG4gICAgaXRlbS5ibGlua2VyW2ZpZWxkXSA9IHRydWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RvcEJsaW5rKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5ibGlua2VyID0ge307XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMTUwMCk7XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVmlld0l0ZW1zKCkge1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSAodGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IDUwO1xyXG4gICAgZGVsZXRlIHRoaXMudmlld0l0ZW1zO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemVcclxuICAgICAgICAgICYmIGluZGV4IDwgY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmJsaW5rZXIgPSBpdGVtLmJsaW5rZXIgfHwge307XHJcbiAgICAgIGl0ZW0uc3ViSW5mb3JtYXRpb24gPSBpdGVtLnN1YkluZm9ybWF0aW9uIHx8IHt9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZWRpdGVkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5vcmlnaW5JdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGl0ZW0ub3JpZ2luSXRlbSkuc29tZShrZXkgPT4gaXRlbS5vcmlnaW5JdGVtW2tleV0gIT09IGl0ZW1ba2V5XSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLnJlc3VsdCB9ID0gaXRlbTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UGFnZSA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnJlbG9hZCh0aGlzLmxvY2FsSXRlbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpbHRlciA9IChwYXJhbT86IHsgZmlsdGVyOiBhbnksIGV4dGVybmFsRmlsdGVyOiBhbnkgfSkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXIgPSBwYXJhbT8uZmlsdGVyIHx8IHRoaXMuZmlsdGVyO1xyXG4gICAgdGhpcy5leHRlcm5hbEZpbHRlciA9IHBhcmFtPy5leHRlcm5hbEZpbHRlciB8fCB0aGlzLmV4dGVybmFsRmlsdGVyO1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgdGhpcy5yZWxvYWQodGhpcy5sb2NhbEl0ZW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIENoZWNrYWJsZVxyXG5cclxuICAjc2V0U2VsZWN0ZWRJdGVtcyA9ICgpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQpXHJcbiAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB0ZW1wb3JhcnksXHJcbiAgICAgICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICAgIGVkaXRpbmdTdGF0dXMsXHJcbiAgICAgICAgICBpc0NoZWNrZWQsXHJcbiAgICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICAgIGJsaW5rZXIsXHJcbiAgICAgICAgICAuLi5yZXN1bHQgfSA9IGl0ZW07XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrID0gKGl0ZW06IEdyaWRJdGVtLCBpc0NoZWNrYm94PzogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmdyaWRPcHRpb24uY2hlY2thYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXNDaGVja2JveCkge1xyXG4gICAgICBpdGVtLmlzQ2hlY2tlZCA9ICFpdGVtLmlzQ2hlY2tlZDtcclxuICAgIH1cclxuICAgIHRoaXMuaXNDaGVja2VkQWxsID0gdGhpcy5pdGVtcy5sZW5ndGggPT09IHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc0NoZWNrZWQpLmxlbmd0aDtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrPy4odGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlLmlzQ2hlY2tlZCksIGl0ZW0pO1xyXG4gICAgdGhpcy4jc2V0U2VsZWN0ZWRJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGwoaXNDaGVja2VkQWxsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IGlzQ2hlY2tlZEFsbDtcclxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWRBbGwpO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrKSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNoZWNrKHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQpKTtcclxuICAgIH1cclxuICAgIHRoaXMuI3NldFNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gU29ydFxyXG4gIHNvcnQgPSAoY29sdW1uOiBTZEdyaWRDb2x1bW4pID0+IHtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3J0YWJsZSA9IHRoaXMuZ3JpZE9wdGlvbi5zb3J0YWJsZSA/PyB0cnVlO1xyXG4gICAgY29uc3QgY29sdW1uU29ydGFibGUgPSBjb2x1bW4uc29ydGFibGUgPz8gdHJ1ZTtcclxuICAgIGlmICghc29ydGFibGUgfHwgIWNvbHVtblNvcnRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9yZGVyQnkgPT09IGNvbHVtbi5maWVsZCkge1xyXG4gICAgICB0aGlzLm9yZGVyRGlyZWN0aW9uID0gdGhpcy5vcmRlckRpcmVjdGlvbiA9PT0gJ0FTQycgPyAnREVTQycgOiAnQVNDJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3JkZXJCeSA9IGNvbHVtbi5maWVsZDtcclxuICAgICAgdGhpcy5vcmRlckRpcmVjdGlvbiA9ICdBU0MnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKHRoaXMubG9jYWxJdGVtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8gI3JlZ2lvbiBSZXNpemUgR3JpZFxyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmhlaWdodCkge1xyXG4gICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5ncmlkT3B0aW9uLmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt3aW5kb3cuaW5uZXJIZWlnaHQgLSAzMDB9cHhgO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIEzhuqV5IG9mZnNldCB0b3AgxJHhu4MgxJFp4buBdSBjaOG7iW5oIGvDrWNoIHRoxrDhu5tjIEdyaWQgduG7q2EgduG7m2kgbcOgbiBow6xuaFxyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgLy8gY29uc3QgdG9wID0gJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLnRvcDtcclxuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmdyaWRPcHRpb24uaGlkZUZvb3RlciA/IDAgOiAodGhpcy5pc01vYmlsZU9yVGFibGV0ID8gNDUgOiA1NSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgNTAwKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KGhlaWdodD86IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbXBvcnQsIEV4cG9ydCwgQ29uZmlnXHJcblxyXG4gIGxvYWRDb25maWcoY29uZmlnUmVzdWx0OiBDb25maWdSZXN1bHQpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5wYWdpbmF0ZS5wYWdlU2l6ZSA9IGNvbmZpZ1Jlc3VsdC5wYWdlU2l6ZTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zID0gY29uZmlnUmVzdWx0LmNvbHVtbnM7XHJcbiAgICB0aGlzLmZpeGVkQ29sdW1ucyA9IGNvbmZpZ1Jlc3VsdC5maXhlZENvbHVtbnM7XHJcbiAgICB0aGlzLm5vcm1hbENvbHVtbnMgPSBjb25maWdSZXN1bHQubm9ybWFsQ29sdW1ucztcclxuICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmZpeGVkQ29sdW1ucywgLi4udGhpcy5ub3JtYWxDb2x1bW5zXTtcclxuICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgdGhpcy5pbml0RGljdGlvbmFyeUNvbHVtblZhbHVlcygpO1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZpbHRlcigpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgLy8gR8OhbiBnacOhIHRy4buLIGZpbHRlciBt4bq3YyDEkeG7i25oIGNobyB04burbmcgY+G7mXRcclxuICAgICAgdGhpcy5maWx0ZXJbY29sdW1uLmZpZWxkXSA9IHRoaXMuZmlsdGVyW2NvbHVtbi5maWVsZF0gPz8gJyc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdERpY3Rpb25hcnlDb2x1bW5WYWx1ZXMoKSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICBjb2x1bW4uZGljdGlvbmFyeSA9IHt9O1xyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVzKSB7XHJcbiAgICAgICAgICBjb2x1bW4udmFsdWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5kaWN0aW9uYXJ5W2UudmFsdWUudG9TdHJpbmcoKV0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgIGljb246IGUuaWNvbixcclxuICAgICAgICAgICAgICBjb2xvcjogZS5jb2xvcixcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGUuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uLmRpY3Rpb25hcnkgPSB7fTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgIGNoaWxkQ29sdW1uLnZhbHVlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDb2x1bW4uZGljdGlvbmFyeVtlLnZhbHVlLnRvU3RyaW5nKCldID0ge1xyXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgIGljb246IGUuaWNvbixcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUVkaXRvckhhbmRsZXJzKCkge1xyXG4gICAgdGhpcy52aWV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW06IEdyaWRJdGVtKSB7XHJcbiAgICAvLyBpdGVtLmVkaXRvckhhbmRsZXIgPSBpdGVtLmVkaXRvckhhbmRsZXIgfHwge307XHJcbiAgICB0aGlzLmVkaXRvclZpc2libGVQaXBlLnRyYW5zZm9ybShudWxsLCBpdGVtLCB0aGlzLmdyaWRPcHRpb24pO1xyXG4gIH1cclxuICB0cmFja0J5SWQoaW5kZXgsIGl0ZW0pIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRmlsdGVyaW5nKCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXIpLnNvbWUodmFsdWUgPT4gISF2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlclBvcHVwKCkge1xyXG4gICAgY29uc3QgZjEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcik7XHJcbiAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZXh0ZXJuYWxGaWx0ZXIpO1xyXG4gICAgY29uc3QgZmlsdGVyID0gSlNPTi5wYXJzZShmMSk7XHJcbiAgICBjb25zdCBleHRlcm5hbEZpbHRlciA9IEpTT04ucGFyc2UoZjIpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5vcGVuKHRoaXMuZml4ZWRDb2x1bW5zLCB0aGlzLm5vcm1hbENvbHVtbnMsIGZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyID0ge307XHJcbiAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0ge307XHJcbiAgICB0aGlzLmluaXRGaWx0ZXIoKTtcclxuICAgIHRoaXMuaW5pdEV4dGVybmFsRmlsdGVyKCk7XHJcbiAgICBpZiAodGhpcy5zZEdyaWRQb3B1cEZpbHRlcikge1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyLmZpbHRlciA9IHRoaXMuZmlsdGVyO1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyLmV4dGVybmFsRmlsdGVyID0gdGhpcy5leHRlcm5hbEZpbHRlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kT3JDb2xsYXBzZSA9IGFzeW5jIChncmlkSXRlbTogR3JpZEl0ZW0pID0+IHtcclxuICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICBlZGl0b3JIYW5kbGVyLFxyXG4gICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICBpc0NoZWNrZWQsXHJcbiAgICAgIHN1YkluZm9ybWF0aW9uLFxyXG4gICAgICAuLi5pdGVtIH0gPSBncmlkSXRlbTtcclxuICAgIGlmICghdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChncmlkSXRlbS5zdWJJbmZvcm1hdGlvbj8uaXNPcGVuZWQpIHtcclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5sYXp5TG9hZGluZyAmJiAhZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24/LmlzTG9hZGVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMgPSBhd2FpdCB0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ub25Mb2FkKGl0ZW0pO1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcykpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5hbGVydC53YXJuaW5nKGBEYXRhIGlzIG5vdCBhbiBhcnJheWApO1xyXG4gICAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5sYXp5TG9hZGluZyA9PT0gZmFsc2UgJiYgIWdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gZ3JpZEl0ZW1bdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uLmZpZWxkXTtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zKSkge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5hbGVydC53YXJuaW5nKGBEYXRhIGlzIG5vdCBhbiBhcnJheWApO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gW107XHJcbiAgICAgIH1cclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIEVkaXRhYmxlXHJcbiAgb25DcmVhdGUgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB7IHR5cGUsIGVkaXRvciwgY29sdW1ucyB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaWYgKCFlZGl0b3I/LmFkZGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbTogR3JpZEl0ZW0gPSB7fTtcclxuICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXHJcbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZWRpdG9yLm9uQWRkPy4oaXRlbSk7XHJcbiAgICAvLyDEkMawYSBpdGVtIGzDqm4gZMOybmcgxJHhuqd1IHRpw6puIG7hur91IHR5cGUga2jDoWMgcG9wdXBcclxuICAgIGlmIChlZGl0b3IudHlwZSAhPT0gJ3BvcHVwJykge1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmlld0l0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMub25VcGRhdGUoaXRlbSwgZmFsc2UpO1xyXG4gIH1cclxuICBvblVwZGF0ZSA9IChpdGVtOiBHcmlkSXRlbSwgaXNNb2RpZmllZD86IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHsgZWRpdG9yLCBjb2x1bW5zIH0gPSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSBpc01vZGlmaWVkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcclxuICAgIGl0ZW0udGVtcG9yYXJ5ID0geyAuLi5pdGVtIH07XHJcbiAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtKTtcclxuICAgIGlmIChlZGl0b3IudHlwZSA9PT0gJ3BvcHVwJykge1xyXG4gICAgICB0aGlzLnNkR3JpZFBvcHVwRWRpdG9yLm9wZW4oaXRlbSwgY29sdW1ucywgaXNNb2RpZmllZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIG9uU2F2ZSA9IGFzeW5jIChpdGVtOiBHcmlkSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGl0ZW0uZWRpdG9ySGFuZGxlci5zYXZpbmcgPSB0cnVlO1xyXG4gICAgICBpZiAoZWRpdG9yLnZhbGlkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRpdG9yLnZhbGlkYXRlKGl0ZW0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVzdWx0O1xyXG4gICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbWVzc2FnZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlZGl0b3Iub25TYXZlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRpdG9yLm9uU2F2ZShpdGVtKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgYXdhaXQgcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGl0ZW0uZWRpdGluZ1N0YXR1cyA9PT0gJ2NyZWF0ZScgJiYgZWRpdG9yLnR5cGUgPT09ICdwb3B1cCcpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGl0ZW0uZWRpdGluZ1N0YXR1cyA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGVycik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBpdGVtLmVkaXRvckhhbmRsZXIuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsID0gKGl0ZW06IEdyaWRJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IGVkaXRvciB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaWYgKGVkaXRvci50eXBlID09PSAnaW5saW5lJykge1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICBjb25zdCBpZHgxID0gdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGlkeDEsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlkeDIgPSB0aGlzLnZpZXdJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoaWR4MiwgMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmVkaXRpbmdTdGF0dXMgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIGlmIChlZGl0b3IudHlwZSAhPT0gJ3BvcHVwJykge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld0l0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBpdGVtLnRlbXBvcmFyeSk7XHJcbiAgICAgIGl0ZW0uZWRpdGluZ1N0YXR1cyA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEV4dGVybmFsRmlsdGVyID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuZXh0ZXJuYWxGaWx0ZXJzLmZvckVhY2goZXh0ZXJuYWxGaWx0ZXIgPT4ge1xyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSBleHRlcm5hbEZpbHRlci5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnZGF0ZXJhbmdlJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2V4dGVybmFsRmlsdGVyLmZpZWxkXSA9IHtcclxuICAgICAgICAgICAgZnJvbTogZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0bzogZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdFRvID8/IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLnR5cGUgPT09ICdkYXRlcmFuZ2VmdWxsJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAndmFsdWVzJykgeyAvLyBhbmRuMVxyXG4gICAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSBleHRlcm5hbEZpbHRlci5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25TZWFyY2ggPSAoc2VhcmNoVmFsdWU6IHN0cmluZywgaXRlbTogR3JpZEl0ZW0sIGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBzZWFyY2hWYWx1ZTtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ29uZmlndXJhdGlvbkxvYWRlZCA9IChwYXJhbTogRmlsdGVyQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5xdWlja0ZpbHRlcnMgPSBwYXJhbS5xdWlja0ZpbHRlcnMgfHwgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIgPSBwYXJhbS5zZWxlY3RlZFF1aWNrRmlsdGVyIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcikge1xyXG4gICAgICBjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMucXVpY2tGaWx0ZXJzLmZpbmQoZSA9PiBlLmNvZGUgPT09IHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcik7XHJcbiAgICAgIGlmIChxdWlja0ZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkocXVpY2tGaWx0ZXIuZmlsdGVyKTtcclxuICAgICAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmV4dGVybmFsRmlsdGVyKTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSB0aGlzLnJlZnJlc2hFeHRlcm5hbEZpbHRlcih0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLCBKU09OLnBhcnNlKGYyKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5saW5lRXh0ZXJuYWwgPSBwYXJhbS5pbmxpbmVFeHRlcm5hbCB8fCB7fTtcclxuICAgIHRoaXMuaW5saW5lQ29sdW1uID0gcGFyYW0uaW5saW5lQ29sdW1uIHx8IHt9O1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0UXVpY2tGaWx0ZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVycy5maW5kKGUgPT4gZS5jb2RlID09PSB2YWx1ZSk7XHJcbiAgICBpZiAocXVpY2tGaWx0ZXI/LmNvZGUpIHtcclxuICAgICAgY29uc3QgZjEgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5maWx0ZXIpO1xyXG4gICAgICBjb25zdCBmMiA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmV4dGVybmFsRmlsdGVyKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gcXVpY2tGaWx0ZXI/LmNvZGU7XHJcbiAgICAgIHRoaXMuZmlsdGVyID0gSlNPTi5wYXJzZShmMSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSB0aGlzLnJlZnJlc2hFeHRlcm5hbEZpbHRlcih0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLCBKU09OLnBhcnNlKGYyKSk7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIgPSAnJztcclxuICAgICAgdGhpcy5vbkNsZWFyRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy51cGRhdGVDb25maWd1cmF0aW9uKHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4cG9ydEl0ZW1zID0gYXN5bmMgKHBhZ2VOdW1iZXI6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSAxMDAwMCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSAhPT0gJ2xvY2FsJykge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJTZXJ2ZXI7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gaGFuZGxlci5tYXBSZXF1ZXN0KHRoaXMuZ2V0RmlsdGVySW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLmZpbHRlcihrZXkgPT4gZmlsdGVyW2tleV0gIT09IG51bGwgJiYgZmlsdGVyW2tleV0gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4ga2V5ICsgJz0nICsgZmlsdGVyW2tleV0pLmpvaW4oJyYnKTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ3JpZE9wdGlvbi51cmwuaW5jbHVkZXMoJz8nKSA/IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9JiR7cXVlcnlTdHJpbmd9YCA6IGAke3RoaXMuZ3JpZE9wdGlvbi51cmx9PyR7cXVlcnlTdHJpbmd9YDtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldCh1cmwpO1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpLml0ZW1zO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHRoaXMuZ3JpZE9wdGlvbi51cmwsIGZpbHRlcik7XHJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlci5tYXBSZXNwb25zZShyZXNwb25zZSkuaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBsb2NhbEl0ZW1zID0gW107XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlciBhcyBJSGFuZGxlckxvY2FsO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuZ3JpZE9wdGlvbi5pdGVtcykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoKTtcclxuICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBsb2NhbEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2FsSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGhhbmRsZXIuZmlsdGVyKGxvY2FsSXRlbXMsIHtcclxuICAgICAgICAgIGN1c3RvbUZpbHRlcjogdGhpcy5ncmlkT3B0aW9uLmZpbHRlci5jdXN0b21GaWx0ZXIsXHJcbiAgICAgICAgICByYXdGaWx0ZXI6IHRoaXMuZmlsdGVyLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsXHJcbiAgICAgICAgICByYXdFeHRlcm5hbEZpbHRlcjogdGhpcy5leHRlcm5hbEZpbHRlcixcclxuICAgICAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy5ncmlkT3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5LFxyXG4gICAgICAgICAgb3JkZXJEaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24sXHJcbiAgICAgICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmZvID0gKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFNkR3JpZEZpbHRlckluZm8gPT4ge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZmlsdGVyW2tleV0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyW2tleV0gPSB0aGlzLmZpbHRlcltrZXldLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5leHRlcm5hbEZpbHRlcikpIHtcclxuICAgICAgaWYgKHR5cGVvZiAodGhpcy5leHRlcm5hbEZpbHRlcltrZXldKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2tleV0gPSB0aGlzLmV4dGVybmFsRmlsdGVyW2tleV0udHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICByYXdGaWx0ZXI6IHRoaXMuZmlsdGVyLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy5ncmlkT3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICBvcmRlckJ5OiB0aGlzLm9yZGVyQnksXHJcbiAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICBwYWdlU2l6ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0QnlUZW1wbGF0ZSA9IGFzeW5jIChwYXJhbXM6IHsgZXhjZWxDb25maWc6IEV4Y2VsQ29uZmlnLCBleGNlbENvbHVtbnM6IEV4Y2VsVGVtcGF0ZUNvbHVtbltdIH0pID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGxldCBleHBvcnRJdGVtcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy5nZXRGaWx0ZXJJbmZvKDEsIDEwMDAwKSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydEl0ZW1zKCkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lm1hcHBpbmcpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQubWFwcGluZyhleHBvcnRJdGVtcywgcGFyYW1zLmV4Y2VsQ29uZmlnLm5hbWUpO1xyXG4gICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXhwb3J0SXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLCAuLi4odGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uY29sdW1ucyB8fCBbXSldO1xyXG4gICAgY29uc3QgaXRlbXMgPSBleHBvcnRJdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IChjb2x1bW46IFNkR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50cmFuc2Zvcm0pIHtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbHVtbi50eXBlID09PSAnY29sb3InKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50cnVlVmFsdWUgfHwgJ1RydWUnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uZmFsc2VWYWx1ZSB8fCAnRmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGV0aW1lIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgLy8gTuG6v3UgbMOgIHRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdISDptbTpzcycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgdmFsdWVzIHRow6wgbOG6pXkgZ2nDoSB0cuG7iyBj4bunYSB2YWx1ZSDEkcaw4bujYyBjaOG7jW5cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjb2x1bW4udmFsdWVzLmZpbmQoZSA9PiBlLnZhbHVlID09PSBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBkYXRhLnRleHQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gY29sdW1uLnZhbHVlcy5maW5kKGUgPT4gZVtjb2x1bW4udmFsdWVGaWVsZF0gPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGRhdGFbY29sdW1uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmV4Y2VsU2VydmljZS5nZW5lcmF0ZUV4Y2VsRGF0YUJ5VGVtcGxhdGUocGFyYW1zLmV4Y2VsQ29uZmlnLmZ1bGxQYXRoLCBwYXJhbXMuZXhjZWxDb2x1bW5zLCBpdGVtcywgcGFyYW1zLmV4Y2VsQ29uZmlnLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgYmlnRXhwb3J0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSAxMDAwO1xyXG4gICAgbGV0IHBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIGxldCBmaWxlUGF0aDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgbGF0ZXN0Um93ID0gMDtcclxuICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXMpIHtcclxuICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy5nZXRGaWx0ZXJJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0SXRlbXMocGFnZU51bWJlciwgcGFnZVNpemUpLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lm1hcHBpbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Lm1hcHBpbmcoZXhwb3J0SXRlbXMpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmdyaWRPcHRpb24uY29sdW1ucywgLi4uKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/LmNvbHVtbnMgfHwgW10pXTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGV4cG9ydEl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoY29sdW1uOiBTZEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udHJhbnNmb3JtKGl0ZW1bY29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICdjb2xvcicpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRydWVWYWx1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLmZhbHNlVmFsdWUgfHwgJ0ZhbHNlJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCBkYXRlIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXkgSEg6bW06c3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIHRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIHZhbHVlcyB0aMOsIGzhuqV5IGdpw6EgdHLhu4sgY+G7p2EgdmFsdWUgxJHGsOG7o2MgY2jhu41uXHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNvbHVtbi52YWx1ZXMuZmluZChlID0+IGUudmFsdWUgPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YS50ZXh0O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gY29sdW1uLnZhbHVlcy5maW5kKGUgPT4gZVtjb2x1bW4udmFsdWVGaWVsZF0gPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YVtjb2x1bW4uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGhhbmRsZSk7XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLmJpZ0V4cG9ydCh7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBsYXRlc3RSb3csXHJcbiAgICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGF0ZXN0Um93ID0gcmVzdWx0LmxhdGVzdFJvdztcclxuICAgICAgICBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgICBkZXN0aW5hdGlvbiA9IHJlc3VsdC5kZXN0aW5hdGlvbjtcclxuICAgICAgICBpZiAoKHBhZ2VOdW1iZXIgLSAxKSAqIHBhZ2VTaXplICsgaXRlbXMubGVuZ3RoID49IHRoaXMudG90YWwpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLmRvd25sb2FkKGZpbGVQYXRoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWdlTnVtYmVyKys7XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGludmFsaWRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuZWRpdG9ySGFuZGxlcj8uZXJyb3JNZXNzYWdlKS5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbSxcclxuICAgICAgICBtZXNzYWdlOiBlLmVkaXRvckhhbmRsZXIuZXJyb3JNZXNzYWdlXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBncmlkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRvckNoYW5nZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgb25TZWxlY3RQYWdlU2l6ZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVmcmVzaEV4dGVybmFsRmlsdGVyID0gKGV4dGVybmFsRmlsdGVyczogU2RHcmlkRXh0ZXJuYWxGaWx0ZXJbXSwgZXh0ZXJuYWxGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXIgPSBleHRlcm5hbEZpbHRlciB8fCB7fTtcclxuICAgIGV4dGVybmFsRmlsdGVycyA9IGV4dGVybmFsRmlsdGVycyB8fCBbXTtcclxuICAgIGV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IHtcclxuICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy5mcm9tID8/IGUuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy50byA/PyBlLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZWZ1bGwnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IChleHRlcm5hbEZpbHRlcltlLmZpZWxkXSB8fCBlLmRlZmF1bHQpID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBvbkNyZWF0ZVF1aWNrRmlsdGVyID0gKGV2PzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25DcmVhdGVRdWlja0ZpbHRlcihldik7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRRdWlja0ZpbHRlciA9IChldjogRXZlbnQsIHF1aWNrRmlsdGVyPzogUXVpY2tGaWx0ZXIpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25FZGl0UXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUXVpY2tGaWx0ZXIgPSAoZXY6IEV2ZW50LCBxdWlja0ZpbHRlcj86IFF1aWNrRmlsdGVyKSA9PiB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdD8uY2xvc2UoKTtcclxuICAgIHRoaXMub25GaWx0ZXJQb3B1cCgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8uY2xvc2UoKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXI/Lm9uRGVsZXRlUXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcbn1cclxuIl19