@dereekb/dbx-web 12.6.21 → 12.7.0

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 (102) hide show
  1. package/esm2022/lib/action/snackbar/action.snackbar.component.mjs +10 -14
  2. package/esm2022/lib/action/snackbar/action.snackbar.directive.mjs +8 -7
  3. package/esm2022/lib/action/transition/transition.safety.dialog.component.mjs +1 -1
  4. package/esm2022/lib/button/progress/abstract.progress.button.directive.mjs +5 -5
  5. package/esm2022/lib/error/error.action.directive.mjs +9 -9
  6. package/esm2022/lib/error/error.loading.directive.mjs +7 -6
  7. package/esm2022/lib/error/error.snackbar.action.directive.mjs +6 -7
  8. package/esm2022/lib/error/error.snackbar.component.mjs +9 -13
  9. package/esm2022/lib/extension/download/blob/download.blob.button.component.mjs +6 -10
  10. package/esm2022/lib/extension/download/text/download.text.component.mjs +1 -6
  11. package/esm2022/lib/extension/help/help.context.service.mjs +3 -5
  12. package/esm2022/lib/extension/model/model.tracker.view.storage.mjs +3 -5
  13. package/esm2022/lib/extension/zip/zip.blob.preview.component.mjs +4 -7
  14. package/esm2022/lib/extension/zip/zip.preview.component.mjs +4 -7
  15. package/esm2022/lib/interaction/dialog/dialog.action.directive.mjs +1 -1
  16. package/esm2022/lib/interaction/filter/filter.popover.component.mjs +9 -12
  17. package/esm2022/lib/interaction/filter/filter.wrapper.component.mjs +3 -2
  18. package/esm2022/lib/interaction/iframe/embed.component.mjs +7 -12
  19. package/esm2022/lib/interaction/iframe/iframe.component.mjs +7 -12
  20. package/esm2022/lib/interaction/popover/abstract.popover.ref.directive.mjs +8 -7
  21. package/esm2022/lib/interaction/popover/popover.action.directive.mjs +1 -1
  22. package/esm2022/lib/interaction/popover/popover.component.mjs +1 -3
  23. package/esm2022/lib/interaction/popover/popover.coordinator.component.mjs +5 -6
  24. package/esm2022/lib/interaction/popover/popover.coordinator.service.mjs +3 -5
  25. package/esm2022/lib/interaction/popup/popup.component.mjs +4 -9
  26. package/esm2022/lib/interaction/popup/popup.coordinator.component.mjs +5 -6
  27. package/esm2022/lib/interaction/popup/popup.coordinator.service.mjs +3 -5
  28. package/esm2022/lib/interaction/prompt/prompt.confirm.dialog.component.mjs +1 -1
  29. package/esm2022/lib/interaction/upload/upload.action.directive.mjs +8 -15
  30. package/esm2022/lib/layout/column/two/two.column.back.directive.mjs +8 -8
  31. package/esm2022/lib/layout/column/two/two.column.component.mjs +4 -5
  32. package/esm2022/lib/layout/column/two/two.column.sref.showright.directive.mjs +5 -6
  33. package/esm2022/lib/layout/column/two/two.column.store.mjs +3 -7
  34. package/esm2022/lib/layout/flex/flex.group.directive.mjs +4 -5
  35. package/esm2022/lib/layout/list/list.view.directive.mjs +16 -21
  36. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.directive.mjs +11 -15
  37. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.ripple.directive.mjs +1 -1
  38. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.selection.directive.mjs +1 -1
  39. package/esm2022/lib/layout/style/style.body.directive.mjs +9 -9
  40. package/esm2022/lib/layout/style/style.directive.mjs +9 -9
  41. package/esm2022/lib/layout/style/style.set.directive.mjs +10 -10
  42. package/esm2022/lib/loading/loading.action.directive.mjs +3 -7
  43. package/esm2022/mapbox/lib/mapbox.injection.store.mjs +1 -1
  44. package/esm2022/mapbox/lib/mapbox.layout.resize.sync.directive.mjs +8 -8
  45. package/esm2022/mapbox/lib/mapbox.menu.component.mjs +17 -19
  46. package/esm2022/mapbox/lib/mapbox.store.mjs +1 -1
  47. package/esm2022/table/lib/date/daterange.table.cell.input.component.mjs +8 -11
  48. package/esm2022/table/lib/table.column.size.directive.mjs +8 -9
  49. package/fesm2022/dereekb-dbx-web-mapbox.mjs +22 -24
  50. package/fesm2022/dereekb-dbx-web-mapbox.mjs.map +1 -1
  51. package/fesm2022/dereekb-dbx-web-table.mjs +13 -19
  52. package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
  53. package/fesm2022/dereekb-dbx-web.mjs +150 -229
  54. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  55. package/lib/action/snackbar/action.snackbar.component.d.ts +4 -5
  56. package/lib/action/snackbar/action.snackbar.directive.d.ts +3 -2
  57. package/lib/action/transition/transition.safety.dialog.component.d.ts +1 -2
  58. package/lib/button/progress/abstract.progress.button.directive.d.ts +3 -3
  59. package/lib/error/error.action.directive.d.ts +3 -4
  60. package/lib/error/error.loading.directive.d.ts +2 -2
  61. package/lib/error/error.snackbar.action.directive.d.ts +2 -2
  62. package/lib/error/error.snackbar.component.d.ts +2 -4
  63. package/lib/extension/download/blob/download.blob.button.component.d.ts +3 -4
  64. package/lib/extension/download/text/download.text.component.d.ts +2 -4
  65. package/lib/extension/help/help.context.service.d.ts +1 -3
  66. package/lib/extension/model/model.tracker.view.storage.d.ts +2 -3
  67. package/lib/extension/zip/zip.blob.preview.component.d.ts +2 -3
  68. package/lib/extension/zip/zip.preview.component.d.ts +1 -3
  69. package/lib/interaction/dialog/dialog.action.directive.d.ts +2 -2
  70. package/lib/interaction/filter/filter.popover.component.d.ts +3 -5
  71. package/lib/interaction/filter/filter.wrapper.component.d.ts +1 -1
  72. package/lib/interaction/iframe/embed.component.d.ts +2 -4
  73. package/lib/interaction/iframe/iframe.component.d.ts +2 -4
  74. package/lib/interaction/popover/abstract.popover.ref.directive.d.ts +4 -4
  75. package/lib/interaction/popover/popover.action.directive.d.ts +2 -2
  76. package/lib/interaction/popover/popover.coordinator.component.d.ts +2 -4
  77. package/lib/interaction/popover/popover.coordinator.service.d.ts +2 -4
  78. package/lib/interaction/popup/popup.component.d.ts +2 -3
  79. package/lib/interaction/popup/popup.coordinator.component.d.ts +2 -4
  80. package/lib/interaction/popup/popup.coordinator.service.d.ts +1 -3
  81. package/lib/interaction/prompt/prompt.confirm.dialog.component.d.ts +1 -2
  82. package/lib/interaction/upload/upload.action.directive.d.ts +2 -6
  83. package/lib/layout/column/two/two.column.back.directive.d.ts +2 -4
  84. package/lib/layout/column/two/two.column.component.d.ts +1 -3
  85. package/lib/layout/column/two/two.column.sref.showright.directive.d.ts +1 -2
  86. package/lib/layout/column/two/two.column.store.d.ts +2 -3
  87. package/lib/layout/flex/flex.group.directive.d.ts +1 -2
  88. package/lib/layout/list/list.view.directive.d.ts +9 -10
  89. package/lib/layout/list/modifier/list.view.value.modifier.directive.d.ts +3 -6
  90. package/lib/layout/list/modifier/list.view.value.modifier.ripple.directive.d.ts +1 -2
  91. package/lib/layout/list/modifier/list.view.value.modifier.selection.directive.d.ts +1 -2
  92. package/lib/layout/style/style.body.directive.d.ts +2 -4
  93. package/lib/layout/style/style.directive.d.ts +2 -4
  94. package/lib/layout/style/style.set.directive.d.ts +2 -4
  95. package/lib/loading/loading.action.directive.d.ts +1 -3
  96. package/mapbox/lib/mapbox.injection.store.d.ts +1 -2
  97. package/mapbox/lib/mapbox.layout.resize.sync.directive.d.ts +2 -4
  98. package/mapbox/lib/mapbox.menu.component.d.ts +5 -6
  99. package/mapbox/lib/mapbox.store.d.ts +1 -2
  100. package/package.json +1 -1
  101. package/table/lib/date/daterange.table.cell.input.component.d.ts +2 -4
  102. package/table/lib/table.column.size.directive.d.ts +4 -5
@@ -546,4 +546,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
546
546
  function setDrawerContent(state, drawerContent) {
547
547
  return { ...state, drawerContent };
548
548
  }
549
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDJCQUEyQixFQUUzQixtQkFBbUIsRUFHbkIsbUJBQW1CLEVBR25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBb0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdOLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFtRSwyQkFBMkIsRUFBRSxNQUFN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c0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBpc1NhbWVMYXRMbmdCb3VuZCxcbiAgaXNTYW1lTGF0TG5nUG9pbnQsXG4gIElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBMYXRMbmdCb3VuZCxcbiAgbGF0TG5nQm91bmRGdW5jdGlvbixcbiAgTGF0TG5nUG9pbnRJbnB1dCxcbiAgTGF0TG5nUG9pbnQsXG4gIGxhdExuZ1BvaW50RnVuY3Rpb24sXG4gIE1heWJlLFxuICBPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgZGlmZkxhdExuZ0JvdW5kUG9pbnRzLFxuICBsYXRMbmdCb3VuZENlbnRlclBvaW50LFxuICBhZGRMYXRMbmdQb2ludHMsXG4gIGlzRGVmYXVsdExhdExuZ1BvaW50LFxuICBzd01vc3RMYXRMbmdQb2ludCxcbiAgbmVNb3N0TGF0TG5nUG9pbnQsXG4gIGxhdExuZ0JvdW5kV3JhcHNNYXAsXG4gIFZlY3RvcixcbiAgZmlsdGVyVW5kZWZpbmVkVmFsdWVzLFxuICBsYXRMbmdCb3VuZEZyb21JbnB1dCxcbiAgdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbixcbiAgaXNTYW1lVmVjdG9yLFxuICBab29tTGV2ZWxcbn0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnbmd4LW1hcGJveC1nbCc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAsIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCBzdGFydFdpdGgsIGludGVydmFsLCBmaXJzdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIE9wZXJhdG9yRnVuY3Rpb24sIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgTWFwYm94R2wgZnJvbSAnbWFwYm94LWdsJztcbmltcG9ydCB7IERieE1hcGJveENsaWNrRXZlbnQsIEtub3duTWFwYm94U3R5bGUsIE1hcGJveEJlYXJpbmcsIE1hcGJveEVhc2VUbywgTWFwYm94RXZlbnREYXRhLCBNYXBib3hGaXRCb3VuZHMsIE1hcGJveEZpdFBvc2l0aW9ucywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwsIE1hcGJveFpvb21MZXZlbFJhbmdlIH0gZnJvbSAnLi9tYXBib3gnO1xuaW1wb3J0IHsgRGJ4TWFwYm94U2VydmljZSB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uLCBNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24gfSBmcm9tICcuL21hcGJveC51dGlsJztcbmltcG9ydCB7IEZpbHRlck1hcGJveEJvdW5kQ29uZmlnLCBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbiwgZmlsdGVyQnlNYXBib3hWaWV3cG9ydEJvdW5kIH0gZnJvbSAnLi9tYXBib3gucnhqcyc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoVHlwZSA9ICdhbHdheXMnIHwgJ3doZW5fbm90X3JlbmRlcmluZycgfCAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3Mge1xuICAvKipcbiAgICogTWF4IGJvdW5kIHJlZnJlc2ggaW50ZXJ2YWwuXG4gICAqL1xuICB0aHJvdHRsZTogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gd2FpdCB0byB1cGRhdGUgdGhlIGJvdW5kIHVudGlsIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCByZW5kZXJpbmcuXG4gICAqL1xuICByZWZyZXNoVHlwZTogRGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlU3RhdGUge1xuICAvKipcbiAgICogQ3VycmVudCBNYXBTZXJ2aWNlIGJlaW5nIHV0aWxpemVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwU2VydmljZT86IE1heWJlPE1hcFNlcnZpY2U+O1xuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGU7XG4gIHJlYWRvbmx5IG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlO1xuICByZWFkb25seSB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZTtcbiAgcmVhZG9ubHkgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlO1xuICAvKipcbiAgICogVmlzdWFsIGNvbnRhaW5lciBzaXplIG9mIHRoZSBtYXAuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplPzogTWF5YmU8VmVjdG9yPjtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byByZXRhaW4gY29udGVudCBiZXR3ZWVuIHJlc2V0cy5cbiAgICpcbiAgICogVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluQ29udGVudDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBkcmF3ZXIgY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJhd2VyQ29udGVudD86IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj47XG4gIC8qKlxuICAgKiBMYXRlc3QgZXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogTWF5YmU8RXJyb3I+O1xuICAvKipcbiAgICogTWFwIG1hcmdpbi9vZmZzZXRcbiAgICovXG4gIHJlYWRvbmx5IG1hcmdpbj86IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPjtcbiAgLyoqXG4gICAqIE1pbmltdW0gdmVjdG9yIHNpemUgdG8gdXNlIGZvciB0aGUgdmlld3BvcnRCb3VuZEZ1bmN0aW9uJC4gSWYgbm90IGRlZmluZWQgdGhlcmUgaXMgbm8gbWluaW11bS5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplPzogTWF5YmU8UGFydGlhbDxWZWN0b3I+PjtcbiAgLyoqXG4gICAqIEJvdW5kIHJlZnJlc2ggc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGJvdW5kUmVmcmVzaFNldHRpbmdzOiBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFNldHRpbmdzO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHRoZSB2aXJ0dWFsIGJvdW5kICh2cyByYXcgYm91bmQpIGZvciBhbGwgYm91bmQtcmVsYXRlZCBvYnNlcnZhYmxlcy5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHVzZVZpcnR1YWxCb3VuZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxEYnhNYXBib3hTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZSA9IGluamVjdChEYnhNYXBib3hTZXJ2aWNlKTtcblxuICBwcml2YXRlIHNhZmVMYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oeyB3cmFwOiB0cnVlIH0pO1xuICBwcml2YXRlIGxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IGZhbHNlLCB2YWxpZGF0ZTogZmFsc2UgfSk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKHsgcG9pbnRGdW5jdGlvbjogdGhpcy5sYXRMbmdQb2ludCB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLFxuICAgICAgbW92ZVN0YXRlOiAnaW5pdCcsXG4gICAgICB6b29tU3RhdGU6ICdpbml0JyxcbiAgICAgIHJvdGF0ZVN0YXRlOiAnaW5pdCcsXG4gICAgICByZXRhaW5Db250ZW50OiB0cnVlLFxuICAgICAgdXNlVmlydHVhbEJvdW5kOiB0cnVlLFxuICAgICAgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHtcbiAgICAgICAgdGhyb3R0bGU6IDMwMCxcbiAgICAgICAgcmVmcmVzaFR5cGU6ICdhbHdheXMnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBFZmZlY3RzXG4gIHJlYWRvbmx5IHNldE1hcFNlcnZpY2UgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwU2VydmljZT4+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICAgIHRoaXMuX3NldE1hcFNlcnZpY2Uoc2VydmljZSk7XG5cbiAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRNb3ZlU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Wm9vbVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdpZGxlJyk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbWFwID0gc2VydmljZS5tYXBJbnN0YW5jZTtcblxuICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lclBhaXJzOiBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXJbXSA9IFtdO1xuXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBNYXBib3hHbC5NYXBFdmVudHM+KHR5cGU6IFQsIGxpc3RlbmVyOiBQYXJhbWV0ZXJzPHR5cGVvZiBtYXAub248VD4+WzJdKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uPFQ+KHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvclJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoOiB4LCBjbGllbnRIZWlnaHQ6IHkgfSA9IG1hcC5nZXRDYW52YXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXBDYW52YXNTaXplKHsgeCwgeSB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVzaXplJywgcmVmcmVzaEZvclJlc2l6ZSk7XG4gICAgICAgICAgICAgIHJlZnJlc2hGb3JSZXNpemUoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLnNhZmVMYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbVJhbmdlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tUmFuZ2U6IFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0TWluWm9vbSh6b29tUmFuZ2UubWluIHx8IG51bGwpO1xuICAgICAgICAgICAgbWFwLnNldE1heFpvb20oem9vbVJhbmdlLm1heCB8fCBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRLZXlib2FyZERpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdSb3RhdGVEaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1BhbkRpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdFBvc2l0aW9ucyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRQb3NpdGlvbnM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRGcm9tSW5wdXQgPSBsYXRMbmdCb3VuZEZyb21JbnB1dCh4LnBvc2l0aW9ucyk7XG5cbiAgICAgICAgaWYgKGJvdW5kRnJvbUlucHV0KSB7XG4gICAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKGJvdW5kRnJvbUlucHV0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgbGlmZWN5Y2xlUmVuZGVyVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgYXROZXh0SWRsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHggPT09ICdpZGxlJyksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJXaXRoT2Zmc2V0KGlucHV0T2Zmc2V0OiBMYXRMbmdQb2ludElucHV0KTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRPZmZzZXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5jZW50ZXIkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGNlbnRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0ge1xuICAgICAgICAgICAgICBsYXQ6IG9mZnNldC5sYXQgKyBjZW50ZXIubGF0LFxuICAgICAgICAgICAgICBsbmc6IG9mZnNldC5sbmcgKyBjZW50ZXIubG5nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHNpemluZzogRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsY3VsYXRpbmcgdGhpcyB1c2luZyB0aGUgdmlld3BvcnQoKSBmdW5jdGlvbiBmcm9tIEBwbGFjZW1hcmtpby9nZW8tdmlld3BvcnRcbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmJvdW5kJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChib3VuZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmTGF0TG5nQm91bmRQb2ludHMoYm91bmRzLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQoYm91bmRzKTtcblxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBzaXppbmcubGVmdE1hcmdpbiArIHNpemluZy5yaWdodE1hcmdpbjsgLy8gMzAwICsgMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBzaXppbmcuZnVsbFdpZHRoIC0gb2Zmc2V0V2lkdGg7IC8vIDEwMDAgLSAzMDAgLSAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aFJhdGlvID0gbmV3V2lkdGggLyBzaXppbmcuZnVsbFdpZHRoOyAvLyA3MDAgLyAxMDAwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCA9IGRpZmYubG5nICogbmV3V2lkdGhSYXRpbzsgLy8gNzAlIG9mZnNldFxuXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVPZmZzZXQ6IExhdExuZ1BvaW50ID0ge1xuICAgICAgICAgICAgICBsYXQ6IDAsXG4gICAgICAgICAgICAgIGxuZzogbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggLyAyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBhZGRMYXRMbmdQb2ludHMoYm91bmRzLnN3LCBlZmZlY3RpdmVPZmZzZXQpO1xuICAgICAgICAgICAgbmV3Q2VudGVyLmxhdCA9IGNlbnRlci5sYXQ7IC8vIHJldGFpbiBjZW50ZXIgcG9zaXRpb25cblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBzaXppbmcsIGJvdW5kcywgZWZmZWN0aXZlT2Zmc2V0LCBuZXdXaWR0aCwgb2Zmc2V0V2lkdGgsIGRpZmYsIGNlbnRlciwgbmV3Q2VudGVyIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZmlsdGVyQnlWaWV3cG9ydEJvdW5kPFQ+KGlucHV0OiBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbjxUPiB8IE9taXQ8RmlsdGVyTWFwYm94Qm91bmRDb25maWc8VD4sICdib3VuZEZ1bmN0aW9uT2JzJyB8ICdib3VuZERlY2lzaW9uT2JzJz4pOiBPcGVyYXRvckZ1bmN0aW9uPFRbXSwgVFtdPiB7XG4gICAgY29uc3QgY29uZmlnID0gdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nID8geyByZWFkVmFsdWU6IGlucHV0IH0gOiBpbnB1dDtcblxuICAgIHJldHVybiBmaWx0ZXJCeU1hcGJveFZpZXdwb3J0Qm91bmQoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgYm91bmRGdW5jdGlvbk9iczogdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLFxuICAgICAgYm91bmREZWNpc2lvbk9iczogdGhpcy5vdmVybGFwc0JvdW5kRnVuY3Rpb24kXG4gICAgfSk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBib3VuZFJlZnJlc2hTZXR0aW5ncyQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5ib3VuZFJlZnJlc2hTZXR0aW5ncyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNNb3ZpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnbW92aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb3ZpbmdUaW1lciA9IHRoaXMubW92aW5nVGltZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyaW5nVGltZXIgPSB0aGlzLmxpZmVjeWNsZVJlbmRlclRpbWVyKCk7XG5cbiAgcmVhZG9ubHkgY2VudGVyTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4gdGhpcy5sYXRMbmdQb2ludCh4LmdldENlbnRlcigpKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlck5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPExhdExuZ1BvaW50Pihpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZVZlY3RvciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50TWFwQ2FudmFzU2l6ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBDYW52YXNTaXplKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxWZWN0b3I+Pihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgY2FudmFzIHNpemUgd2l0aCBjb25zaWRlcmF0aW9uIHRvIHRoZSB2aXJ0dWFsIHZpZXdwb3J0IHNpemUuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplJCA9IHRoaXMuY3VycmVudE1hcENhbnZhc1NpemUkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgbWluaW11bU1hcENhbnZhc1NpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPFZlY3Rvcj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFwIGNhbnZhcyBzaXplIHdpdGggY29uc2lkZXJhdGlvbiB0byB0aGUgdmlydHVhbCB2aWV3cG9ydCBzaXplLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbE1hcENhbnZhc1NpemUkID0gdGhpcy5taW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSA9PiB7XG4gICAgICBpZiAobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaW11bU1hcENhbnZhc1NpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ2FudmFzU2l6ZSQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8VmVjdG9yPihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyB0aGUgbWluaW11bSB2aWV3cG9ydCBzaXplLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmVjdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB2aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSB2aWV3cG9ydEJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4gPSB0aGlzLm1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpID0+IHtcbiAgICAgIGlmIChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZpcnR1YWxCb3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChmbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRSZWZyZXNoU2V0dGluZ3MkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHRocm90dGxlOiB0aHJvdHRsZU1zLCByZWZyZXNoVHlwZSB9ID0gc2V0dGluZ3M7XG5cbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFtMYXRMbmdQb2ludCwgWm9vbUxldmVsXT47XG5cbiAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICBvYnMgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3aGVuX25vdF9yZW5kZXJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmJvdW5kJC5waXBlKHN3aXRjaE1hcCgoKSA9PiBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKSkpOyAvLyByZWZyZXNoIHdoZW5ldmVyIHRoZSBib3VuZCByZWZyZXNoZXNcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icy5waXBlKFxuICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRocm90dGxlTXMsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgICAgIG1hcCgoW2NlbnRlciwgem9vbV0pID0+XG4gICAgICAgICAgICAgIGZuKHtcbiAgICAgICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICAgICAgem9vbVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcmdpbiQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXJnaW4pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZnVsbFdpZHRoID09PSBiLmZ1bGxXaWR0aCAmJiBhLmxlZnRNYXJnaW4gPT09IGIubGVmdE1hcmdpbiAmJiBhLnJpZ2h0TWFyZ2luID09PSBiLnJpZ2h0TWFyZ2luKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJldmVyc2VNYXJnaW4kID0gdGhpcy5tYXJnaW4kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4geyBsZWZ0TWFyZ2luOiAteC5sZWZ0TWFyZ2luLCByaWdodE1hcmdpbjogLXgucmlnaHRNYXJnaW4sIGZ1bGxXaWR0aDogeC5mdWxsV2lkdGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyR2l2ZW5NYXJnaW4kOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlTWFyZ2luJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyJC5waXBlKHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZSh4KSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlciQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdCb3VuZE5vdyQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0geC5nZXRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdDogTGF0TG5nQm91bmQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoYm91bmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kU3cgPSBib3VuZC5nZXRTb3V0aFdlc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZE5lID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdyA9IGlzRGVmYXVsdExhdExuZ1BvaW50KGJvdW5kU3cpID8gc3dNb3N0TGF0TG5nUG9pbnQoKSA6IHsgbGF0OiBib3VuZFN3LmxhdCwgbG5nOiBib3VuZFN3LmxuZyB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lID0gaXNEZWZhdWx0TGF0TG5nUG9pbnQoYm91bmROZSkgPyBuZU1vc3RMYXRMbmdQb2ludCgpIDogeyBsYXQ6IGJvdW5kTmUubGF0LCBsbmc6IGJvdW5kTmUubG5nIH07XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxhdExuZ0JvdW5kKHN3LCBuZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXJNYXliZSgpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdCb3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmJvdW5kUmVmcmVzaFNldHRpbmdzJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB0aHJvdHRsZTogdGhyb3R0bGVNcywgcmVmcmVzaFR5cGUgfSA9IHNldHRpbmdzO1xuXG4gICAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD47XG5cbiAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLnJhd0JvdW5kTm93JDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3aGVuX25vdF9yZW5kZXJpbmcnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKHN3aXRjaE1hcCgoeCkgPT4gKHggPyBFTVBUWSA6IHRoaXMucmF3Qm91bmROb3ckKSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29ubHlfYWZ0ZXJfcmVuZGVyX2ZpbmlzaGVzJzpcbiAgICAgICAgICAgICAgb2JzID0gdGhpcy5pc1JlbmRlcmluZyQucGlwZShcbiAgICAgICAgICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnJhd0JvdW5kTm93JC5waXBlKGZpcnN0KCkpKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb2JzLnBpcGUodGhyb3R0bGVUaW1lKHRocm90dGxlTXMsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHVzZVZpcnR1YWxCb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC51c2VWaXJ0dWFsQm91bmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy51c2VWaXJ0dWFsQm91bmQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh1c2VWaXJ0dWFsQm91bmQpID0+IHtcbiAgICAgIGlmICh1c2VWaXJ0dWFsQm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbEJvdW5kJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd0JvdW5kJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kU2l6aW5nJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZGlmZkxhdExuZ0JvdW5kUG9pbnRzKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kV3JhcHNBcm91bmRXb3JsZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbGF0TG5nQm91bmRXcmFwc01hcCh4KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzV2l0aGluQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8SXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgb3ZlcmxhcHNCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy52aXJ0dWFsQm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbU5vdyQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFpvb20oKSBhcyBNYXBib3hab29tTGV2ZWwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb20kOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNab29taW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy56b29tTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBwaXRjaE5vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRQaXRjaCgpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBwaXRjaCQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5iZWFyaW5nTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkcmF3ZXJDb250ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRyYXdlckNvbnRlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNEcmF3ZXJDb250ZW50JCA9IHRoaXMuZHJhd2VyQ29udGVudCQucGlwZShcbiAgICBtYXAoKHgpID0+IHggIT0gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZG91YmxlQ2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJpZ2h0Q2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yaWdodENsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1hcmdpbiA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcmdpbjogTWF5YmU8RGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmc+KSA9PiAoeyAuLi5zdGF0ZSwgbWFyZ2luOiBtYXJnaW4gJiYgKG1hcmdpbi5yaWdodE1hcmdpbiAhPT0gMCB8fCBtYXJnaW4ubGVmdE1hcmdpbiAhPT0gMCkgPyBtYXJnaW4gOiB1bmRlZmluZWQgfSkpO1xuICByZWFkb25seSBzZXRNaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplOiBNYXliZTxQYXJ0aWFsPFZlY3Rvcj4+KSA9PiAoeyAuLi5zdGF0ZSwgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUgfSkpO1xuICByZWFkb25seSBzZXRVc2VWaXJ0dWFsQm91bmQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB1c2VWaXJ0dWFsQm91bmQ6IGJvb2xlYW4pID0+ICh7IC4uLnN0YXRlLCB1c2VWaXJ0dWFsQm91bmQgfSkpO1xuICByZWFkb25seSBzZXRCb3VuZFJlZnJlc2hTZXR0aW5ncyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGJvdW5kUmVmcmVzaFNldHRpbmdzOiBQYXJ0aWFsPERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3M+KSA9PiAoeyAuLi5zdGF0ZSwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHsgLi4uc3RhdGUuYm91bmRSZWZyZXNoU2V0dGluZ3MsIC4uLmJvdW5kUmVmcmVzaFNldHRpbmdzIH0gfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcFNlcnZpY2UgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBTZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4gKHsgbWFwU2VydmljZSwgbW92ZVN0YXRlOiAnaW5pdCcsIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsIHpvb21TdGF0ZTogJ2luaXQnLCByb3RhdGVTdGF0ZTogJ2luaXQnLCByZXRhaW5Db250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50LCBkcmF3ZXJDb250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50ID8gc3RhdGUuZHJhd2VyQ29udGVudCA6IHVuZGVmaW5lZCwgdXNlVmlydHVhbEJvdW5kOiBzdGF0ZS51c2VWaXJ0dWFsQm91bmQsIGJvdW5kUmVmcmVzaFNldHRpbmdzOiBzdGF0ZS5ib3VuZFJlZnJlc2hTZXR0aW5ncyB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldExpZmVjeWNsZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbGlmZWN5Y2xlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNb3ZlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIG1vdmVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFpvb21TdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgem9vbVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Um90YXRlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCByb3RhdGVTdGF0ZSB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwQ2FudmFzU2l6ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcENhbnZhc1NpemU6IFZlY3RvcikgPT4gKHsgLi4uc3RhdGUsIG1hcENhbnZhc1NpemUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXREb3VibGVDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZG91YmxlQ2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSaWdodENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByaWdodENsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCByaWdodENsaWNrRXZlbnQgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldEVycm9yID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZXJyb3I6IEVycm9yKSA9PiAoeyAuLi5zdGF0ZSwgZXJyb3IgfSkpO1xuXG4gIHJlYWRvbmx5IGNsZWFyRHJhd2VyQ29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHNldERyYXdlckNvbnRlbnQoc3RhdGUsIHVuZGVmaW5lZCkpO1xuICByZWFkb25seSBzZXREcmF3ZXJDb250ZW50ID0gdGhpcy51cGRhdGVyKHNldERyYXdlckNvbnRlbnQpO1xuXG4gIC8vIE1BUks6IENvbXBhdFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRyYXdlckNvbnRlbnQkIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50JCA9IHRoaXMuZHJhd2VyQ29udGVudCQ7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBoYXNEcmF3ZXJDb250ZW50JCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQ29udGVudCQgPSB0aGlzLmhhc0RyYXdlckNvbnRlbnQkO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgY2xlYXJEcmF3ZXJDb250ZW50IGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjbGVhckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiBzZXREcmF3ZXJDb250ZW50KHN0YXRlLCB1bmRlZmluZWQpKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldERyYXdlckNvbnRlbnQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHNldENvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoc2V0RHJhd2VyQ29udGVudCk7XG59XG5cbmZ1bmN0aW9uIHNldERyYXdlckNvbnRlbnQoc3RhdGU6IERieE1hcGJveFN0b3JlU3RhdGUsIGRyYXdlckNvbnRlbnQ6IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj4pIHtcbiAgcmV0dXJuIHsgLi4uc3RhdGUsIGRyYXdlckNvbnRlbnQgfTtcbn1cbiJdfQ==
549
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDJCQUEyQixFQUUzQixtQkFBbUIsRUFHbkIsbUJBQW1CLEVBR25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBb0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdOLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFtRSwyQkFBMkIsRUFBRSxNQUFN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c0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgaXNTYW1lTGF0TG5nQm91bmQsXG4gIGlzU2FtZUxhdExuZ1BvaW50LFxuICBJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgTGF0TG5nQm91bmQsXG4gIGxhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIExhdExuZ1BvaW50SW5wdXQsXG4gIExhdExuZ1BvaW50LFxuICBsYXRMbmdQb2ludEZ1bmN0aW9uLFxuICBNYXliZSxcbiAgT3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIGRpZmZMYXRMbmdCb3VuZFBvaW50cyxcbiAgbGF0TG5nQm91bmRDZW50ZXJQb2ludCxcbiAgYWRkTGF0TG5nUG9pbnRzLFxuICBpc0RlZmF1bHRMYXRMbmdQb2ludCxcbiAgc3dNb3N0TGF0TG5nUG9pbnQsXG4gIG5lTW9zdExhdExuZ1BvaW50LFxuICBsYXRMbmdCb3VuZFdyYXBzTWFwLFxuICBWZWN0b3IsXG4gIGZpbHRlclVuZGVmaW5lZFZhbHVlcyxcbiAgbGF0TG5nQm91bmRGcm9tSW5wdXQsXG4gIHZlY3Rvck1pbmltdW1TaXplUmVzaXplRnVuY3Rpb24sXG4gIGlzU2FtZVZlY3RvcixcbiAgWm9vbUxldmVsXG59IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPcGVyYXRvckZ1bmN0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEV2ZW50RGF0YSwgTWFwYm94Rml0Qm91bmRzLCBNYXBib3hGaXRQb3NpdGlvbnMsIE1hcGJveEZseVRvLCBNYXBib3hKdW1wVG8sIE1hcGJveFJlc2V0Tm9ydGgsIE1hcGJveFJlc2V0Tm9ydGhQaXRjaCwgTWFwYm94Um90YXRlVG8sIE1hcGJveFNuYXBUb05vcnRoLCBNYXBib3hTdHlsZUNvbmZpZywgTWFwYm94Wm9vbUxldmVsLCBNYXBib3hab29tTGV2ZWxSYW5nZSB9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiwgTWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uIH0gZnJvbSAnLi9tYXBib3gudXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJNYXBib3hCb3VuZENvbmZpZywgRmlsdGVyTWFwYm94Qm91bmRSZWFkSXRlbVZhbHVlRnVuY3Rpb24sIGZpbHRlckJ5TWFwYm94Vmlld3BvcnRCb3VuZCB9IGZyb20gJy4vbWFwYm94LnJ4anMnO1xuXG5leHBvcnQgdHlwZSBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSA9ICdpbml0JyB8ICdsb2FkJyB8ICdyZW5kZXInIHwgJ2lkbGUnO1xuZXhwb3J0IHR5cGUgTWFwYm94TWFwTW92ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ21vdmluZyc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBab29tU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnem9vbWluZyc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBSb3RhdGVTdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICdyb3RhdGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyIHtcbiAgdHlwZTogc3RyaW5nO1xuICBsaXN0ZW5lcjogKGV2OiBNYXBib3hFdmVudERhdGEpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRNYXBib3hMaXN0ZW5lclBhaXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4ge1xuICB0eXBlOiBUO1xuICBsaXN0ZW5lcjogKGV2OiBNYXBib3hHbC5NYXBFdmVudFR5cGVbVF0gJiBNYXBib3hFdmVudERhdGEpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcge1xuICBsZWZ0TWFyZ2luOiBudW1iZXI7XG4gIHJpZ2h0TWFyZ2luOiBudW1iZXI7XG4gIGZ1bGxXaWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFR5cGUgPSAnYWx3YXlzJyB8ICd3aGVuX25vdF9yZW5kZXJpbmcnIHwgJ29ubHlfYWZ0ZXJfcmVuZGVyX2ZpbmlzaGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIE1heCBib3VuZCByZWZyZXNoIGludGVydmFsLlxuICAgKi9cbiAgdGhyb3R0bGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHdhaXQgdG8gdXBkYXRlIHRoZSBib3VuZCB1bnRpbCBhZnRlciBpdCBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLlxuICAgKi9cbiAgcmVmcmVzaFR5cGU6IERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZVN0YXRlIHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgTWFwU2VydmljZSBiZWluZyB1dGlsaXplZC5cbiAgICovXG4gIHJlYWRvbmx5IG1hcFNlcnZpY2U/OiBNYXliZTxNYXBTZXJ2aWNlPjtcbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlO1xuICByZWFkb25seSBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZTtcbiAgcmVhZG9ubHkgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGU7XG4gIHJlYWRvbmx5IHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZTtcbiAgLyoqXG4gICAqIFZpc3VhbCBjb250YWluZXIgc2l6ZSBvZiB0aGUgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwQ2FudmFzU2l6ZT86IE1heWJlPFZlY3Rvcj47XG4gIC8qKlxuICAgKiBMYXRlc3QgY2xpY2sgZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBkb3VibGUtY2xpY2sgZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBjb250ZXh0bWVudSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJpZ2h0Q2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmV0YWluIGNvbnRlbnQgYmV0d2VlbiByZXNldHMuXG4gICAqXG4gICAqIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbkNvbnRlbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZHJhd2VyIGNvbnRlbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRyYXdlckNvbnRlbnQ/OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+O1xuICAvKipcbiAgICogTGF0ZXN0IGVycm9yXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IE1heWJlPEVycm9yPjtcbiAgLyoqXG4gICAqIE1hcCBtYXJnaW4vb2Zmc2V0XG4gICAqL1xuICByZWFkb25seSBtYXJnaW4/OiBNYXliZTxEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZz47XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZlY3RvciBzaXplIHRvIHVzZSBmb3IgdGhlIHZpZXdwb3J0Qm91bmRGdW5jdGlvbiQuIElmIG5vdCBkZWZpbmVkIHRoZXJlIGlzIG5vIG1pbmltdW0uXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZT86IE1heWJlPFBhcnRpYWw8VmVjdG9yPj47XG4gIC8qKlxuICAgKiBCb3VuZCByZWZyZXNoIHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBib3VuZFJlZnJlc2hTZXR0aW5nczogRGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hTZXR0aW5ncztcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgdmlydHVhbCBib3VuZCAodnMgcmF3IGJvdW5kKSBmb3IgYWxsIGJvdW5kLXJlbGF0ZWQgb2JzZXJ2YWJsZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSB1c2VWaXJ0dWFsQm91bmQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RvcmUgdXNlZCBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcFN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8RGJ4TWFwYm94U3RvcmVTdGF0ZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2UgPSBpbmplY3QoRGJ4TWFwYm94U2VydmljZSk7XG5cbiAgcHJpdmF0ZSBzYWZlTGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKHsgd3JhcDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBsYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oeyB3cmFwOiBmYWxzZSwgdmFsaWRhdGU6IGZhbHNlIH0pO1xuICBwcml2YXRlIGxhdExuZ0JvdW5kID0gbGF0TG5nQm91bmRGdW5jdGlvbih7IHBvaW50RnVuY3Rpb246IHRoaXMubGF0TG5nUG9pbnQgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbGlmZWN5Y2xlU3RhdGU6ICdpbml0JyxcbiAgICAgIG1vdmVTdGF0ZTogJ2luaXQnLFxuICAgICAgem9vbVN0YXRlOiAnaW5pdCcsXG4gICAgICByb3RhdGVTdGF0ZTogJ2luaXQnLFxuICAgICAgcmV0YWluQ29udGVudDogdHJ1ZSxcbiAgICAgIHVzZVZpcnR1YWxCb3VuZDogdHJ1ZSxcbiAgICAgIGJvdW5kUmVmcmVzaFNldHRpbmdzOiB7XG4gICAgICAgIHRocm90dGxlOiAzMDAsXG4gICAgICAgIHJlZnJlc2hUeXBlOiAnYWx3YXlzJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTUFSSzogRWZmZWN0c1xuICByZWFkb25seSBzZXRNYXBTZXJ2aWNlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcFNlcnZpY2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4ge1xuICAgICAgICB0aGlzLl9zZXRNYXBTZXJ2aWNlKHNlcnZpY2UpO1xuXG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2VydmljZS5tYXBMb2FkZWQkLnBpcGUoXG4gICAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0TW92ZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHNlcnZpY2UubWFwSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJQYWlyczogU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyW10gPSBbXTtcblxuICAgICAgICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRzPih0eXBlOiBULCBsaXN0ZW5lcjogUGFyYW1ldGVyczx0eXBlb2YgbWFwLm9uPFQ+PlsyXSkge1xuICAgICAgICAgICAgICAgIG1hcC5vbjxUPih0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJQYWlycy5wdXNoKHsgdHlwZSwgbGlzdGVuZXIgfSBhcyBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2lkbGUnLCAoKSA9PiB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgnaWRsZScpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JlbmRlcicsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdyZW5kZXInKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdlcnJvcicsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3IoeC5lcnJvcik7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdtb3Zlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRNb3ZlU3RhdGUoJ21vdmluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVlbmQnLCAoKSA9PiB0aGlzLl9zZXRNb3ZlU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3pvb21zdGFydCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnem9vbWluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3pvb21lbmQnLCAoKSA9PiB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JvdGF0ZXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Um90YXRlU3RhdGUoJ3JvdGF0aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlZW5kJywgKCkgPT4gdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NsaWNrJywgKHgpID0+IHRoaXMuX3NldENsaWNrRXZlbnQoeCkpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignZGJsY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0RG91YmxlQ2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdjb250ZXh0bWVudScsICh4KSA9PiB0aGlzLl9zZXRSaWdodENsaWNrRXZlbnQoeCkpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hGb3JSZXNpemUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aDogeCwgY2xpZW50SGVpZ2h0OiB5IH0gPSBtYXAuZ2V0Q2FudmFzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TWFwQ2FudmFzU2l6ZSh7IHgsIHkgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3Jlc2l6ZScsIHJlZnJlc2hGb3JSZXNpemUpO1xuICAgICAgICAgICAgICByZWZyZXNoRm9yUmVzaXplKCk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJQYWlycyxcbiAgICAgICAgICAgICAgICBzdWJzXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2xlYW51cCgoeyBzZXJ2aWNlLCBsaXN0ZW5lclBhaXJzLCBzdWJzIH0pID0+IHtcbiAgICAgICAgY29uc3QgbWFwID0gc2VydmljZS5tYXBJbnN0YW5jZTtcblxuICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgbGlzdGVuZXJQYWlycy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICBtYXAub2ZmKHgudHlwZSwgeC5saXN0ZW5lcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRTdHlsZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hTdHlsZUNvbmZpZyB8IEtub3duTWFwYm94U3R5bGUgfCBzdHJpbmc+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHN0eWxlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNldFN0eWxlKHN0eWxlLnN0eWxlLCBzdHlsZS5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRDZW50ZXIgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnRJbnB1dD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY2VudGVyOiBMYXRMbmdQb2ludElucHV0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gdGhpcy5zYWZlTGF0TG5nUG9pbnQoY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRDZW50ZXIoY2VudGVyUG9pbnQpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFpvb21SYW5nZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxQYXJ0aWFsPE1hcGJveFpvb21MZXZlbFJhbmdlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbVJhbmdlOiBQYXJ0aWFsPE1hcGJveFpvb21MZXZlbFJhbmdlPikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgbWFwLnNldE1pblpvb20oem9vbVJhbmdlLm1pbiB8fCBudWxsKTtcbiAgICAgICAgICAgIG1hcC5zZXRNYXhab29tKHpvb21SYW5nZS5tYXggfHwgbnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWluWm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWF4Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1heFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0S2V5Ym9hcmREaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmtleWJvYXJkLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmtleWJvYXJkLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXREcmFnUm90YXRlRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUm90YXRlLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdQYW5EaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdQYW4uZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbURpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0UGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5QaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNaW5QaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWF4UGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldEJlYXJpbmcgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChiZWFyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0QmVhcmluZyhiZWFyaW5nKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByb3RhdGVUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hCZWFyaW5nIHwgTWFwYm94Um90YXRlVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJvdGF0ZUlucHV0OiBNYXBib3hCZWFyaW5nIHwgTWFwYm94Um90YXRlVG8pID0+IHtcbiAgICAgICAgY29uc3Qgcm90YXRlOiBNYXBib3hSb3RhdGVUbyA9IHR5cGVvZiByb3RhdGVJbnB1dCA9PT0gJ251bWJlcicgPyB7IGJlYXJpbmc6IHJvdGF0ZUlucHV0IH0gOiByb3RhdGVJbnB1dDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yb3RhdGVUbyhyb3RhdGUuYmVhcmluZywgcm90YXRlLm9wdGlvbnMsIHJvdGF0ZT8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldE5vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGg+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzZXQ6IE1heWJlPE1hcGJveFJlc2V0Tm9ydGg+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJlc2V0Tm9ydGgocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hSZXNldE5vcnRoUGl0Y2g+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzZXQ6IE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aFBpdGNoKHJlc2V0Py5vcHRpb25zLCByZXNldD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzbmFwVG9Ob3J0aCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hTbmFwVG9Ob3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzbmFwOiBNYXliZTxNYXBib3hTbmFwVG9Ob3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc25hcFRvTm9ydGgoc25hcD8ub3B0aW9ucywgc25hcD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBmaXRQb3NpdGlvbnMgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Rml0UG9zaXRpb25zPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdW5kRnJvbUlucHV0ID0gbGF0TG5nQm91bmRGcm9tSW5wdXQoeC5wb3NpdGlvbnMpO1xuXG4gICAgICAgIGlmIChib3VuZEZyb21JbnB1dCkge1xuICAgICAgICAgIGNvbnN0IGJvdW5kID0gdGhpcy5sYXRMbmdCb3VuZChib3VuZEZyb21JbnB1dCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBmaXRCb3VuZHMgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Rml0Qm91bmRzPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdW5kID0gdGhpcy5sYXRMbmdCb3VuZCh4LmJvdW5kcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZml0Qm91bmRzKG5ldyBNYXBib3hHbC5MbmdMYXRCb3VuZHMoYm91bmQuc3csIGJvdW5kLm5lKSwgeC5vcHRpb25zLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkganVtcFRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEp1bXBUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuanVtcFRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVhc2VUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hFYXNlVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5zYWZlTGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmVhc2VUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBmbHlUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGbHlUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZmx5VG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXRQaXRjaEFuZEJlYXJpbmcgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0UGl0Y2goMCk7XG4gICAgICAgICAgICBtYXAuc2V0QmVhcmluZygwKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICAvLyBNQVJLOiBBY2Nlc3NvcnNcbiAgZ2V0IHRpbWVyUmVmcmVzaFBlcmlvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYnhNYXBib3hTZXJ2aWNlLm1hcGJveE1hcFN0b3JlVGltZXJSZWZyZXNoUGVyaW9kO1xuICB9XG5cbiAgbW92aW5nVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgaWYgKHggPT09ICdtb3ZpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVydmFsKHBlcmlvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIGxpZmVjeWNsZVJlbmRlclRpbWVyKHBlcmlvZCA9IHRoaXMudGltZXJSZWZyZXNoUGVyaW9kKSB7XG4gICAgcmV0dXJuIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgaWYgKHggPT09ICdyZW5kZXInKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVydmFsKHBlcmlvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIGF0TmV4dElkbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiB4ID09PSAnaWRsZScpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyV2l0aE9mZnNldChpbnB1dE9mZnNldDogTGF0TG5nUG9pbnRJbnB1dCk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmxhdExuZ1BvaW50KGlucHV0T2Zmc2V0KTtcblxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuY2VudGVyJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChjZW50ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHtcbiAgICAgICAgICAgICAgbGF0OiBvZmZzZXQubGF0ICsgY2VudGVyLmxhdCxcbiAgICAgICAgICAgICAgbG5nOiBvZmZzZXQubG5nICsgY2VudGVyLmxuZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZShzaXppbmc6IERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nKTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGN1bGF0aW5nIHRoaXMgdXNpbmcgdGhlIHZpZXdwb3J0KCkgZnVuY3Rpb24gZnJvbSBAcGxhY2VtYXJraW8vZ2VvLXZpZXdwb3J0XG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5ib3VuZCQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoYm91bmRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZkxhdExuZ0JvdW5kUG9pbnRzKGJvdW5kcywgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBsYXRMbmdCb3VuZENlbnRlclBvaW50KGJvdW5kcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gc2l6aW5nLmxlZnRNYXJnaW4gKyBzaXppbmcucmlnaHRNYXJnaW47IC8vIDMwMCArIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gc2l6aW5nLmZ1bGxXaWR0aCAtIG9mZnNldFdpZHRoOyAvLyAxMDAwIC0gMzAwIC0gMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGhSYXRpbyA9IG5ld1dpZHRoIC8gc2l6aW5nLmZ1bGxXaWR0aDsgLy8gNzAwIC8gMTAwMFxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggPSBkaWZmLmxuZyAqIG5ld1dpZHRoUmF0aW87IC8vIDcwJSBvZmZzZXRcblxuICAgICAgICAgICAgY29uc3QgZWZmZWN0aXZlT2Zmc2V0OiBMYXRMbmdQb2ludCA9IHtcbiAgICAgICAgICAgICAgbGF0OiAwLFxuICAgICAgICAgICAgICBsbmc6IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoIC8gMlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gYWRkTGF0TG5nUG9pbnRzKGJvdW5kcy5zdywgZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICAgICAgICAgIG5ld0NlbnRlci5sYXQgPSBjZW50ZXIubGF0OyAvLyByZXRhaW4gY2VudGVyIHBvc2l0aW9uXG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgc2l6aW5nLCBib3VuZHMsIGVmZmVjdGl2ZU9mZnNldCwgbmV3V2lkdGgsIG9mZnNldFdpZHRoLCBkaWZmLCBjZW50ZXIsIG5ld0NlbnRlciB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGZpbHRlckJ5Vmlld3BvcnRCb3VuZDxUPihpbnB1dDogRmlsdGVyTWFwYm94Qm91bmRSZWFkSXRlbVZhbHVlRnVuY3Rpb248VD4gfCBPbWl0PEZpbHRlck1hcGJveEJvdW5kQ29uZmlnPFQ+LCAnYm91bmRGdW5jdGlvbk9icycgfCAnYm91bmREZWNpc2lvbk9icyc+KTogT3BlcmF0b3JGdW5jdGlvbjxUW10sIFRbXT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHR5cGVvZiBpbnB1dCA9PT0gJ2Z1bmN0aW9uJyA/IHsgcmVhZFZhbHVlOiBpbnB1dCB9IDogaW5wdXQ7XG5cbiAgICByZXR1cm4gZmlsdGVyQnlNYXBib3hWaWV3cG9ydEJvdW5kKHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGJvdW5kRnVuY3Rpb25PYnM6IHRoaXMudmlld3BvcnRCb3VuZEZ1bmN0aW9uJCxcbiAgICAgIGJvdW5kRGVjaXNpb25PYnM6IHRoaXMub3ZlcmxhcHNCb3VuZEZ1bmN0aW9uJFxuICAgIH0pO1xuICB9XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcFNlcnZpY2UkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWFwU2VydmljZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcFNlcnZpY2UkID0gdGhpcy5jdXJyZW50TWFwU2VydmljZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBjdXJyZW50TWFwSW5zdGFuY2UkOiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveEdsLk1hcD4+ID0gdGhpcy5jdXJyZW50TWFwU2VydmljZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGN1cnJlbnRNYXBTZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRNYXBTZXJ2aWNlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50TWFwU2VydmljZS5tYXBMb2FkZWQkLnBpcGUoXG4gICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICBtYXAoKCkgPT4gY3VycmVudE1hcFNlcnZpY2UubWFwSW5zdGFuY2UpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwSW5zdGFuY2UkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgYm91bmRSZWZyZXNoU2V0dGluZ3MkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguYm91bmRSZWZyZXNoU2V0dGluZ3MpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbW92ZVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1vdmVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGxpZmVjeWNsZVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmxpZmVjeWNsZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lnpvb21TdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnJvdGF0ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNJbml0aWFsaXplZCQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgIGlmICgheCkge1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMubW92ZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSksIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKV0pLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChbbSwgbF0pID0+IG0gJiYgbCksXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHdoZW5Jbml0aWFsaXplZCQgPSB0aGlzLmlzSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgZmlsdGVyKCh4KSA9PiB0cnVlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUmVuZGVyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAncmVuZGVyJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTW92aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ21vdmluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc1pvb21pbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnpvb21TdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnem9vbWluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc1JvdGF0aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5yb3RhdGVTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAncm90YXRpbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW92aW5nVGltZXIgPSB0aGlzLm1vdmluZ1RpbWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmluZ1RpbWVyID0gdGhpcy5saWZlY3ljbGVSZW5kZXJUaW1lcigpO1xuXG4gIHJlYWRvbmx5IGNlbnRlck5vdyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHRoaXMubGF0TG5nUG9pbnQoeC5nZXRDZW50ZXIoKSkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlciQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXJOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxMYXRMbmdQb2ludD4oaXNTYW1lTGF0TG5nUG9pbnQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcENhbnZhc1NpemUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWFwQ2FudmFzU2l6ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8VmVjdG9yPj4oaXNTYW1lVmVjdG9yKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFwIGNhbnZhcyBzaXplIHdpdGggY29uc2lkZXJhdGlvbiB0byB0aGUgdmlydHVhbCB2aWV3cG9ydCBzaXplLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwQ2FudmFzU2l6ZSQgPSB0aGlzLmN1cnJlbnRNYXBDYW52YXNTaXplJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIG1pbmltdW1NYXBDYW52YXNTaXplKG1pblZlY3RvcjogUGFydGlhbDxWZWN0b3I+KTogT2JzZXJ2YWJsZTxWZWN0b3I+IHtcbiAgICBjb25zdCByZXNpemVGbiA9IHZlY3Rvck1pbmltdW1TaXplUmVzaXplRnVuY3Rpb24obWluVmVjdG9yKTtcbiAgICByZXR1cm4gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiByZXNpemVGbih4KSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxWZWN0b3I+KGlzU2FtZVZlY3RvciksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1hcCBjYW52YXMgc2l6ZSB3aXRoIGNvbnNpZGVyYXRpb24gdG8gdGhlIHZpcnR1YWwgdmlld3BvcnQgc2l6ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZpcnR1YWxNYXBDYW52YXNTaXplJCA9IHRoaXMubWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkgPT4ge1xuICAgICAgaWYgKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbmltdW1NYXBDYW52YXNTaXplKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJhd1ZpZXdwb3J0Qm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8TWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uPiA9IHRoaXMubWFwQ2FudmFzU2l6ZSQucGlwZShcbiAgICBtYXAoKG1hcENhbnZhc1NpemUpID0+IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbih7IG1hcENhbnZhc1NpemUgfSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24gb2JzZXJ2YWJsZSB0aGF0IHJldHVybnMgdGhlIG1pbmltdW0gdmlld3BvcnQgc2l6ZS5cbiAgICpcbiAgICogQHBhcmFtIG1pblZlY3RvclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdmlld3BvcnRCb3VuZEZ1bmN0aW9uV2l0aE1pbmltdW1TaXplKG1pblZlY3RvcjogUGFydGlhbDxWZWN0b3I+KTogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+IHtcbiAgICBjb25zdCByZXNpemVGbiA9IHZlY3Rvck1pbmltdW1TaXplUmVzaXplRnVuY3Rpb24obWluVmVjdG9yKTtcbiAgICByZXR1cm4gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiByZXNpemVGbih4KSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxWZWN0b3I+KGlzU2FtZVZlY3RvciksXG4gICAgICBtYXAoKG1hcENhbnZhc1NpemUpID0+IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbih7IG1hcENhbnZhc1NpemUgfSkpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcmVhZG9ubHkgdmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5taW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSA9PiB7XG4gICAgICBpZiAobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRCb3VuZEZ1bmN0aW9uV2l0aE1pbmltdW1TaXplKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1ZpZXdwb3J0Qm91bmRGdW5jdGlvbiQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB2aXJ0dWFsQm91bmQkOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMudmlld3BvcnRCb3VuZEZ1bmN0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZm4pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmJvdW5kUmVmcmVzaFNldHRpbmdzJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB0aHJvdHRsZTogdGhyb3R0bGVNcywgcmVmcmVzaFR5cGUgfSA9IHNldHRpbmdzO1xuXG4gICAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxbTGF0TG5nUG9pbnQsIFpvb21MZXZlbF0+O1xuXG4gICAgICAgICAgc3dpdGNoIChyZWZyZXNoVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgICAgICAgICAgb2JzID0gY29tYmluZUxhdGVzdChbdGhpcy5jZW50ZXJOb3ckLCB0aGlzLnpvb21Ob3ckXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2hlbl9ub3RfcmVuZGVyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ29ubHlfYWZ0ZXJfcmVuZGVyX2ZpbmlzaGVzJzpcbiAgICAgICAgICAgICAgb2JzID0gdGhpcy5ib3VuZCQucGlwZShzd2l0Y2hNYXAoKCkgPT4gY29tYmluZUxhdGVzdChbdGhpcy5jZW50ZXJOb3ckLCB0aGlzLnpvb21Ob3ckXSkpKTsgLy8gcmVmcmVzaCB3aGVuZXZlciB0aGUgYm91bmQgcmVmcmVzaGVzXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgICAgICAgIHRocm90dGxlVGltZSh0aHJvdHRsZU1zLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgICAgICBtYXAoKFtjZW50ZXIsIHpvb21dKSA9PlxuICAgICAgICAgICAgICBmbih7XG4gICAgICAgICAgICAgICAgY2VudGVyLFxuICAgICAgICAgICAgICAgIHpvb21cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXJnaW4kID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWFyZ2luKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYSAhPSBudWxsICYmIGIgIT0gbnVsbCAmJiBhLmZ1bGxXaWR0aCA9PT0gYi5mdWxsV2lkdGggJiYgYS5sZWZ0TWFyZ2luID09PSBiLmxlZnRNYXJnaW4gJiYgYS5yaWdodE1hcmdpbiA9PT0gYi5yaWdodE1hcmdpbiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByZXZlcnNlTWFyZ2luJCA9IHRoaXMubWFyZ2luJC5waXBlKFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgcmV0dXJuIHsgbGVmdE1hcmdpbjogLXgubGVmdE1hcmdpbiwgcmlnaHRNYXJnaW46IC14LnJpZ2h0TWFyZ2luLCBmdWxsV2lkdGg6IHguZnVsbFdpZHRoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlckdpdmVuTWFyZ2luJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZU1hcmdpbiQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbnRlciQucGlwZShzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2FsY3VsYXRlTmV4dENlbnRlck9mZnNldFdpdGhTY3JlZW5NYXJnaW5DaGFuZ2UoeCkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmckLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIXgpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXIkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3Qm91bmROb3ckOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib3VuZCA9IHguZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6IExhdExuZ0JvdW5kIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKGJvdW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZFN3ID0gYm91bmQuZ2V0U291dGhXZXN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmROZSA9IGJvdW5kLmdldE5vcnRoRWFzdCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3cgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZFN3KSA/IHN3TW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmRTdy5sYXQsIGxuZzogYm91bmRTdy5sbmcgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZSA9IGlzRGVmYXVsdExhdExuZ1BvaW50KGJvdW5kTmUpID8gbmVNb3N0TGF0TG5nUG9pbnQoKSA6IHsgbGF0OiBib3VuZE5lLmxhdCwgbG5nOiBib3VuZE5lLmxuZyB9O1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sYXRMbmdCb3VuZChzdywgbmUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyTWF5YmUoKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nQm91bmQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3Qm91bmQkOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ib3VuZFJlZnJlc2hTZXR0aW5ncyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChzZXR0aW5ncykgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdGhyb3R0bGU6IHRocm90dGxlTXMsIHJlZnJlc2hUeXBlIH0gPSBzZXR0aW5ncztcblxuICAgICAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+O1xuXG4gICAgICAgICAgc3dpdGNoIChyZWZyZXNoVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgICAgICAgICAgb2JzID0gdGhpcy5yYXdCb3VuZE5vdyQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2hlbl9ub3RfcmVuZGVyaW5nJzpcbiAgICAgICAgICAgICAgb2JzID0gdGhpcy5pc1JlbmRlcmluZyQucGlwZShzd2l0Y2hNYXAoKHgpID0+ICh4ID8gRU1QVFkgOiB0aGlzLnJhd0JvdW5kTm93JCkpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbmx5X2FmdGVyX3JlbmRlcl9maW5pc2hlcyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoXG4gICAgICAgICAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5yYXdCb3VuZE5vdyQucGlwZShmaXJzdCgpKSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icy5waXBlKHRocm90dGxlVGltZSh0aHJvdHRsZU1zLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB1c2VWaXJ0dWFsQm91bmQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudXNlVmlydHVhbEJvdW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmQkOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMudXNlVmlydHVhbEJvdW5kJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodXNlVmlydHVhbEJvdW5kKSA9PiB7XG4gICAgICBpZiAodXNlVmlydHVhbEJvdW5kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpcnR1YWxCb3VuZCQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdCb3VuZCQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFNpemluZyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGRpZmZMYXRMbmdCb3VuZFBvaW50cyh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFdyYXBzQXJvdW5kV29ybGQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGxhdExuZ0JvdW5kV3JhcHNNYXAoeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1dpdGhpbkJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG92ZXJsYXBzQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8T3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMudmlydHVhbEJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21Ob3ckOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRab29tKCkgYXMgTWFwYm94Wm9vbUxldmVsKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSB6b29tJDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzWm9vbWluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuem9vbU5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgcGl0Y2hOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0UGl0Y2goKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgcGl0Y2gkID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm90YXRpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnBpdGNoTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldEJlYXJpbmcoKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgYmVhcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYmVhcmluZ05vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgZHJhd2VyQ29udGVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5kcmF3ZXJDb250ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzRHJhd2VyQ29udGVudCQgPSB0aGlzLmRyYXdlckNvbnRlbnQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ICE9IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkb3VibGVDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRvdWJsZUNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByaWdodENsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucmlnaHRDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICByZWFkb25seSBzZXRNYXJnaW4gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXJnaW46IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPikgPT4gKHsgLi4uc3RhdGUsIG1hcmdpbjogbWFyZ2luICYmIChtYXJnaW4ucmlnaHRNYXJnaW4gIT09IDAgfHwgbWFyZ2luLmxlZnRNYXJnaW4gIT09IDApID8gbWFyZ2luIDogdW5kZWZpbmVkIH0pKTtcbiAgcmVhZG9ubHkgc2V0TWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZTogTWF5YmU8UGFydGlhbDxWZWN0b3I+PikgPT4gKHsgLi4uc3RhdGUsIG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplIH0pKTtcbiAgcmVhZG9ubHkgc2V0VXNlVmlydHVhbEJvdW5kID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdXNlVmlydHVhbEJvdW5kOiBib29sZWFuKSA9PiAoeyAuLi5zdGF0ZSwgdXNlVmlydHVhbEJvdW5kIH0pKTtcbiAgcmVhZG9ubHkgc2V0Qm91bmRSZWZyZXNoU2V0dGluZ3MgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBib3VuZFJlZnJlc2hTZXR0aW5nczogUGFydGlhbDxEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFNldHRpbmdzPikgPT4gKHsgLi4uc3RhdGUsIGJvdW5kUmVmcmVzaFNldHRpbmdzOiB7IC4uLnN0YXRlLmJvdW5kUmVmcmVzaFNldHRpbmdzLCAuLi5ib3VuZFJlZnJlc2hTZXR0aW5ncyB9IH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBTZXJ2aWNlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+ICh7IG1hcFNlcnZpY2UsIG1vdmVTdGF0ZTogJ2luaXQnLCBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLCB6b29tU3RhdGU6ICdpbml0Jywgcm90YXRlU3RhdGU6ICdpbml0JywgcmV0YWluQ29udGVudDogc3RhdGUucmV0YWluQ29udGVudCwgZHJhd2VyQ29udGVudDogc3RhdGUucmV0YWluQ29udGVudCA/IHN0YXRlLmRyYXdlckNvbnRlbnQgOiB1bmRlZmluZWQsIHVzZVZpcnR1YWxCb3VuZDogc3RhdGUudXNlVmlydHVhbEJvdW5kLCBib3VuZFJlZnJlc2hTZXR0aW5nczogc3RhdGUuYm91bmRSZWZyZXNoU2V0dGluZ3MgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcENhbnZhc1NpemUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBDYW52YXNTaXplOiBWZWN0b3IpID0+ICh7IC4uLnN0YXRlLCBtYXBDYW52YXNTaXplIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBjbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RG91YmxlQ2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBkb3VibGVDbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0UmlnaHRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmlnaHRDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgcmlnaHRDbGlja0V2ZW50IH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRFcnJvciA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGVycm9yOiBFcnJvcikgPT4gKHsgLi4uc3RhdGUsIGVycm9yIH0pKTtcblxuICByZWFkb25seSBjbGVhckRyYXdlckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiBzZXREcmF3ZXJDb250ZW50KHN0YXRlLCB1bmRlZmluZWQpKTtcbiAgcmVhZG9ubHkgc2V0RHJhd2VyQ29udGVudCA9IHRoaXMudXBkYXRlcihzZXREcmF3ZXJDb250ZW50KTtcblxuICAvLyBNQVJLOiBDb21wYXRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBkcmF3ZXJDb250ZW50JCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudCQgPSB0aGlzLmRyYXdlckNvbnRlbnQkO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaGFzRHJhd2VyQ29udGVudCQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc0NvbnRlbnQkID0gdGhpcy5oYXNEcmF3ZXJDb250ZW50JDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGNsZWFyRHJhd2VyQ29udGVudCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xlYXJDb250ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gc2V0RHJhd2VyQ29udGVudChzdGF0ZSwgdW5kZWZpbmVkKSk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBzZXREcmF3ZXJDb250ZW50IGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBzZXRDb250ZW50ID0gdGhpcy51cGRhdGVyKHNldERyYXdlckNvbnRlbnQpO1xufVxuXG5mdW5jdGlvbiBzZXREcmF3ZXJDb250ZW50KHN0YXRlOiBEYnhNYXBib3hTdG9yZVN0YXRlLCBkcmF3ZXJDb250ZW50OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+KSB7XG4gIHJldHVybiB7IC4uLnN0YXRlLCBkcmF3ZXJDb250ZW50IH07XG59XG4iXX0=
@@ -7,6 +7,7 @@ import { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
7
7
  import { SubscriptionObject } from '@dereekb/rxjs';
8
8
  import { addDays, format as formatDate } from 'date-fns';
9
9
  import { distinctUntilChanged, filter, startWith, throttleTime } from 'rxjs';
10
+ import { cleanSubscription } from '@dereekb/dbx-core';
10
11
  import { MatButtonModule } from '@angular/material/button';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@angular/material/datepicker";
@@ -65,26 +66,22 @@ export class DbxTableDateRangeDayDistanceInputCellInputComponent {
65
66
  return `Select Date`;
66
67
  }
67
68
  });
68
- ngOnInit() {
69
- this._syncSub.subscription = this.tableStore.input$.subscribe((x) => {
69
+ constructor() {
70
+ cleanSubscription(this.tableStore.input$.subscribe((x) => {
70
71
  const start = x?.date ?? null;
71
72
  const end = start ? addDays(start, this.daysDistance) : undefined;
72
73
  this.range.setValue({
73
74
  start,
74
75
  end
75
76
  });
76
- });
77
- this._valueSub.subscription = this.rangeValue$
77
+ }));
78
+ cleanSubscription(this.rangeValue$
78
79
  .pipe(filter((x) => Boolean(x.start)), distinctUntilChanged((a, b) => isSameDateDay(a?.start, b?.start)), throttleTime(100, undefined, { trailing: true }))
79
80
  .subscribe((x) => {
80
81
  if (x.start) {
81
82
  this.tableStore.setInput({ date: x.start, distance: this.daysDistance });
82
83
  }
83
- });
84
- }
85
- ngOnDestroy() {
86
- this._syncSub.destroy();
87
- this._valueSub.destroy();
84
+ }));
88
85
  }
89
86
  get daysDistance() {
90
87
  return this._configSignal().daysDistance;
@@ -141,7 +138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
141
138
  standalone: true,
142
139
  imports: [MatDatepickerModule, ReactiveFormsModule, MatButtonModule]
143
140
  }]
144
- }] });
141
+ }], ctorParameters: () => [] });
145
142
  export function dbxTableDateRangeDayDistanceInputCellInput(componentConfig) {
146
143
  const config = {
147
144
  componentClass: DbxTableDateRangeDayDistanceInputCellInputComponent,
@@ -151,4 +148,4 @@ export function dbxTableDateRangeDayDistanceInputCellInput(componentConfig) {
151
148
  };
152
149
  return config;
153
150
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLnRhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL2RhdGUvZGF0ZXJhbmdlLnRhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQTZCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFpQyxTQUFTLEVBQUUsaUNBQWlDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBRzNELE1BQU0sT0FBTyxnRUFBZ0U7SUFDMUQsWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQWMsQ0FBQSxDQUFDLENBQUM7SUFDdEMsbURBQW1ELEdBQUcsTUFBTSxDQUFDLG1EQUFtRCxD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RSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQztpQkFDckU7O0FBbUZELE1BQU0sVUFBVSwwQ0FBMEMsQ0FBQyxlQUEyRTtJQUNwSSxNQUFNLE1BQU0sR0FBcUY7UUFDL0YsY0FBYyxFQUFFLG1EQUFtRDtRQUNuRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNWLENBQUMsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDO1FBQzdCLENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVSYW5nZURheURpc3RhbmNlSW5wdXQsIGlzU2FtZURhdGVEYXkgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuLi90YWJsZS5zdG9yZSc7XG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgRGF0ZVJhbmdlLCBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEYXlzLCB0eXBlIE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uT2JqZWN0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBhZGREYXlzLCBmb3JtYXQgYXMgZm9ybWF0RGF0ZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiBpbXBsZW1lbnRzIE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5PEQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZUFkYXB0ZXIgPSBpbmplY3QoRGF0ZUFkYXB0ZXI8RD4pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudCA9IGluamVjdChEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQpO1xuXG4gIHNlbGVjdGlvbkZpbmlzaGVkKGRhdGU6IEQgfCBudWxsKTogRGF0ZVJhbmdlPEQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRml2ZURheVJhbmdlKGRhdGUpO1xuICB9XG5cbiAgY3JlYXRlUHJldmlldyhhY3RpdmVEYXRlOiBEIHwgbnVsbCk6IERhdGVSYW5nZTxEPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZpdmVEYXlSYW5nZShhY3RpdmVEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUZpdmVEYXlSYW5nZShkYXRlOiBEIHwgbnVsbCk6IERhdGVSYW5nZTxEPiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZGF0ZTtcbiAgICAgIGNvbnN0IGVuZCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCB0aGlzLmRieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudC5kYXlzRGlzdGFuY2UpO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUmFuZ2U8RD4oc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlUmFuZ2U8RD4obnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnRDb25maWcge1xuICAvKipcbiAgICogQnV0dG9uIGZvcm1hdCBmb3IgdGhlIGRhdGVzXG4gICAqL1xuICByZWFkb25seSBidXR0b25Gb3JtYXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXN0YW5jZSBmcm9tIHRoZSBzdGFydCB0byBzcGFuLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF5c0Rpc3RhbmNlOiBEYXlzO1xuICByZWFkb25seSBtaW5EYXRlPzogTWF5YmU8RGF0ZT47XG4gIHJlYWRvbmx5IG1heERhdGU/OiBNYXliZTxEYXRlPjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfREJYX1RBQkxFX0RBVEVfUkFOR0VfREFZX0RJU1RJQU5DRV9JTlBVVF9DRUxMX0NPTVBPTkVOVF9DT05GSUcgPSB7IGRheXNEaXN0YW5jZTogNiB9O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9EQlhfVEFCTEVfREFURV9SQU5HRV9EQVlfQlVUVE9OX0ZPUk1BVCA9ICdNTU0gZGQnO1xuXG4vKipcbiAqIENlbGwgaW5wdXQgZm9yIGEgRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dCB2YWx1ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRieC10YWJsZS1kYXRlLXJhbmdlLWRpc3RhbmNlLWlucHV0LWNlbGxcIj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBjbGFzcz1cImRieC10YWJsZS1kYXRlLXJhbmdlLWRpc3RhbmNlLWlucHV0XCIgW21pbl09XCJtaW5EYXRlU2lnbmFsKClcIiBbbWF4XT1cIm1heERhdGVTaWduYWwoKVwiIFtmb3JtR3JvdXBdPVwicmFuZ2VcIiBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCI+XG4gICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIiBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIiAvPlxuICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgLz5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPnt7IGRhdGVSYW5nZVN0cmluZ1NpZ25hbCgpIH19PC9idXR0b24+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIgKG9wZW5lZCk9XCJwaWNrZXJPcGVuZWQoKVwiIChjbG9zZWQpPVwicGlja2VyQ2xvc2VkKClcIj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLFxuICAgICAgdXNlQ2xhc3M6IERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3lcbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0RGF0ZXBpY2tlck1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZTxEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Pik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3luY1N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGlja2VyT3BlbmVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnU2lnbmFsID0gc2lnbmFsPERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudENvbmZpZz4oREVGQVVMVF9EQlhfVEFCTEVfREFURV9SQU5HRV9EQVlfRElTVElBTkNFX0lOUFVUX0NFTExfQ09NUE9ORU5UX0NPTkZJRyk7XG5cbiAgcmVhZG9ubHkgcmFuZ2UgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbClcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGlja2VyT3BlbmVkJCA9IHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucmFuZ2UudmFsdWUpKTtcblxuICByZWFkb25seSBtaW5EYXRlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlnU2lnbmFsKCkubWluRGF0ZSA/PyBudWxsKTtcbiAgcmVhZG9ubHkgbWF4RGF0ZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2NvbmZpZ1NpZ25hbCgpLm1heERhdGUgPz8gbnVsbCk7XG4gIHJlYWRvbmx5IGJ1dHRvbkZvcm1hdFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2NvbmZpZ1NpZ25hbCgpLmJ1dHRvbkZvcm1hdCA/PyBERUZBVUxUX0RCWF9UQUJMRV9EQVRFX1JBTkdFX0RBWV9CVVRUT05fRk9STUFUKTtcblxuICByZWFkb25seSByYW5nZVZhbHVlJCA9IHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucmFuZ2UudmFsdWUpKTtcbiAgcmVhZG9ubHkgZGF0ZVJhbmdlU3RyaW5nU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbkZvcm1hdCA9IHRoaXMuYnV0dG9uRm9ybWF0U2lnbmFsKCk7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLnJhbmdlLnZhbHVlO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdERhdGUoc3RhcnQsIGJ1dHRvbkZvcm1hdCl9IC0gJHtmb3JtYXREYXRlKGVuZCwgYnV0dG9uRm9ybWF0KX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFNlbGVjdCBEYXRlYDtcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N5bmNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZVN0b3JlLmlucHV0JC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0geD8uZGF0ZSA/PyBudWxsO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgPyBhZGREYXlzKHN0YXJ0LCB0aGlzLmRheXNEaXN0YW5jZSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMucmFuZ2Uuc2V0VmFsdWUoe1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMucmFuZ2VWYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHgpID0+IEJvb2xlYW4oeC5zdGFydCkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZURheShhPy5zdGFydCwgYj8uc3RhcnQpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKDEwMCwgdW5kZWZpbmVkLCB7IHRyYWlsaW5nOiB0cnVlIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNldElucHV0KHsgZGF0ZTogeC5zdGFydCwgZGlzdGFuY2U6IHRoaXMuZGF5c0Rpc3RhbmNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N5bmNTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3ZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldCBkYXlzRGlzdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ1NpZ25hbCgpLmRheXNEaXN0YW5jZTtcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ1NpZ25hbCgpO1xuICB9XG5cbiAgc2V0IGNvbmZpZyhjb25maWc6IE1heWJlPERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudENvbmZpZz4pIHtcbiAgICB0aGlzLl9jb25maWdTaWduYWwuc2V0KGNvbmZpZyB8fCBERUZBVUxUX0RCWF9UQUJMRV9EQVRFX1JBTkdFX0RBWV9ESVNUSUFOQ0VfSU5QVVRfQ0VMTF9DT01QT05FTlRfQ09ORklHKTtcbiAgfVxuXG4gIHBpY2tlck9wZW5lZCgpIHtcbiAgICB0aGlzLl9waWNrZXJPcGVuZWRTaWduYWwuc2V0KHRydWUpO1xuICB9XG5cbiAgcGlja2VyQ2xvc2VkKCkge1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZFNpZ25hbC5zZXQoZmFsc2UpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXQoY29tcG9uZW50Q29uZmlnPzogRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50Q29uZmlnKTogRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudD4ge1xuICBjb25zdCBjb25maWc6IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzxEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQ+ID0ge1xuICAgIGNvbXBvbmVudENsYXNzOiBEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQsXG4gICAgaW5pdDogKHgpID0+IHtcbiAgICAgIHguY29uZmlnID0gY29tcG9uZW50Q29uZmlnO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLnRhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL2RhdGUvZGF0ZXJhbmdlLnRhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQWlDLFNBQVMsRUFBRSxpQ0FBaUMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBRzNELE1BQU0sT0FBTyxnRUFBZ0U7SUFDMUQsWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQWMsQ0FBQSxD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TUFBTSxNQUFNLEdBQXFGO1FBQy9GLGNBQWMsRUFBRSxtREFBbUQ7UUFDbkUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVixDQUFDLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVSYW5nZURheURpc3RhbmNlSW5wdXQsIGlzU2FtZURhdGVEYXkgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuLi90YWJsZS5zdG9yZSc7XG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgRGF0ZVJhbmdlLCBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEYXlzLCB0eXBlIE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uT2JqZWN0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBhZGREYXlzLCBmb3JtYXQgYXMgZm9ybWF0RGF0ZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbGVhblN1YnNjcmlwdGlvbiwgRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3k8RD4gaW1wbGVtZW50cyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGVBZGFwdGVyID0gaW5qZWN0KERhdGVBZGFwdGVyPEQ+KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQgPSBpbmplY3QoRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50KTtcblxuICBzZWxlY3Rpb25GaW5pc2hlZChkYXRlOiBEIHwgbnVsbCk6IERhdGVSYW5nZTxEPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZpdmVEYXlSYW5nZShkYXRlKTtcbiAgfVxuXG4gIGNyZWF0ZVByZXZpZXcoYWN0aXZlRGF0ZTogRCB8IG51bGwpOiBEYXRlUmFuZ2U8RD4ge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVGaXZlRGF5UmFuZ2UoYWN0aXZlRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGaXZlRGF5UmFuZ2UoZGF0ZTogRCB8IG51bGwpOiBEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGRhdGU7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF0ZSwgdGhpcy5kYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQuZGF5c0Rpc3RhbmNlKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVJhbmdlPEQ+KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZVJhbmdlPEQ+KG51bGwsIG51bGwpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIEJ1dHRvbiBmb3JtYXQgZm9yIHRoZSBkYXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uRm9ybWF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogRGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgdG8gc3Bhbi5cbiAgICovXG4gIHJlYWRvbmx5IGRheXNEaXN0YW5jZTogRGF5cztcbiAgcmVhZG9ubHkgbWluRGF0ZT86IE1heWJlPERhdGU+O1xuICByZWFkb25seSBtYXhEYXRlPzogTWF5YmU8RGF0ZT47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RCWF9UQUJMRV9EQVRFX1JBTkdFX0RBWV9ESVNUSUFOQ0VfSU5QVVRfQ0VMTF9DT01QT05FTlRfQ09ORklHID0geyBkYXlzRGlzdGFuY2U6IDYgfTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfREJYX1RBQkxFX0RBVEVfUkFOR0VfREFZX0JVVFRPTl9GT1JNQVQgPSAnTU1NIGRkJztcblxuLyoqXG4gKiBDZWxsIGlucHV0IGZvciBhIERhdGVSYW5nZURheURpc3RhbmNlSW5wdXQgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkYngtdGFibGUtZGF0ZS1yYW5nZS1kaXN0YW5jZS1pbnB1dC1jZWxsXCI+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgY2xhc3M9XCJkYngtdGFibGUtZGF0ZS1yYW5nZS1kaXN0YW5jZS1pbnB1dFwiIFttaW5dPVwibWluRGF0ZVNpZ25hbCgpXCIgW21heF09XCJtYXhEYXRlU2lnbmFsKClcIiBbZm9ybUdyb3VwXT1cInJhbmdlXCIgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiPlxuICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiIC8+XG4gICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj57eyBkYXRlUmFuZ2VTdHJpbmdTaWduYWwoKSB9fTwvYnV0dG9uPlxuICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyIChvcGVuZWQpPVwicGlja2VyT3BlbmVkKClcIiAoY2xvc2VkKT1cInBpY2tlckNsb3NlZCgpXCI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRSYW5nZVNlbGVjdGlvblN0cmF0ZWd5XG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdERhdGVwaWNrZXJNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGFibGVTdG9yZSA9IGluamVjdChEYnhUYWJsZVN0b3JlPERhdGVSYW5nZURheURpc3RhbmNlSW5wdXQ+KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zeW5jU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9waWNrZXJPcGVuZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWdTaWduYWwgPSBzaWduYWw8RGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50Q29uZmlnPihERUZBVUxUX0RCWF9UQUJMRV9EQVRFX1JBTkdFX0RBWV9ESVNUSUFOQ0VfSU5QVVRfQ0VMTF9DT01QT05FTlRfQ09ORklHKTtcblxuICByZWFkb25seSByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKVxuICB9KTtcblxuICByZWFkb25seSBwaWNrZXJPcGVuZWQkID0gdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5yYW5nZS52YWx1ZSkpO1xuXG4gIHJlYWRvbmx5IG1pbkRhdGVTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9jb25maWdTaWduYWwoKS5taW5EYXRlID8/IG51bGwpO1xuICByZWFkb25seSBtYXhEYXRlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlnU2lnbmFsKCkubWF4RGF0ZSA/PyBudWxsKTtcbiAgcmVhZG9ubHkgYnV0dG9uRm9ybWF0U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlnU2lnbmFsKCkuYnV0dG9uRm9ybWF0ID8/IERFRkFVTFRfREJYX1RBQkxFX0RBVEVfUkFOR0VfREFZX0JVVFRPTl9GT1JNQVQpO1xuXG4gIHJlYWRvbmx5IHJhbmdlVmFsdWUkID0gdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5yYW5nZS52YWx1ZSkpO1xuICByZWFkb25seSBkYXRlUmFuZ2VTdHJpbmdTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uRm9ybWF0ID0gdGhpcy5idXR0b25Gb3JtYXRTaWduYWwoKTtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucmFuZ2UudmFsdWU7XG5cbiAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICByZXR1cm4gYCR7Zm9ybWF0RGF0ZShzdGFydCwgYnV0dG9uRm9ybWF0KX0gLSAke2Zvcm1hdERhdGUoZW5kLCBidXR0b25Gb3JtYXQpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgU2VsZWN0IERhdGVgO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY2xlYW5TdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnRhYmxlU3RvcmUuaW5wdXQkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IHg/LmRhdGUgPz8gbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgPyBhZGREYXlzKHN0YXJ0LCB0aGlzLmRheXNEaXN0YW5jZSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5yYW5nZS5zZXRWYWx1ZSh7XG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY2xlYW5TdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnJhbmdlVmFsdWUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoeCkgPT4gQm9vbGVhbih4LnN0YXJ0KSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGVEYXkoYT8uc3RhcnQsIGI/LnN0YXJ0KSksXG4gICAgICAgICAgdGhyb3R0bGVUaW1lKDEwMCwgdW5kZWZpbmVkLCB7IHRyYWlsaW5nOiB0cnVlIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4LnN0YXJ0KSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2V0SW5wdXQoeyBkYXRlOiB4LnN0YXJ0LCBkaXN0YW5jZTogdGhpcy5kYXlzRGlzdGFuY2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXQgZGF5c0Rpc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWdTaWduYWwoKS5kYXlzRGlzdGFuY2U7XG4gIH1cblxuICBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWdTaWduYWwoKTtcbiAgfVxuXG4gIHNldCBjb25maWcoY29uZmlnOiBNYXliZTxEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnRDb25maWc+KSB7XG4gICAgdGhpcy5fY29uZmlnU2lnbmFsLnNldChjb25maWcgfHwgREVGQVVMVF9EQlhfVEFCTEVfREFURV9SQU5HRV9EQVlfRElTVElBTkNFX0lOUFVUX0NFTExfQ09NUE9ORU5UX0NPTkZJRyk7XG4gIH1cblxuICBwaWNrZXJPcGVuZWQoKSB7XG4gICAgdGhpcy5fcGlja2VyT3BlbmVkU2lnbmFsLnNldCh0cnVlKTtcbiAgfVxuXG4gIHBpY2tlckNsb3NlZCgpIHtcbiAgICB0aGlzLl9waWNrZXJPcGVuZWRTaWduYWwuc2V0KGZhbHNlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0KGNvbXBvbmVudENvbmZpZz86IERieFRhYmxlRGF0ZVJhbmdlRGF5RGlzdGFuY2VJbnB1dENlbGxJbnB1dENvbXBvbmVudENvbmZpZyk6IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzxEYnhUYWJsZURhdGVSYW5nZURheURpc3RhbmNlSW5wdXRDZWxsSW5wdXRDb21wb25lbnQ+IHtcbiAgY29uc3QgY29uZmlnOiBEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8RGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50PiA9IHtcbiAgICBjb21wb25lbnRDbGFzczogRGJ4VGFibGVEYXRlUmFuZ2VEYXlEaXN0YW5jZUlucHV0Q2VsbElucHV0Q29tcG9uZW50LFxuICAgIGluaXQ6ICh4KSA9PiB7XG4gICAgICB4LmNvbmZpZyA9IGNvbXBvbmVudENvbmZpZztcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdfQ==