@sbb-esta/lyne-elements-dev 4.12.1-dev.1778136187 → 4.12.1-dev.1778146170

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 (272) hide show
  1. package/custom-elements.json +2458 -2451
  2. package/development/accordion.component-CGTwcntz.js +1 -1
  3. package/development/action-group.component-DQ7_kjB9.js +1 -1
  4. package/development/alert-group.component-DnnPrv5I.js +1 -1
  5. package/development/alert.component-CYb1vnDZ.js +1 -1
  6. package/development/autocomplete/autocomplete.component.js +1 -1
  7. package/development/autocomplete-base-element-BpCpYcX9.js +1 -1
  8. package/development/block-link-common-COY1RI1I.js +1 -1
  9. package/development/breadcrumb-group.component-DZslNBlB.js +1 -1
  10. package/development/breadcrumb.component-DxSUxLZO.js +1 -1
  11. package/development/button/accent-button/accent-button.component.js +1 -1
  12. package/development/button/accent-button-link/accent-button-link.component.js +1 -1
  13. package/development/button/accent-button-static/accent-button-static.component.js +1 -1
  14. package/development/button/button/button.component.js +1 -1
  15. package/development/button/button-link/button-link.component.js +1 -1
  16. package/development/button/button-static/button-static.component.js +1 -1
  17. package/development/button/mini-button/mini-button.component.js +1 -1
  18. package/development/button/secondary-button/secondary-button.component.js +1 -1
  19. package/development/button/secondary-button-link/secondary-button-link.component.js +1 -1
  20. package/development/button/secondary-button-static/secondary-button-static.component.js +1 -1
  21. package/development/button/transparent-button/transparent-button.component.js +1 -1
  22. package/development/button/transparent-button-link/transparent-button-link.component.js +1 -1
  23. package/development/button/transparent-button-static/transparent-button-static.component.js +1 -1
  24. package/development/button-common-7dmrUx4A.js +1 -1
  25. package/development/calendar/calendar-month/calendar-month.component.js +1 -1
  26. package/development/calendar/calendar-weekday/calendar-weekday.component.js +1 -1
  27. package/development/calendar/calendar-weeknumber/calendar-weeknumber.component.js +1 -1
  28. package/development/calendar/calendar-year/calendar-year.component.js +1 -1
  29. package/development/calendar-cell-base-element-BXohfDSl.js +1 -1
  30. package/development/calendar-day.component-DFvRrp2O.js +1 -1
  31. package/development/calendar.component-Dg3D2A7k.js +1 -1
  32. package/development/card/card-button/card-button.component.js +1 -1
  33. package/development/card/card-link/card-link.component.js +1 -1
  34. package/development/card-action-common-1FDHbfeR.js +1 -1
  35. package/development/card-badge.component-CUZIoVbL.js +1 -1
  36. package/development/card.component-DsqIZC_u.js +1 -1
  37. package/development/carousel-item.component-CIgUJtDJ.js +1 -1
  38. package/development/carousel-list.component-L-nYpHcN.js +1 -1
  39. package/development/carousel.component-Dl48ROSf.js +1 -1
  40. package/development/checkbox-common-Dd5uup8K.js +1 -1
  41. package/development/checkbox-group/checkbox-group.component.js +1 -1
  42. package/development/checkbox-panel/checkbox-panel.component.js +1 -1
  43. package/development/checkbox.component-CFZrwUTA.js +1 -1
  44. package/development/chip-group.component-BVfHWX2-.js +1 -1
  45. package/development/chip-label.component-DU8s-hfA.js +1 -1
  46. package/development/chip.component-C6v1-PLX.js +1 -1
  47. package/development/clock.component-CVPv4mCp.js +1 -1
  48. package/development/compact-paginator.component-5_Q2Reul.js +1 -1
  49. package/development/container.component-CG_i65Op.js +1 -1
  50. package/development/core/a11y/arrow-navigation.js +1 -1
  51. package/development/core/a11y/fake-event-detection.js +1 -1
  52. package/development/core/a11y/focus-trap-controller.js +1 -1
  53. package/development/core/a11y/focus-visible-within-controller.js +1 -1
  54. package/development/core/a11y/input-modality-detector.js +1 -1
  55. package/development/core/a11y/interactivity-checker.js +1 -1
  56. package/development/core/a11y/live-announcer.js +1 -1
  57. package/development/core/base-elements/action-base-element.js +1 -1
  58. package/development/core/base-elements/button-base-element.js +1 -1
  59. package/development/core/base-elements/element.js +1 -1
  60. package/development/core/base-elements/link-base-element.js +1 -1
  61. package/development/core/base-elements/open-close-base-element.js +1 -1
  62. package/development/core/config/config.js +1 -1
  63. package/development/core/controllers/escapable-overlay-controller.js +1 -1
  64. package/development/core/controllers/id-reference-controller.js +1 -1
  65. package/development/core/controllers/inert-controller.js +1 -1
  66. package/development/core/controllers/language-controller.js +1 -1
  67. package/development/core/controllers/media-matchers-controller.js +1 -1
  68. package/development/core/controllers/overlay-position-controller.js +1 -1
  69. package/development/core/controllers/property-watcher-controller.js +1 -1
  70. package/development/core/controllers/slot-state-controller.js +1 -1
  71. package/development/core/datetime/date-adapter.js +1 -1
  72. package/development/core/datetime/native-date-adapter.js +1 -1
  73. package/development/core/datetime/temporal-date-adapter.js +1 -1
  74. package/development/core/decorators/force-type.js +1 -1
  75. package/development/core/decorators/get-override.js +1 -1
  76. package/development/core/decorators/handle-distinct-change.js +1 -1
  77. package/development/core/decorators/host-attributes.js +1 -1
  78. package/development/core/decorators/id-reference.js +1 -1
  79. package/development/core/decorators/omit-empty-converter.js +1 -1
  80. package/development/core/decorators/plain-date.js +1 -1
  81. package/development/core/dom/animation.js +1 -1
  82. package/development/core/dom/contains-pierce-shadow-dom.js +1 -1
  83. package/development/core/dom/lean-context.js +1 -1
  84. package/development/core/dom/platform.js +1 -1
  85. package/development/core/dom/queue-dom-content-loaded.js +1 -1
  86. package/development/core/dom/scroll.js +1 -1
  87. package/development/core/dom/set-or-remove-attribute.js +1 -1
  88. package/development/core/eventing/composed-path-has-attribute.js +1 -1
  89. package/development/core/eventing/event-target.js +1 -1
  90. package/development/core/eventing/form-element-handlers.js +1 -1
  91. package/development/core/eventing/forward-event.js +1 -1
  92. package/development/core/eventing/is-event-prevented.js +1 -1
  93. package/development/core/eventing/throttle.js +1 -1
  94. package/development/core/i18n/i18n.js +1 -1
  95. package/development/core/mixins/animation-complete-mixin.js +1 -1
  96. package/development/core/mixins/disabled-mixin.js +1 -1
  97. package/development/core/mixins/element-internals-mixin.js +1 -1
  98. package/development/core/mixins/form-associated-checkbox-mixin.js +1 -1
  99. package/development/core/mixins/form-associated-input-mixin.js +1 -1
  100. package/development/core/mixins/form-associated-mixin.js +1 -1
  101. package/development/core/mixins/form-associated-radio-button-mixin.js +1 -1
  102. package/development/core/mixins/hydration-mixin.js +1 -1
  103. package/development/core/mixins/named-slot-list-mixin.js +1 -1
  104. package/development/core/mixins/negative-mixin.js +1 -1
  105. package/development/core/mixins/readonly-mixin.js +1 -1
  106. package/development/core/mixins/required-mixin.js +1 -1
  107. package/development/core/mixins/selection-panel-mixin.js +1 -1
  108. package/development/core/mixins/update-scheduler-mixin.js +1 -1
  109. package/development/core/overlay/overlay-option-panel.js +1 -1
  110. package/development/core/overlay/overlay-outside-pointer-event-listener.js +1 -1
  111. package/development/core/overlay/overlay-trigger-attributes.js +1 -1
  112. package/development/core/overlay/overlay.js +1 -1
  113. package/development/core/overlay/position.js +1 -1
  114. package/development/core/testing/event-spy.js +1 -1
  115. package/development/core/testing/mocha-extensions.js +1 -1
  116. package/development/core/testing/wait-for-condition.js +1 -1
  117. package/development/core/testing/wait-for-image-ready.js +1 -1
  118. package/development/core/testing/wait-for-render.js +1 -1
  119. package/development/date-input.component-UP1afzgy.js +1 -1
  120. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +1 -1
  121. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +1 -1
  122. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +1 -1
  123. package/development/datepicker-button-CUPeoQgH.js +1 -1
  124. package/development/datepicker.component-D2DxFng_.js +1 -1
  125. package/development/dialog-actions.component-CegGvLGp.js +1 -1
  126. package/development/dialog-close-button.component-C4P-8J8j.js +1 -1
  127. package/development/dialog-content.component-bm8piC0O.js +1 -1
  128. package/development/dialog-title.component-CUAbFzCr.js +1 -1
  129. package/development/dialog.component-DKuR4u-y.js +1 -1
  130. package/development/divider.component-Bisnf286.js +1 -1
  131. package/development/error.component-OBpWoVRL.js +1 -1
  132. package/development/expansion-panel-content.component-XIsKm8JD.js +1 -1
  133. package/development/expansion-panel-header.component-C1xRGcAN.js +1 -1
  134. package/development/expansion-panel.component-CV_IuWZA.js +1 -1
  135. package/development/file-selector/file-selector/file-selector.component.js +1 -1
  136. package/development/file-selector-common-C7xIEiV4.js +1 -1
  137. package/development/file-selector-dropzone.component-BAWMZW4F.js +1 -1
  138. package/development/flip-card-details.component-iMm7NrgQ.js +1 -1
  139. package/development/flip-card-summary.component-HQ_VAn2j.js +1 -1
  140. package/development/flip-card.component-CJanLtkJ.js +1 -1
  141. package/development/footer.component-BmDkxYW9.js +1 -1
  142. package/development/form-field/form-field-clear/form-field-clear.component.js +1 -1
  143. package/development/form-field/form-field-text-counter/form-field-text-counter.component.js +1 -1
  144. package/development/form-field.component-BU3Sv2mD.js +1 -1
  145. package/development/header/header-button/header-button.component.js +1 -1
  146. package/development/header/header-link/header-link.component.js +1 -1
  147. package/development/header-action-common-MTYV0dqA.js +1 -1
  148. package/development/header-environment.component-DHqoX_lg.js +1 -1
  149. package/development/header.component-CWJ36jF0.js +1 -1
  150. package/development/hint.component-DUtL0RS3.js +1 -1
  151. package/development/icon/icon-name-mixin.js +1 -1
  152. package/development/icon/icon-request.js +1 -1
  153. package/development/icon/icon-validate.js +1 -1
  154. package/development/icon/icon.component.js +1 -1
  155. package/development/icon-base-DHN9pz2I.js +1 -1
  156. package/development/icon-sidebar/icon-sidebar-button/icon-sidebar-button.component.js +1 -1
  157. package/development/icon-sidebar/icon-sidebar-link/icon-sidebar-link.component.js +1 -1
  158. package/development/icon-sidebar-container.component-BH_R88Rf.js +1 -1
  159. package/development/icon-sidebar-content.component-yoF6FjkW.js +1 -1
  160. package/development/icon-sidebar.component-BGEkfXVs.js +1 -1
  161. package/development/image.component-BD0jc-u-.js +1 -1
  162. package/development/inline-link-common-CgTIwFAI.js +1 -1
  163. package/development/journey-header.component-BwVODlXk.js +1 -1
  164. package/development/lead-container.component-CGVdBWJr.js +1 -1
  165. package/development/link/block-link/block-link.component.js +1 -1
  166. package/development/link/block-link-button/block-link-button.component.js +1 -1
  167. package/development/link/block-link-static/block-link-static.component.js +1 -1
  168. package/development/link/link/link.component.js +1 -1
  169. package/development/link/link-button/link-button.component.js +1 -1
  170. package/development/link/link-static/link-static.component.js +1 -1
  171. package/development/link-common-DJ2FfG_Q.js +1 -1
  172. package/development/link-list-anchor.component-Du7kfDZ-.js +1 -1
  173. package/development/link-list-base-CKMNz30d.js +1 -1
  174. package/development/link-list.component-DQMg8MdQ.js +1 -1
  175. package/development/loading-indicator-circle.component-np96Tu5S.js +1 -1
  176. package/development/loading-indicator.component-CgHYNMxB.js +1 -1
  177. package/development/logo.component-I0yP2SKr.js +1 -1
  178. package/development/map-container.component-D9NWw-wA.js +1 -1
  179. package/development/menu/menu-button/menu-button.component.js +1 -1
  180. package/development/menu/menu-link/menu-link.component.js +1 -1
  181. package/development/menu-action-common-CBZCra6n.js +1 -1
  182. package/development/menu.component-Lh3JbVow.js +1 -1
  183. package/development/message.component-Dlf5V5ba.js +1 -1
  184. package/development/mini-button-group.component-B3CA9KG0.js +1 -1
  185. package/development/mini-button-link.component-I3VpWeNU.js +1 -1
  186. package/development/mini-calendar-day.component-BUNVO4ZU.js +1 -1
  187. package/development/mini-calendar-month.component-DZXvAhc3.js +1 -1
  188. package/development/mini-calendar.component-BufzKw74.js +1 -1
  189. package/development/navigation/navigation-button/navigation-button.component.js +1 -1
  190. package/development/navigation/navigation-link/navigation-link.component.js +1 -1
  191. package/development/navigation-action-common-Hjr4dI9J.js +1 -1
  192. package/development/navigation-list.component-DqITJqFx.js +1 -1
  193. package/development/navigation-marker.component-GOv42emC.js +1 -1
  194. package/development/navigation-section.component-CnVrRETN.js +1 -1
  195. package/development/navigation.component-CTNQ1dix.js +1 -1
  196. package/development/notification.component-Cvq_uViC.js +1 -1
  197. package/development/optgroup-base-element-BaG2W_AP.js +1 -1
  198. package/development/option/optgroup/optgroup.component.js +1 -1
  199. package/development/option/option/option-base-element.js +1 -1
  200. package/development/option-hint.component-BH8dP1fM.js +1 -1
  201. package/development/option.component-Bb2C7ae5.js +1 -1
  202. package/development/overlay/overlay-base-element.js +1 -1
  203. package/development/overlay.component-M0JuSq4C.js +1 -1
  204. package/development/paginator/common/paginator-common.js +1 -1
  205. package/development/paginator.component-Bn5tK0FK.js +1 -1
  206. package/development/panel-mixin-Dj_rsgL9.js +1 -1
  207. package/development/popover.component-EgOs-wsR.js +1 -1
  208. package/development/radio-button-common--d3WX-ZM.js +1 -1
  209. package/development/radio-button-group/radio-button-group.component.js +1 -1
  210. package/development/radio-button-panel/radio-button-panel.component.js +1 -1
  211. package/development/radio-button.component-BauLEeCV.js +1 -1
  212. package/development/screen-reader-only.component-B77UuVCI.js +1 -1
  213. package/development/select.component-D9SFG7Lk.js +1 -1
  214. package/development/selection-action-panel.component-D6I5wdEL.js +1 -1
  215. package/development/selection-expansion-panel.component-eO7b_EQF.js +1 -1
  216. package/development/selection-group-base-element-DvDpwhPl.js +1 -1
  217. package/development/sidebar-close-button.component-CYWv39Mu.js +1 -1
  218. package/development/sidebar-container.component-BDSoDAym.js +1 -1
  219. package/development/sidebar-content.component-JcVKpKbK.js +1 -1
  220. package/development/sidebar-title.component-BA_j-Igh.js +1 -1
  221. package/development/sidebar.component-BLqO52nH.js +1 -1
  222. package/development/signet.component-3D2ZsajP.js +1 -1
  223. package/development/skiplink-list.component-EDPOitEB.js +1 -1
  224. package/development/slider.component-C3qZB6ar.js +1 -1
  225. package/development/status.component-CPi1cPN0.js +1 -1
  226. package/development/step-label.component-BJ9eainz.js +1 -1
  227. package/development/{step.component-B-n26urC.js → step.component-CTsOBGAn.js} +11 -2
  228. package/development/stepper/step/step.component.d.ts +1 -0
  229. package/development/stepper/step/step.component.d.ts.map +1 -1
  230. package/development/stepper/step/step.component.js +1 -1
  231. package/development/stepper/step.js +1 -1
  232. package/development/stepper.component-CxOBayI1.js +1 -1
  233. package/development/stepper.js +1 -1
  234. package/development/stepper.pure.js +1 -1
  235. package/development/sticky-bar.component-CysAIZTd.js +1 -1
  236. package/development/tab-group.component-D9jCK26q.js +1 -1
  237. package/development/tab-label.component-B9e9kgVf.js +1 -1
  238. package/development/tab-nav-bar.component-CgYwCSVY.js +1 -1
  239. package/development/tab.component-DThKG7-a.js +1 -1
  240. package/development/table-wrapper.component-D1p7kqCB.js +1 -1
  241. package/development/tag-group.component-Cw46bt0E.js +1 -1
  242. package/development/tag.component-Bl1nlIXQ.js +1 -1
  243. package/development/teaser-hero.component-BIOpoGME.js +1 -1
  244. package/development/teaser-product/teaser-product-static/teaser-product-static.component.js +1 -1
  245. package/development/teaser-product-common-DYX370pm.js +1 -1
  246. package/development/teaser-product.component-CSArA8bH.js +1 -1
  247. package/development/teaser.component-Cky6kKU0.js +1 -1
  248. package/development/time-input.component-BtdSR8kB.js +1 -1
  249. package/development/timetable-form-details.component-DJl5Qt9y.js +1 -1
  250. package/development/timetable-form-field.component-DQ_TzcF4.js +1 -1
  251. package/development/timetable-form-swap-button.component-Bh9aPmdn.js +1 -1
  252. package/development/timetable-form.component-N8h4JBlH.js +1 -1
  253. package/development/timetable-occupancy-icon.component-lI7__-G5.js +1 -1
  254. package/development/timetable-occupancy.component-BBcznUh0.js +1 -1
  255. package/development/title-base-BdYKwj3-.js +1 -1
  256. package/development/title.component-DSXVkddh.js +1 -1
  257. package/development/toast.component-IhHx0Qt3.js +1 -1
  258. package/development/toggle-check.component-_fDAuLob.js +1 -1
  259. package/development/toggle-option.component-DTS3a603.js +1 -1
  260. package/development/toggle.component-BJpD1b9H.js +1 -1
  261. package/development/tooltip.component-YaUQA-Id.js +1 -1
  262. package/development/train-blocked-passage.component-BrUJK0gf.js +1 -1
  263. package/development/train-formation.component-vt-nYQXA.js +1 -1
  264. package/development/train-wagon.component-CNxkffOO.js +1 -1
  265. package/development/train.component-BgpmEDx-.js +1 -1
  266. package/development/visual-checkbox.component-rdeoQN40.js +1 -1
  267. package/package.json +2 -2
  268. package/{step.component-uBZl9yiJ.js → step.component-xDgeguVi.js} +6 -2
  269. package/stepper/step/step.component.js +1 -1
  270. package/stepper/step.js +1 -1
  271. package/stepper.js +1 -1
  272. package/stepper.pure.js +1 -1
@@ -219,4 +219,4 @@ var SbbElementInternalsMixin = (superClass) => {
219
219
  //#endregion
220
220
  export { SbbElementInternalsMixin, appendAriaElements, removeAriaElements, ɵstateController };
221
221
 
222
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2VsZW1lbnQtaW50ZXJuYWxzLW1peGluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU2VydmVyLCB0eXBlIExpdEVsZW1lbnQsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVyIH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHsgU2JiU2xvdFN0YXRlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzL3Nsb3Qtc3RhdGUtY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IudHMnO1xuXG4vLyBNb3N0IG9mIG91ciB0YXJnZXQgYnJvd3NlcnMgc3VwcG9ydCB0aGUgOnN0YXRlKCkgcHNldWRvIGNsYXNzLCBidXQgbm90IGFsbCBvZiB0aGVtLlxuLy8gV2UgcGF0Y2ggdGhlIHN0YXRlcyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBpbnRlcm5hbHMgdG8gdXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCxcbi8vIGlmIDpzdGF0ZSgpIGlzIG5vdCBzdXBwb3J0ZWQuXG4vLyBOb3RlIHRoYXQgZm9yIFNTUiwgdGhlIHN0YXRlcyBwcm9wZXJ0eSBpcyBhIHNpbXBsZSBTZXQsIGltcGxlbWVudGVkIGluIExpdCBTU1IuXG4vLyBXZWJLaXQgc2VlbXMgdG8gaGF2ZSBzdGF0ZSBkZXRlY3Rpb24gcHJvYmxlbXMsIHNvIHdlIGVuYWJsZSB0aGUgcG9seWZpbGwgZm9yIG5vdy5cbi8vIFRPRE86IFJlY2hlY2sgZW5hYmxpbmcgYnkgdGVzdGluZyBzYmItYXV0b2NvbXBsZXRlIHdoZXRoZXIgaXQgcmVsaWFibHkgb3BlbnMgaW4gU2FmYXJpXG50eXBlIEN1c3RvbVN0YXRlU2V0SW50ZXJmYWNlID0gQ3VzdG9tU3RhdGVTZXQ7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5jb25zdCBDdXN0b21TdGF0ZVNldFBvbHlmaWxsOiAobmV3IChob3N0OiBMaXRFbGVtZW50KSA9PiBDdXN0b21TdGF0ZVNldEludGVyZmFjZSkgfCBudWxsID1cbiAgaXNTZXJ2ZXIgfHwgIUNTUy5zdXBwb3J0cygnc2VsZWN0b3IoOnN0YXRlKGxvYWRpbmcpKScpXG4gICAgPyBjbGFzcyBDdXN0b21TdGF0ZVNldFxuICAgICAgICBleHRlbmRzIFNldDxzdHJpbmc+XG4gICAgICAgIGltcGxlbWVudHMgQ3VzdG9tU3RhdGVTZXRJbnRlcmZhY2UsIFJlYWN0aXZlQ29udHJvbGxlclxuICAgICAge1xuICAgICAgICBwcml2YXRlIF9hcHBsaWVkID0gaXNTZXJ2ZXI7XG5cbiAgICAgICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IExpdEVsZW1lbnQpIHtcbiAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcih0aGlzKTtcbiAgICAgICAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHdoaWNoIGNhblxuICAgICAgICAgICAgLy8gZWl0aGVyIGJlIHZpYSB0aGlzIFByb21pc2UucmVzb2x2ZSgpIG9yIHRoZSBjb25uZWN0ZWRDYWxsYmFjaygpLlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLl9hcHBseVN0YXRlcygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkKHN0YXRlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgICBpZiAodGhpcy5fYXBwbGllZCkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU3RhdGUoc3RhdGUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZVN0YXRlKHN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgICAgdGhpcy5mb3JFYWNoKChzdGF0ZSkgPT4gdGhpcy5kZWxldGUoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIF90b2dnbGVTdGF0ZShzdGF0ZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgICAgdGhpcy5faG9zdC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3N0YXRlfWAsIGVuYWJsZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBfYXBwbHlTdGF0ZXMoKTogdm9pZCB7XG4gICAgICAgICAgaWYgKHRoaXMuX2FwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5mb3JFYWNoKChzdGF0ZSkgPT4gdGhpcy5fdG9nZ2xlU3RhdGUoc3RhdGUsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgQVJJQU1peGluIHtcbiAgICBhcmlhQWN0aXZlRGVzY2VuZGFudEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsO1xuICAgIGFyaWFDb250cm9sc0VsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFEZXRhaWxzRWxlbWVudHM6IHJlYWRvbmx5IEVsZW1lbnRbXSB8IG51bGw7XG4gICAgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHM6IHJlYWRvbmx5IEVsZW1lbnRbXSB8IG51bGw7XG4gICAgYXJpYU93bnNFbGVtZW50czogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbDtcbiAgfVxufVxuXG5pZiAoIWlzU2VydmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgdGhlIGFyaWEgZWxlbWVudHMgcHJvcGVydGllcyBvbiBFbGVtZW50SW50ZXJuYWxzIGFuZCBFbGVtZW50LlxuICBsZXQgbmV4dElkID0gMDtcbiAgY29uc3QgcmVzb2x2ZUhvc3QgPSAob3JpZ2luOiBFbGVtZW50SW50ZXJuYWxzIHwgRWxlbWVudCk6IEVsZW1lbnQgPT5cbiAgICBvcmlnaW4uc2hhZG93Um9vdD8uaG9zdCA/P1xuICAgIChvcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50XG4gICAgICA/IG9yaWdpblxuICAgICAgOiAoKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgcmVsYXRlZCBlbGVtZW50ISBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uJyk7XG4gICAgICAgIH0pKCkpO1xuICBjb25zdCBvYnNlcnZlck9wdGlvbnM6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnaWQnXSB9O1xuICBjb25zdCBhc3NpZ25FbGVtZW50ID0gKFxuICAgIGhvc3Q6IEVsZW1lbnQsXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+LFxuICApOiB2b2lkID0+IHtcbiAgICAvLyBJbiBjYXNlIGJvdGggRWxlbWVudCBhbmQgRWxlbWVudEludGVybmFscyBwcm9wZXJ0aWVzIGFyZSBzZXQsXG4gICAgLy8gdGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZyb20gRWxlbWVudCBoYXMgcHJpb3JpdHkuXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGVsZW1lbnRzW0VsZW1lbnQubmFtZV0gPz8gZWxlbWVudHNbRWxlbWVudEludGVybmFscy5uYW1lXTtcbiAgICBob3N0LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIChhY3RpdmVFbGVtZW50LmlkIHx8PSBgYXJpYS1yZWYtJHtuZXh0SWQrK31gKSk7XG4gIH07XG4gIGNvbnN0IGFzc2lnbkVsZW1lbnRzID0gKFxuICAgIGhvc3Q6IEVsZW1lbnQsXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRbXT4sXG4gICk6IHZvaWQgPT4ge1xuICAgIC8vIEluIGNhc2UgYm90aCBFbGVtZW50IGFuZCBFbGVtZW50SW50ZXJuYWxzIHByb3BlcnRpZXMgYXJlIHNldCxcbiAgICAvLyB3ZSBjb21iaW5lIHRoZSBlbGVtZW50IHJlZmVyZW5jZXMuXG4gICAgaG9zdC5zZXRBdHRyaWJ1dGUoXG4gICAgICBhdHRyaWJ1dGUsXG4gICAgICBPYmplY3QudmFsdWVzKGVsZW1lbnRzKVxuICAgICAgICAucmVkdWNlKChjdXJyZW50LCBuZXh0KSA9PiBjdXJyZW50LmNvbmNhdChuZXh0KSlcbiAgICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKVxuICAgICAgICAubWFwKChlKSA9PiBlLmlkIHx8IChlLmlkID0gYGFyaWEtcmVmLSR7bmV4dElkKyt9YCkpXG4gICAgICAgIC5qb2luKCcgJyksXG4gICAgKTtcbiAgfTtcblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgW0VsZW1lbnRJbnRlcm5hbHMsIEVsZW1lbnRdKSB7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdHlwZS5wcm90b3R5cGU7XG4gICAgaWYgKCEoJ2FyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCcgaW4gcHJvdG90eXBlKSkge1xuICAgICAgY29uc3QgYXR0cmlidXRlID0gJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc7XG4gICAgICBjb25zdCBzdG9yYWdlID0gbmV3IFdlYWtNYXA8XG4gICAgICAgIEVsZW1lbnQsXG4gICAgICAgIHsgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+OyBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB9XG4gICAgICA+KCk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50Jywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCh0aGlzOiBFbGVtZW50SW50ZXJuYWxzIHwgRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgICBjb25zdCBob3N0ID0gcmVzb2x2ZUhvc3QodGhpcyk7XG4gICAgICAgICAgY29uc3QgaWQgPSBob3N0LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpPy5zcGxpdCgvXFxzKy8pWzBdID8/IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlkXG4gICAgICAgICAgICA/ICgoaG9zdC5nZXRSb290Tm9kZSgpIGFzIERvY3VtZW50IHwgU2hhZG93Um9vdCkuZ2V0RWxlbWVudEJ5SWQ/LihpZCkgPz8gbnVsbClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHRoaXM6IEVsZW1lbnRJbnRlcm5hbHMgfCBFbGVtZW50LCB2YWx1ZTogRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHNldCB0aGUgJ2FyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCcgcHJvcGVydHkgb24gJyR7dHlwZS5uYW1lfSc6IEZhaWxlZCB0byBjb252ZXJ0IHZhbHVlIHRvICdFbGVtZW50Jy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBob3N0ID0gcmVzb2x2ZUhvc3QodGhpcyk7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBzdG9yYWdlLmdldChob3N0KTtcbiAgICAgICAgICBlbnRyeT8ub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBkZWxldGUgZW50cnkuZWxlbWVudHNbdHlwZS5uYW1lXTtcbiAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhlbnRyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZS5kZWxldGUoaG9zdCk7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5vYnNlcnZlci5vYnNlcnZlKE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpWzBdLCBvYnNlcnZlck9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50PiA9IHsgW3R5cGUubmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICBhc3NpZ25FbGVtZW50KGhvc3QsIGF0dHJpYnV0ZSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiBhc3NpZ25FbGVtZW50KGhvc3QsIGF0dHJpYnV0ZSwgZWxlbWVudHMpKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodmFsdWUsIG9ic2VydmVyT3B0aW9ucyk7XG4gICAgICAgICAgICBzdG9yYWdlLnNldChob3N0LCB7IGVsZW1lbnRzLCBvYnNlcnZlciB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cnkuZWxlbWVudHNbdHlwZS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgYXNzaWduRWxlbWVudChob3N0LCBhdHRyaWJ1dGUsIGVudHJ5LmVsZW1lbnRzKTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpLmZvckVhY2goKGUpID0+XG4gICAgICAgICAgICAgIGVudHJ5Lm9ic2VydmVyLm9ic2VydmUoZSwgb2JzZXJ2ZXJPcHRpb25zKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbXG4gICAgICAnYXJpYUNvbnRyb2xzRWxlbWVudHMnLFxuICAgICAgJ2FyaWFEZXNjcmliZWRCeUVsZW1lbnRzJyxcbiAgICAgICdhcmlhRGV0YWlsc0VsZW1lbnRzJyxcbiAgICAgICdhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMnLFxuICAgICAgJ2FyaWFMYWJlbGxlZEJ5RWxlbWVudHMnLFxuICAgICAgJ2FyaWFPd25zRWxlbWVudHMnLFxuICAgIF0pIHtcbiAgICAgIGlmICghKHByb3BlcnR5IGluIHByb3RvdHlwZSkpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IG5ldyBXZWFrTWFwPFxuICAgICAgICAgIEVsZW1lbnQsXG4gICAgICAgICAgeyBlbGVtZW50czogUmVjb3JkPHN0cmluZywgRWxlbWVudFtdPjsgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfVxuICAgICAgICA+KCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGBhcmlhLSR7cHJvcGVydHkuc2xpY2UoNCwgLTgpLnRvTG93ZXJDYXNlKCl9YDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgcHJvcGVydHksIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQodGhpczogRWxlbWVudEludGVybmFscyB8IEVsZW1lbnQpOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXNvbHZlSG9zdCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gaG9zdFxuICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgPy5zcGxpdCgvXFxzKy8pXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSlcbiAgICAgICAgICAgICAgLm1hcCgoaWQpID0+IChob3N0LmdldFJvb3ROb2RlKCkgYXMgRG9jdW1lbnQgfCBTaGFkb3dSb290KS5nZXRFbGVtZW50QnlJZD8uKGlkKSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZSkgPT4gZSBpbnN0YW5jZW9mIEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzPy5sZW5ndGggPyBPYmplY3QuZnJlZXplKGVsZW1lbnRzKSA6IG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQodGhpczogRWxlbWVudEludGVybmFscyB8IEVsZW1lbnQsIHZhbHVlOiBFbGVtZW50W10pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5zb21lKChlbGVtZW50KSA9PiAhKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIHNldCB0aGUgJyR7cHJvcGVydHl9JyBwcm9wZXJ0eSBvbiAnJHt0eXBlLm5hbWV9JzogRmFpbGVkIHRvIGNvbnZlcnQgdmFsdWUgdG8gJ0VsZW1lbnQnLmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXNvbHZlSG9zdCh0aGlzKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKSA/PyBudWxsO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdG9yYWdlLmdldChob3N0KTtcbiAgICAgICAgICAgIGVudHJ5Py5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5lbGVtZW50c1t0eXBlLm5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoZW50cnkuZWxlbWVudHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgc3RvcmFnZS5kZWxldGUoaG9zdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQuY29uY2F0KG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZSkgPT4gZW50cnkub2JzZXJ2ZXIub2JzZXJ2ZShlLCBvYnNlcnZlck9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50W10+ID0geyBbdHlwZS5uYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgYXNzaWduRWxlbWVudHMoaG9zdCwgYXR0cmlidXRlLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT5cbiAgICAgICAgICAgICAgICBhc3NpZ25FbGVtZW50cyhob3N0LCBhdHRyaWJ1dGUsIGVsZW1lbnRzKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoZWxlbWVudCkgPT4gb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvYnNlcnZlck9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXQoaG9zdCwgeyBlbGVtZW50cywgb2JzZXJ2ZXIgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50c1t0eXBlLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgIGFzc2lnbkVsZW1lbnRzKGhvc3QsIGF0dHJpYnV0ZSwgZW50cnkuZWxlbWVudHMpO1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5LmVsZW1lbnRzKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQuY29uY2F0KG5leHQpKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBlbnRyeS5vYnNlcnZlci5vYnNlcnZlKGUsIG9ic2VydmVyT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBhdHRhY2hlZEVsZW1lbnRJbnRlcm5hbHMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBFbGVtZW50SW50ZXJuYWxzPigpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNiYlN0YXRlQ29udHJvbGxlciB7XG4gIGFkZCh2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgZGVsZXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuO1xuICBoYXModmFsdWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIHRvZ2dsZSh2YWx1ZTogc3RyaW5nLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGF0ZSBjb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqIE5PVCBJTlRFTkRFRCBUTyBCRSBVU0VEIEJZIENPTlNVTUVSUyFcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gybVzdGF0ZUNvbnRyb2xsZXIoZWxlbWVudDogRWxlbWVudCk6IFNiYlN0YXRlQ29udHJvbGxlcjtcbmV4cG9ydCBmdW5jdGlvbiDJtXN0YXRlQ29udHJvbGxlcihlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbCk6IFNiYlN0YXRlQ29udHJvbGxlciB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gybVzdGF0ZUNvbnRyb2xsZXIoZWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGwpOiBTYmJTdGF0ZUNvbnRyb2xsZXIgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgc3RhdGVzID0gYXR0YWNoZWRFbGVtZW50SW50ZXJuYWxzLmdldChlbGVtZW50KT8uc3RhdGVzO1xuICBjb25zdCB0b2dnbGU6IFNiYlN0YXRlQ29udHJvbGxlclsndG9nZ2xlJ10gPSBmdW5jdGlvbiAodGhpczogU2JiU3RhdGVDb250cm9sbGVyLCB2YWx1ZSwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHwgKGZvcmNlICE9PSBmYWxzZSAmJiAhdGhpcy5oYXModmFsdWUpKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuICBpZiAoc3RhdGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICBzdGF0ZXMuYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgZGVsZXRlOiAodmFsdWUpID0+IHN0YXRlcy5kZWxldGUodmFsdWUpLFxuICAgICAgaGFzOiAodmFsdWUpID0+IHN0YXRlcy5oYXModmFsdWUpLFxuICAgICAgdG9nZ2xlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbm8gRWxlbWVudEludGVybmFscyBpcyBhdHRhY2hlZCwgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIGF0dHJpYnV0ZXMuIEUuZy4gZm9yIHRyaWdnZXJzLlxuICAgIHJldHVybiB7XG4gICAgICBhZGQodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3ZhbHVlfWAsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBkZWxldGU6ICh2YWx1ZSkgPT4gZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3ZhbHVlfWAsIGZhbHNlKSxcbiAgICAgIGhhczogKHZhbHVlKSA9PiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShgc3RhdGUtLSR7dmFsdWV9YCksXG4gICAgICB0b2dnbGUsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3RvciB7XG4gIHJvbGU/OiBFbGVtZW50SW50ZXJuYWxzWydyb2xlJ107XG59XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuICBwcm90ZWN0ZWQgdG9nZ2xlU3RhdGUodmFsdWU6IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50cyB0byB0aGUgZ2l2ZW4gYXJpYSB2YWx1ZSBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbWJpbmVkIHZhbHVlIGFzIGEgbmV3IGFycmF5IG9yIG51bGwsIGlmIGJvdGggdmFsdWVzIHdlcmUgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBlbmRBcmlhRWxlbWVudHMgPSAoXG4gIGFyaWFWYWx1ZTogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbCxcbiAgLi4ubmV3RWxlbWVudHM6IChFbGVtZW50IHwgbnVsbClbXVxuKTogRWxlbWVudFtdIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gbmV3RWxlbWVudHMuZmlsdGVyKCh2KTogdiBpcyBFbGVtZW50ID0+ICEhdik7XG4gIHJldHVybiBhcmlhVmFsdWU/Lmxlbmd0aCA/IGFyaWFWYWx1ZS5jb25jYXQoZWxlbWVudHMpIDogbmV3RWxlbWVudHMubGVuZ3RoID8gZWxlbWVudHMgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBnaXZlbiBlbGVtZW50cyBmcm9tIHRoZSBnaXZlbiBhcmlhIHZhbHVlIGFuZCByZXR1cm5zXG4gKiB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFzIGEgbmV3IGFycmF5IG9yIG51bGwsIGlmIHRoZSByZXN1bHQgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBcmlhRWxlbWVudHMgPSAoXG4gIGFyaWFWYWx1ZTogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbCxcbiAgLi4ucmVtb3ZhYmxlRWxlbWVudHM6IChFbGVtZW50IHwgbnVsbClbXVxuKTogRWxlbWVudFtdIHwgbnVsbCA9PiB7XG4gIHJlbW92YWJsZUVsZW1lbnRzID0gcmVtb3ZhYmxlRWxlbWVudHMuZmlsdGVyKCh2KSA9PiAhIXYpO1xuICBjb25zdCBlbGVtZW50cyA9IGFyaWFWYWx1ZT8uZmlsdGVyKCh2KSA9PiAhcmVtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXModikpID8/IG51bGw7XG4gIHJldHVybiBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBudWxsO1xufTtcblxuLyoqXG4gKiBUaGUgU2JiRWxlbWVudEludGVybmFsc01peGluIGF0dGFjaGVzIEVsZW1lbnRJbnRlcm5hbHMgdG8gdGhlIGVsZW1lbnQgYW5kIHNldHNcbiAqIHRoZSByb2xlLCBpZiBkZWZpbmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRWxlbWVudEludGVybmFsc01peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJiBUICYgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRWxlbWVudEludGVybmFsRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPlxuICB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbHM6IEVsZW1lbnRJbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIGF0dGFjaGVkRWxlbWVudEludGVybmFscy5zZXQodGhpcywgdGhpcy5pbnRlcm5hbHMpO1xuICAgICAgaWYgKEN1c3RvbVN0YXRlU2V0UG9seWZpbGwpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuaW50ZXJuYWxzLCAnc3RhdGVzJywge1xuICAgICAgICAgIHZhbHVlOiBuZXcgQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCh0aGlzKSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSB1c2UgdGhlIEN1c3RvbVN0YXRlU2V0IHBvbHlmaWxsIGluIFNTUiwgd2hpY2ggcmVuZGVycyB0aGUgc3RhdGUgYXMgYXR0cmlidXRlc1xuICAgICAgICAvLyB3aGljaCBjYW4gYmUgdHJhbnNmZXJyZWQgdG8gY2xpZW50IHNpZGUsIHdoZXJlIHdlIGNhbiB0aGVuIGNvbnZlcnQgW3N0YXRlLS0qXVxuICAgICAgICAvLyBhdHRyaWJ1dGVzIHRvIGludGVybmFsIHN0YXRlLlxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5nZXRBdHRyaWJ1dGVOYW1lcygpLmZpbHRlcigobikgPT4gbi5zdGFydHNXaXRoKCdzdGF0ZS0tJykpKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChuYW1lLnNsaWNlKDcpKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgcm9sZSA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcikucm9sZTtcbiAgICAgIGlmIChyb2xlKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnJvbGUgPSByb2xlO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDb250cm9sbGVyKG5ldyBTYmJTbG90U3RhdGVDb250cm9sbGVyKHRoaXMsIHRoaXMuaW50ZXJuYWxzKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRvZ2dsZVN0YXRlKHZhbHVlOiBzdHJpbmcsIGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgaWYgKGZvcmNlIHx8IChmb3JjZSAhPT0gZmFsc2UgJiYgIXRoaXMuaW50ZXJuYWxzLnN0YXRlcy5oYXModmFsdWUpKSkge1xuICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRWxlbWVudEludGVybmFsRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJlxuICAgIFQgJlxuICAgIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcjtcbn07XG4iXSwibWFwcGluZ3MiOiI7OztBQWNBLElBQU0seUJBQ0osWUFBWSxDQUFDLElBQUksU0FBUyw0QkFBNEIsR0FDbEQsTUFBTSx1QkFDSSxJQUFXO0NBS25CLFlBQTJCLE9BQWlCO0FBQzFDLFNBQU87QUFEa0IsT0FBQSxRQUFBO0FBRm5CLE9BQUEsV0FBVztBQUlqQixPQUFLLE1BQU0sY0FBYyxLQUFLO0FBQzlCLE1BQUksQ0FBQyxTQUdILFNBQVEsU0FBUyxDQUFDLFdBQVcsS0FBSyxjQUFjLENBQUM7O0NBSXJDLElBQUksT0FBYTtBQUMvQixNQUFJLEtBQUssU0FDUCxNQUFLLGFBQWEsT0FBTyxLQUFLO0FBRWhDLFNBQU8sTUFBTSxJQUFJLE1BQU07O0NBR1QsT0FBTyxPQUFhO0FBQ2xDLE9BQUssYUFBYSxPQUFPLE1BQU07QUFDL0IsU0FBTyxNQUFNLE9BQU8sTUFBTTs7Q0FHWixRQUFLO0FBQ25CLE9BQUss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
222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2VsZW1lbnQtaW50ZXJuYWxzLW1peGluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU2VydmVyLCB0eXBlIExpdEVsZW1lbnQsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVyIH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHsgU2JiU2xvdFN0YXRlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzL3Nsb3Qtc3RhdGUtY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IudHMnO1xuXG4vLyBNb3N0IG9mIG91ciB0YXJnZXQgYnJvd3NlcnMgc3VwcG9ydCB0aGUgOnN0YXRlKCkgcHNldWRvIGNsYXNzLCBidXQgbm90IGFsbCBvZiB0aGVtLlxuLy8gV2UgcGF0Y2ggdGhlIHN0YXRlcyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBpbnRlcm5hbHMgdG8gdXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCxcbi8vIGlmIDpzdGF0ZSgpIGlzIG5vdCBzdXBwb3J0ZWQuXG4vLyBOb3RlIHRoYXQgZm9yIFNTUiwgdGhlIHN0YXRlcyBwcm9wZXJ0eSBpcyBhIHNpbXBsZSBTZXQsIGltcGxlbWVudGVkIGluIExpdCBTU1IuXG4vLyBXZWJLaXQgc2VlbXMgdG8gaGF2ZSBzdGF0ZSBkZXRlY3Rpb24gcHJvYmxlbXMsIHNvIHdlIGVuYWJsZSB0aGUgcG9seWZpbGwgZm9yIG5vdy5cbi8vIFRPRE86IFJlY2hlY2sgZW5hYmxpbmcgYnkgdGVzdGluZyBzYmItYXV0b2NvbXBsZXRlIHdoZXRoZXIgaXQgcmVsaWFibHkgb3BlbnMgaW4gU2FmYXJpXG50eXBlIEN1c3RvbVN0YXRlU2V0SW50ZXJmYWNlID0gQ3VzdG9tU3RhdGVTZXQ7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5jb25zdCBDdXN0b21TdGF0ZVNldFBvbHlmaWxsOiAobmV3IChob3N0OiBMaXRFbGVtZW50KSA9PiBDdXN0b21TdGF0ZVNldEludGVyZmFjZSkgfCBudWxsID1cbiAgaXNTZXJ2ZXIgfHwgIUNTUy5zdXBwb3J0cygnc2VsZWN0b3IoOnN0YXRlKGxvYWRpbmcpKScpXG4gICAgPyBjbGFzcyBDdXN0b21TdGF0ZVNldFxuICAgICAgICBleHRlbmRzIFNldDxzdHJpbmc+XG4gICAgICAgIGltcGxlbWVudHMgQ3VzdG9tU3RhdGVTZXRJbnRlcmZhY2UsIFJlYWN0aXZlQ29udHJvbGxlclxuICAgICAge1xuICAgICAgICBwcml2YXRlIF9hcHBsaWVkID0gaXNTZXJ2ZXI7XG5cbiAgICAgICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IExpdEVsZW1lbnQpIHtcbiAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcih0aGlzKTtcbiAgICAgICAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHdoaWNoIGNhblxuICAgICAgICAgICAgLy8gZWl0aGVyIGJlIHZpYSB0aGlzIFByb21pc2UucmVzb2x2ZSgpIG9yIHRoZSBjb25uZWN0ZWRDYWxsYmFjaygpLlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLl9hcHBseVN0YXRlcygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkKHN0YXRlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgICBpZiAodGhpcy5fYXBwbGllZCkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU3RhdGUoc3RhdGUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZVN0YXRlKHN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgICAgdGhpcy5mb3JFYWNoKChzdGF0ZSkgPT4gdGhpcy5kZWxldGUoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIF90b2dnbGVTdGF0ZShzdGF0ZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgICAgdGhpcy5faG9zdC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3N0YXRlfWAsIGVuYWJsZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBfYXBwbHlTdGF0ZXMoKTogdm9pZCB7XG4gICAgICAgICAgaWYgKHRoaXMuX2FwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5mb3JFYWNoKChzdGF0ZSkgPT4gdGhpcy5fdG9nZ2xlU3RhdGUoc3RhdGUsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgQVJJQU1peGluIHtcbiAgICBhcmlhQWN0aXZlRGVzY2VuZGFudEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsO1xuICAgIGFyaWFDb250cm9sc0VsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFEZXRhaWxzRWxlbWVudHM6IHJlYWRvbmx5IEVsZW1lbnRbXSB8IG51bGw7XG4gICAgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsO1xuICAgIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHM6IHJlYWRvbmx5IEVsZW1lbnRbXSB8IG51bGw7XG4gICAgYXJpYU93bnNFbGVtZW50czogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbDtcbiAgfVxufVxuXG5pZiAoIWlzU2VydmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgdGhlIGFyaWEgZWxlbWVudHMgcHJvcGVydGllcyBvbiBFbGVtZW50SW50ZXJuYWxzIGFuZCBFbGVtZW50LlxuICBsZXQgbmV4dElkID0gMDtcbiAgY29uc3QgcmVzb2x2ZUhvc3QgPSAob3JpZ2luOiBFbGVtZW50SW50ZXJuYWxzIHwgRWxlbWVudCk6IEVsZW1lbnQgPT5cbiAgICBvcmlnaW4uc2hhZG93Um9vdD8uaG9zdCA/P1xuICAgIChvcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50XG4gICAgICA/IG9yaWdpblxuICAgICAgOiAoKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgcmVsYXRlZCBlbGVtZW50ISBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uJyk7XG4gICAgICAgIH0pKCkpO1xuICBjb25zdCBvYnNlcnZlck9wdGlvbnM6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnaWQnXSB9O1xuICBjb25zdCBhc3NpZ25FbGVtZW50ID0gKFxuICAgIGhvc3Q6IEVsZW1lbnQsXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+LFxuICApOiB2b2lkID0+IHtcbiAgICAvLyBJbiBjYXNlIGJvdGggRWxlbWVudCBhbmQgRWxlbWVudEludGVybmFscyBwcm9wZXJ0aWVzIGFyZSBzZXQsXG4gICAgLy8gdGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZyb20gRWxlbWVudCBoYXMgcHJpb3JpdHkuXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGVsZW1lbnRzW0VsZW1lbnQubmFtZV0gPz8gZWxlbWVudHNbRWxlbWVudEludGVybmFscy5uYW1lXTtcbiAgICBob3N0LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIChhY3RpdmVFbGVtZW50LmlkIHx8PSBgYXJpYS1yZWYtJHtuZXh0SWQrK31gKSk7XG4gIH07XG4gIGNvbnN0IGFzc2lnbkVsZW1lbnRzID0gKFxuICAgIGhvc3Q6IEVsZW1lbnQsXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRbXT4sXG4gICk6IHZvaWQgPT4ge1xuICAgIC8vIEluIGNhc2UgYm90aCBFbGVtZW50IGFuZCBFbGVtZW50SW50ZXJuYWxzIHByb3BlcnRpZXMgYXJlIHNldCxcbiAgICAvLyB3ZSBjb21iaW5lIHRoZSBlbGVtZW50IHJlZmVyZW5jZXMuXG4gICAgaG9zdC5zZXRBdHRyaWJ1dGUoXG4gICAgICBhdHRyaWJ1dGUsXG4gICAgICBPYmplY3QudmFsdWVzKGVsZW1lbnRzKVxuICAgICAgICAucmVkdWNlKChjdXJyZW50LCBuZXh0KSA9PiBjdXJyZW50LmNvbmNhdChuZXh0KSlcbiAgICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKVxuICAgICAgICAubWFwKChlKSA9PiBlLmlkIHx8IChlLmlkID0gYGFyaWEtcmVmLSR7bmV4dElkKyt9YCkpXG4gICAgICAgIC5qb2luKCcgJyksXG4gICAgKTtcbiAgfTtcblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgW0VsZW1lbnRJbnRlcm5hbHMsIEVsZW1lbnRdKSB7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdHlwZS5wcm90b3R5cGU7XG4gICAgaWYgKCEoJ2FyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCcgaW4gcHJvdG90eXBlKSkge1xuICAgICAgY29uc3QgYXR0cmlidXRlID0gJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc7XG4gICAgICBjb25zdCBzdG9yYWdlID0gbmV3IFdlYWtNYXA8XG4gICAgICAgIEVsZW1lbnQsXG4gICAgICAgIHsgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+OyBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB9XG4gICAgICA+KCk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50Jywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCh0aGlzOiBFbGVtZW50SW50ZXJuYWxzIHwgRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgICBjb25zdCBob3N0ID0gcmVzb2x2ZUhvc3QodGhpcyk7XG4gICAgICAgICAgY29uc3QgaWQgPSBob3N0LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpPy5zcGxpdCgvXFxzKy8pWzBdID8/IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlkXG4gICAgICAgICAgICA/ICgoaG9zdC5nZXRSb290Tm9kZSgpIGFzIERvY3VtZW50IHwgU2hhZG93Um9vdCkuZ2V0RWxlbWVudEJ5SWQ/LihpZCkgPz8gbnVsbClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHRoaXM6IEVsZW1lbnRJbnRlcm5hbHMgfCBFbGVtZW50LCB2YWx1ZTogRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHNldCB0aGUgJ2FyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCcgcHJvcGVydHkgb24gJyR7dHlwZS5uYW1lfSc6IEZhaWxlZCB0byBjb252ZXJ0IHZhbHVlIHRvICdFbGVtZW50Jy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBob3N0ID0gcmVzb2x2ZUhvc3QodGhpcyk7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBzdG9yYWdlLmdldChob3N0KTtcbiAgICAgICAgICBlbnRyeT8ub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBkZWxldGUgZW50cnkuZWxlbWVudHNbdHlwZS5uYW1lXTtcbiAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhlbnRyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZS5kZWxldGUoaG9zdCk7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5vYnNlcnZlci5vYnNlcnZlKE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpWzBdLCBvYnNlcnZlck9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50PiA9IHsgW3R5cGUubmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICBhc3NpZ25FbGVtZW50KGhvc3QsIGF0dHJpYnV0ZSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiBhc3NpZ25FbGVtZW50KGhvc3QsIGF0dHJpYnV0ZSwgZWxlbWVudHMpKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodmFsdWUsIG9ic2VydmVyT3B0aW9ucyk7XG4gICAgICAgICAgICBzdG9yYWdlLnNldChob3N0LCB7IGVsZW1lbnRzLCBvYnNlcnZlciB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cnkuZWxlbWVudHNbdHlwZS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgYXNzaWduRWxlbWVudChob3N0LCBhdHRyaWJ1dGUsIGVudHJ5LmVsZW1lbnRzKTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpLmZvckVhY2goKGUpID0+XG4gICAgICAgICAgICAgIGVudHJ5Lm9ic2VydmVyLm9ic2VydmUoZSwgb2JzZXJ2ZXJPcHRpb25zKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbXG4gICAgICAnYXJpYUNvbnRyb2xzRWxlbWVudHMnLFxuICAgICAgJ2FyaWFEZXNjcmliZWRCeUVsZW1lbnRzJyxcbiAgICAgICdhcmlhRGV0YWlsc0VsZW1lbnRzJyxcbiAgICAgICdhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMnLFxuICAgICAgJ2FyaWFMYWJlbGxlZEJ5RWxlbWVudHMnLFxuICAgICAgJ2FyaWFPd25zRWxlbWVudHMnLFxuICAgIF0pIHtcbiAgICAgIGlmICghKHByb3BlcnR5IGluIHByb3RvdHlwZSkpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IG5ldyBXZWFrTWFwPFxuICAgICAgICAgIEVsZW1lbnQsXG4gICAgICAgICAgeyBlbGVtZW50czogUmVjb3JkPHN0cmluZywgRWxlbWVudFtdPjsgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfVxuICAgICAgICA+KCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGBhcmlhLSR7cHJvcGVydHkuc2xpY2UoNCwgLTgpLnRvTG93ZXJDYXNlKCl9YDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgcHJvcGVydHksIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQodGhpczogRWxlbWVudEludGVybmFscyB8IEVsZW1lbnQpOiByZWFkb25seSBFbGVtZW50W10gfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXNvbHZlSG9zdCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gaG9zdFxuICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgPy5zcGxpdCgvXFxzKy8pXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSlcbiAgICAgICAgICAgICAgLm1hcCgoaWQpID0+IChob3N0LmdldFJvb3ROb2RlKCkgYXMgRG9jdW1lbnQgfCBTaGFkb3dSb290KS5nZXRFbGVtZW50QnlJZD8uKGlkKSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZSkgPT4gZSBpbnN0YW5jZW9mIEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzPy5sZW5ndGggPyBPYmplY3QuZnJlZXplKGVsZW1lbnRzKSA6IG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQodGhpczogRWxlbWVudEludGVybmFscyB8IEVsZW1lbnQsIHZhbHVlOiBFbGVtZW50W10pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5zb21lKChlbGVtZW50KSA9PiAhKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIHNldCB0aGUgJyR7cHJvcGVydHl9JyBwcm9wZXJ0eSBvbiAnJHt0eXBlLm5hbWV9JzogRmFpbGVkIHRvIGNvbnZlcnQgdmFsdWUgdG8gJ0VsZW1lbnQnLmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXNvbHZlSG9zdCh0aGlzKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKSA/PyBudWxsO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdG9yYWdlLmdldChob3N0KTtcbiAgICAgICAgICAgIGVudHJ5Py5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5lbGVtZW50c1t0eXBlLm5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoZW50cnkuZWxlbWVudHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgc3RvcmFnZS5kZWxldGUoaG9zdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZW50cnkuZWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQuY29uY2F0KG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZSkgPT4gZW50cnkub2JzZXJ2ZXIub2JzZXJ2ZShlLCBvYnNlcnZlck9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50W10+ID0geyBbdHlwZS5uYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgYXNzaWduRWxlbWVudHMoaG9zdCwgYXR0cmlidXRlLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT5cbiAgICAgICAgICAgICAgICBhc3NpZ25FbGVtZW50cyhob3N0LCBhdHRyaWJ1dGUsIGVsZW1lbnRzKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoZWxlbWVudCkgPT4gb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvYnNlcnZlck9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXQoaG9zdCwgeyBlbGVtZW50cywgb2JzZXJ2ZXIgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50c1t0eXBlLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgIGFzc2lnbkVsZW1lbnRzKGhvc3QsIGF0dHJpYnV0ZSwgZW50cnkuZWxlbWVudHMpO1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5LmVsZW1lbnRzKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQuY29uY2F0KG5leHQpKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBlbnRyeS5vYnNlcnZlci5vYnNlcnZlKGUsIG9ic2VydmVyT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBhdHRhY2hlZEVsZW1lbnRJbnRlcm5hbHMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBFbGVtZW50SW50ZXJuYWxzPigpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNiYlN0YXRlQ29udHJvbGxlciB7XG4gIGFkZCh2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgZGVsZXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuO1xuICBoYXModmFsdWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIHRvZ2dsZSh2YWx1ZTogc3RyaW5nLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGF0ZSBjb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqIE5PVCBJTlRFTkRFRCBUTyBCRSBVU0VEIEJZIENPTlNVTUVSUyFcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gybVzdGF0ZUNvbnRyb2xsZXIoZWxlbWVudDogRWxlbWVudCk6IFNiYlN0YXRlQ29udHJvbGxlcjtcbmV4cG9ydCBmdW5jdGlvbiDJtXN0YXRlQ29udHJvbGxlcihlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbCk6IFNiYlN0YXRlQ29udHJvbGxlciB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gybVzdGF0ZUNvbnRyb2xsZXIoZWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGwpOiBTYmJTdGF0ZUNvbnRyb2xsZXIgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgc3RhdGVzID0gYXR0YWNoZWRFbGVtZW50SW50ZXJuYWxzLmdldChlbGVtZW50KT8uc3RhdGVzO1xuICBjb25zdCB0b2dnbGU6IFNiYlN0YXRlQ29udHJvbGxlclsndG9nZ2xlJ10gPSBmdW5jdGlvbiAodGhpczogU2JiU3RhdGVDb250cm9sbGVyLCB2YWx1ZSwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHwgKGZvcmNlICE9PSBmYWxzZSAmJiAhdGhpcy5oYXModmFsdWUpKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuICBpZiAoc3RhdGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICBzdGF0ZXMuYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgZGVsZXRlOiAodmFsdWUpID0+IHN0YXRlcy5kZWxldGUodmFsdWUpLFxuICAgICAgaGFzOiAodmFsdWUpID0+IHN0YXRlcy5oYXModmFsdWUpLFxuICAgICAgdG9nZ2xlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbm8gRWxlbWVudEludGVybmFscyBpcyBhdHRhY2hlZCwgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIGF0dHJpYnV0ZXMuIEUuZy4gZm9yIHRyaWdnZXJzLlxuICAgIHJldHVybiB7XG4gICAgICBhZGQodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3ZhbHVlfWAsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBkZWxldGU6ICh2YWx1ZSkgPT4gZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlLS0ke3ZhbHVlfWAsIGZhbHNlKSxcbiAgICAgIGhhczogKHZhbHVlKSA9PiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShgc3RhdGUtLSR7dmFsdWV9YCksXG4gICAgICB0b2dnbGUsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3RvciB7XG4gIHJvbGU/OiBFbGVtZW50SW50ZXJuYWxzWydyb2xlJ107XG59XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuICBwcm90ZWN0ZWQgdG9nZ2xlU3RhdGUodmFsdWU6IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50cyB0byB0aGUgZ2l2ZW4gYXJpYSB2YWx1ZSBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbWJpbmVkIHZhbHVlIGFzIGEgbmV3IGFycmF5IG9yIG51bGwsIGlmIGJvdGggdmFsdWVzIHdlcmUgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBlbmRBcmlhRWxlbWVudHMgPSAoXG4gIGFyaWFWYWx1ZTogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbCxcbiAgLi4ubmV3RWxlbWVudHM6IChFbGVtZW50IHwgbnVsbClbXVxuKTogRWxlbWVudFtdIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gbmV3RWxlbWVudHMuZmlsdGVyKCh2KTogdiBpcyBFbGVtZW50ID0+ICEhdik7XG4gIHJldHVybiBhcmlhVmFsdWU/Lmxlbmd0aCA/IGFyaWFWYWx1ZS5jb25jYXQoZWxlbWVudHMpIDogbmV3RWxlbWVudHMubGVuZ3RoID8gZWxlbWVudHMgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBnaXZlbiBlbGVtZW50cyBmcm9tIHRoZSBnaXZlbiBhcmlhIHZhbHVlIGFuZCByZXR1cm5zXG4gKiB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFzIGEgbmV3IGFycmF5IG9yIG51bGwsIGlmIHRoZSByZXN1bHQgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBcmlhRWxlbWVudHMgPSAoXG4gIGFyaWFWYWx1ZTogcmVhZG9ubHkgRWxlbWVudFtdIHwgbnVsbCxcbiAgLi4ucmVtb3ZhYmxlRWxlbWVudHM6IChFbGVtZW50IHwgbnVsbClbXVxuKTogRWxlbWVudFtdIHwgbnVsbCA9PiB7XG4gIHJlbW92YWJsZUVsZW1lbnRzID0gcmVtb3ZhYmxlRWxlbWVudHMuZmlsdGVyKCh2KSA9PiAhIXYpO1xuICBjb25zdCBlbGVtZW50cyA9IGFyaWFWYWx1ZT8uZmlsdGVyKCh2KSA9PiAhcmVtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXModikpID8/IG51bGw7XG4gIHJldHVybiBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBudWxsO1xufTtcblxuLyoqXG4gKiBUaGUgU2JiRWxlbWVudEludGVybmFsc01peGluIGF0dGFjaGVzIEVsZW1lbnRJbnRlcm5hbHMgdG8gdGhlIGVsZW1lbnQgYW5kIHNldHNcbiAqIHRoZSByb2xlLCBpZiBkZWZpbmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRWxlbWVudEludGVybmFsc01peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJiBUICYgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRWxlbWVudEludGVybmFsRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPlxuICB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbHM6IEVsZW1lbnRJbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIGF0dGFjaGVkRWxlbWVudEludGVybmFscy5zZXQodGhpcywgdGhpcy5pbnRlcm5hbHMpO1xuICAgICAgaWYgKEN1c3RvbVN0YXRlU2V0UG9seWZpbGwpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuaW50ZXJuYWxzLCAnc3RhdGVzJywge1xuICAgICAgICAgIHZhbHVlOiBuZXcgQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCh0aGlzKSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSB1c2UgdGhlIEN1c3RvbVN0YXRlU2V0IHBvbHlmaWxsIGluIFNTUiwgd2hpY2ggcmVuZGVycyB0aGUgc3RhdGUgYXMgYXR0cmlidXRlc1xuICAgICAgICAvLyB3aGljaCBjYW4gYmUgdHJhbnNmZXJyZWQgdG8gY2xpZW50IHNpZGUsIHdoZXJlIHdlIGNhbiB0aGVuIGNvbnZlcnQgW3N0YXRlLS0qXVxuICAgICAgICAvLyBhdHRyaWJ1dGVzIHRvIGludGVybmFsIHN0YXRlLlxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5nZXRBdHRyaWJ1dGVOYW1lcygpLmZpbHRlcigobikgPT4gbi5zdGFydHNXaXRoKCdzdGF0ZS0tJykpKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChuYW1lLnNsaWNlKDcpKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgcm9sZSA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcikucm9sZTtcbiAgICAgIGlmIChyb2xlKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnJvbGUgPSByb2xlO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDb250cm9sbGVyKG5ldyBTYmJTbG90U3RhdGVDb250cm9sbGVyKHRoaXMsIHRoaXMuaW50ZXJuYWxzKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRvZ2dsZVN0YXRlKHZhbHVlOiBzdHJpbmcsIGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgaWYgKGZvcmNlIHx8IChmb3JjZSAhPT0gZmFsc2UgJiYgIXRoaXMuaW50ZXJuYWxzLnN0YXRlcy5oYXModmFsdWUpKSkge1xuICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRWxlbWVudEludGVybmFsRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJlxuICAgIFQgJlxuICAgIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcjtcbn07XG4iXSwibWFwcGluZ3MiOiI7OztBQWNBLElBQU0seUJBQ0osWUFBWSxDQUFDLElBQUksU0FBUyw0QkFBNEIsR0FDbEQsTUFBTSx1QkFDSSxJQUFXO0NBS25CLFlBQTJCLE9BQWlCO0VBQzFDLE9BQU87RUFEa0IsS0FBQSxRQUFBO0VBRm5CLEtBQUEsV0FBVztFQUlqQixLQUFLLE1BQU0sY0FBYyxLQUFLO0VBQzlCLElBQUksQ0FBQyxVQUdILFFBQVEsU0FBUyxDQUFDLFdBQVcsS0FBSyxjQUFjLENBQUM7O0NBSXJDLElBQUksT0FBYTtFQUMvQixJQUFJLEtBQUssVUFDUCxLQUFLLGFBQWEsT0FBTyxLQUFLO0VBRWhDLE9BQU8sTUFBTSxJQUFJLE1BQU07O0NBR1QsT0FBTyxPQUFhO0VBQ2xDLEtBQUssYUFBYSxPQUFPLE1BQU07RUFDL0IsT0FBTyxNQUFNLE9BQU8sTUFBTTs7Q0FHWixRQUFLO0VBQ25CLEtBQUss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
@@ -164,4 +164,4 @@ var SbbFormAssociatedCheckboxMixin = (superClass) => {
164
164
  //#endregion
165
165
  export { SbbFormAssociatedCheckboxMixin };
166
166
 
167
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWNoZWNrYm94LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtY2hlY2tib3gtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLnRzJztcbmltcG9ydCB7IGkxOG5DaGVja2JveFJlcXVpcmVkIH0gZnJvbSAnLi4vaTE4bi50cyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgU2JiRWxlbWVudEludGVybmFsc01peGluLFxuICB0eXBlIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpblR5cGUsXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yLFxufSBmcm9tICcuL2VsZW1lbnQtaW50ZXJuYWxzLW1peGluLnRzJztcbmltcG9ydCB7XG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbn0gZnJvbSAnLi9mb3JtLWFzc29jaWF0ZWQtbWl4aW4udHMnO1xuaW1wb3J0IHsgU2JiUmVxdWlyZWRNaXhpbiB9IGZyb20gJy4vcmVxdWlyZWQtbWl4aW4udHMnO1xuXG5pbnRlcmZhY2UgQ2hlY2tlZFNldHRlclZhbHVlIHtcbiAgdmFsdWU6IGJvb2xlYW47XG4gIGF0dHJpYnV0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZSBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oXG4gIFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oTGl0RWxlbWVudCkpKSxcbikge1xuICBwdWJsaWMgYWNjZXNzb3IgY2hlY2tlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24pOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgQGhvc3RBdHRyaWJ1dGVzKHtcbiAgICB0YWJpbmRleDogJzAnLFxuICB9KVxuICBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudFxuICAgIGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihTYmJSZXF1aXJlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oY29uZGl0aW9uYWxTdXBlckNsYXNzKSkpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+XG4gIHtcbiAgICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnY2hlY2tib3gnO1xuXG4gICAgcHJpdmF0ZSBfYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb250cm9sbGVyID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLiAqL1xuICAgIEBwcm9wZXJ0eSh7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgY29udmVydGVyOiB7XG4gICAgICAgIC4uLmRlZmF1bHRDb252ZXJ0ZXIsXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgc2V0dGVyIHNvIHRoYXQgd2Uga25vdyBpdCB3YXMgY2FsbGVkIGJ5IGF0dHJpYnV0ZSBjaGFuZ2UuXG4gICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCwgdHlwZT86IHVua25vd24pOiBDaGVja2VkU2V0dGVyVmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRDb252ZXJ0ZXIuZnJvbUF0dHJpYnV0ZT8uKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBhdHRyaWJ1dGU6IHRydWUgfSBhcyBDaGVja2VkU2V0dGVyVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVTZXR0ZXIgPVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gKHZhbHVlIGFzIHVua25vd24gYXMgQ2hlY2tlZFNldHRlclZhbHVlKS5hdHRyaWJ1dGUgOiBmYWxzZTtcbiAgICAgIGlmIChhdHRyaWJ1dGVTZXR0ZXIpIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBcyBzb29uIGFzIG11dGF0aW9uIHdhcyBkb25lIG5vdCBieSBzZXR0aW5nIGF0dHJpYnV0ZSxcbiAgICAgIC8vIHdlIG5lZWQgdG8gYmxvY2sgc3luY2luZyBhdHRyaWJ1dGUuXG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkICYmICFhdHRyaWJ1dGVTZXR0ZXIpIHtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NoZWNrZWQgPSBCb29sZWFuKHZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAnY2hlY2tib3gnXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5dXAnLCB0aGlzLl9oYW5kbGVLZXlib2FyZEludGVyYWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgb2xkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAvLyBBdHRyaWJ1dGUgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhZnRlciBwcm9ncmFtbWF0aWMgb3IgbWFudWFsIHN0YXRlIGNoYW5nZS5cbiAgICAgIGlmIChuYW1lICE9PSAnY2hlY2tlZCcgfHwgIXRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBmb3JtIGlzIGJlaW5nIHJlc2V0LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICAgIHRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBzdGF0ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZGl0aW9uYWwgbG9naWMgd2hpY2ggaXMgYmVpbmcgZXhlY3V0ZWQgd2hlbiB1c2VyXG4gICAgICogaW50ZXJhY3Rpb24gaGFwcGVucyBhbmQgc3RhdGUgaXMgbm90IGRpc2FibGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1TdGF0ZSgpOiBGb3JtUmVzdG9yZVN0YXRlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNoZWNrZWR9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAnY2hlY2tlZCcgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgICAndmFsdWVNaXNzaW5nJyxcbiAgICAgICAgICBpMThuQ2hlY2tib3hSZXF1aXJlZFt0aGlzLl9sYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudF0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW5UeXBlPiAmXG4gICAgVDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOENBLElBQWEsa0NBQ1gsZUFDK0Q7Q0FFL0QsTUFBTSx3QkFBeUIsV0FBa0QsbUJBQzVFLGFBR0QseUJBQXlCLFdBQVc7QUEySnhDLGVBdEorQzswQkFIOUMsZUFBZSxFQUNkLFVBQVUsS0FDWCxDQUFDLENBQUE7Ozs7b0JBRVEsaUJBQWlCLGlCQUFpQix1QkFBdUIsc0JBQXNCLENBQUMsQ0FBQzs7O3VEQUFqRixZQUFpRjs7Ozs7OytCQVN4RixTQUFTO0tBQ1IsTUFBTTtLQUNOLFdBQVc7TUFDVCxHQUFHO01BRUgsZ0JBQWdCLE9BQXNCLFNBQXNDO0FBRTFFLGNBQU87UUFBRSxPQURNLGlCQUFpQixnQkFBZ0IsT0FBTyxLQUFLO1FBQ3BDLFdBQVc7UUFBNEI7OztLQUdwRSxDQUFDLENBQUE7QUFDRixpQkFBQSxNQUFBLE1BQUEseUJBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQTtLQUFBLFFBQUE7S0FBQSxTQUFBO0tBQUEsUUFBQTtNQUFBLE1BQUEsUUFBQSxhQUFBO01BQUEsTUFBQSxLQUFBLFVBQUE7QUFBQSxXQUFXLFVBQU87O01BQUE7S0FBQSxVQUFBO0tBQUEsRUFBQSxNQUFBLDJCQUFBO0FBckJwQixpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsa0JBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQSxXQUFBO0tBQUEsVUFBQTtLQUFBLEVBQUEsTUFBQSx3QkFBQTs7Ozs7Ozs7OztBQUlrQyxTQUFBLE9BQU87OztHQWlCdkMsSUFBVyxRQUFRLE9BQWM7SUFDL0IsTUFBTSxrQkFDSixPQUFPLFVBQVUsV0FBWSxNQUF3QyxZQUFZO0FBQ25GLFFBQUksZ0JBQ0YsU0FBUyxNQUF3QztBQUtuRCxRQUFJLEtBQUssY0FBYyxDQUFDLGdCQUN0QixNQUFLLDRCQUE0QjtBQUVuQyxTQUFLLFdBQVcsUUFBUSxNQUFNO0FBQzlCLFNBQUssaUJBQWlCOztHQUV4QixJQUFXLFVBQU87QUFDaEIsV0FBTyxLQUFLOzs7Ozs7R0FRZCxJQUFvQixPQUFJO0FBQ3RCLFdBQU87O0dBR1QsY0FBQTtBQUNFLFdBQU87QUE1Q0QsU0FBQSw2QkFOSyxrQkFBQSxNQUFBLDJCQUFnQyxFQU1UO0FBQzVCLFNBQUEsc0JBQXNCLElBQUksc0JBQXNCLEtBQUs7QUFnQ3JELFNBQUEsV0FBb0I7O0FBMkZwQixTQUFBLDhCQUE4QixVQUE4QjtBQUNsRSxTQUFJLE1BQU0sUUFBUSxJQUNoQixNQUFLLHdCQUF3Qjs7O0FBS3pCLFNBQUEsK0JBQW9DO0FBQzFDLFNBQUksS0FBSyxTQUNQO0FBRUYsVUFBSyx1QkFBdUI7QUFDNUIsVUFBSyxVQUFVLENBQUMsS0FBSztBQUNyQixVQUFLLDRCQUE0QjtBQUVqQyxVQUFLLGNBQWMsSUFBSSxXQUFXLFNBQVM7TUFBRSxVQUFVO01BQU0sU0FBUztNQUFNLENBQUMsQ0FBQztBQUM5RSxVQUFLLGNBQWMsSUFBSSxNQUFNLFVBQVUsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFDOztBQS9GMUQsU0FBSyxtQkFBbUIsU0FBUyxLQUFLLHVCQUF1QjtBQUM3RCxTQUFLLG1CQUFtQixXQUFXLDZCQUE2QjtBQUNoRSxTQUFLLG1CQUFtQixTQUFTLEtBQUssMkJBQTJCOztHQUduRCx5QkFDZCxNQUNBLEtBQ0EsT0FBb0I7QUFHcEIsUUFBSSxTQUFTLGFBQWEsQ0FBQyxLQUFLLDBCQUM5QixPQUFNLHlCQUF5QixNQUFNLEtBQUssTUFBTTs7Ozs7OztHQVNwQyxvQkFBaUI7QUFDL0IsU0FBSyxVQUFVLEtBQUssYUFBYSxVQUFVO0FBQzNDLFNBQUssNEJBQTRCOzs7Ozs7Ozs7OztHQVluQix5QkFDZCxPQUNBLFNBQTBCO0FBRTFCLFFBQUksTUFDRixNQUFLLFVBQVUsVUFBVTs7R0FVVixrQkFBZTtBQUNoQyxRQUFJLEtBQUssUUFDUCxPQUFNLGlCQUFpQjtRQUV2QixNQUFLLFVBQVUsYUFBYSxLQUFLOztHQUlsQixZQUFTO0FBQzFCLFdBQU8sR0FBRyxLQUFLOztHQUdFLGVBQWUsTUFBNkI7QUFDN0QsV0FBTyxNQUFNLGVBQWUsS0FBSyxJQUFJLFNBQVMsYUFBYSxTQUFTOztHQUduRCxXQUFRO0FBQ3pCLFVBQU0sVUFBVTtBQUNoQixRQUFJLEtBQUssWUFBWSxDQUFDLEtBQUssUUFDekIsTUFBSyxnQkFDSCxnQkFDQSxxQkFBcUIsS0FBSyxvQkFBb0IsU0FDL0M7UUFFRCxNQUFLLG1CQUFtQixlQUFlOzs7QUE3SDlCLHNCQUFBLFlBQUEsd0JBQUE7Ozs7S0FzSlIifQ==
167
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWNoZWNrYm94LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtY2hlY2tib3gtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLnRzJztcbmltcG9ydCB7IGkxOG5DaGVja2JveFJlcXVpcmVkIH0gZnJvbSAnLi4vaTE4bi50cyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgU2JiRWxlbWVudEludGVybmFsc01peGluLFxuICB0eXBlIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpblR5cGUsXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yLFxufSBmcm9tICcuL2VsZW1lbnQtaW50ZXJuYWxzLW1peGluLnRzJztcbmltcG9ydCB7XG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbn0gZnJvbSAnLi9mb3JtLWFzc29jaWF0ZWQtbWl4aW4udHMnO1xuaW1wb3J0IHsgU2JiUmVxdWlyZWRNaXhpbiB9IGZyb20gJy4vcmVxdWlyZWQtbWl4aW4udHMnO1xuXG5pbnRlcmZhY2UgQ2hlY2tlZFNldHRlclZhbHVlIHtcbiAgdmFsdWU6IGJvb2xlYW47XG4gIGF0dHJpYnV0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZSBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oXG4gIFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oTGl0RWxlbWVudCkpKSxcbikge1xuICBwdWJsaWMgYWNjZXNzb3IgY2hlY2tlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24pOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgQGhvc3RBdHRyaWJ1dGVzKHtcbiAgICB0YWJpbmRleDogJzAnLFxuICB9KVxuICBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudFxuICAgIGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihTYmJSZXF1aXJlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oY29uZGl0aW9uYWxTdXBlckNsYXNzKSkpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+XG4gIHtcbiAgICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnY2hlY2tib3gnO1xuXG4gICAgcHJpdmF0ZSBfYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb250cm9sbGVyID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLiAqL1xuICAgIEBwcm9wZXJ0eSh7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgY29udmVydGVyOiB7XG4gICAgICAgIC4uLmRlZmF1bHRDb252ZXJ0ZXIsXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgc2V0dGVyIHNvIHRoYXQgd2Uga25vdyBpdCB3YXMgY2FsbGVkIGJ5IGF0dHJpYnV0ZSBjaGFuZ2UuXG4gICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCwgdHlwZT86IHVua25vd24pOiBDaGVja2VkU2V0dGVyVmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRDb252ZXJ0ZXIuZnJvbUF0dHJpYnV0ZT8uKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBhdHRyaWJ1dGU6IHRydWUgfSBhcyBDaGVja2VkU2V0dGVyVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVTZXR0ZXIgPVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gKHZhbHVlIGFzIHVua25vd24gYXMgQ2hlY2tlZFNldHRlclZhbHVlKS5hdHRyaWJ1dGUgOiBmYWxzZTtcbiAgICAgIGlmIChhdHRyaWJ1dGVTZXR0ZXIpIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBcyBzb29uIGFzIG11dGF0aW9uIHdhcyBkb25lIG5vdCBieSBzZXR0aW5nIGF0dHJpYnV0ZSxcbiAgICAgIC8vIHdlIG5lZWQgdG8gYmxvY2sgc3luY2luZyBhdHRyaWJ1dGUuXG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkICYmICFhdHRyaWJ1dGVTZXR0ZXIpIHtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NoZWNrZWQgPSBCb29sZWFuKHZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAnY2hlY2tib3gnXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5dXAnLCB0aGlzLl9oYW5kbGVLZXlib2FyZEludGVyYWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgb2xkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAvLyBBdHRyaWJ1dGUgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhZnRlciBwcm9ncmFtbWF0aWMgb3IgbWFudWFsIHN0YXRlIGNoYW5nZS5cbiAgICAgIGlmIChuYW1lICE9PSAnY2hlY2tlZCcgfHwgIXRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBmb3JtIGlzIGJlaW5nIHJlc2V0LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICAgIHRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBzdGF0ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZGl0aW9uYWwgbG9naWMgd2hpY2ggaXMgYmVpbmcgZXhlY3V0ZWQgd2hlbiB1c2VyXG4gICAgICogaW50ZXJhY3Rpb24gaGFwcGVucyBhbmQgc3RhdGUgaXMgbm90IGRpc2FibGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1TdGF0ZSgpOiBGb3JtUmVzdG9yZVN0YXRlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNoZWNrZWR9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAnY2hlY2tlZCcgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgICAndmFsdWVNaXNzaW5nJyxcbiAgICAgICAgICBpMThuQ2hlY2tib3hSZXF1aXJlZFt0aGlzLl9sYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudF0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW5UeXBlPiAmXG4gICAgVDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOENBLElBQWEsa0NBQ1gsZUFDK0Q7Q0FFL0QsTUFBTSx3QkFBeUIsV0FBa0QsbUJBQzVFLGFBR0QseUJBQXlCLFdBQVc7Q0EySnhDLGNBdEorQzswQkFIOUMsZUFBZSxFQUNkLFVBQVUsS0FDWCxDQUFDLENBQUE7Ozs7b0JBRVEsaUJBQWlCLGlCQUFpQix1QkFBdUIsc0JBQXNCLENBQUMsQ0FBQzs7O3VEQUFqRixZQUFpRjs7Ozs7OytCQVN4RixTQUFTO0tBQ1IsTUFBTTtLQUNOLFdBQVc7TUFDVCxHQUFHO01BRUgsZ0JBQWdCLE9BQXNCLFNBQXNDO09BRTFFLE9BQU87UUFBRSxPQURNLGlCQUFpQixnQkFBZ0IsT0FBTyxLQUFLO1FBQ3BDLFdBQVc7UUFBNEI7OztLQUdwRSxDQUFDLENBQUE7SUFDRixhQUFBLE1BQUEsTUFBQSx5QkFBQTtLQUFBLE1BQUE7S0FBQSxNQUFBO0tBQUEsUUFBQTtLQUFBLFNBQUE7S0FBQSxRQUFBO01BQUEsTUFBQSxRQUFBLGFBQUE7TUFBQSxNQUFBLEtBQUEsVUFBQTtPQUFBLElBQVcsVUFBTzs7TUFBQTtLQUFBLFVBQUE7S0FBQSxFQUFBLE1BQUEsMkJBQUE7SUFyQnBCLGFBQUEsTUFBQSxtQkFBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLGtCQUFBO0tBQUEsTUFBQTtLQUFBLE1BQUEsV0FBQTtLQUFBLFVBQUE7S0FBQSxFQUFBLE1BQUEsd0JBQUE7Ozs7Ozs7Ozs7SUFJa0MsS0FBQSxPQUFPOzs7R0FpQnZDLElBQVcsUUFBUSxPQUFjO0lBQy9CLE1BQU0sa0JBQ0osT0FBTyxVQUFVLFdBQVksTUFBd0MsWUFBWTtJQUNuRixJQUFJLGlCQUNGLFFBQVMsTUFBd0M7SUFLbkQsSUFBSSxLQUFLLGNBQWMsQ0FBQyxpQkFDdEIsS0FBSyw0QkFBNEI7SUFFbkMsS0FBSyxXQUFXLFFBQVEsTUFBTTtJQUM5QixLQUFLLGlCQUFpQjs7R0FFeEIsSUFBVyxVQUFPO0lBQ2hCLE9BQU8sS0FBSzs7Ozs7O0dBUWQsSUFBb0IsT0FBSTtJQUN0QixPQUFPOztHQUdULGNBQUE7SUFDRSxPQUFPO0lBNUNELEtBQUEsNkJBTkssa0JBQUEsTUFBQSwyQkFBZ0MsRUFNVDtJQUM1QixLQUFBLHNCQUFzQixJQUFJLHNCQUFzQixLQUFLO0lBZ0NyRCxLQUFBLFdBQW9COztJQTJGcEIsS0FBQSw4QkFBOEIsVUFBOEI7S0FDbEUsSUFBSSxNQUFNLFFBQVEsS0FDaEIsS0FBSyx3QkFBd0I7OztJQUt6QixLQUFBLCtCQUFvQztLQUMxQyxJQUFJLEtBQUssVUFDUDtLQUVGLEtBQUssdUJBQXVCO0tBQzVCLEtBQUssVUFBVSxDQUFDLEtBQUs7S0FDckIsS0FBSyw0QkFBNEI7S0FFakMsS0FBSyxjQUFjLElBQUksV0FBVyxTQUFTO01BQUUsVUFBVTtNQUFNLFNBQVM7TUFBTSxDQUFDLENBQUM7S0FDOUUsS0FBSyxjQUFjLElBQUksTUFBTSxVQUFVLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQzs7SUEvRjFELEtBQUssbUJBQW1CLFNBQVMsS0FBSyx1QkFBdUI7SUFDN0QsS0FBSyxtQkFBbUIsV0FBVyw2QkFBNkI7SUFDaEUsS0FBSyxtQkFBbUIsU0FBUyxLQUFLLDJCQUEyQjs7R0FHbkQseUJBQ2QsTUFDQSxLQUNBLE9BQW9CO0lBR3BCLElBQUksU0FBUyxhQUFhLENBQUMsS0FBSywyQkFDOUIsTUFBTSx5QkFBeUIsTUFBTSxLQUFLLE1BQU07Ozs7Ozs7R0FTcEMsb0JBQWlCO0lBQy9CLEtBQUssVUFBVSxLQUFLLGFBQWEsVUFBVTtJQUMzQyxLQUFLLDRCQUE0Qjs7Ozs7Ozs7Ozs7R0FZbkIseUJBQ2QsT0FDQSxTQUEwQjtJQUUxQixJQUFJLE9BQ0YsS0FBSyxVQUFVLFVBQVU7O0dBVVYsa0JBQWU7SUFDaEMsSUFBSSxLQUFLLFNBQ1AsTUFBTSxpQkFBaUI7U0FFdkIsS0FBSyxVQUFVLGFBQWEsS0FBSzs7R0FJbEIsWUFBUztJQUMxQixPQUFPLEdBQUcsS0FBSzs7R0FHRSxlQUFlLE1BQTZCO0lBQzdELE9BQU8sTUFBTSxlQUFlLEtBQUssSUFBSSxTQUFTLGFBQWEsU0FBUzs7R0FHbkQsV0FBUTtJQUN6QixNQUFNLFVBQVU7SUFDaEIsSUFBSSxLQUFLLFlBQVksQ0FBQyxLQUFLLFNBQ3pCLEtBQUssZ0JBQ0gsZ0JBQ0EscUJBQXFCLEtBQUssb0JBQW9CLFNBQy9DO1NBRUQsS0FBSyxtQkFBbUIsZUFBZTs7O0lBN0g5QixrQkFBQSxZQUFBLHdCQUFBOzs7O0tBc0pSIn0=
@@ -337,4 +337,4 @@ var SbbFormAssociatedInputMixin = (superClass) => {
337
337
  //#endregion
338
338
  export { SbbFormAssociatedInputMixin };
339
339
 
340
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWlucHV0LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtaW5wdXQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZXZlbnRPcHRpb25zLCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vYTExeS50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaXNCbGluaywgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuaW1wb3J0IHsgaTE4bklucHV0UmVxdWlyZWQgfSBmcm9tICcuLi9pMThuLnRzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluIH0gZnJvbSAnLi9kaXNhYmxlZC1taXhpbi50cyc7XG5pbXBvcnQge1xuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSxcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IsXG59IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZWFkb25seU1peGluIH0gZnJvbSAnLi9yZWFkb25seS1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi50cyc7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUgZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmb3JtRmllbGRBc3NvY2lhdGVkID0gdHJ1ZTtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZztcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKTtcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0KVxuICAgKi9cbiAgcHVibGljIHNlbGVjdCgpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHByZXBhcmVQYXN0ZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhbmd1YWdlOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXI7XG59XG5cbmNvbnN0IGNoZWNrUGxhaW50ZXh0T25seVN1cHBvcnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnUExBSU5URVhULU9OTFknKTtcblxuICAvLyBJZiBwbGFpbnRleHQtb25seSBpcyBzdXBwb3J0ZWQsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXNcbiAgLy8gcmV0dXJuZWQgYXMgbG93ZXItY2FzZSBmcm9tIHRoZSBwcm9wZXJ0eSBhY2Nlc3MuXG4gIHJldHVybiBkaXYuY29udGVudEVkaXRhYmxlID09PSAncGxhaW50ZXh0LW9ubHknO1xufTtcbmNvbnN0IHBsYWludGV4dE9ubHlTdXBwb3J0ZWQgPSBjaGVja1BsYWludGV4dE9ubHlTdXBwb3J0KCk7XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHRleHQgaW5wdXQgY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSksXG4gICAgKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3RleHRib3gnO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZm9ybUZpZWxkQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBlbGVtZW50IHdpdGggY29udGVudGVkaXRhYmxlIHdpbGwgbm90IGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFRvIGFjaGlldmUgcGFyaXR5XG4gICAgICogd2l0aCBhIG5hdGl2ZSB0ZXh0IGlucHV0LCB3ZSBuZWVkIHRvIHRyYWNrIHdoZXRoZXIgYSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSBuYXRpdmUgdGV4dCBpbnB1dCBhdHRlbXB0cyB0byBzdWJtaXQgdGhlIGZvcm0gd2hlbiBwcmVzc2luZyBFbnRlci5cbiAgICAgKiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUga2V5ZG93biBldmVudC5cbiAgICAgKiBXZSB0cmFjayB3aGV0aGVyIHRvIHJlcXVlc3Qgc3VibWl0LCB3aGljaCBzaG91bGQgb2NjdXIgYmVmb3JlIHRoZSBrZXl1cFxuICAgICAqIGV2ZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRyaWdnZXJTdWJtaXQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dC4gUmVmbGVjdHMgdGhlIGN1cnJlbnQgdGV4dCB2YWx1ZSBvZiB0aGlzIGlucHV0LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Rpc3BsYXl2YWx1ZWNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQbGFjZWhvbGRlciA9IHZhbHVlID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgPz8gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIC8vIFdlIHByaW1hcmlseSB1c2UgY2FwdHVyZSBldmVudCBsaXN0ZW5lcnMsIGFzIHdlIHdhbnRcbiAgICAgIC8vIG91ciBsaXN0ZW5lcnMgdG8gb2NjdXIgYmVmb3JlIGNvbnN1bWVyIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh0aGlzLnRleHRDb250ZW50ID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoJ3ZhbHVlJywgb2xkVmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2ludGVyYWN0ZWQnKTtcbiAgICAgICAgICB0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+ICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2UpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2UgcHJldmVudCByZWN1cnNpdmUgZXZlbnRzIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBldmVudCBmb3IgaXNUcnVzdGVkXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZmFsc2UgZm9yIG1hbnVhbGx5IGRpc3BhdGNoZWQgZXZlbnRzICh3aGljaCB3ZSBkaXNwYXRjaCBiZWxvdykuXG4gICAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRUcmlnZ2VyU3VibWl0ID0gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgaXNXZWJraXQgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICAgICAgICBldmVudC5pc1RydXN0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIFdlYmtpdCBwcmVzc2luZyBCYWNrc3BhY2Ugb3IgRGVsZXRlIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbGwgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnRlZGl0YWJsZSBpcyBzZXQgb24gYSB3ZWIgY29tcG9uZW50IGhvc3QuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGUgbm9ybWFsIGRlbGV0ZSBiZWhhdmlvci5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAvLyBJZiBhIHRleHQgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gZGVsZXRlIHRoaXMgcmFuZ2VcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIEJhY2tzcGFjZSwgd2Ugc2VsZWN0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbVxuICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZXRTdGFydChzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgJiYgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIERlbGV0ZSwgd2Ugc2VsZWN0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQgZGVsZXRlIGl0LlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNldEVuZChzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lciwgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAna2V5dXAnLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRyaWdnZXJTdWJtaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkVHJpZ2dlclN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlcXVlc3RTdWJtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhbGxvd3MgcGFzdGluZyByaWNoIGNvbnRlbnQgaW50byBpdHMgaG9zdC5cbiAgICAgIC8vIFdlIHByZXZlbnQgdGhpcyBieSBsaXN0ZW5pbmcgdG8gdGhlIHBhc3RlIGV2ZW50IGFuZFxuICAgICAgLy8gZXh0cmFjdGluZyB0aGUgcGxhaW4gdGV4dCBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAgLy8gYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCByYW5nZSAoY3Vyc29yIHBvc2l0aW9uXG4gICAgICAvLyBvciBzZWxlY3Rpb24pLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fY2xlYW5UZXh0KGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5wcmVwYXJlUGFzdGVkVGV4dCh0ZXh0KSkpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLnNldFN0YXJ0KHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBXaGVuIGZvY3VzaW5nIGEgdGV4dCBpbnB1dCB2aWEga2V5Ym9hcmQsIHRoZSB0ZXh0IGNvbnRlbnQgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICBpZiAoc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGluIEZpcmVmb3ggd2l0aCByZWFkb25seS5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnNlbGVjdEFsbENoaWxkcmVuKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCd0b3VjaGVuZCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJyZuYnNwOycpO1xuICAgICAgICAgIHRoaXMuX3NldEN1cnNvckF0KDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpICYmIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9uIGJsdXIgdGhlIG5hdGl2ZSB0ZXh0IGlucHV0IHNjcm9sbHMgdGhlIHRleHQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LlxuICAgICAgLy8gV2UgbWltaWMgdGhhdCBieSByZXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIGFsc28gdW5zZXQgYW55IHNlbGVjdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBuYXRpdmUgdGV4dCBpbnB1dC5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9LFxuICAgICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhTXVsdGlMaW5lID0gJ2ZhbHNlJztcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIHJlcGxhY2UgYW55IGNvbnRlbnQgYnkganVzdCB0aGUgdGV4dCBjb250ZW50LlxuICAgICAgdGhpcy5fYXNzaWduVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9wdGlvbnMpO1xuICAgICAgLy8gQnkgZGVmYXVsdCwgd2hlbiBjYWxsaW5nIGZvY3VzIG9uIGFuIGlucHV0IGVsZW1lbnQsIHRoZSBjdXJzb3IgaXMgcGxhY2VkXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0ZXh0LiBIb3dldmVyLCB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgdGhlIGN1cnNvclxuICAgICAgLy8gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcsIHNvIHdlIG1vdmUgaXQgdG8gdGhlIGVuZCwgaWYgdGhhdCBpcyB0aGUgY2FzZS5cbiAgICAgIGlmICh0aGlzLl9jYW5TZWxlY3QoKSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCh0aGlzLnRleHRDb250ZW50IS5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hdGl2ZSB0ZXh0IGlucHV0IGNoYW5nZXMgdGhlIHZhbHVlIHByb3BlcnR5IHdoZW4gdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc1xuICAgICAgICogY2hhbmdlZCB1bmRlciB0aGUgY29uZGl0aW9uIHRoYXQgbm8gaW5wdXQgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlIGNyZWF0aW9uXG4gICAgICAgKiBvciB0aGUgbGFzdCBmb3JtIHJlc2V0LlxuICAgICAgICovXG4gICAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyB8fCAhdGhpcy5tYXRjaGVzPy4oJzpzdGF0ZShpbnRlcmFjdGVkKScpKSB7XG4gICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdpbnRlcmFjdGVkJyk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENhbGxlZCB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byByZXN0b3JlIGVsZW1lbnTigJlzIHN0YXRlIHRvIHN0YXRlIGluIHdoaWNoIGNhc2VcbiAgICAgKiAgcmVhc29uIGlzIFwicmVzdG9yZVwiLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIFwiYXV0b2NvbXBsZXRlXCIuXG4gICAgICogIEluIHRoZSBjYXNlIG9mIFwicmVzdG9yZVwiLCBzdGF0ZSBpcyBhIHN0cmluZywgRmlsZSwgb3IgRm9ybURhdGEgb2JqZWN0XG4gICAgICogIHByZXZpb3VzbHkgc2V0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2V0Rm9ybVZhbHVlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCgpOiB2b2lkIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uc2VsZWN0QWxsQ2hpbGRyZW4odGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgYmVmb3JlIGZpcnN0VXBkYXRlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyB3cml0ZSBpdCB0aGUgZG9jdW1lbnQgdG8gYmUgdmlzdWFsbHkgc2VlblxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuaW5uZXJIVE1MLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgJiZcbiAgICAgICAgKG5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ2Zvcm1EaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ3JlYWRPbmx5JylcbiAgICAgICkge1xuICAgICAgICB0aGlzLl91cGRhdGVDb250ZW50ZWRpdGFibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuSW5wdXRSZXF1aXJlZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJlcGFyZVBhc3RlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVpcmVzRW1wdHlQYXRjaCgpOiBib29sZWFuIHtcbiAgICAgIC8vIEluIEJsaW5rLCBhIGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50IHdpdGggZW1wdHkgY29udGVudCB3aWxsIGNyYXNoXG4gICAgICAvLyB1cG9uIHJlY2VpdmluZyBmb2N1cywgd2hlbiBpbiBNb2JpbGUgbW9kZS5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgcGF0Y2ggdGhlIGVtcHR5IHN0YXRlIGJ5IGluc2VydGluZyBhIG5vbi1icmVha2luZyBzcGFjZS5cbiAgICAgIHJldHVybiBpc1NlcnZlclxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogaXNCbGluayAmJiB0aGlzLnZhbHVlID09PSAnJyAmJiB3aW5kb3cubWF0Y2hNZWRpYShTYmJNZWRpYVF1ZXJ5UG9pbnRlckNvYXJzZSkubWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25WYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEN1cnNvckF0KHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5maXJzdENoaWxkISwgcG9zaXRpb24pO1xuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFuVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIC8vIFRoZSBuYXRpdmUgdGV4dCBpbnB1dCByZW1vdmVzIGFsbCBuZXdsaW5lIGNoYXJhY3RlcnMgaWYgcGFzc2VkIHRvIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gJycgOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1tcXG5cXHJdKy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50KCk6IHZvaWQge1xuICAgICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIEBldmVudE9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfY2xlYW5DaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkRWxlbWVudENvdW50KSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpOiB2b2lkIHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVhZE9ubHkgPSB0aGlzLnJlYWRPbmx5ID8gJ3RydWUnIDogbnVsbDtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gdGhpcy5kaXNhYmxlZCA/ICd0cnVlJyA6IG51bGw7XG4gICAgICAgIC8vIFRPRE8oMjAyNik6IEZpcmVmb3ggc3VwcG9ydHMgcGxhaW50ZXh0LW9ubHkgc2luY2UgdmVyc2lvbiAxMzYgKE1hcmNoIDIwMjUpLlxuICAgICAgICAvLyBVbnRpbCB0aGlzIGlzIHBhcnQgb2Ygb3VyIGJhc2VsaW5lLCB3ZSBzaG91bGQgZmVhdHVyZSBjaGVjayB0byBlbmFibGUgaXQuXG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZE9ubHlcbiAgICAgICAgICAgID8gJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBwbGFpbnRleHRPbmx5U3VwcG9ydGVkXG4gICAgICAgICAgICAgID8gJ3BsYWludGV4dC1vbmx5J1xuICAgICAgICAgICAgICA6ICd0cnVlJztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHZhbHVlKTtcbiAgICAgICAgLy8gSW4gdGhlIHJlYWRvbmx5IGNhc2UsIHdlIGRpc2FibGUgY29udGVudGVkaXRhYmxlLCBidXQgaXQgc3RpbGxcbiAgICAgICAgLy8gbmVlZHMgdG8gYmUgZm9jdXNhYmxlLiBXZSBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0YWJpbmRleCBpbiB0aGF0IGNhc2UuXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgLyoqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS4gKi9cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYW5TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIWlzU2VydmVyICYmICF0aGlzLmRpc2FibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmICEhdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IHVua25vd24ge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jbGVhbkNoaWxkcmVufT48L3Nsb3Q+YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQTREQSxJQUFNLGtDQUEwQztBQUM5QyxLQUFJLFNBQ0YsUUFBTztDQUdULE1BQU0sTUFBTSxTQUFTLGNBQWMsTUFBTTtBQUN6QyxLQUFJLGFBQWEsbUJBQW1CLGlCQUFpQjtBQUlyRCxRQUFPLElBQUksb0JBQW9COztBQUVqQyxJQUFNLHlCQUF5QiwyQkFBMkI7Ozs7QUFNMUQsSUFBYSwrQkFDWCxlQUM0RDtDQUU1RCxNQUFNLHdCQUF5QixXQUFrRCxtQkFDNUUsYUFHRCx5QkFBeUIsV0FBVztBQWtheEMsZUFoYTRDO29CQUNsQyxpQkFDTixpQkFBaUIsaUJBQWlCLHVCQUF1QixzQkFBc0IsQ0FBQyxDQUFDLENBQ2xGOzs7OztlQUhZLHND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
340
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWlucHV0LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtaW5wdXQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZXZlbnRPcHRpb25zLCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vYTExeS50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaXNCbGluaywgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuaW1wb3J0IHsgaTE4bklucHV0UmVxdWlyZWQgfSBmcm9tICcuLi9pMThuLnRzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluIH0gZnJvbSAnLi9kaXNhYmxlZC1taXhpbi50cyc7XG5pbXBvcnQge1xuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSxcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IsXG59IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZWFkb25seU1peGluIH0gZnJvbSAnLi9yZWFkb25seS1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi50cyc7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUgZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmb3JtRmllbGRBc3NvY2lhdGVkID0gdHJ1ZTtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZztcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKTtcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0KVxuICAgKi9cbiAgcHVibGljIHNlbGVjdCgpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHByZXBhcmVQYXN0ZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhbmd1YWdlOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXI7XG59XG5cbmNvbnN0IGNoZWNrUGxhaW50ZXh0T25seVN1cHBvcnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnUExBSU5URVhULU9OTFknKTtcblxuICAvLyBJZiBwbGFpbnRleHQtb25seSBpcyBzdXBwb3J0ZWQsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXNcbiAgLy8gcmV0dXJuZWQgYXMgbG93ZXItY2FzZSBmcm9tIHRoZSBwcm9wZXJ0eSBhY2Nlc3MuXG4gIHJldHVybiBkaXYuY29udGVudEVkaXRhYmxlID09PSAncGxhaW50ZXh0LW9ubHknO1xufTtcbmNvbnN0IHBsYWludGV4dE9ubHlTdXBwb3J0ZWQgPSBjaGVja1BsYWludGV4dE9ubHlTdXBwb3J0KCk7XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHRleHQgaW5wdXQgY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSksXG4gICAgKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3RleHRib3gnO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZm9ybUZpZWxkQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBlbGVtZW50IHdpdGggY29udGVudGVkaXRhYmxlIHdpbGwgbm90IGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFRvIGFjaGlldmUgcGFyaXR5XG4gICAgICogd2l0aCBhIG5hdGl2ZSB0ZXh0IGlucHV0LCB3ZSBuZWVkIHRvIHRyYWNrIHdoZXRoZXIgYSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSBuYXRpdmUgdGV4dCBpbnB1dCBhdHRlbXB0cyB0byBzdWJtaXQgdGhlIGZvcm0gd2hlbiBwcmVzc2luZyBFbnRlci5cbiAgICAgKiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUga2V5ZG93biBldmVudC5cbiAgICAgKiBXZSB0cmFjayB3aGV0aGVyIHRvIHJlcXVlc3Qgc3VibWl0LCB3aGljaCBzaG91bGQgb2NjdXIgYmVmb3JlIHRoZSBrZXl1cFxuICAgICAqIGV2ZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRyaWdnZXJTdWJtaXQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dC4gUmVmbGVjdHMgdGhlIGN1cnJlbnQgdGV4dCB2YWx1ZSBvZiB0aGlzIGlucHV0LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Rpc3BsYXl2YWx1ZWNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQbGFjZWhvbGRlciA9IHZhbHVlID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgPz8gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIC8vIFdlIHByaW1hcmlseSB1c2UgY2FwdHVyZSBldmVudCBsaXN0ZW5lcnMsIGFzIHdlIHdhbnRcbiAgICAgIC8vIG91ciBsaXN0ZW5lcnMgdG8gb2NjdXIgYmVmb3JlIGNvbnN1bWVyIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh0aGlzLnRleHRDb250ZW50ID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoJ3ZhbHVlJywgb2xkVmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2ludGVyYWN0ZWQnKTtcbiAgICAgICAgICB0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+ICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2UpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2UgcHJldmVudCByZWN1cnNpdmUgZXZlbnRzIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBldmVudCBmb3IgaXNUcnVzdGVkXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZmFsc2UgZm9yIG1hbnVhbGx5IGRpc3BhdGNoZWQgZXZlbnRzICh3aGljaCB3ZSBkaXNwYXRjaCBiZWxvdykuXG4gICAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRUcmlnZ2VyU3VibWl0ID0gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgaXNXZWJraXQgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICAgICAgICBldmVudC5pc1RydXN0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIFdlYmtpdCBwcmVzc2luZyBCYWNrc3BhY2Ugb3IgRGVsZXRlIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbGwgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnRlZGl0YWJsZSBpcyBzZXQgb24gYSB3ZWIgY29tcG9uZW50IGhvc3QuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGUgbm9ybWFsIGRlbGV0ZSBiZWhhdmlvci5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAvLyBJZiBhIHRleHQgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gZGVsZXRlIHRoaXMgcmFuZ2VcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIEJhY2tzcGFjZSwgd2Ugc2VsZWN0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbVxuICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZXRTdGFydChzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgJiYgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIERlbGV0ZSwgd2Ugc2VsZWN0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQgZGVsZXRlIGl0LlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNldEVuZChzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lciwgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAna2V5dXAnLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRyaWdnZXJTdWJtaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkVHJpZ2dlclN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlcXVlc3RTdWJtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhbGxvd3MgcGFzdGluZyByaWNoIGNvbnRlbnQgaW50byBpdHMgaG9zdC5cbiAgICAgIC8vIFdlIHByZXZlbnQgdGhpcyBieSBsaXN0ZW5pbmcgdG8gdGhlIHBhc3RlIGV2ZW50IGFuZFxuICAgICAgLy8gZXh0cmFjdGluZyB0aGUgcGxhaW4gdGV4dCBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAgLy8gYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCByYW5nZSAoY3Vyc29yIHBvc2l0aW9uXG4gICAgICAvLyBvciBzZWxlY3Rpb24pLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fY2xlYW5UZXh0KGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5wcmVwYXJlUGFzdGVkVGV4dCh0ZXh0KSkpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLnNldFN0YXJ0KHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBXaGVuIGZvY3VzaW5nIGEgdGV4dCBpbnB1dCB2aWEga2V5Ym9hcmQsIHRoZSB0ZXh0IGNvbnRlbnQgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICBpZiAoc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGluIEZpcmVmb3ggd2l0aCByZWFkb25seS5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnNlbGVjdEFsbENoaWxkcmVuKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCd0b3VjaGVuZCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJyZuYnNwOycpO1xuICAgICAgICAgIHRoaXMuX3NldEN1cnNvckF0KDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpICYmIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9uIGJsdXIgdGhlIG5hdGl2ZSB0ZXh0IGlucHV0IHNjcm9sbHMgdGhlIHRleHQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LlxuICAgICAgLy8gV2UgbWltaWMgdGhhdCBieSByZXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIGFsc28gdW5zZXQgYW55IHNlbGVjdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBuYXRpdmUgdGV4dCBpbnB1dC5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9LFxuICAgICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhTXVsdGlMaW5lID0gJ2ZhbHNlJztcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIHJlcGxhY2UgYW55IGNvbnRlbnQgYnkganVzdCB0aGUgdGV4dCBjb250ZW50LlxuICAgICAgdGhpcy5fYXNzaWduVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9wdGlvbnMpO1xuICAgICAgLy8gQnkgZGVmYXVsdCwgd2hlbiBjYWxsaW5nIGZvY3VzIG9uIGFuIGlucHV0IGVsZW1lbnQsIHRoZSBjdXJzb3IgaXMgcGxhY2VkXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0ZXh0LiBIb3dldmVyLCB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgdGhlIGN1cnNvclxuICAgICAgLy8gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcsIHNvIHdlIG1vdmUgaXQgdG8gdGhlIGVuZCwgaWYgdGhhdCBpcyB0aGUgY2FzZS5cbiAgICAgIGlmICh0aGlzLl9jYW5TZWxlY3QoKSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCh0aGlzLnRleHRDb250ZW50IS5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hdGl2ZSB0ZXh0IGlucHV0IGNoYW5nZXMgdGhlIHZhbHVlIHByb3BlcnR5IHdoZW4gdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc1xuICAgICAgICogY2hhbmdlZCB1bmRlciB0aGUgY29uZGl0aW9uIHRoYXQgbm8gaW5wdXQgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlIGNyZWF0aW9uXG4gICAgICAgKiBvciB0aGUgbGFzdCBmb3JtIHJlc2V0LlxuICAgICAgICovXG4gICAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyB8fCAhdGhpcy5tYXRjaGVzPy4oJzpzdGF0ZShpbnRlcmFjdGVkKScpKSB7XG4gICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdpbnRlcmFjdGVkJyk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENhbGxlZCB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byByZXN0b3JlIGVsZW1lbnTigJlzIHN0YXRlIHRvIHN0YXRlIGluIHdoaWNoIGNhc2VcbiAgICAgKiAgcmVhc29uIGlzIFwicmVzdG9yZVwiLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIFwiYXV0b2NvbXBsZXRlXCIuXG4gICAgICogIEluIHRoZSBjYXNlIG9mIFwicmVzdG9yZVwiLCBzdGF0ZSBpcyBhIHN0cmluZywgRmlsZSwgb3IgRm9ybURhdGEgb2JqZWN0XG4gICAgICogIHByZXZpb3VzbHkgc2V0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2V0Rm9ybVZhbHVlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCgpOiB2b2lkIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uc2VsZWN0QWxsQ2hpbGRyZW4odGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgYmVmb3JlIGZpcnN0VXBkYXRlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyB3cml0ZSBpdCB0aGUgZG9jdW1lbnQgdG8gYmUgdmlzdWFsbHkgc2VlblxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuaW5uZXJIVE1MLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgJiZcbiAgICAgICAgKG5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ2Zvcm1EaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ3JlYWRPbmx5JylcbiAgICAgICkge1xuICAgICAgICB0aGlzLl91cGRhdGVDb250ZW50ZWRpdGFibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuSW5wdXRSZXF1aXJlZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJlcGFyZVBhc3RlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVpcmVzRW1wdHlQYXRjaCgpOiBib29sZWFuIHtcbiAgICAgIC8vIEluIEJsaW5rLCBhIGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50IHdpdGggZW1wdHkgY29udGVudCB3aWxsIGNyYXNoXG4gICAgICAvLyB1cG9uIHJlY2VpdmluZyBmb2N1cywgd2hlbiBpbiBNb2JpbGUgbW9kZS5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgcGF0Y2ggdGhlIGVtcHR5IHN0YXRlIGJ5IGluc2VydGluZyBhIG5vbi1icmVha2luZyBzcGFjZS5cbiAgICAgIHJldHVybiBpc1NlcnZlclxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogaXNCbGluayAmJiB0aGlzLnZhbHVlID09PSAnJyAmJiB3aW5kb3cubWF0Y2hNZWRpYShTYmJNZWRpYVF1ZXJ5UG9pbnRlckNvYXJzZSkubWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25WYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEN1cnNvckF0KHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5maXJzdENoaWxkISwgcG9zaXRpb24pO1xuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFuVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIC8vIFRoZSBuYXRpdmUgdGV4dCBpbnB1dCByZW1vdmVzIGFsbCBuZXdsaW5lIGNoYXJhY3RlcnMgaWYgcGFzc2VkIHRvIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gJycgOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1tcXG5cXHJdKy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50KCk6IHZvaWQge1xuICAgICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIEBldmVudE9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfY2xlYW5DaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkRWxlbWVudENvdW50KSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpOiB2b2lkIHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVhZE9ubHkgPSB0aGlzLnJlYWRPbmx5ID8gJ3RydWUnIDogbnVsbDtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gdGhpcy5kaXNhYmxlZCA/ICd0cnVlJyA6IG51bGw7XG4gICAgICAgIC8vIFRPRE8oMjAyNik6IEZpcmVmb3ggc3VwcG9ydHMgcGxhaW50ZXh0LW9ubHkgc2luY2UgdmVyc2lvbiAxMzYgKE1hcmNoIDIwMjUpLlxuICAgICAgICAvLyBVbnRpbCB0aGlzIGlzIHBhcnQgb2Ygb3VyIGJhc2VsaW5lLCB3ZSBzaG91bGQgZmVhdHVyZSBjaGVjayB0byBlbmFibGUgaXQuXG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZE9ubHlcbiAgICAgICAgICAgID8gJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBwbGFpbnRleHRPbmx5U3VwcG9ydGVkXG4gICAgICAgICAgICAgID8gJ3BsYWludGV4dC1vbmx5J1xuICAgICAgICAgICAgICA6ICd0cnVlJztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHZhbHVlKTtcbiAgICAgICAgLy8gSW4gdGhlIHJlYWRvbmx5IGNhc2UsIHdlIGRpc2FibGUgY29udGVudGVkaXRhYmxlLCBidXQgaXQgc3RpbGxcbiAgICAgICAgLy8gbmVlZHMgdG8gYmUgZm9jdXNhYmxlLiBXZSBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0YWJpbmRleCBpbiB0aGF0IGNhc2UuXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgLyoqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS4gKi9cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYW5TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIWlzU2VydmVyICYmICF0aGlzLmRpc2FibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmICEhdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IHVua25vd24ge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jbGVhbkNoaWxkcmVufT48L3Nsb3Q+YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQTREQSxJQUFNLGtDQUEwQztDQUM5QyxJQUFJLFVBQ0YsT0FBTztDQUdULE1BQU0sTUFBTSxTQUFTLGNBQWMsTUFBTTtDQUN6QyxJQUFJLGFBQWEsbUJBQW1CLGlCQUFpQjtDQUlyRCxPQUFPLElBQUksb0JBQW9COztBQUVqQyxJQUFNLHlCQUF5QiwyQkFBMkI7Ozs7QUFNMUQsSUFBYSwrQkFDWCxlQUM0RDtDQUU1RCxNQUFNLHdCQUF5QixXQUFrRCxtQkFDNUUsYUFHRCx5QkFBeUIsV0FBVztDQWtheEMsY0FoYTRDO29CQUNsQyxpQkFDTixpQkFBaUIsaUJBQWlCLHVCQUF1QixzQkFBc0IsQ0FBQyxDQUFDLENBQ2xGOzs7OztlQUhZLHND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
@@ -291,4 +291,4 @@ var SbbFormAssociatedMixin = (superClass) => {
291
291
  //#endregion
292
292
  export { SbbFormAssociatedMixin };
293
293
 
294
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5RGVjbGFyYXRpb24sIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSB9IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGN1c3RvbSB2YWxpZGl0eSBzdGF0ZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgaW50ZXJmYWNlIEN1c3RvbVZhbGlkaXR5U3RhdGUge31cbiAgaW50ZXJmYWNlIFZhbGlkaXR5U3RhdGUgZXh0ZW5kcyBDdXN0b21WYWxpZGl0eVN0YXRlIHt9XG4gIGludGVyZmFjZSBWYWxpZGl0eVN0YXRlRmxhZ3MgZXh0ZW5kcyBQYXJ0aWFsPEN1c3RvbVZhbGlkaXR5U3RhdGU+IHt9XG59XG5cbmNvbnN0IHZhbGlkaXR5S2V5czogUmVxdWlyZWQ8T21pdDxWYWxpZGl0eVN0YXRlRmxhZ3MsIGtleW9mIEN1c3RvbVZhbGlkaXR5U3RhdGU+PiA9IHtcbiAgYmFkSW5wdXQ6IGZhbHNlLFxuICBjdXN0b21FcnJvcjogZmFsc2UsXG4gIHBhdHRlcm5NaXNtYXRjaDogZmFsc2UsXG4gIHJhbmdlT3ZlcmZsb3c6IGZhbHNlLFxuICByYW5nZVVuZGVyZmxvdzogZmFsc2UsXG4gIHN0ZXBNaXNtYXRjaDogZmFsc2UsXG4gIHRvb0xvbmc6IGZhbHNlLFxuICB0b29TaG9ydDogZmFsc2UsXG4gIHR5cGVNaXNtYXRjaDogZmFsc2UsXG4gIHZhbHVlTWlzc2luZzogZmFsc2UsXG59O1xuLy8gV2UgbmVlZCBWYWxpZGl0eVN0YXRlIGluIHRoZSBnbG9iYWwgY29udGV4dCwgYXMgd2UgY2hlY2sgdGhlIHByb3RvdHlwZSBmb3Jcbi8vIGV4dGVuc2lvbnMuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGF0IGlzIG5vdCB0aGUgY2FzZSAoZS5nLiBOb2RlLmpzKSB3ZVxuLy8gcGF0Y2ggaXQgd2l0aCBhIG1pbmltYWwgc2hpbS5cbmlmICh0eXBlb2YgVmFsaWRpdHlTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgdmFsaWRpdHlDbGFzcyA9IGNsYXNzIFZhbGlkaXR5U3RhdGUge1xuICAgIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5lbnRyaWVzKHZhbGlkaXR5S2V5cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgIE9iamVjdC5hc3NpZ24odmFsaWRpdHlDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGdldCBba2V5XSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbiAgZ2xvYmFsVGhpcy5WYWxpZGl0eVN0YXRlID0gdmFsaWRpdHlDbGFzcyBhcyB1bmtub3duIGFzIHR5cGVvZiBWYWxpZGl0eVN0YXRlO1xufVxuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgYWNjZXNzb3IgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBhY2Nlc3NvciB2YWx1ZTogdW5rbm93bjtcblxuICBwdWJsaWMgZ2V0IHZhbGlkaXR5KCk6IFZhbGlkaXR5U3RhdGU7XG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHdpbGxWYWxpZGF0ZSgpOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIGNoZWNrVmFsaWRpdHkoKTogYm9vbGVhbjtcbiAgcHVibGljIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyBzZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xuICBwcm90ZWN0ZWQgZm9ybVN0YXRlPygpOiBGb3JtUmVzdG9yZVN0YXRlO1xuICBwcm90ZWN0ZWQgc2V0VmFsaWRpdHlGbGFnPFQgZXh0ZW5kcyBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3M+KFxuICAgIGZsYWc6IFQsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGZsYWdWYWx1ZT86IFZhbGlkaXR5U3RhdGVGbGFnc1tUXSxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIHJlbW92ZVZhbGlkaXR5RmxhZzxUIGV4dGVuZHMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzPihmbGFnOiBUKTogdm9pZDtcbiAgcHJvdGVjdGVkIHZhbGlkYXRlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEZvcm1Bc3NvY2lhdGVkTWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjdXN0b20gY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4sXG4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50XG4gICAgZXh0ZW5kcyBzdXBlckNsYXNzXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgYWNjZXNzb3IgdmFsdWU6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmb3JtIG93bmVyIG9mIHRoaXMgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcm0oKTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMuZm9ybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBmb3JtIGVsZW1lbnQuIFdpbGwgYmUgcmVhZCBmcm9tIG5hbWUgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIERldmVsb3BlciBub3RlOiBJbiB0aGlzIGNhc2UgdXBkYXRpbmcgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIER1ZSB0byB0aGlzIGl0IGlzIGltcGxlbWVudGVkIGFzIGEgZ2V0dGVyL3NldHRlciBhbmQgdGhlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIGhhbmRsZXMgdGhlIGRpZmYgY2hlY2suXG4gICAgICovXG4gICAgQHByb3BlcnR5KClcbiAgICBwdWJsaWMgc2V0IG5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke25hbWV9YCk7XG5cbiAgICAgIC8vIEZvciBgRm9ybURhdGFgIHZhbHVlcywgd2UgaGF2ZSB0byBtYW51YWxseSB1cGRhdGUgdGhlIGZpZWxkTmFtZSBrZXlcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFZhbGlkaXR5U3RhdGUgb2JqZWN0IGZvciB0aGlzIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVycm9yIG1lc3NhZ2UsIGlmIGF2YWlsYWJsZSwgd2hpY2ggY29ycmVzcG9uZHNcbiAgICAgKiB0byB0aGUgY3VycmVudCB2YWxpZGF0aW9uIHN0YXRlLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgb25seSBvbmUgbWVzc2FnZSBpcyByZXR1cm5lZCBhdCBhIHRpbWUgKGUuZy4gaWZcbiAgICAgKiBtdWx0aXBsZSB2YWxpZGl0eSBzdGF0ZXMgYXJlIGludmFsaWQsIG9ubHkgdGhlIGNocm9ub2xvZ2ljYWxseSBmaXJzdCBvbmVcbiAgICAgKiBpcyByZXR1cm5lZCB1bnRpbCBpdCBpcyBmaXhlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG5leHQgbWVzc2FnZSBtaWdodCBiZVxuICAgICAqIHJldHVybmVkLCBpZiBpdCBpcyBzdGlsbCBhcHBsaWNhYmxlKS4gQWxzbywgYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgICAqIChzZWUgYmVsb3cpIGhhcyBwcmVjZWRlbmNlIG92ZXIgbmF0aXZlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lsbFZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLndpbGxWYWxpZGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGl0eVN0YXRlcyA9IG5ldyBNYXA8XG4gICAgICBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3MsXG4gICAgICB7IGZsYWdWYWx1ZTogdW5rbm93bjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICA+KCk7XG5cbiAgICAvKiogV2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIG9yIGZpZWxkc2V0IGlzIGNoYW5naW5nIGl0cyBkaXNhYmxlZCBzdGF0ZS4gKi9cbiAgICBAc3RhdGUoKSBwcm90ZWN0ZWQgYWNjZXNzb3IgZm9ybURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgICAgLy8gdG8gYmUgc2hvd24uIFRoaXMgYWxzbyBwcmV2ZW50cyBhIGJ1ZyBpbiBXZWJLaXQsIHdoaWNoIHdvdWxkIG5vdFxuICAgICAgLy8gYWxsb3cgaG9zdCBhcyB0aGUgdmFsaWRpdHkgYW5jaG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODMyXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2hlY2tWYWxpZGl0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy5jaGVja1ZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IG90aGVyd2lzZSxcbiAgICAgKiByZXR1cm5zIGZhbHNlLCBmaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50LFxuICAgICAqIGFuZCAoaWYgdGhlIGV2ZW50IGlzbid0IGNhbmNlbGVkKSByZXBvcnRzIHRoZSBwcm9ibGVtIHRvIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy5yZXBvcnRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlIGZvciB0aGlzIGVsZW1lbnQuIFVzZSB0aGUgZW1wdHkgc3RyaW5nXG4gICAgICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgY3VzdG9tIHZhbGlkaXR5IGVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCdjdXN0b21FcnJvcicsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ2N1c3RvbUVycm9yJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgZm9ybSBlbGVtZW50IGNoYW5nZXMuXG4gICAgICogRWxlbWVudEludGVybmFscy5mb3JtIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgZnJvbSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2s/KGZvcm06IEhUTUxGb3JtRWxlbWVudCB8IG51bGwpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW5ldmVyIGEgc3Vycm91bmRpbmcgZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhfZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gdGhpcy5faGFzRGlzYWJsZWRBbmNlc3RvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhc0Rpc2FibGVkQW5jZXN0b3IoKTogYm9vbGVhbiB7XG4gICAgICAvLyBDaGVjayBpZiBhbnkgb2YgdGhlIGZpZWxkc2V0IGFuY2VzdG9ycyBoYXMgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBzZXQuXG4gICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAobmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCAmJiB0aGlzLnNob3VsZFZhbGlkYXRlKG5hbWUpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZm9ybSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAqIEFkYXB0cyBhbmQgc2V0cyB0aGUgZm9ybVZhbHVlIGluIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IChzdHJpbmcgfCBGb3JtRGF0YSB8IEZpbGUgfCBudWxsKVxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldEZvcm1WYWx1ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBsZXQgZm9ybVZhbHVlOiBGb3JtRGF0YSB8IHN0cmluZyB8IG51bGw7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lID8/IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGZvcm1WYWx1ZSA9IHRoaXMudmFsdWUgYXMgc3RyaW5nIHwgbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICBmb3JtVmFsdWUgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIChmb3JtVmFsdWUgYXMgRm9ybURhdGEpLmFwcGVuZChcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gZWxcbiAgICAgICAgICAgICAgOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZWwpXSwge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybVZhbHVlID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1WYWx1ZS5hcHBlbmQoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSldLCB7XG4gICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmb3JtIHN0YXRlIGlzIHVuZGVmaW5lZCB0aGVuIGZvcm0gdmFsdWUgd2lsbCBiZSBjb3BpZWQgdG8gc3RhdGUuXG4gICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUoZm9ybVZhbHVlLCB0aGlzLmZvcm1TdGF0ZT8uKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JtU3RhdGU/KCk6IEZvcm1SZXN0b3JlU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGlzIGVsZW1lbnQgYXMgc3VmZmVyaW5nIGZyb20gdGhlIGNvbnN0cmFpbnQgaW5kaWNhdGVkIGJ5IHRoZVxuICAgICAqIGZsYWcgYXJndW1lbnQgYW5kIGFzc29jaWF0ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gaXQuXG4gICAgICogTm90ZSB0aGF0IG9ubHkgb25lIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGF0IGEgdGltZSBhbmQgY3VzdG9tIG1lc3NhZ2VzIGJ5XG4gICAgICogY29uc3VtZXJzIGFyZSBhbHdheXMgZGlzcGxheWVkIGJlZm9yZSBpbnRlcm5hbCBtZXNzYWdlcyBhbmQgaW50ZXJuYWxcbiAgICAgKiBtZXNzYWdlcyBhcmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuXG4gICAgICogVG8gc2V0L2RlZmluZSBjdXN0b20gdmFsaWRpdHkgc3RhdGUgZmxhZ3MsIHlvdSBuZWVkIHRvIGV4dGVuZCB0aGVcbiAgICAgKiBWYWxpZGl0eVN0YXRlIHByb3RvdHlwZSAoYW5kIHRoZSBDdXN0b21WYWxpZGl0eVN0YXRlIGludGVyZmFjZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAvLyBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIHZhbGlkaXR5IHN0YXRlIGRvZXMgbm90IG5lZWQgdG8gYmUgYm9vbGVhbi5cbiAgICAgKiAgIE9iamVjdC5hc3NpZ24oVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUsIHtcbiAgICAgKiAgICAgZ2V0IG15RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICogICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAqICAgICB9LFxuICAgICAqICAgfSk7XG4gICAgICpcbiAgICAgKiAgIGRlY2xhcmUgZ2xvYmFsIHtcbiAgICAgKiAgICAgaW50ZXJmYWNlIEN1c3RvbVZhbGlkaXR5U3RhdGUge1xuICAgICAqICAgICAgIG15RXJyb3I6IGJvb2xlYW47XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsaWRpdHlGbGFnPFQgZXh0ZW5kcyBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3M+KFxuICAgICAgZmxhZzogVCxcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGZsYWdWYWx1ZT86IFZhbGlkaXR5U3RhdGVGbGFnc1tUXSxcbiAgICApOiB2b2lkIHtcbiAgICAgIGZsYWdWYWx1ZSA/Pz0gdHJ1ZTtcbiAgICAgIGNvbnN0IHZhbGlkaXR5U3RhdGUgPSB0aGlzLl92YWxpZGl0eVN0YXRlcy5nZXQoZmxhZyk7XG4gICAgICBpZiAoXG4gICAgICAgICF2YWxpZGl0eVN0YXRlIHx8XG4gICAgICAgIHZhbGlkaXR5U3RhdGUubWVzc2FnZSAhPT0gbWVzc2FnZSB8fFxuICAgICAgICB2YWxpZGl0eVN0YXRlLmZsYWdWYWx1ZSAhPT0gZmxhZ1ZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fdmFsaWRpdHlTdGF0ZXMuc2V0KGZsYWcsIHsgZmxhZ1ZhbHVlLCBtZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLl9zZXRJbnRlcm5hbFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgdGhlIHZhbGlkaXR5IHN0YXRlIGZsYWcgZW50cnkgYW5kIHVwZGF0ZXMgdmFsaWRpdHkgc3RhdGUuICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZVZhbGlkaXR5RmxhZzxUIGV4dGVuZHMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzPihmbGFnOiBUKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5fdmFsaWRpdHlTdGF0ZXMuaGFzKGZsYWcpKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmRlbGV0ZShmbGFnKTtcbiAgICAgICAgdGhpcy5fc2V0SW50ZXJuYWxWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBUbyBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQuICovXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKCk6IHZvaWQge31cblxuICAgIC8qKiBXaGV0aGVyIHZhbGlkYXRpb24gc2hvdWxkIGJlIHJ1biBvbiBhIHByb3BlcnR5IGNoYW5nZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIHByb3RlY3RlZCBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFuYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEludGVybmFsVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgICBsZXQgb3V0cHV0TWVzc2FnZSA9IHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmdldCgnY3VzdG9tRXJyb3InKT8ubWVzc2FnZTtcbiAgICAgIGNvbnN0IGZsYWdzOiBWYWxpZGl0eVN0YXRlRmxhZ3MgPSB7fTtcbiAgICAgIHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmZvckVhY2goKHsgZmxhZ1ZhbHVlLCBtZXNzYWdlIH0sIGZsYWcpID0+IHtcbiAgICAgICAgZmxhZ3NbZmxhZ10gPSBmbGFnVmFsdWUgYXMgYW55O1xuICAgICAgICBvdXRwdXRNZXNzYWdlIHx8PSBtZXNzYWdlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN1c3RvbUZsYWdzID0gT2JqZWN0LmtleXMoVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUpLmZpbHRlcihcbiAgICAgICAgKGYpID0+ICEoZiBpbiB2YWxpZGl0eUtleXMpICYmIGYgIT09ICd2YWxpZCcsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBmbGFnIG9mIGN1c3RvbUZsYWdzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmxhZyBpbiBmbGFncyA/IGZsYWdzW2ZsYWcgYXMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzXSA6IGZhbHNlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5pbnRlcm5hbHMudmFsaWRpdHksIGZsYWcsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gSWYgYW55IGN1c3RvbSBlcnJvcnMgYXJlIHByb3ZpZGVkLCB3ZSBuZWVkIHRvIHNldCBjdXN0b21FcnJvciB0byB0cnVlLFxuICAgICAgICAgIC8vIGFzIHRoaXMgaXMgdGhlIG9ubHkgY3VzdG9tIGVycm9yIHByb3BlcnR5IGJyb3dzZXJzIGFjY2VwdC5cbiAgICAgICAgICBmbGFncy5jdXN0b21FcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0VmFsaWRpdHkoZmxhZ3MsIG91dHB1dE1lc3NhZ2UpO1xuXG4gICAgICAvLyBXZWJLaXQgc2VlbXMgdG8gYWx3YXlzIHNldCBjdXN0b21FcnJvciB0byB0cnVlLCBpZiBhbnkgZXJyb3IgaXMgYWN0aXZlLlxuICAgICAgLy8gRHVlIHRvIHRoaXMgd2UgcGF0Y2ggdGhlIGN1c3RvbUVycm9yIHZhbHVlIG1hbnVhbGx5LlxuICAgICAgaWYgKGlzV2Via2l0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmludGVybmFscy52YWxpZGl0eSwgJ2N1c3RvbUVycm9yJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWxpZGl0eVN0YXRlcy5oYXMoJ2N1c3RvbUVycm9yJykgfHwgISFmbGFncy5jdXN0b21FcnJvcixcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLyoqXG4gKiBBIHZhbHVlIHRvIGJlIHJlc3RvcmVkIGZvciBhIGNvbXBvbmVudCdzIGZvcm0gdmFsdWUuIElmIGEgY29tcG9uZW50J3MgZm9ybVxuICogc3RhdGUgaXMgYSBgRm9ybURhdGFgIG9iamVjdCwgaXRzIGVudHJ5IGxpc3Qgb2YgbmFtZSBhbmQgdmFsdWVzIHdpbGwgYmVcbiAqIHByb3ZpZGVkLlxuICovXG5leHBvcnQgdHlwZSBGb3JtUmVzdG9yZVN0YXRlID0gc3RyaW5nIHwgRm9ybURhdGEgfCBGaWxlO1xuXG4vKipcbiAqIFRoZSByZWFzb24gYSBmb3JtIGNvbXBvbmVudCBpcyBiZWluZyByZXN0b3JlZCBmb3IsIGVpdGhlciBgJ3Jlc3RvcmUnYCBmb3JcbiAqIGJyb3dzZXIgcmVzdG9yYXRpb24gb3IgYCdhdXRvY29tcGxldGUnYCBmb3IgcmVzdG9yaW5nIHVzZXIgdmFsdWVzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbiA9ICdyZXN0b3JlJyB8ICdhdXRvY29tcGxldGUnO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBa0JBLElBQU0sZUFBOEU7Q0FDbEYsVUFBVTtDQUNWLGFBQWE7Q0FDYixpQkFBaUI7Q0FDakIsZUFBZTtDQUNmLGdCQUFnQjtDQUNoQixjQUFjO0NBQ2QsU0FBUztDQUNULFVBQVU7Q0FDVixjQUFjO0NBQ2QsY0FBYztDQUNmO0FBSUQsSUFBSSxPQUFPLGtCQUFrQixhQUFhO0NBQ3hDLE1BQU0sZ0JBQWdCLE1BQU0sY0FBYTtFQUN2QyxJQUFXLFFBQUs7QUFDZCxVQUFPOztFQUVULGNBQUE7QUFDRSxTQUFNLElBQUksVUFBVSxzQkFBc0I7OztBQUc5QyxRQUFPLFFBQVEsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFdBQzFDLE9BQU8sT0FBTyxjQUFjLFdBQVcsRUFDckMsS0FBSyxPQUFJO0FBQ1AsU0FBTztJQUVWLENBQUMsQ0FDSDtBQUNELFlBQVcsZ0JBQWdCOzs7OztBQTRDN0IsSUFBYSwwQkFHWCxlQUN1RDtB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
294
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5RGVjbGFyYXRpb24sIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSB9IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGN1c3RvbSB2YWxpZGl0eSBzdGF0ZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgaW50ZXJmYWNlIEN1c3RvbVZhbGlkaXR5U3RhdGUge31cbiAgaW50ZXJmYWNlIFZhbGlkaXR5U3RhdGUgZXh0ZW5kcyBDdXN0b21WYWxpZGl0eVN0YXRlIHt9XG4gIGludGVyZmFjZSBWYWxpZGl0eVN0YXRlRmxhZ3MgZXh0ZW5kcyBQYXJ0aWFsPEN1c3RvbVZhbGlkaXR5U3RhdGU+IHt9XG59XG5cbmNvbnN0IHZhbGlkaXR5S2V5czogUmVxdWlyZWQ8T21pdDxWYWxpZGl0eVN0YXRlRmxhZ3MsIGtleW9mIEN1c3RvbVZhbGlkaXR5U3RhdGU+PiA9IHtcbiAgYmFkSW5wdXQ6IGZhbHNlLFxuICBjdXN0b21FcnJvcjogZmFsc2UsXG4gIHBhdHRlcm5NaXNtYXRjaDogZmFsc2UsXG4gIHJhbmdlT3ZlcmZsb3c6IGZhbHNlLFxuICByYW5nZVVuZGVyZmxvdzogZmFsc2UsXG4gIHN0ZXBNaXNtYXRjaDogZmFsc2UsXG4gIHRvb0xvbmc6IGZhbHNlLFxuICB0b29TaG9ydDogZmFsc2UsXG4gIHR5cGVNaXNtYXRjaDogZmFsc2UsXG4gIHZhbHVlTWlzc2luZzogZmFsc2UsXG59O1xuLy8gV2UgbmVlZCBWYWxpZGl0eVN0YXRlIGluIHRoZSBnbG9iYWwgY29udGV4dCwgYXMgd2UgY2hlY2sgdGhlIHByb3RvdHlwZSBmb3Jcbi8vIGV4dGVuc2lvbnMuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGF0IGlzIG5vdCB0aGUgY2FzZSAoZS5nLiBOb2RlLmpzKSB3ZVxuLy8gcGF0Y2ggaXQgd2l0aCBhIG1pbmltYWwgc2hpbS5cbmlmICh0eXBlb2YgVmFsaWRpdHlTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgdmFsaWRpdHlDbGFzcyA9IGNsYXNzIFZhbGlkaXR5U3RhdGUge1xuICAgIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5lbnRyaWVzKHZhbGlkaXR5S2V5cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgIE9iamVjdC5hc3NpZ24odmFsaWRpdHlDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGdldCBba2V5XSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbiAgZ2xvYmFsVGhpcy5WYWxpZGl0eVN0YXRlID0gdmFsaWRpdHlDbGFzcyBhcyB1bmtub3duIGFzIHR5cGVvZiBWYWxpZGl0eVN0YXRlO1xufVxuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgYWNjZXNzb3IgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBhY2Nlc3NvciB2YWx1ZTogdW5rbm93bjtcblxuICBwdWJsaWMgZ2V0IHZhbGlkaXR5KCk6IFZhbGlkaXR5U3RhdGU7XG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHdpbGxWYWxpZGF0ZSgpOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIGNoZWNrVmFsaWRpdHkoKTogYm9vbGVhbjtcbiAgcHVibGljIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyBzZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xuICBwcm90ZWN0ZWQgZm9ybVN0YXRlPygpOiBGb3JtUmVzdG9yZVN0YXRlO1xuICBwcm90ZWN0ZWQgc2V0VmFsaWRpdHlGbGFnPFQgZXh0ZW5kcyBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3M+KFxuICAgIGZsYWc6IFQsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGZsYWdWYWx1ZT86IFZhbGlkaXR5U3RhdGVGbGFnc1tUXSxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIHJlbW92ZVZhbGlkaXR5RmxhZzxUIGV4dGVuZHMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzPihmbGFnOiBUKTogdm9pZDtcbiAgcHJvdGVjdGVkIHZhbGlkYXRlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEZvcm1Bc3NvY2lhdGVkTWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjdXN0b20gY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4sXG4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50XG4gICAgZXh0ZW5kcyBzdXBlckNsYXNzXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgYWNjZXNzb3IgdmFsdWU6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmb3JtIG93bmVyIG9mIHRoaXMgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcm0oKTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMuZm9ybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBmb3JtIGVsZW1lbnQuIFdpbGwgYmUgcmVhZCBmcm9tIG5hbWUgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIERldmVsb3BlciBub3RlOiBJbiB0aGlzIGNhc2UgdXBkYXRpbmcgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIER1ZSB0byB0aGlzIGl0IGlzIGltcGxlbWVudGVkIGFzIGEgZ2V0dGVyL3NldHRlciBhbmQgdGhlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIGhhbmRsZXMgdGhlIGRpZmYgY2hlY2suXG4gICAgICovXG4gICAgQHByb3BlcnR5KClcbiAgICBwdWJsaWMgc2V0IG5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke25hbWV9YCk7XG5cbiAgICAgIC8vIEZvciBgRm9ybURhdGFgIHZhbHVlcywgd2UgaGF2ZSB0byBtYW51YWxseSB1cGRhdGUgdGhlIGZpZWxkTmFtZSBrZXlcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFZhbGlkaXR5U3RhdGUgb2JqZWN0IGZvciB0aGlzIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVycm9yIG1lc3NhZ2UsIGlmIGF2YWlsYWJsZSwgd2hpY2ggY29ycmVzcG9uZHNcbiAgICAgKiB0byB0aGUgY3VycmVudCB2YWxpZGF0aW9uIHN0YXRlLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgb25seSBvbmUgbWVzc2FnZSBpcyByZXR1cm5lZCBhdCBhIHRpbWUgKGUuZy4gaWZcbiAgICAgKiBtdWx0aXBsZSB2YWxpZGl0eSBzdGF0ZXMgYXJlIGludmFsaWQsIG9ubHkgdGhlIGNocm9ub2xvZ2ljYWxseSBmaXJzdCBvbmVcbiAgICAgKiBpcyByZXR1cm5lZCB1bnRpbCBpdCBpcyBmaXhlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG5leHQgbWVzc2FnZSBtaWdodCBiZVxuICAgICAqIHJldHVybmVkLCBpZiBpdCBpcyBzdGlsbCBhcHBsaWNhYmxlKS4gQWxzbywgYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgICAqIChzZWUgYmVsb3cpIGhhcyBwcmVjZWRlbmNlIG92ZXIgbmF0aXZlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lsbFZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLndpbGxWYWxpZGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGl0eVN0YXRlcyA9IG5ldyBNYXA8XG4gICAgICBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3MsXG4gICAgICB7IGZsYWdWYWx1ZTogdW5rbm93bjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICA+KCk7XG5cbiAgICAvKiogV2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIG9yIGZpZWxkc2V0IGlzIGNoYW5naW5nIGl0cyBkaXNhYmxlZCBzdGF0ZS4gKi9cbiAgICBAc3RhdGUoKSBwcm90ZWN0ZWQgYWNjZXNzb3IgZm9ybURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgICAgLy8gdG8gYmUgc2hvd24uIFRoaXMgYWxzbyBwcmV2ZW50cyBhIGJ1ZyBpbiBXZWJLaXQsIHdoaWNoIHdvdWxkIG5vdFxuICAgICAgLy8gYWxsb3cgaG9zdCBhcyB0aGUgdmFsaWRpdHkgYW5jaG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODMyXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2hlY2tWYWxpZGl0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy5jaGVja1ZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IG90aGVyd2lzZSxcbiAgICAgKiByZXR1cm5zIGZhbHNlLCBmaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50LFxuICAgICAqIGFuZCAoaWYgdGhlIGV2ZW50IGlzbid0IGNhbmNlbGVkKSByZXBvcnRzIHRoZSBwcm9ibGVtIHRvIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy5yZXBvcnRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlIGZvciB0aGlzIGVsZW1lbnQuIFVzZSB0aGUgZW1wdHkgc3RyaW5nXG4gICAgICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgY3VzdG9tIHZhbGlkaXR5IGVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCdjdXN0b21FcnJvcicsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ2N1c3RvbUVycm9yJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgZm9ybSBlbGVtZW50IGNoYW5nZXMuXG4gICAgICogRWxlbWVudEludGVybmFscy5mb3JtIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgZnJvbSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2s/KGZvcm06IEhUTUxGb3JtRWxlbWVudCB8IG51bGwpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW5ldmVyIGEgc3Vycm91bmRpbmcgZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhfZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gdGhpcy5faGFzRGlzYWJsZWRBbmNlc3RvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhc0Rpc2FibGVkQW5jZXN0b3IoKTogYm9vbGVhbiB7XG4gICAgICAvLyBDaGVjayBpZiBhbnkgb2YgdGhlIGZpZWxkc2V0IGFuY2VzdG9ycyBoYXMgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBzZXQuXG4gICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAobmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCAmJiB0aGlzLnNob3VsZFZhbGlkYXRlKG5hbWUpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZm9ybSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAqIEFkYXB0cyBhbmQgc2V0cyB0aGUgZm9ybVZhbHVlIGluIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IChzdHJpbmcgfCBGb3JtRGF0YSB8IEZpbGUgfCBudWxsKVxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldEZvcm1WYWx1ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBsZXQgZm9ybVZhbHVlOiBGb3JtRGF0YSB8IHN0cmluZyB8IG51bGw7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lID8/IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGZvcm1WYWx1ZSA9IHRoaXMudmFsdWUgYXMgc3RyaW5nIHwgbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICBmb3JtVmFsdWUgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIChmb3JtVmFsdWUgYXMgRm9ybURhdGEpLmFwcGVuZChcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gZWxcbiAgICAgICAgICAgICAgOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZWwpXSwge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybVZhbHVlID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1WYWx1ZS5hcHBlbmQoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSldLCB7XG4gICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmb3JtIHN0YXRlIGlzIHVuZGVmaW5lZCB0aGVuIGZvcm0gdmFsdWUgd2lsbCBiZSBjb3BpZWQgdG8gc3RhdGUuXG4gICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUoZm9ybVZhbHVlLCB0aGlzLmZvcm1TdGF0ZT8uKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JtU3RhdGU/KCk6IEZvcm1SZXN0b3JlU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGlzIGVsZW1lbnQgYXMgc3VmZmVyaW5nIGZyb20gdGhlIGNvbnN0cmFpbnQgaW5kaWNhdGVkIGJ5IHRoZVxuICAgICAqIGZsYWcgYXJndW1lbnQgYW5kIGFzc29jaWF0ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gaXQuXG4gICAgICogTm90ZSB0aGF0IG9ubHkgb25lIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGF0IGEgdGltZSBhbmQgY3VzdG9tIG1lc3NhZ2VzIGJ5XG4gICAgICogY29uc3VtZXJzIGFyZSBhbHdheXMgZGlzcGxheWVkIGJlZm9yZSBpbnRlcm5hbCBtZXNzYWdlcyBhbmQgaW50ZXJuYWxcbiAgICAgKiBtZXNzYWdlcyBhcmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuXG4gICAgICogVG8gc2V0L2RlZmluZSBjdXN0b20gdmFsaWRpdHkgc3RhdGUgZmxhZ3MsIHlvdSBuZWVkIHRvIGV4dGVuZCB0aGVcbiAgICAgKiBWYWxpZGl0eVN0YXRlIHByb3RvdHlwZSAoYW5kIHRoZSBDdXN0b21WYWxpZGl0eVN0YXRlIGludGVyZmFjZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAvLyBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIHZhbGlkaXR5IHN0YXRlIGRvZXMgbm90IG5lZWQgdG8gYmUgYm9vbGVhbi5cbiAgICAgKiAgIE9iamVjdC5hc3NpZ24oVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUsIHtcbiAgICAgKiAgICAgZ2V0IG15RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICogICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAqICAgICB9LFxuICAgICAqICAgfSk7XG4gICAgICpcbiAgICAgKiAgIGRlY2xhcmUgZ2xvYmFsIHtcbiAgICAgKiAgICAgaW50ZXJmYWNlIEN1c3RvbVZhbGlkaXR5U3RhdGUge1xuICAgICAqICAgICAgIG15RXJyb3I6IGJvb2xlYW47XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsaWRpdHlGbGFnPFQgZXh0ZW5kcyBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3M+KFxuICAgICAgZmxhZzogVCxcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGZsYWdWYWx1ZT86IFZhbGlkaXR5U3RhdGVGbGFnc1tUXSxcbiAgICApOiB2b2lkIHtcbiAgICAgIGZsYWdWYWx1ZSA/Pz0gdHJ1ZTtcbiAgICAgIGNvbnN0IHZhbGlkaXR5U3RhdGUgPSB0aGlzLl92YWxpZGl0eVN0YXRlcy5nZXQoZmxhZyk7XG4gICAgICBpZiAoXG4gICAgICAgICF2YWxpZGl0eVN0YXRlIHx8XG4gICAgICAgIHZhbGlkaXR5U3RhdGUubWVzc2FnZSAhPT0gbWVzc2FnZSB8fFxuICAgICAgICB2YWxpZGl0eVN0YXRlLmZsYWdWYWx1ZSAhPT0gZmxhZ1ZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fdmFsaWRpdHlTdGF0ZXMuc2V0KGZsYWcsIHsgZmxhZ1ZhbHVlLCBtZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLl9zZXRJbnRlcm5hbFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgdGhlIHZhbGlkaXR5IHN0YXRlIGZsYWcgZW50cnkgYW5kIHVwZGF0ZXMgdmFsaWRpdHkgc3RhdGUuICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZVZhbGlkaXR5RmxhZzxUIGV4dGVuZHMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzPihmbGFnOiBUKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5fdmFsaWRpdHlTdGF0ZXMuaGFzKGZsYWcpKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmRlbGV0ZShmbGFnKTtcbiAgICAgICAgdGhpcy5fc2V0SW50ZXJuYWxWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBUbyBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQuICovXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKCk6IHZvaWQge31cblxuICAgIC8qKiBXaGV0aGVyIHZhbGlkYXRpb24gc2hvdWxkIGJlIHJ1biBvbiBhIHByb3BlcnR5IGNoYW5nZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIHByb3RlY3RlZCBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFuYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEludGVybmFsVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgICBsZXQgb3V0cHV0TWVzc2FnZSA9IHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmdldCgnY3VzdG9tRXJyb3InKT8ubWVzc2FnZTtcbiAgICAgIGNvbnN0IGZsYWdzOiBWYWxpZGl0eVN0YXRlRmxhZ3MgPSB7fTtcbiAgICAgIHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmZvckVhY2goKHsgZmxhZ1ZhbHVlLCBtZXNzYWdlIH0sIGZsYWcpID0+IHtcbiAgICAgICAgZmxhZ3NbZmxhZ10gPSBmbGFnVmFsdWUgYXMgYW55O1xuICAgICAgICBvdXRwdXRNZXNzYWdlIHx8PSBtZXNzYWdlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN1c3RvbUZsYWdzID0gT2JqZWN0LmtleXMoVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUpLmZpbHRlcihcbiAgICAgICAgKGYpID0+ICEoZiBpbiB2YWxpZGl0eUtleXMpICYmIGYgIT09ICd2YWxpZCcsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBmbGFnIG9mIGN1c3RvbUZsYWdzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmxhZyBpbiBmbGFncyA/IGZsYWdzW2ZsYWcgYXMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzXSA6IGZhbHNlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5pbnRlcm5hbHMudmFsaWRpdHksIGZsYWcsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gSWYgYW55IGN1c3RvbSBlcnJvcnMgYXJlIHByb3ZpZGVkLCB3ZSBuZWVkIHRvIHNldCBjdXN0b21FcnJvciB0byB0cnVlLFxuICAgICAgICAgIC8vIGFzIHRoaXMgaXMgdGhlIG9ubHkgY3VzdG9tIGVycm9yIHByb3BlcnR5IGJyb3dzZXJzIGFjY2VwdC5cbiAgICAgICAgICBmbGFncy5jdXN0b21FcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0VmFsaWRpdHkoZmxhZ3MsIG91dHB1dE1lc3NhZ2UpO1xuXG4gICAgICAvLyBXZWJLaXQgc2VlbXMgdG8gYWx3YXlzIHNldCBjdXN0b21FcnJvciB0byB0cnVlLCBpZiBhbnkgZXJyb3IgaXMgYWN0aXZlLlxuICAgICAgLy8gRHVlIHRvIHRoaXMgd2UgcGF0Y2ggdGhlIGN1c3RvbUVycm9yIHZhbHVlIG1hbnVhbGx5LlxuICAgICAgaWYgKGlzV2Via2l0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmludGVybmFscy52YWxpZGl0eSwgJ2N1c3RvbUVycm9yJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWxpZGl0eVN0YXRlcy5oYXMoJ2N1c3RvbUVycm9yJykgfHwgISFmbGFncy5jdXN0b21FcnJvcixcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLyoqXG4gKiBBIHZhbHVlIHRvIGJlIHJlc3RvcmVkIGZvciBhIGNvbXBvbmVudCdzIGZvcm0gdmFsdWUuIElmIGEgY29tcG9uZW50J3MgZm9ybVxuICogc3RhdGUgaXMgYSBgRm9ybURhdGFgIG9iamVjdCwgaXRzIGVudHJ5IGxpc3Qgb2YgbmFtZSBhbmQgdmFsdWVzIHdpbGwgYmVcbiAqIHByb3ZpZGVkLlxuICovXG5leHBvcnQgdHlwZSBGb3JtUmVzdG9yZVN0YXRlID0gc3RyaW5nIHwgRm9ybURhdGEgfCBGaWxlO1xuXG4vKipcbiAqIFRoZSByZWFzb24gYSBmb3JtIGNvbXBvbmVudCBpcyBiZWluZyByZXN0b3JlZCBmb3IsIGVpdGhlciBgJ3Jlc3RvcmUnYCBmb3JcbiAqIGJyb3dzZXIgcmVzdG9yYXRpb24gb3IgYCdhdXRvY29tcGxldGUnYCBmb3IgcmVzdG9yaW5nIHVzZXIgdmFsdWVzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbiA9ICdyZXN0b3JlJyB8ICdhdXRvY29tcGxldGUnO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBa0JBLElBQU0sZUFBOEU7Q0FDbEYsVUFBVTtDQUNWLGFBQWE7Q0FDYixpQkFBaUI7Q0FDakIsZUFBZTtDQUNmLGdCQUFnQjtDQUNoQixjQUFjO0NBQ2QsU0FBUztDQUNULFVBQVU7Q0FDVixjQUFjO0NBQ2QsY0FBYztDQUNmO0FBSUQsSUFBSSxPQUFPLGtCQUFrQixhQUFhO0NBQ3hDLE1BQU0sZ0JBQWdCLE1BQU0sY0FBYTtFQUN2QyxJQUFXLFFBQUs7R0FDZCxPQUFPOztFQUVULGNBQUE7R0FDRSxNQUFNLElBQUksVUFBVSxzQkFBc0I7OztDQUc5QyxPQUFPLFFBQVEsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFdBQzFDLE9BQU8sT0FBTyxjQUFjLFdBQVcsRUFDckMsS0FBSyxPQUFJO0VBQ1AsT0FBTztJQUVWLENBQUMsQ0FDSDtDQUNELFdBQVcsZ0JBQWdCOzs7OztBQTRDN0IsSUFBYSwwQkFHWCxlQUN1RDtD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
@@ -263,4 +263,4 @@ var SbbFormAssociatedRadioButtonMixin = (superClass) => {
263
263
  //#endregion
264
264
  export { SbbFormAssociatedRadioButtonMixin, radioButtonRegistry };
265
265
 
266
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLXJhZGlvLWJ1dHRvbi1taXhpbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLXJhZGlvLWJ1dHRvbi1taXhpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBMaXRFbGVtZW50LCB0eXBlIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpbnRlcmFjdGl2aXR5Q2hlY2tlciwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGkxOG5TZWxlY3Rpb25SZXF1aXJlZCB9IGZyb20gJy4uL2kxOG4udHMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFNiYkRpc2FibGVkTWl4aW4gfSBmcm9tICcuL2Rpc2FibGVkLW1peGluLnRzJztcbmltcG9ydCB7XG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbixcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlLFxuICB0eXBlIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcixcbn0gZnJvbSAnLi9lbGVtZW50LWludGVybmFscy1taXhpbi50cyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4vZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzJztcbmltcG9ydCB7IFNiYlJlcXVpcmVkTWl4aW4gfSBmcm9tICcuL3JlcXVpcmVkLW1peGluLnRzJztcblxuLyoqXG4gKiBBIHN0YXRpYyByZWdpc3RyeSB0aGF0IGhvbGRzIGEgY29sbGVjdGlvbiBvZiBncm91cGVkIGByYWRpby1idXR0b25zYC5cbiAqIEdyb3VwcyBvZiByYWRpbyBidXR0b25zIGFyZSBsb2NhbCB0byB0aGUgZm9ybSB0aGV5IGJlbG9uZyAob3IgdGhlIGByZW5kZXJSb290YCBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIGFueSBmb3JtKVxuICogTXVsdGlwbGUgZ3JvdXBzIG9mIHJhZGlvIHdpdGggdGhlIHNhbWUgbmFtZSBjYW4gY29leGlzdCAoYXMgbG9uZyBhcyB0aGV5IGJlbG9uZyB0byBhIGRpZmZlcmVudCBmb3JtIC8gcmVuZGVyUm9vdClcbiAqIEl0IGlzIG1haW5seSB1c2VkIHRvIHN1cHBvcnQgdGhlIHN0YW5kYWxvbmUgZ3JvdXBzIG9mIHJhZGlvcy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcmFkaW9CdXR0b25SZWdpc3RyeSA9IG5ldyBXZWFrTWFwPFxuICBOb2RlLFxuICBNYXA8c3RyaW5nLCBTZXQ8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4+XG4+KCk7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGUgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFxuICBTYmJSZXF1aXJlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oU2JiRWxlbWVudEludGVybmFsc01peGluKExpdEVsZW1lbnQpKSksXG4pIHtcbiAgcHVibGljIGFjY2Vzc29yIGNoZWNrZWQ6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGFzc29jaWF0ZWRSYWRpb0J1dHRvbnM/OiBTZXQ8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCB1cGRhdGVGb2N1c2FibGVSYWRpb3MoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGVtaXRDaGFuZ2VFdmVudHMoKTogdm9pZDtcbiAgcHJvdGVjdGVkIG5hdmlnYXRlQnlLZXlib2FyZChyYWRpbzogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZSk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHJhZGlvIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgLy8gVE9ETyhicmVha2luZy1jaGFuZ2UpOiBSZW1vdmUgU2JiRWxlbWVudEludGVybmFsc01peGluIGFuZCBkZXBlbmQgb24gU2JiRWxlbWVudCBhcyBiYXNlIGNsYXNzIGluc3RlYWQgb2YgTGl0RWxlbWVudFxuICBjb25zdCBjb25kaXRpb25hbFN1cGVyQ2xhc3MgPSAoc3VwZXJDbGFzcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnXyRzYmJFbGVtZW50JCddXG4gICAgPyAoc3VwZXJDbGFzcyBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJlxuICAgICAgICBUICZcbiAgICAgICAgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yKVxuICAgIDogU2JiRWxlbWVudEludGVybmFsc01peGluKHN1cGVyQ2xhc3MpO1xuXG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50XG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdyYWRpbyc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gaXMgY2hlY2tlZC5cbiAgICAgKi9cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gISF2YWx1ZTtcblxuICAgICAgdGhpcy50b2dnbGVTdGF0ZSgnY2hlY2tlZCcsIHRoaXMuY2hlY2tlZCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhQ2hlY2tlZCA9IHRoaXMuY2hlY2tlZC50b1N0cmluZygpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICAgIHRoaXMuX3N5bmNocm9uaXplR3JvdXBTdGF0ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQHByb3BlcnR5KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgc3VwZXIubmFtZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLl9kaXNjb25uZWN0RnJvbVJlZ2lzdHJ5KCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHN1cGVyLm5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybSB0eXBlIG9mIGVsZW1lbnQuXG4gICAgICogQGRlZmF1bHQgJ3JhZGlvJ1xuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuICdyYWRpbyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIHJhZGlvIGJ1dHRvbnMgdGhhdCBiZWxvbmdzIHRvIHRoZSBzYW1lIGdyb3VwIG9mIGB0aGlzYC5cbiAgICAgKiBBc3N1bWUgdGhlbSBvcmRlcmVkIGluIERPTSBvcmRlclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3NvY2lhdGVkUmFkaW9CdXR0b25zPzogU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50PjtcbiAgICBwcml2YXRlIF9yYWRpb0J1dHRvbkdyb3Vwc01hcD86IE1hcDxzdHJpbmcsIFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW5UeXBlPj47XG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb250cm9sbGVyID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVBcnJvd0tleURvd24oZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuX2Rpc2Nvbm5lY3RGcm9tUmVnaXN0cnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMgXCJyZXN0b3JlXCIsIG9yIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIGZ1bGZpbGwgYXV0b2ZpbGwgb24gYmVoYWxmIG9mXG4gICAgICogIHVzZXIgaW4gd2hpY2ggY2FzZSByZWFzb24gaXMgXCJhdXRvY29tcGxldGVcIi5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyB8fCBzdGF0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHN0YXRlID09PSB0aGlzLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGRhdGEgPT09IHRoaXMudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3JlYWRGb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmb3JtRGF0YS5nZXQodGhpcy5uYW1lKTtcbiAgICAgIHJldHVybiBkYXRhIGluc3RhbmNlb2YgQmxvYiA/IEpTT04ucGFyc2UoYXdhaXQgZGF0YS50ZXh0KCkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9jdXNhYmxlUmFkaW9zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBvbiBgdmFsdWVgIGNoYW5nZVxuICAgICAqIElmICdjaGVja2VkJywgdXBkYXRlIHRoZSB2YWx1ZS4gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8IG5hbWUgPT09ICdjaGVja2VkJyB8fCBuYW1lID09PSAncmVxdWlyZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbGlkaXR5IG9mIGFsbCBhc3NvY2lhdGVkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICogSWYgYW55IHJhZGlvIGJ1dHRvbiBpcyByZXF1aXJlZCwgYWxsIGFzc29jaWF0ZWQgYXJlIHJlcXVpcmVkIGFzIHdlbGwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICghdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlcXVpcmVkID0gZmFsc2U7XG4gICAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCByYWRpbyBvZiB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgcmVxdWlyZWQgfHw9IHJhZGlvLnJlcXVpcmVkO1xuICAgICAgICBjaGVja2VkIHx8PSByYWRpby5jaGVja2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWlyZWQgJiYgIWNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zLmZvckVhY2goKHIpID0+XG4gICAgICAgICAgci5zZXRWYWxpZGl0eUZsYWcoXG4gICAgICAgICAgICAndmFsdWVNaXNzaW5nJyxcbiAgICAgICAgICAgIGkxOG5TZWxlY3Rpb25SZXF1aXJlZFt0aGlzLl9sYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudF0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucy5mb3JFYWNoKChyKSA9PiByLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgYSBzaW5nbGUgcmFkaW8gc2hvdWxkIGJlIGZvY3VzYWJsZSBpbiB0aGUgZ3JvdXAuIERlZmluZWQgYXM6XG4gICAgICogLSB0aGUgY2hlY2tlZCByYWRpbztcbiAgICAgKiAtIHRoZSBmaXJzdCBub24tZGlzYWJsZWQgcmFkaW8gaW4gRE9NIG9yZGVyO1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVGb2N1c2FibGVSYWRpb3MoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByYWRpb3MgPSB0aGlzLl9pbnRlcmFjdGFibGVHcm91cGVkUmFkaW9zKCk7XG4gICAgICBjb25zdCBjaGVja2VkSW5kZXggPSByYWRpb3MuZmluZEluZGV4KChyKSA9PiByLmNoZWNrZWQgJiYgIXIuZGlzYWJsZWQgJiYgIXIuZm9ybURpc2FibGVkKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUluZGV4ID1cbiAgICAgICAgY2hlY2tlZEluZGV4ICE9PSAtMVxuICAgICAgICAgID8gY2hlY2tlZEluZGV4XG4gICAgICAgICAgOiByYWRpb3MuZmluZEluZGV4KChyKSA9PiAhci5kaXNhYmxlZCAmJiAhci5mb3JtRGlzYWJsZWQpOyAvLyBHZXQgdGhlIGZpcnN0IGZvY3VzYWJsZSByYWRpb1xuXG4gICAgICBpZiAoZm9jdXNhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJhZGlvc1tmb2N1c2FibGVJbmRleF0udGFiSW5kZXggPSAwO1xuICAgICAgICByYWRpb3Muc3BsaWNlKGZvY3VzYWJsZUluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgdGFiSW5kZXggb24gb3RoZXIgcmFkaW9zXG4gICAgICByYWRpb3MuZm9yRWFjaCgocikgPT4gci5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBuYXZpZ2F0ZUJ5S2V5Ym9hcmQobmV4dDogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIG5leHQuY2hlY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudHMoKTtcblxuICAgICAgYXdhaXQgbmV4dC51cGRhdGVDb21wbGV0ZTtcbiAgICAgIG5leHQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW1pdENoYW5nZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgIC8vIE1hbnVhbGx5IGRpc3BhdGNoIGV2ZW50cyB0byBzaW11bGF0ZSBhIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N5bmNocm9uaXplR3JvdXBTdGF0ZSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5fZGVzZWxlY3RHcm91cGVkUmFkaW9zKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBgdGhpc2AgdG8gdGhlIHJhZGlvQnV0dG9uIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29ubmVjdFRvUmVnaXN0cnkoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMubmFtZSB8fCBpc1NlcnZlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb290ID0gdGhpcy5mb3JtID8/IHRoaXMuZ2V0Um9vdE5vZGUoKTtcbiAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwID0gcmFkaW9CdXR0b25SZWdpc3RyeS5nZXQocm9vdCk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgdGhlICdyb290JyBtYXAgZW50cnlcbiAgICAgIGlmICghdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXApIHtcbiAgICAgICAgdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHJhZGlvQnV0dG9uUmVnaXN0cnkuc2V0KHJvb3QsIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID0gdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXAuZ2V0KFxuICAgICAgICB0aGlzLm5hbWUsXG4gICAgICApIGFzIHVua25vd24gYXMgU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50PjtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZ3JvdXAgc2V0XG4gICAgICBpZiAoIXRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucykge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwLnNldChcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zIGFzIHVua25vd24gYXMgU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGU+LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnNlcnQgdGhlIG5ldyByYWRpbyBpbnRvIHRoZSBzZXQgYW5kIHNvcnQgZm9sbG93aW5nIHRoZSBET00gb3JkZXIuXG4gICAgICAvLyBTaW5jZSB0aGUgb3JkZXIgb2YgYSAnU2V0JyBpcyB0aGUgaW5zZXJ0IG9yZGVyLCB3ZSBoYXZlIHRvIGVtcHR5IGl0IGFuZCByZS1pbnNlcnQgcmFkaW9zIGluIG9yZGVyXG4gICAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zLmNsZWFyKCk7XG5cbiAgICAgIC8vIEZpbmQgYHRoaXNgIHBvc2l0aW9uIGFuZCBpbnNlcnQgaXRcbiAgICAgIGNvbnN0IGluZGV4ID0gZW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgIChyKSA9PiB0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcsXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgMCwgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyaWVzLnB1c2godGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcG9wdWxhdGUgdGhlIFNldFxuICAgICAgZW50cmllcy5mb3JFYWNoKChyKSA9PiB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMhLmFkZChyKSk7XG5cbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYHRoaXNgIGZyb20gdGhlIHJhZGlvQnV0dG9uIHJlZ2lzdHJ5IGFuZCwgaWYgdGhlIGdyb3VwIGlzIGVtcHR5LCBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIGdyb3VwcyBNYXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNjb25uZWN0RnJvbVJlZ2lzdHJ5KCk6IHZvaWQge1xuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zPy5kZWxldGUodGhpcyk7XG5cbiAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnM/LnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXA/LmRlbGV0ZSh0aGlzLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9yYWRpb0J1dHRvbkdyb3Vwc01hcCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mICdpbnRlcmFjdGFibGUnIGdyb3VwZWQgcmFkaW9zLCBvcmRlcmVkIGluIERPTSBvcmRlclxuICAgICAqL1xuICAgIHByaXZhdGUgX2ludGVyYWN0YWJsZUdyb3VwZWRSYWRpb3MoKTogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnRbXSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPz8gW10pLmZpbHRlcigoZWwpID0+XG4gICAgICAgIGludGVyYWN0aXZpdHlDaGVja2VyLmlzVmlzaWJsZShlbCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IG90aGVyIHJhZGlvIG9mIHRoZSBzYW1lIGdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGVzZWxlY3RHcm91cGVkUmFkaW9zKCk6IHZvaWQge1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHIgIT09IHRoaXMpXG4gICAgICAgIC5mb3JFYWNoKChyKSA9PiAoci5jaGVja2VkID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVBcnJvd0tleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBpZiAoIWlzQXJyb3dLZXlQcmVzc2VkKGV2dCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGVuYWJsZWRSYWRpb3MgPSB0aGlzLl9pbnRlcmFjdGFibGVHcm91cGVkUmFkaW9zKCkuZmlsdGVyKFxuICAgICAgICAocikgPT4gIXIuZGlzYWJsZWQgJiYgIXIuZm9ybURpc2FibGVkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQ6IG51bWJlciA9IGVuYWJsZWRSYWRpb3MuaW5kZXhPZih0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRJbmRleDogbnVtYmVyID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldnQsIGN1cnJlbnQsIGVuYWJsZWRSYWRpb3MubGVuZ3RoKTtcblxuICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZUJ5S2V5Ym9hcmQoZW5hYmxlZFJhZGlvc1tuZXh0SW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLElBQWEsc0NBQXNCLElBQUksU0FHcEM7Ozs7QUFzQkgsSUFBYSxxQ0FDWCxlQUNrRTtDQUVsRSxNQUFNLHdCQUF5QixXQUFrRCxtQkFDNUUsYUFHRCx5QkFBeUIsV0FBVztBQW1UeEMsZUFqVGtEO29CQUN4QyxpQkFBaUIsaUJBQWlCLHVCQUF1QixzQkFBc0IsQ0FBQyxDQUFDOzs7O2VBRDVFLDRDQUNMLFlBQWlGOzs7K0JBUXhGLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFBOzRCQWMzQixVQUFVLENBQUE7QUFiWCxpQkFBQSxNQUFBLE1BQUEseUJBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQTtLQUFBLFFBQUE7S0FBQSxTQUFBO0tBQUEsUUFBQTtNQUFBLE1BQUEsUUFBQSxhQUFBO01BQUEsTUFBQSxLQUFBLFVBQUE7QUFBQSxXQUFXLFVBQU87O01BQUE7S0FBQSxVQUFBO0tBQUEsRUFBQSxNQUFBLDJCQUFBO0FBY2xCLGlCQUFBLE1BQUEsTUFBQSxzQkFBQTtLQUFBLE1BQUE7S0FBQSxNQUFBO0tBQUEsUUFBQTtLQUFBLFNBQUE7S0FBQSxRQUFBO01BQUEsTUFBQSxRQUFBLFVBQUE7TUFBQSxNQUFBLEtBQUEsVUFBQTtBQUFBLFdBQW9CLE9BQUk7O01BQUE7S0FBQSxVQUFBO0tBQUEsRUFBQSxNQUFBLDJCQUFBOzs7Ozs7Ozs7QUFwQlEsU0FBQSxPQUFPOzs7OztHQU12QyxJQUFXLFFBQVEsT0FBYztBQUMvQixTQUFLLFdBQVcsQ0FBQyxDQUFDO0FBRWxCLFNBQUssWUFBWSxXQUFXLEtBQUssUUFBUTtBQUN6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
266
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLXJhZGlvLWJ1dHRvbi1taXhpbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLXJhZGlvLWJ1dHRvbi1taXhpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBMaXRFbGVtZW50LCB0eXBlIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpbnRlcmFjdGl2aXR5Q2hlY2tlciwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGkxOG5TZWxlY3Rpb25SZXF1aXJlZCB9IGZyb20gJy4uL2kxOG4udHMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFNiYkRpc2FibGVkTWl4aW4gfSBmcm9tICcuL2Rpc2FibGVkLW1peGluLnRzJztcbmltcG9ydCB7XG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbixcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlLFxuICB0eXBlIFNiYkVsZW1lbnRJbnRlcm5hbHNDb25zdHJ1Y3Rvcixcbn0gZnJvbSAnLi9lbGVtZW50LWludGVybmFscy1taXhpbi50cyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4vZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzJztcbmltcG9ydCB7IFNiYlJlcXVpcmVkTWl4aW4gfSBmcm9tICcuL3JlcXVpcmVkLW1peGluLnRzJztcblxuLyoqXG4gKiBBIHN0YXRpYyByZWdpc3RyeSB0aGF0IGhvbGRzIGEgY29sbGVjdGlvbiBvZiBncm91cGVkIGByYWRpby1idXR0b25zYC5cbiAqIEdyb3VwcyBvZiByYWRpbyBidXR0b25zIGFyZSBsb2NhbCB0byB0aGUgZm9ybSB0aGV5IGJlbG9uZyAob3IgdGhlIGByZW5kZXJSb290YCBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIGFueSBmb3JtKVxuICogTXVsdGlwbGUgZ3JvdXBzIG9mIHJhZGlvIHdpdGggdGhlIHNhbWUgbmFtZSBjYW4gY29leGlzdCAoYXMgbG9uZyBhcyB0aGV5IGJlbG9uZyB0byBhIGRpZmZlcmVudCBmb3JtIC8gcmVuZGVyUm9vdClcbiAqIEl0IGlzIG1haW5seSB1c2VkIHRvIHN1cHBvcnQgdGhlIHN0YW5kYWxvbmUgZ3JvdXBzIG9mIHJhZGlvcy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcmFkaW9CdXR0b25SZWdpc3RyeSA9IG5ldyBXZWFrTWFwPFxuICBOb2RlLFxuICBNYXA8c3RyaW5nLCBTZXQ8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4+XG4+KCk7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGUgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFxuICBTYmJSZXF1aXJlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oU2JiRWxlbWVudEludGVybmFsc01peGluKExpdEVsZW1lbnQpKSksXG4pIHtcbiAgcHVibGljIGFjY2Vzc29yIGNoZWNrZWQ6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGFzc29jaWF0ZWRSYWRpb0J1dHRvbnM/OiBTZXQ8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCB1cGRhdGVGb2N1c2FibGVSYWRpb3MoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGVtaXRDaGFuZ2VFdmVudHMoKTogdm9pZDtcbiAgcHJvdGVjdGVkIG5hdmlnYXRlQnlLZXlib2FyZChyYWRpbzogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZSk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHJhZGlvIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgLy8gVE9ETyhicmVha2luZy1jaGFuZ2UpOiBSZW1vdmUgU2JiRWxlbWVudEludGVybmFsc01peGluIGFuZCBkZXBlbmQgb24gU2JiRWxlbWVudCBhcyBiYXNlIGNsYXNzIGluc3RlYWQgb2YgTGl0RWxlbWVudFxuICBjb25zdCBjb25kaXRpb25hbFN1cGVyQ2xhc3MgPSAoc3VwZXJDbGFzcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnXyRzYmJFbGVtZW50JCddXG4gICAgPyAoc3VwZXJDbGFzcyBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRWxlbWVudEludGVybmFsc01peGluVHlwZT4gJlxuICAgICAgICBUICZcbiAgICAgICAgU2JiRWxlbWVudEludGVybmFsc0NvbnN0cnVjdG9yKVxuICAgIDogU2JiRWxlbWVudEludGVybmFsc01peGluKHN1cGVyQ2xhc3MpO1xuXG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50XG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdyYWRpbyc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gaXMgY2hlY2tlZC5cbiAgICAgKi9cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gISF2YWx1ZTtcblxuICAgICAgdGhpcy50b2dnbGVTdGF0ZSgnY2hlY2tlZCcsIHRoaXMuY2hlY2tlZCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhQ2hlY2tlZCA9IHRoaXMuY2hlY2tlZC50b1N0cmluZygpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICAgIHRoaXMuX3N5bmNocm9uaXplR3JvdXBTdGF0ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQHByb3BlcnR5KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgc3VwZXIubmFtZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLl9kaXNjb25uZWN0RnJvbVJlZ2lzdHJ5KCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHN1cGVyLm5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybSB0eXBlIG9mIGVsZW1lbnQuXG4gICAgICogQGRlZmF1bHQgJ3JhZGlvJ1xuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuICdyYWRpbyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIHJhZGlvIGJ1dHRvbnMgdGhhdCBiZWxvbmdzIHRvIHRoZSBzYW1lIGdyb3VwIG9mIGB0aGlzYC5cbiAgICAgKiBBc3N1bWUgdGhlbSBvcmRlcmVkIGluIERPTSBvcmRlclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3NvY2lhdGVkUmFkaW9CdXR0b25zPzogU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50PjtcbiAgICBwcml2YXRlIF9yYWRpb0J1dHRvbkdyb3Vwc01hcD86IE1hcDxzdHJpbmcsIFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW5UeXBlPj47XG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb250cm9sbGVyID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVBcnJvd0tleURvd24oZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuX2Rpc2Nvbm5lY3RGcm9tUmVnaXN0cnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMgXCJyZXN0b3JlXCIsIG9yIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIGZ1bGZpbGwgYXV0b2ZpbGwgb24gYmVoYWxmIG9mXG4gICAgICogIHVzZXIgaW4gd2hpY2ggY2FzZSByZWFzb24gaXMgXCJhdXRvY29tcGxldGVcIi5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyB8fCBzdGF0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHN0YXRlID09PSB0aGlzLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGRhdGEgPT09IHRoaXMudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3JlYWRGb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmb3JtRGF0YS5nZXQodGhpcy5uYW1lKTtcbiAgICAgIHJldHVybiBkYXRhIGluc3RhbmNlb2YgQmxvYiA/IEpTT04ucGFyc2UoYXdhaXQgZGF0YS50ZXh0KCkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9jdXNhYmxlUmFkaW9zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBvbiBgdmFsdWVgIGNoYW5nZVxuICAgICAqIElmICdjaGVja2VkJywgdXBkYXRlIHRoZSB2YWx1ZS4gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8IG5hbWUgPT09ICdjaGVja2VkJyB8fCBuYW1lID09PSAncmVxdWlyZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbGlkaXR5IG9mIGFsbCBhc3NvY2lhdGVkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICogSWYgYW55IHJhZGlvIGJ1dHRvbiBpcyByZXF1aXJlZCwgYWxsIGFzc29jaWF0ZWQgYXJlIHJlcXVpcmVkIGFzIHdlbGwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICghdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlcXVpcmVkID0gZmFsc2U7XG4gICAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCByYWRpbyBvZiB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgcmVxdWlyZWQgfHw9IHJhZGlvLnJlcXVpcmVkO1xuICAgICAgICBjaGVja2VkIHx8PSByYWRpby5jaGVja2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWlyZWQgJiYgIWNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zLmZvckVhY2goKHIpID0+XG4gICAgICAgICAgci5zZXRWYWxpZGl0eUZsYWcoXG4gICAgICAgICAgICAndmFsdWVNaXNzaW5nJyxcbiAgICAgICAgICAgIGkxOG5TZWxlY3Rpb25SZXF1aXJlZFt0aGlzLl9sYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudF0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucy5mb3JFYWNoKChyKSA9PiByLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgYSBzaW5nbGUgcmFkaW8gc2hvdWxkIGJlIGZvY3VzYWJsZSBpbiB0aGUgZ3JvdXAuIERlZmluZWQgYXM6XG4gICAgICogLSB0aGUgY2hlY2tlZCByYWRpbztcbiAgICAgKiAtIHRoZSBmaXJzdCBub24tZGlzYWJsZWQgcmFkaW8gaW4gRE9NIG9yZGVyO1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVGb2N1c2FibGVSYWRpb3MoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByYWRpb3MgPSB0aGlzLl9pbnRlcmFjdGFibGVHcm91cGVkUmFkaW9zKCk7XG4gICAgICBjb25zdCBjaGVja2VkSW5kZXggPSByYWRpb3MuZmluZEluZGV4KChyKSA9PiByLmNoZWNrZWQgJiYgIXIuZGlzYWJsZWQgJiYgIXIuZm9ybURpc2FibGVkKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUluZGV4ID1cbiAgICAgICAgY2hlY2tlZEluZGV4ICE9PSAtMVxuICAgICAgICAgID8gY2hlY2tlZEluZGV4XG4gICAgICAgICAgOiByYWRpb3MuZmluZEluZGV4KChyKSA9PiAhci5kaXNhYmxlZCAmJiAhci5mb3JtRGlzYWJsZWQpOyAvLyBHZXQgdGhlIGZpcnN0IGZvY3VzYWJsZSByYWRpb1xuXG4gICAgICBpZiAoZm9jdXNhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJhZGlvc1tmb2N1c2FibGVJbmRleF0udGFiSW5kZXggPSAwO1xuICAgICAgICByYWRpb3Muc3BsaWNlKGZvY3VzYWJsZUluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgdGFiSW5kZXggb24gb3RoZXIgcmFkaW9zXG4gICAgICByYWRpb3MuZm9yRWFjaCgocikgPT4gci5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBuYXZpZ2F0ZUJ5S2V5Ym9hcmQobmV4dDogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIG5leHQuY2hlY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudHMoKTtcblxuICAgICAgYXdhaXQgbmV4dC51cGRhdGVDb21wbGV0ZTtcbiAgICAgIG5leHQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW1pdENoYW5nZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgIC8vIE1hbnVhbGx5IGRpc3BhdGNoIGV2ZW50cyB0byBzaW11bGF0ZSBhIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N5bmNocm9uaXplR3JvdXBTdGF0ZSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5fZGVzZWxlY3RHcm91cGVkUmFkaW9zKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBgdGhpc2AgdG8gdGhlIHJhZGlvQnV0dG9uIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29ubmVjdFRvUmVnaXN0cnkoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMubmFtZSB8fCBpc1NlcnZlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb290ID0gdGhpcy5mb3JtID8/IHRoaXMuZ2V0Um9vdE5vZGUoKTtcbiAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwID0gcmFkaW9CdXR0b25SZWdpc3RyeS5nZXQocm9vdCk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgdGhlICdyb290JyBtYXAgZW50cnlcbiAgICAgIGlmICghdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXApIHtcbiAgICAgICAgdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHJhZGlvQnV0dG9uUmVnaXN0cnkuc2V0KHJvb3QsIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID0gdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXAuZ2V0KFxuICAgICAgICB0aGlzLm5hbWUsXG4gICAgICApIGFzIHVua25vd24gYXMgU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50PjtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZ3JvdXAgc2V0XG4gICAgICBpZiAoIXRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucykge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwLnNldChcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zIGFzIHVua25vd24gYXMgU2V0PFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGU+LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnNlcnQgdGhlIG5ldyByYWRpbyBpbnRvIHRoZSBzZXQgYW5kIHNvcnQgZm9sbG93aW5nIHRoZSBET00gb3JkZXIuXG4gICAgICAvLyBTaW5jZSB0aGUgb3JkZXIgb2YgYSAnU2V0JyBpcyB0aGUgaW5zZXJ0IG9yZGVyLCB3ZSBoYXZlIHRvIGVtcHR5IGl0IGFuZCByZS1pbnNlcnQgcmFkaW9zIGluIG9yZGVyXG4gICAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zLmNsZWFyKCk7XG5cbiAgICAgIC8vIEZpbmQgYHRoaXNgIHBvc2l0aW9uIGFuZCBpbnNlcnQgaXRcbiAgICAgIGNvbnN0IGluZGV4ID0gZW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgIChyKSA9PiB0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcsXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgMCwgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyaWVzLnB1c2godGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcG9wdWxhdGUgdGhlIFNldFxuICAgICAgZW50cmllcy5mb3JFYWNoKChyKSA9PiB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMhLmFkZChyKSk7XG5cbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYHRoaXNgIGZyb20gdGhlIHJhZGlvQnV0dG9uIHJlZ2lzdHJ5IGFuZCwgaWYgdGhlIGdyb3VwIGlzIGVtcHR5LCBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIGdyb3VwcyBNYXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNjb25uZWN0RnJvbVJlZ2lzdHJ5KCk6IHZvaWQge1xuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zPy5kZWxldGUodGhpcyk7XG5cbiAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnM/LnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXA/LmRlbGV0ZSh0aGlzLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9yYWRpb0J1dHRvbkdyb3Vwc01hcCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mICdpbnRlcmFjdGFibGUnIGdyb3VwZWQgcmFkaW9zLCBvcmRlcmVkIGluIERPTSBvcmRlclxuICAgICAqL1xuICAgIHByaXZhdGUgX2ludGVyYWN0YWJsZUdyb3VwZWRSYWRpb3MoKTogU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnRbXSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPz8gW10pLmZpbHRlcigoZWwpID0+XG4gICAgICAgIGludGVyYWN0aXZpdHlDaGVja2VyLmlzVmlzaWJsZShlbCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IG90aGVyIHJhZGlvIG9mIHRoZSBzYW1lIGdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGVzZWxlY3RHcm91cGVkUmFkaW9zKCk6IHZvaWQge1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHIgIT09IHRoaXMpXG4gICAgICAgIC5mb3JFYWNoKChyKSA9PiAoci5jaGVja2VkID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVBcnJvd0tleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBpZiAoIWlzQXJyb3dLZXlQcmVzc2VkKGV2dCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGVuYWJsZWRSYWRpb3MgPSB0aGlzLl9pbnRlcmFjdGFibGVHcm91cGVkUmFkaW9zKCkuZmlsdGVyKFxuICAgICAgICAocikgPT4gIXIuZGlzYWJsZWQgJiYgIXIuZm9ybURpc2FibGVkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQ6IG51bWJlciA9IGVuYWJsZWRSYWRpb3MuaW5kZXhPZih0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRJbmRleDogbnVtYmVyID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldnQsIGN1cnJlbnQsIGVuYWJsZWRSYWRpb3MubGVuZ3RoKTtcblxuICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZUJ5S2V5Ym9hcmQoZW5hYmxlZFJhZGlvc1tuZXh0SW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLElBQWEsc0NBQXNCLElBQUksU0FHcEM7Ozs7QUFzQkgsSUFBYSxxQ0FDWCxlQUNrRTtDQUVsRSxNQUFNLHdCQUF5QixXQUFrRCxtQkFDNUUsYUFHRCx5QkFBeUIsV0FBVztDQW1UeEMsY0FqVGtEO29CQUN4QyxpQkFBaUIsaUJBQWlCLHVCQUF1QixzQkFBc0IsQ0FBQyxDQUFDOzs7O2VBRDVFLDRDQUNMLFlBQWlGOzs7K0JBUXhGLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFBOzRCQWMzQixVQUFVLENBQUE7SUFiWCxhQUFBLE1BQUEsTUFBQSx5QkFBQTtLQUFBLE1BQUE7S0FBQSxNQUFBO0tBQUEsUUFBQTtLQUFBLFNBQUE7S0FBQSxRQUFBO01BQUEsTUFBQSxRQUFBLGFBQUE7TUFBQSxNQUFBLEtBQUEsVUFBQTtPQUFBLElBQVcsVUFBTzs7TUFBQTtLQUFBLFVBQUE7S0FBQSxFQUFBLE1BQUEsMkJBQUE7SUFjbEIsYUFBQSxNQUFBLE1BQUEsc0JBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQTtLQUFBLFFBQUE7S0FBQSxTQUFBO0tBQUEsUUFBQTtNQUFBLE1BQUEsUUFBQSxVQUFBO01BQUEsTUFBQSxLQUFBLFVBQUE7T0FBQSxJQUFvQixPQUFJOztNQUFBO0tBQUEsVUFBQTtLQUFBLEVBQUEsTUFBQSwyQkFBQTs7Ozs7Ozs7O0lBcEJRLEtBQUEsT0FBTzs7Ozs7R0FNdkMsSUFBVyxRQUFRLE9BQWM7SUFDL0IsS0FBSyxXQUFXLENBQUMsQ0FBQztJQUVsQixLQUFLLFlBQVksV0FBVyxLQUFLLFFBQVE7SUFDekMs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