fantasy-ngzorro 2.2.36 → 2.2.38
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.
- package/README.md +2 -1
- package/bundles/fantasy-ngzorro.umd.js +347 -233
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/hd-filter/hd-filter.component.js +15 -6
- package/esm2015/hd-table/hd-table.component.js +248 -200
- package/esm2015/utils/hd-table-scroll.util.js +3 -2
- package/esm5/hd-filter/hd-filter.component.js +21 -8
- package/esm5/hd-table/hd-table.component.js +326 -226
- package/esm5/utils/hd-table-scroll.util.js +3 -2
- package/fantasy-ngzorro.metadata.json +1 -1
- package/fesm2015/fantasy-ngzorro.js +263 -205
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +347 -233
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/hd-filter/hd-filter.component.d.ts +3 -1
- package/hd-table/hd-table.component.d.ts +25 -22
- package/package.json +2 -2
- package/utils/hd-table-scroll.util.d.ts +4 -1
|
@@ -165,7 +165,8 @@ export function getTableScrollXViewportWidth(nzTable, hostClass = "hd-table-cont
|
|
|
165
165
|
return getTableViewportWidth(nzTable, hostClass);
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
168
|
-
* 无数据或列宽未超出容器时不启用横向 scroll
|
|
168
|
+
* 无数据或列宽未超出容器时不启用横向 scroll(表宽 100%、table-layout: auto)。
|
|
169
|
+
* auto 布局下单元格 max-width 不生效,固定宽列会被均摊撑开;需要锁宽的场景见 hd-table 的横向布局。
|
|
169
170
|
* @param {?} nzTable
|
|
170
171
|
* @param {?} hasData
|
|
171
172
|
* @param {?=} colWidth
|
|
@@ -274,4 +275,4 @@ export function bindNzTableHeaderBodyScrollSync(nzTable) {
|
|
|
274
275
|
body.removeEventListener("scroll", onScroll);
|
|
275
276
|
});
|
|
276
277
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtdGFibGUtc2Nyb2xsLnV0aWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJ1dGlscy9oZC10YWJsZS1zY3JvbGwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEseUNBR0M7OztJQUZDLGdDQUFXOztJQUNYLGdDQUFXOzs7TUFHUCx1QkFBdUIsR0FBRyxHQUFHOzs7Ozs7QUFFbkMsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUF5QixFQUN6QixTQUFTLEdBQUcsb0JBQW9CO0lBRWhDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7UUFDekMsT0FBTyxDQUFDLENBQUM7S0FDVjs7VUFDSyxTQUFTLEdBQUcsbUJBQUEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBZTs7VUFDakUsVUFBVSxHQUFHLG1CQUFBLFNBQVMsQ0FBQyxhQUFhLENBQ3hDLGlCQUFpQixDQUNsQixFQUFlO0lBQ2hCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQzVDLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQztLQUMvQjs7VUFDSyxPQUFPLEdBQUcsbUJBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFlO0lBQ3RFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztLQUM1Qjs7VUFDSyxJQUFJLEdBQUcsbUJBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQWU7SUFDOUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDOzs7OztB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RTtRQUNqRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUM3QztBQUNILENBQUM7Ozs7Ozs7QUFNRCxNQUFNLFVBQVUsK0JBQStCLENBQzdDLE9BQXlCOztVQUVuQixHQUFHLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDO0lBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiOztVQUNLLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTTs7VUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJOztVQUNmLFFBQVE7OztJQUFHLEdBQUcsRUFBRTtRQUNwQixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDckM7SUFDSCxDQUFDLENBQUE7SUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsRUFBRSxDQUFDO0lBQ1g7OztJQUFPLEdBQUcsRUFBRTtRQUNWLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxFQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE56VGFibGVDb21wb25lbnQgfSBmcm9tIFwibmctem9ycm8tYW50ZC90YWJsZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhkVGFibGVTY3JvbGxDb25maWcge1xuICB4Pzogc3RyaW5nO1xuICB5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0ZMVUlEX0NPTF9XSURUSCA9IDE1MDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlVmlld3BvcnRXaWR0aChcbiAgbnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudCxcbiAgaG9zdENsYXNzID0gXCJoZC10YWJsZS1jb250YWluZXJcIixcbik6IG51bWJlciB7XG4gIGlmICghbnpUYWJsZSB8fCAhbnpUYWJsZS50YWJsZU1haW5FbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgdGFibGVNYWluID0gbnpUYWJsZS50YWJsZU1haW5FbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEJvZHkgPSB0YWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICBcIi5hbnQtdGFibGUtYm9keVwiLFxuICApIGFzIEhUTUxFbGVtZW50O1xuICBpZiAoc2Nyb2xsQm9keSAmJiBzY3JvbGxCb2R5LmNsaWVudFdpZHRoID4gMCkge1xuICAgIHJldHVybiBzY3JvbGxCb2R5LmNsaWVudFdpZHRoO1xuICB9XG4gIGNvbnN0IHdyYXBwZXIgPSB0YWJsZU1haW4uY2xvc2VzdChcIi5hbnQtdGFibGUtd3JhcHBlclwiKSBhcyBIVE1MRWxlbWVudDtcbiAgaWYgKHdyYXBwZXIgJiYgd3JhcHBlci5jbGllbnRXaWR0aCA+IDApIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbGllbnRXaWR0aDtcbiAgfVxuICBjb25zdCBob3N0ID0gdGFibGVNYWluLmNsb3Nlc3QoYC4ke2hvc3RDbGFzc31gKSBhcyBIVE1MRWxlbWVudDtcbiAgaWYgKGhvc3QgJiYgaG9zdC5jbGllbnRXaWR0aCA+IDApIHtcbiAgICByZXR1cm4gaG9zdC5jbGllbnRXaWR0aDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQeCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvcHgvaSwgXCJcIiksIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQpID8gMCA6IHBhcnNlZDtcbn1cblxuLyoqIOWFi+mahuihqOWktC/ooajkvZPmtYvph4/mnKrooqsgc2Nyb2xsIOWOi+e8qeWJjeeahOiHqueEtuWIl+WuvSAqL1xuZnVuY3Rpb24gbWVhc3VyZUVsZW1lbnROYXR1cmFsV2lkdGgoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICBjb25zdCBjbG9uZSA9IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICBjbG9uZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgY2xvbmUuc3R5bGUubGVmdCA9IFwiLTk5OTk5cHhcIjtcbiAgY2xvbmUuc3R5bGUudG9wID0gXCIwXCI7XG4gIGNsb25lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICBjbG9uZS5zdHlsZS53aWR0aCA9IFwibWF4LWNvbnRlbnRcIjtcbiAgY2xvbmUuc3R5bGUudGFibGVMYXlvdXQgPSBcImF1dG9cIjtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9uZSk7XG4gIGNvbnN0IHdpZHRoID0gY2xvbmUuc2Nyb2xsV2lkdGg7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICByZXR1cm4gd2lkdGg7XG59XG5cbi8qKiDmsYfmgLvooajlpLQgdGgg5LiK5aOw5piO55qE5YiX5a6977yIc3R5bGUud2lkdGggLyBueldpZHRo77yJICovXG5mdW5jdGlvbiBtZWFzdXJlSGVhZGVyRGVjbGFyZWRDb2xXaWR0aCh0YWJsZU1haW46IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgY29uc3QgdGhzID0gQXJyYXkuZnJvbShcbiAgICB0YWJsZU1haW4ucXVlcnlTZWxlY3RvckFsbChcIi5hbnQtdGFibGUtdGhlYWQgPiB0ciA+IHRoXCIpLFxuICApIGFzIEhUTUxFbGVtZW50W107XG4gIGlmICghdGhzLmxlbmd0aCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBzdW0gPSAwO1xuICBsZXQgaGFzRmx1aWRDb2wgPSBmYWxzZTtcbiAgdGhzLmZvckVhY2goKHRoKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSBwYXJzZVB4KHRoLnN0eWxlLndpZHRoKTtcbiAgICBpZiAoZGVjbGFyZWQgPiAwKSB7XG4gICAgICBzdW0gKz0gZGVjbGFyZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhc0ZsdWlkQ29sID0gdHJ1ZTtcbiAgICBzdW0gKz0gdGguc2Nyb2xsV2lkdGggfHwgdGgub2Zmc2V0V2lkdGggfHwgREVGQVVMVF9GTFVJRF9DT0xfV0lEVEg7XG4gIH0pO1xuICByZXR1cm4gaGFzRmx1aWRDb2wgPyAwIDogc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRhYmxlQ29sV2lkdGgobnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudCk6IG51bWJlciB7XG4gIGlmICghbnpUYWJsZSB8fCAhbnpUYWJsZS50YWJsZU1haW5FbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgdGFibGVNYWluID0gbnpUYWJsZS50YWJsZU1haW5FbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IHRhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5hbnQtdGFibGUtaGVhZGVyIHRhYmxlLCAuYW50LXRhYmxlLWJvZHkgdGFibGUsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIHRhYmxlXCIsXG4gICAgKSxcbiAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIGxldCBtYXggPSB0YWJsZXMucmVkdWNlKFxuICAgICh3aWR0aCwgdGFibGUpID0+IE1hdGgubWF4KHdpZHRoLCB0YWJsZS5zY3JvbGxXaWR0aCB8fCAwKSxcbiAgICAwLFxuICApO1xuXG4gIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBnZXRUYWJsZVZpZXdwb3J0V2lkdGgobnpUYWJsZSk7XG4gIC8vIOacquW8gOWQryBzY3JvbGwueCDml7booajmoLzkvJrooqvljovov5vlrrnlmajvvIxzY3JvbGxXaWR0aCDkuI3lj6/pnaDvvIzpnIDmtYvoh6rnhLbliJflrr1cbiAgaWYgKHZpZXdwb3J0V2lkdGggPD0gMCB8fCBtYXggPD0gdmlld3BvcnRXaWR0aCkge1xuICAgIGNvbnN0IGhlYWRlclRhYmxlID0gdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIi5hbnQtdGFibGUtaGVhZGVyIHRhYmxlXCIsXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBib2R5VGFibGUgPSB0YWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiLmFudC10YWJsZS1ib2R5IHRhYmxlXCIsXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoaGVhZGVyVGFibGUpIHtcbiAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgbWVhc3VyZUVsZW1lbnROYXR1cmFsV2lkdGgoaGVhZGVyVGFibGUpKTtcbiAgICB9XG4gICAgaWYgKGJvZHlUYWJsZSkge1xuICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBtZWFzdXJlRWxlbWVudE5hdHVyYWxXaWR0aChib2R5VGFibGUpKTtcbiAgICB9XG4gICAgbWF4ID0gTWF0aC5tYXgobWF4LCBtZWFzdXJlSGVhZGVyRGVjbGFyZWRDb2xXaWR0aCh0YWJsZU1haW4pKTtcbiAgfVxuXG4gIHJldHVybiBtYXg7XG59XG5cbi8qKlxuICog55So5LqO5Yik5pat5piv5ZCm6ZyA6KaBIHNjcm9sbC54IOeahOinhuWPo+WuveOAglxuICog5pyJ57q15ZCR5rua5Yqo5p2h5pe2IGNsaWVudFdpZHRoIOS8muWwkeS4gOaIqu+8jOiLpeebtOaOpeaLv+WOu+avlOWIl+Wuve+8jOS8muOAjOerlua7muadoeWvvOiHtOivr+W8gOaoqua7muOAje+8m1xuICog6L+Z6YeM55SoIG9mZnNldFdpZHRo77yI5ZCr5rua5Yqo5p2h5qe977yJ5L2c5Li65bGP5bmV5Y+v5bGV56S65a695bqm44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZVNjcm9sbFhWaWV3cG9ydFdpZHRoKFxuICBuelRhYmxlOiBOelRhYmxlQ29tcG9uZW50LFxuICBob3N0Q2xhc3MgPSBcImhkLXRhYmxlLWNvbnRhaW5lclwiLFxuKTogbnVtYmVyIHtcbiAgaWYgKCFuelRhYmxlIHx8ICFuelRhYmxlLnRhYmxlTWFpbkVsZW1lbnQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCB0YWJsZU1haW4gPSBuelRhYmxlLnRhYmxlTWFpbkVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgY29uc3Qgc2Nyb2xsQm9keSA9XG4gICAgKHRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgXCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQuYW50LXRhYmxlLWJvZHlcIixcbiAgICApIGFzIEhUTUxFbGVtZW50KSB8fFxuICAgICh0YWJsZU1haW4ucXVlcnlTZWxlY3RvcihcIi5hbnQtdGFibGUtYm9keVwiKSBhcyBIVE1MRWxlbWVudCk7XG4gIGlmIChzY3JvbGxCb2R5ICYmIHNjcm9sbEJvZHkub2Zmc2V0V2lkdGggPiAwKSB7XG4gICAgcmV0dXJuIHNjcm9sbEJvZHkub2Zmc2V0V2lkdGg7XG4gIH1cbiAgcmV0dXJuIGdldFRhYmxlVmlld3BvcnRXaWR0aChuelRhYmxlLCBob3N0Q2xhc3MpO1xufVxuXG4vKiog5peg5pWw5o2u5oiW5YiX5a695pyq6LaF5Ye65a655Zmo5pe25LiN5ZCv55So5qiq5ZCRIHNjcm9sbO+8iGZsdWlk77ya6KGo5a69IDEwMCXvvIzli77pgIkv5bqP5Y+35YiX55SxIENTUyDplIHlrr3vvIkgKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXV0b1RhYmxlU2Nyb2xsKFxuICBuelRhYmxlOiBOelRhYmxlQ29tcG9uZW50LFxuICBoYXNEYXRhOiBib29sZWFuLFxuICBjb2xXaWR0aD86IG51bWJlcixcbik6IEhkVGFibGVTY3JvbGxDb25maWcgfCBudWxsIHtcbiAgaWYgKCFoYXNEYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgd2lkdGggPVxuICAgIGNvbFdpZHRoICE9IG51bGwgJiYgY29sV2lkdGggPiAwXG4gICAgICA/IGNvbFdpZHRoXG4gICAgICA6IG1lYXN1cmVUYWJsZUNvbFdpZHRoKG56VGFibGUpO1xuICBpZiAod2lkdGggPD0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBnZXRUYWJsZVNjcm9sbFhWaWV3cG9ydFdpZHRoKG56VGFibGUpO1xuICBpZiAodmlld3BvcnRXaWR0aCA+IDApIHtcbiAgICAvLyDlhYHorrggMXB4IOivr+W3ru+8jOmBv+WFjeS6muWDj+e0oOWvvOiHtOivr+W8gOaoqua7mlxuICAgIHJldHVybiB3aWR0aCA+IHZpZXdwb3J0V2lkdGggKyAxID8geyB4OiBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YCB9IDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoIC0gMzIpIHtcbiAgICByZXR1cm4geyB4OiBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YCB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiog5Y+WIG5nLXpvcnJvIOWIhuS9k+ihqOWktCAvIOihqOS9k+a7muWKqOWuueWZqO+8iOWQq+iZmuaLn+a7muWKqO+8iSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE56VGFibGVTY3JvbGxFbGVtZW50cyhcbiAgbnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudCxcbik6IHsgaGVhZGVyOiBIVE1MRWxlbWVudCB8IG51bGw7IGJvZHk6IEhUTUxFbGVtZW50IHwgbnVsbCB9IHtcbiAgaWYgKCFuelRhYmxlKSB7XG4gICAgcmV0dXJuIHsgaGVhZGVyOiBudWxsLCBib2R5OiBudWxsIH07XG4gIH1cbiAgY29uc3QgbnogPSBuelRhYmxlIGFzIGFueTtcbiAgbGV0IGhlYWRlciA9IChuei50YWJsZUhlYWRlck5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IG51bGw7XG4gIGxldCBib2R5ID1cbiAgICAobnoubWl4VGFibGVCb2R5TmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAobnoudGFibGVCb2R5TmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICBudWxsO1xuICBjb25zdCBtYWluID1cbiAgICBuei50YWJsZU1haW5FbGVtZW50ICYmXG4gICAgKG56LnRhYmxlTWFpbkVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gIGlmIChtYWluKSB7XG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgIGhlYWRlciA9IG1haW4ucXVlcnlTZWxlY3RvcihcIi5hbnQtdGFibGUtaGVhZGVyXCIpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGJvZHkgPVxuICAgICAgICAobWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIFwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmFudC10YWJsZS1ib2R5XCIsXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQpIHx8XG4gICAgICAgIChtYWluLnF1ZXJ5U2VsZWN0b3IoXCIuYW50LXRhYmxlLWJvZHlcIikgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBoZWFkZXIsIGJvZHkgfTtcbn1cblxuLyoqIOS4gOasoeaAp+aKiuihqOS9kyBzY3JvbGxMZWZ0IOWQjOatpeWIsOihqOWktCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNOelRhYmxlSGVhZGVyQm9keVNjcm9sbExlZnQoXG4gIG56VGFibGU6IE56VGFibGVDb21wb25lbnQsXG4pOiB2b2lkIHtcbiAgY29uc3QgZWxzID0gZ2V0TnpUYWJsZVNjcm9sbEVsZW1lbnRzKG56VGFibGUpO1xuICBpZiAoIWVscy5oZWFkZXIgfHwgIWVscy5ib2R5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbHMuaGVhZGVyLnNjcm9sbExlZnQgIT09IGVscy5ib2R5LnNjcm9sbExlZnQpIHtcbiAgICBlbHMuaGVhZGVyLnNjcm9sbExlZnQgPSBlbHMuYm9keS5zY3JvbGxMZWZ0O1xuICB9XG59XG5cbi8qKlxuICog55uR5ZCs6KGo5L2T5qiq5ZCR5rua5Yqo5bm25ZCM5q2l6KGo5aS044CCXG4gKiDov5Tlm54gdW5iaW5k77ybRE9NIOacquWwsee7quaXtui/lOWbniBudWxs77yI6LCD55So5pa55Y+v6YeN6K+V77yJ44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTnpUYWJsZUhlYWRlckJvZHlTY3JvbGxTeW5jKFxuICBuelRhYmxlOiBOelRhYmxlQ29tcG9uZW50LFxuKTogKCgpID0+IHZvaWQpIHwgbnVsbCB7XG4gIGNvbnN0IGVscyA9IGdldE56VGFibGVTY3JvbGxFbGVtZW50cyhuelRhYmxlKTtcbiAgaWYgKCFlbHMuaGVhZGVyIHx8ICFlbHMuYm9keSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGhlYWRlciA9IGVscy5oZWFkZXI7XG4gIGNvbnN0IGJvZHkgPSBlbHMuYm9keTtcbiAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgaWYgKGhlYWRlci5zY3JvbGxMZWZ0ICE9PSBib2R5LnNjcm9sbExlZnQpIHtcbiAgICAgIGhlYWRlci5zY3JvbGxMZWZ0ID0gYm9keS5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfTtcbiAgYm9keS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcbiAgb25TY3JvbGwoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25TY3JvbGwpO1xuICB9O1xufVxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtdGFibGUtc2Nyb2xsLnV0aWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJ1dGlscy9oZC10YWJsZS1zY3JvbGwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEseUNBR0M7OztJQUZDLGdDQUFXOztJQUNYLGdDQUFXOzs7TUFHUCx1QkFBdUIsR0FBRyxHQUFHOzs7Ozs7QUFFbkMsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUF5QixFQUN6QixTQUFTLEdBQUcsb0JBQW9CO0lBRWhDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7UUFDekMsT0FBTyxDQUFDLENBQUM7S0FDVjs7VUFDSyxTQUFTLEdBQUcsbUJBQUEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBZTs7VUFDakUsVUFBVSxHQUFHLG1CQUFBLFNBQVMsQ0FBQyxhQUFhLENBQ3hDLGlCQUFpQixDQUNsQixFQUFlO0lBQ2hCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQzVDLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQztLQUMvQjs7VUFDSyxPQUFPLEdBQUcsbUJBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFlO0lBQ3RFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztLQUM1Qjs7VUFDSyxJQUFJLEdBQUcsbUJBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQWU7SUFDOUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDOzs7OztB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QUU7UUFDakQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7S0FDN0M7QUFDSCxDQUFDOzs7Ozs7O0FBTUQsTUFBTSxVQUFVLCtCQUErQixDQUM3QyxPQUF5Qjs7VUFFbkIsR0FBRyxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQztJQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUM7S0FDYjs7VUFDSyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU07O1VBQ25CLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSTs7VUFDZixRQUFROzs7SUFBRyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDekMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQyxDQUFBO0lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxRQUFRLEVBQUUsQ0FBQztJQUNYOzs7SUFBTyxHQUFHLEVBQUU7UUFDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUMsRUFBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOelRhYmxlQ29tcG9uZW50IH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvdGFibGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIZFRhYmxlU2Nyb2xsQ29uZmlnIHtcbiAgeD86IHN0cmluZztcbiAgeT86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9GTFVJRF9DT0xfV0lEVEggPSAxNTA7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZVZpZXdwb3J0V2lkdGgoXG4gIG56VGFibGU6IE56VGFibGVDb21wb25lbnQsXG4gIGhvc3RDbGFzcyA9IFwiaGQtdGFibGUtY29udGFpbmVyXCIsXG4pOiBudW1iZXIge1xuICBpZiAoIW56VGFibGUgfHwgIW56VGFibGUudGFibGVNYWluRWxlbWVudCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHRhYmxlTWFpbiA9IG56VGFibGUudGFibGVNYWluRWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICBjb25zdCBzY3JvbGxCb2R5ID0gdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoXG4gICAgXCIuYW50LXRhYmxlLWJvZHlcIixcbiAgKSBhcyBIVE1MRWxlbWVudDtcbiAgaWYgKHNjcm9sbEJvZHkgJiYgc2Nyb2xsQm9keS5jbGllbnRXaWR0aCA+IDApIHtcbiAgICByZXR1cm4gc2Nyb2xsQm9keS5jbGllbnRXaWR0aDtcbiAgfVxuICBjb25zdCB3cmFwcGVyID0gdGFibGVNYWluLmNsb3Nlc3QoXCIuYW50LXRhYmxlLXdyYXBwZXJcIikgYXMgSFRNTEVsZW1lbnQ7XG4gIGlmICh3cmFwcGVyICYmIHdyYXBwZXIuY2xpZW50V2lkdGggPiAwKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xpZW50V2lkdGg7XG4gIH1cbiAgY29uc3QgaG9zdCA9IHRhYmxlTWFpbi5jbG9zZXN0KGAuJHtob3N0Q2xhc3N9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gIGlmIChob3N0ICYmIGhvc3QuY2xpZW50V2lkdGggPiAwKSB7XG4gICAgcmV0dXJuIGhvc3QuY2xpZW50V2lkdGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHgodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChTdHJpbmcodmFsdWUpLnJlcGxhY2UoL3B4L2ksIFwiXCIpLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkKSA/IDAgOiBwYXJzZWQ7XG59XG5cbi8qKiDlhYvpmobooajlpLQv6KGo5L2T5rWL6YeP5pyq6KKrIHNjcm9sbCDljovnvKnliY3nmoToh6rnhLbliJflrr0gKi9cbmZ1bmN0aW9uIG1lYXN1cmVFbGVtZW50TmF0dXJhbFdpZHRoKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgY29uc3QgY2xvbmUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgY2xvbmUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIGNsb25lLnN0eWxlLmxlZnQgPSBcIi05OTk5OXB4XCI7XG4gIGNsb25lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICBjbG9uZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgY2xvbmUuc3R5bGUud2lkdGggPSBcIm1heC1jb250ZW50XCI7XG4gIGNsb25lLnN0eWxlLnRhYmxlTGF5b3V0ID0gXCJhdXRvXCI7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICBjb25zdCB3aWR0aCA9IGNsb25lLnNjcm9sbFdpZHRoO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgcmV0dXJuIHdpZHRoO1xufVxuXG4vKiog5rGH5oC76KGo5aS0IHRoIOS4iuWjsOaYjueahOWIl+Wuve+8iHN0eWxlLndpZHRoIC8gbnpXaWR0aO+8iSAqL1xuZnVuY3Rpb24gbWVhc3VyZUhlYWRlckRlY2xhcmVkQ29sV2lkdGgodGFibGVNYWluOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gIGNvbnN0IHRocyA9IEFycmF5LmZyb20oXG4gICAgdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYW50LXRhYmxlLXRoZWFkID4gdHIgPiB0aFwiKSxcbiAgKSBhcyBIVE1MRWxlbWVudFtdO1xuICBpZiAoIXRocy5sZW5ndGgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBsZXQgc3VtID0gMDtcbiAgbGV0IGhhc0ZsdWlkQ29sID0gZmFsc2U7XG4gIHRocy5mb3JFYWNoKCh0aCkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gcGFyc2VQeCh0aC5zdHlsZS53aWR0aCk7XG4gICAgaWYgKGRlY2xhcmVkID4gMCkge1xuICAgICAgc3VtICs9IGRlY2xhcmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYXNGbHVpZENvbCA9IHRydWU7XG4gICAgc3VtICs9IHRoLnNjcm9sbFdpZHRoIHx8IHRoLm9mZnNldFdpZHRoIHx8IERFRkFVTFRfRkxVSURfQ09MX1dJRFRIO1xuICB9KTtcbiAgcmV0dXJuIGhhc0ZsdWlkQ29sID8gMCA6IHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVUYWJsZUNvbFdpZHRoKG56VGFibGU6IE56VGFibGVDb21wb25lbnQpOiBudW1iZXIge1xuICBpZiAoIW56VGFibGUgfHwgIW56VGFibGUudGFibGVNYWluRWxlbWVudCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHRhYmxlTWFpbiA9IG56VGFibGUudGFibGVNYWluRWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICBjb25zdCB0YWJsZXMgPSBBcnJheS5mcm9tKFxuICAgIHRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuYW50LXRhYmxlLWhlYWRlciB0YWJsZSwgLmFudC10YWJsZS1ib2R5IHRhYmxlLCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciB0YWJsZVwiLFxuICAgICksXG4gICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICBsZXQgbWF4ID0gdGFibGVzLnJlZHVjZShcbiAgICAod2lkdGgsIHRhYmxlKSA9PiBNYXRoLm1heCh3aWR0aCwgdGFibGUuc2Nyb2xsV2lkdGggfHwgMCksXG4gICAgMCxcbiAgKTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gZ2V0VGFibGVWaWV3cG9ydFdpZHRoKG56VGFibGUpO1xuICAvLyDmnKrlvIDlkK8gc2Nyb2xsLngg5pe26KGo5qC85Lya6KKr5Y6L6L+b5a655Zmo77yMc2Nyb2xsV2lkdGgg5LiN5Y+v6Z2g77yM6ZyA5rWL6Ieq54S25YiX5a69XG4gIGlmICh2aWV3cG9ydFdpZHRoIDw9IDAgfHwgbWF4IDw9IHZpZXdwb3J0V2lkdGgpIHtcbiAgICBjb25zdCBoZWFkZXJUYWJsZSA9IHRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgXCIuYW50LXRhYmxlLWhlYWRlciB0YWJsZVwiLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgYm9keVRhYmxlID0gdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIi5hbnQtdGFibGUtYm9keSB0YWJsZVwiLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGhlYWRlclRhYmxlKSB7XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIG1lYXN1cmVFbGVtZW50TmF0dXJhbFdpZHRoKGhlYWRlclRhYmxlKSk7XG4gICAgfVxuICAgIGlmIChib2R5VGFibGUpIHtcbiAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgbWVhc3VyZUVsZW1lbnROYXR1cmFsV2lkdGgoYm9keVRhYmxlKSk7XG4gICAgfVxuICAgIG1heCA9IE1hdGgubWF4KG1heCwgbWVhc3VyZUhlYWRlckRlY2xhcmVkQ29sV2lkdGgodGFibGVNYWluKSk7XG4gIH1cblxuICByZXR1cm4gbWF4O1xufVxuXG4vKipcbiAqIOeUqOS6juWIpOaWreaYr+WQpumcgOimgSBzY3JvbGwueCDnmoTop4blj6Plrr3jgIJcbiAqIOaciee6teWQkea7muWKqOadoeaXtiBjbGllbnRXaWR0aCDkvJrlsJHkuIDmiKrvvIzoi6Xnm7TmjqXmi7/ljrvmr5TliJflrr3vvIzkvJrjgIznq5bmu5rmnaHlr7zoh7Tor6/lvIDmqKrmu5rjgI3vvJtcbiAqIOi/memHjOeUqCBvZmZzZXRXaWR0aO+8iOWQq+a7muWKqOadoeanve+8ieS9nOS4uuWxj+W5leWPr+WxleekuuWuveW6puOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVTY3JvbGxYVmlld3BvcnRXaWR0aChcbiAgbnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudCxcbiAgaG9zdENsYXNzID0gXCJoZC10YWJsZS1jb250YWluZXJcIixcbik6IG51bWJlciB7XG4gIGlmICghbnpUYWJsZSB8fCAhbnpUYWJsZS50YWJsZU1haW5FbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgdGFibGVNYWluID0gbnpUYWJsZS50YWJsZU1haW5FbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEJvZHkgPVxuICAgICh0YWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmFudC10YWJsZS1ib2R5XCIsXG4gICAgKSBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAodGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoXCIuYW50LXRhYmxlLWJvZHlcIikgYXMgSFRNTEVsZW1lbnQpO1xuICBpZiAoc2Nyb2xsQm9keSAmJiBzY3JvbGxCb2R5Lm9mZnNldFdpZHRoID4gMCkge1xuICAgIHJldHVybiBzY3JvbGxCb2R5Lm9mZnNldFdpZHRoO1xuICB9XG4gIHJldHVybiBnZXRUYWJsZVZpZXdwb3J0V2lkdGgobnpUYWJsZSwgaG9zdENsYXNzKTtcbn1cblxuLyoqXG4gKiDml6DmlbDmja7miJbliJflrr3mnKrotoXlh7rlrrnlmajml7bkuI3lkK/nlKjmqKrlkJEgc2Nyb2xs77yI6KGo5a69IDEwMCXjgIF0YWJsZS1sYXlvdXQ6IGF1dG/vvInjgIJcbiAqIGF1dG8g5biD5bGA5LiL5Y2V5YWD5qC8IG1heC13aWR0aCDkuI3nlJ/mlYjvvIzlm7rlrprlrr3liJfkvJrooqvlnYfmkYrmkpHlvIDvvJvpnIDopoHplIHlrr3nmoTlnLrmma/op4EgaGQtdGFibGUg55qE5qiq5ZCR5biD5bGA44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXV0b1RhYmxlU2Nyb2xsKFxuICBuelRhYmxlOiBOelRhYmxlQ29tcG9uZW50LFxuICBoYXNEYXRhOiBib29sZWFuLFxuICBjb2xXaWR0aD86IG51bWJlcixcbik6IEhkVGFibGVTY3JvbGxDb25maWcgfCBudWxsIHtcbiAgaWYgKCFoYXNEYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgd2lkdGggPVxuICAgIGNvbFdpZHRoICE9IG51bGwgJiYgY29sV2lkdGggPiAwXG4gICAgICA/IGNvbFdpZHRoXG4gICAgICA6IG1lYXN1cmVUYWJsZUNvbFdpZHRoKG56VGFibGUpO1xuICBpZiAod2lkdGggPD0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBnZXRUYWJsZVNjcm9sbFhWaWV3cG9ydFdpZHRoKG56VGFibGUpO1xuICBpZiAodmlld3BvcnRXaWR0aCA+IDApIHtcbiAgICAvLyDlhYHorrggMXB4IOivr+W3ru+8jOmBv+WFjeS6muWDj+e0oOWvvOiHtOivr+W8gOaoqua7mlxuICAgIHJldHVybiB3aWR0aCA+IHZpZXdwb3J0V2lkdGggKyAxID8geyB4OiBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YCB9IDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoIC0gMzIpIHtcbiAgICByZXR1cm4geyB4OiBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YCB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiog5Y+WIG5nLXpvcnJvIOWIhuS9k+ihqOWktCAvIOihqOS9k+a7muWKqOWuueWZqO+8iOWQq+iZmuaLn+a7muWKqO+8iSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE56VGFibGVTY3JvbGxFbGVtZW50cyhcbiAgbnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudCxcbik6IHsgaGVhZGVyOiBIVE1MRWxlbWVudCB8IG51bGw7IGJvZHk6IEhUTUxFbGVtZW50IHwgbnVsbCB9IHtcbiAgaWYgKCFuelRhYmxlKSB7XG4gICAgcmV0dXJuIHsgaGVhZGVyOiBudWxsLCBib2R5OiBudWxsIH07XG4gIH1cbiAgY29uc3QgbnogPSBuelRhYmxlIGFzIGFueTtcbiAgbGV0IGhlYWRlciA9IChuei50YWJsZUhlYWRlck5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IG51bGw7XG4gIGxldCBib2R5ID1cbiAgICAobnoubWl4VGFibGVCb2R5TmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAobnoudGFibGVCb2R5TmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICBudWxsO1xuICBjb25zdCBtYWluID1cbiAgICBuei50YWJsZU1haW5FbGVtZW50ICYmXG4gICAgKG56LnRhYmxlTWFpbkVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gIGlmIChtYWluKSB7XG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgIGhlYWRlciA9IG1haW4ucXVlcnlTZWxlY3RvcihcIi5hbnQtdGFibGUtaGVhZGVyXCIpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGJvZHkgPVxuICAgICAgICAobWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIFwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmFudC10YWJsZS1ib2R5XCIsXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQpIHx8XG4gICAgICAgIChtYWluLnF1ZXJ5U2VsZWN0b3IoXCIuYW50LXRhYmxlLWJvZHlcIikgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBoZWFkZXIsIGJvZHkgfTtcbn1cblxuLyoqIOS4gOasoeaAp+aKiuihqOS9kyBzY3JvbGxMZWZ0IOWQjOatpeWIsOihqOWktCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNOelRhYmxlSGVhZGVyQm9keVNjcm9sbExlZnQoXG4gIG56VGFibGU6IE56VGFibGVDb21wb25lbnQsXG4pOiB2b2lkIHtcbiAgY29uc3QgZWxzID0gZ2V0TnpUYWJsZVNjcm9sbEVsZW1lbnRzKG56VGFibGUpO1xuICBpZiAoIWVscy5oZWFkZXIgfHwgIWVscy5ib2R5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbHMuaGVhZGVyLnNjcm9sbExlZnQgIT09IGVscy5ib2R5LnNjcm9sbExlZnQpIHtcbiAgICBlbHMuaGVhZGVyLnNjcm9sbExlZnQgPSBlbHMuYm9keS5zY3JvbGxMZWZ0O1xuICB9XG59XG5cbi8qKlxuICog55uR5ZCs6KGo5L2T5qiq5ZCR5rua5Yqo5bm25ZCM5q2l6KGo5aS044CCXG4gKiDov5Tlm54gdW5iaW5k77ybRE9NIOacquWwsee7quaXtui/lOWbniBudWxs77yI6LCD55So5pa55Y+v6YeN6K+V77yJ44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTnpUYWJsZUhlYWRlckJvZHlTY3JvbGxTeW5jKFxuICBuelRhYmxlOiBOelRhYmxlQ29tcG9uZW50LFxuKTogKCgpID0+IHZvaWQpIHwgbnVsbCB7XG4gIGNvbnN0IGVscyA9IGdldE56VGFibGVTY3JvbGxFbGVtZW50cyhuelRhYmxlKTtcbiAgaWYgKCFlbHMuaGVhZGVyIHx8ICFlbHMuYm9keSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGhlYWRlciA9IGVscy5oZWFkZXI7XG4gIGNvbnN0IGJvZHkgPSBlbHMuYm9keTtcbiAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgaWYgKGhlYWRlci5zY3JvbGxMZWZ0ICE9PSBib2R5LnNjcm9sbExlZnQpIHtcbiAgICAgIGhlYWRlci5zY3JvbGxMZWZ0ID0gYm9keS5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfTtcbiAgYm9keS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcbiAgb25TY3JvbGwoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25TY3JvbGwpO1xuICB9O1xufVxuIl19
|
|
@@ -1122,29 +1122,39 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
1122
1122
|
this.validateFilterForm.patchValue(patch);
|
|
1123
1123
|
};
|
|
1124
1124
|
/**
|
|
1125
|
-
*
|
|
1125
|
+
* 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
|
|
1126
|
+
* DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
|
|
1127
|
+
* 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
|
|
1126
1128
|
*/
|
|
1127
1129
|
/**
|
|
1128
|
-
*
|
|
1130
|
+
* 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
|
|
1131
|
+
* DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
|
|
1132
|
+
* 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
|
|
1129
1133
|
* @private
|
|
1130
1134
|
* @param {?} filter
|
|
1131
1135
|
* @param {?} value
|
|
1132
1136
|
* @return {?}
|
|
1133
1137
|
*/
|
|
1134
1138
|
HdFilterComponent.prototype.normalizeFilterControlValue = /**
|
|
1135
|
-
*
|
|
1139
|
+
* 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
|
|
1140
|
+
* DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
|
|
1141
|
+
* 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
|
|
1136
1142
|
* @private
|
|
1137
1143
|
* @param {?} filter
|
|
1138
1144
|
* @param {?} value
|
|
1139
1145
|
* @return {?}
|
|
1140
1146
|
*/
|
|
1141
1147
|
function (filter, value) {
|
|
1142
|
-
if (filter
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1148
|
+
if (!filter) {
|
|
1149
|
+
return value;
|
|
1150
|
+
}
|
|
1151
|
+
if (filter.type === FilterListType.MultipleSelect && value == null) {
|
|
1146
1152
|
return [];
|
|
1147
1153
|
}
|
|
1154
|
+
if (filter.type === FilterListType.DateRange &&
|
|
1155
|
+
(value == null || (Array.isArray(value) && value.length === 0))) {
|
|
1156
|
+
return null;
|
|
1157
|
+
}
|
|
1148
1158
|
return value;
|
|
1149
1159
|
};
|
|
1150
1160
|
/**
|
|
@@ -1166,6 +1176,9 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
1166
1176
|
}
|
|
1167
1177
|
if (filter.type === FilterListType.DateRange) {
|
|
1168
1178
|
if (Array.isArray(value)) {
|
|
1179
|
+
if (value.length === 0) {
|
|
1180
|
+
return null;
|
|
1181
|
+
}
|
|
1169
1182
|
return value.map((/**
|
|
1170
1183
|
* @param {?} v
|
|
1171
1184
|
* @return {?}
|
|
@@ -1413,4 +1426,4 @@ if (false) {
|
|
|
1413
1426
|
*/
|
|
1414
1427
|
HdFilterComponent.prototype.schemeStore;
|
|
1415
1428
|
}
|
|
1416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCO0lBb0RFLDJCQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFGdEYsaUJBY0M7UUFiUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQzZCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjs7OztRQTdDN0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDOzs7O1FBSTNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxQyxlQUFVLEdBQVksSUFB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Q0FBZ0Q7Ozs7O0lBQ2hELDRDQUFrRDs7Ozs7O0lBR2xELGdEQUF5RDs7Ozs7SUFDekQsa0RBQXNDOztJQUV0Qyx1Q0FBdUM7O0lBQ3ZDLDBDQUFxQzs7SUFDckMsOENBQWtEOztJQUNsRCwwQ0FBc0I7O0lBQ3RCLHlDQUFxQjs7SUFFckIsK0NBQTJCOztJQUMzQiwyQ0FBcUM7O0lBQ3JDLCtDQUE4Qjs7SUFFOUIsK0NBQTJCOztJQUMzQiwyQ0FBcUM7O0lBQ3JDLCtDQUE4Qjs7SUFFOUIsOENBQTJEOzs7OztJQUMzRCw2Q0FBa0Q7O0lBMnFCbEQsa0RBQThDOztJQUM5QyxxREFBb0Q7O0lBQ3BELGlEQUE0Qzs7Ozs7SUExcUIxQywrQkFBdUI7Ozs7O0lBQ3ZCLHdDQUFvRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyTGlzdFR5cGUgfSBmcm9tICcuL2hkLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1JdGVtLCBGb3JtTGlzdFR5cGUgfSBmcm9tICcuLi9oZC1mb3JtL2hkLWZvcm0uc2VydmljZSc7XG5pbXBvcnQge1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUsXG4gIGdldENhc2NhZGVyTWVudVN0eWxlLFxuICBnZXRDYXNjYWRlclNob3dTZWFyY2gsXG59IGZyb20gJy4uL3V0aWxzL2Nhc2NhZGVyLnV0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkJztcbmltcG9ydCB7XG4gIEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICBIRF9GSUxURVJfU0NIRU1FX1NUT1JFLFxuICBIZEZpbHRlclNjaGVtZSxcbiAgSGRGaWx0ZXJTY2hlbWVTdG9yZVxufSBmcm9tICcuL2hkLWZpbHRlci1zY2hlbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGQtZmlsdGVyLmNvbXBvbmVudC5sZXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgSGRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBmaWx0ZXJMaXN0OiBBcnJheTxGaWx0ZXI+O1xuICAvKiog5piv5ZCm5ZCv55So562b6YCJ57uE77yI6buY6K6k5YWz6Zet77yJICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBlbmFibGVGaWx0ZXJTY2hlbWUgPSBmYWxzZTtcbiAgLyoqIOetm+mAieWZqOagh+ivhu+8jOW8gOWQr+etm+mAiee7hOaXtuW/heS8oCAqL1xuICBASW5wdXQoKSBmaWx0ZXJTY2hlbWVLZXk6IHN0cmluZztcbiAgLyoqIOaYr+WQpuWOu+aOiSBoZC1maWx0ZXItY29udGFpbmVyIOeahCBwYWRkaW5n77yM6buY6K6kIGZhbHNlICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBoaWRlUGFkZGluZyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmFsaWRhdGVGaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzU2hvd01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55OyBldmVudDogYW55IH0+KCk7XG4gIHByaXZhdGUgb3BlbkNoYW5nZURlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzY2hlbWVMb2FkU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lQWN0aW9uU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqIOmhtemdoumFjee9rueahOWIneWni+WAvO+8iOiZmuaLn+OAjOm7mOiupOadoeS7tuOAje+8iSAqL1xuICBwcml2YXRlIGRlZmF1bHRGaWx0ZXJWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVzQ2FwdHVyZWQgPSBmYWxzZTtcblxuICBzY2hlbWVMaXN0OiBBcnJheTxIZEZpbHRlclNjaGVtZT4gPSBbXTtcbiAgY3VycmVudFNjaGVtZTogSGRGaWx0ZXJTY2hlbWUgPSBudWxsO1xuICBjdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBzY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gIHNjaGVtZVNhdmluZyA9IGZhbHNlO1xuXG4gIHN3aXRjaE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzd2l0Y2hGb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+ID0gW107XG4gIHN3aXRjaFZhbGlkYXRlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzYXZlQXNGb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+ID0gW107XG4gIHNhdmVBc1ZhbGlkYXRlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRTY2hlbWVOYW1lID0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3dpdGNoRGVmYXVsdEtleSA9ICdfX0RFRkFVTFRfXyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIRF9GSUxURVJfU0NIRU1FX1NUT1JFKSBwcml2YXRlIHNjaGVtZVN0b3JlOiBIZEZpbHRlclNjaGVtZVN0b3JlXG4gICkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpXG4gICAgKS5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24pKTtcbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICAvLyDpppbmrKHliqDovb3lj6rlnKjov5nph4zor7fmsYLkuIDmrKHvvJtuZ09uQ2hhbmdlcyDpppbmrKHkuZ/kvJrluKbkuIogZW5hYmxlRmlsdGVyU2NoZW1lL2ZpbHRlclNjaGVtZUtlee+8jOmBv+WFjemHjeWkjeiwg+aOpeWPo1xuICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2ZpbHRlckxpc3QnXSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVGaWx0ZXJTY2hlbWUnXSB8fCBjaGFuZ2VzWydmaWx0ZXJTY2hlbWVLZXknXSkge1xuICAgICAgLy8g6aaW5qyh5Y+Y5pu05LiOIG5nT25Jbml0IOmHjeWkje+8iOesrOS6jOasoeS8miB1bnN1YnNjcmliZSDnrKzkuIDmrKHvvIzooajnjrDkuLror7fmsYLml6Dov5Tlm57vvInvvJvku4XlkI7nu63liIfmjaLlho3liqDovb1cbiAgICAgIGNvbnN0IGVuYWJsZUxhdGVyID0gY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gJiYgIWNoYW5nZXNbJ2VuYWJsZUZpbHRlclNjaGVtZSddLmZpcnN0Q2hhbmdlO1xuICAgICAgY29uc3Qga2V5TGF0ZXIgPSBjaGFuZ2VzWydmaWx0ZXJTY2hlbWVLZXknXSAmJiAhY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10uZmlyc3RDaGFuZ2U7XG4gICAgICBpZiAoZW5hYmxlTGF0ZXIgfHwga2V5TGF0ZXIpIHtcbiAgICAgICAgdGhpcy50cnlMb2FkU2NoZW1lcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYW5Vc2VTY2hlbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuZW5hYmxlRmlsdGVyU2NoZW1lICYmIHRoaXMuZmlsdGVyU2NoZW1lS2V5ICYmIHRoaXMuc2NoZW1lU3RvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3RNb2R1bGFyID0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAlIDQ7XG4gICAgY29uc3QgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUZpbHRlckNvbnRyb2xWYWx1ZShpdGVtLCBpdGVtLnZhbHVlKSxcbiAgICAgICAgW10sXG4gICAgICApO1xuICAgICAgaXRlbS5zaG93ID0gaW5kZXggPCA3O1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBMaXN0KTtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNsb25lUGxhaW4odGhpcy5nZXRGaWx0ZXJEYXRhKCkpO1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzQ2FwdHVyZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblNlYXJjaEV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55KSB7XG4gICAgaWYgKG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gb25TZWFyY2hFdmVudERlYm91bmNlVGltZTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICAgKS5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24pKTtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5DaGFuZ2VFdmVudChcbiAgICBmbjogYW55LFxuICAgIG9wZW46IGJvb2xlYW4sXG4gICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWU6IGFueSxcbiAgICBmaWx0ZXI/OiBGaWx0ZXIsXG4gICkge1xuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5bGV5byA5pe25YWI5riF56m65penIG9wdGlvbnPvvIzpgb/lhY3mnaHku7blj5jljJblkI7or7fmsYLov5Tlm57liY3ku43lsZXnpLrkuIrkuIDmibnkuIvmi4nmlbDmja5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZmlsdGVyKTtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIG9wZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50OiBvcGVuIH0pO1xuICB9XG5cbiAgLyoqIOaciSBvbk9wZW5DaGFuZ2VFdmVudCDml7blsZXlvIDkuIvmi4nlhYjmuIXnqbrpgInpobnvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaXmlrDmlbDmja4gKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZmlsdGVyOiBGaWx0ZXIpOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlciB8fCAhZmlsdGVyLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBmaWx0ZXIuc2VsZWN0T3B0aW9uO1xuICAgIGlmIChvcHQuc2VsZWN0TGlzdCAhPSBudWxsKSB7XG4gICAgICBvcHQuc2VsZWN0TGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXJFdmVudChmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnkpIHtcbiAgICBpZiAoZm4gJiYgc2VsZWN0T3B0aW9uKSB7XG4gICAgICBmbihldmVudCwgc2VsZWN0T3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGZuKSB7XG4gICAgICBmbihldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiog5b2T5YmN5bGV56S655qE562b6YCJ6aG55pWw6YeP77yI5bCK6YeNIGl0ZW0uc2hvd++8jOS4juWxleW8gC/mlLbotbfkuIDoh7TvvIkgKi9cbiAgZ2V0VmlzaWJsZUZpbHRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmZpbHRlckxpc3QgfHwgW10pLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zaG93ICE9PSBmYWxzZSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqIOWwkeadoeS7tuaXtuWKoOWuveWtl+auteWIl++8mjHihpIxOOOAgTLihpI544CB4omlM+KGkjYgKi9cbiAgZ2V0RmlsdGVyQ29sU3BhbigpOiBudW1iZXIge1xuICAgIGNvbnN0IG4gPSB0aGlzLmdldFZpc2libGVGaWx0ZXJDb3VudCgpO1xuICAgIGlmIChuID09PSAxKSB7XG4gICAgICByZXR1cm4gMTg7XG4gICAgfVxuICAgIGlmIChuID09PSAyKSB7XG4gICAgICByZXR1cm4gOTtcbiAgICB9XG4gICAgcmV0dXJuIDY7XG4gIH1cblxuICBjb21wdXRlT2Zmc2V0KCkge1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHRoaXMuZ2V0VmlzaWJsZUZpbHRlckNvdW50KCk7XG4gICAgLy8g4omkMiDkuKrlj6/op4HmnaHku7bml7blrZfmrrXlt7LliqDlrr3ljaDmu6HkuIDooYzliankvZnvvIzmjInpkq7kuI3lho0gb2Zmc2V0XG4gICAgaWYgKHZpc2libGVDb3VudCA8PSAyKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgbW9kdWxhciA9IHZpc2libGVDb3VudCAlIDQ7XG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gNCkge1xuICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgICAvLyDiiaUz77ya5rK/55So5Y6fICU0IOmAu+i+ke+8jOaMieWPr+ingeaVsOiuoeeul++8iOmBv+WFjeaUtui1t+WQjumUmeS9je+8iVxuICAgIHJldHVybiB0aGlzLmlzU2hvd01vcmVcbiAgICAgID8gKChtb2R1bGFyID09PSAwIHx8IHZpc2libGVDb3VudCA+IDcpID8gMCA6ICgzIC0gbW9kdWxhcikgKiA2KVxuICAgICAgOiAobW9kdWxhciA9PT0gMCA/IDE4IDogKDMgLSBtb2R1bGFyKSAqIDYpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xpc3QobGlzdDogQXJyYXk8RmlsdGVyPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuICAgIH0pO1xuICAgIGlmIChbLi4ubmV3IFNldChuYW1lTGlzdCldLmxlbmd0aCAhPT0gbGlzdC5sZW5ndGgpIHtcbiAgICAgIHRocm93ICdmaWx0ZXLnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjph43lpI1uYW1l5YC8ISc7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpO1xuICAgIGlmICh0aGlzLnJlc2V0RXZlbnQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzZXRFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpIHtcbiAgICBjb25zdCByZXNldFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJlc2V0VmFsdWVbaXRlbS5uYW1lXSA9IHRoaXMubm9ybWFsaXplRmlsdGVyQ29udHJvbFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93TW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd01vcmUgPSAhdGhpcy5pc1Nob3dNb3JlO1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zaG93ID0gdGhpcy5pc1Nob3dNb3JlID8gaW5kZXggPCA3IDogdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgY29uc3QgcGF0Y2hPYmplY3QgPSB7fTtcbiAgICBwYXRjaE9iamVjdFtmaWx0ZXIubmFtZV0gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgaXNBbGxvd0NsZWFyKGl0ZW06IEZpbHRlcik6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpdGVtLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLSDnrZvpgInnu4QgLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgdHJ5TG9hZFNjaGVtZXMoYXBwbHlEZWZhdWx0OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUxvYWRTdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lTG9hZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRTdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kID8gZm91bmQudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yqg6L29562b6YCJ5qih54mI5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdCkge1xuICAgICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlsZXnpLrnlKjliJfooajvvJrkv53or4HmnInjgIzpu5jorqTmnaHku7bjgI0gKi9cbiAgZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiA9IFtdO1xuICAgIGNvbnN0IGZyb21EYiA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICBpZiAoZnJvbURiKSB7XG4gICAgICByZXN1bHQucHVzaChmcm9tRGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICAgIHRlbXBsYXRlTmFtZTogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZm9yRWFjaChzID0+IHtcbiAgICAgIGlmIChzLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9wZW5Td2l0Y2hNb2RhbCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTY2hlbWVcbiAgICAgIHx8IHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgICBmaWx0ZXJWYWx1ZTogJydcbiAgICAgIH07XG4gICAgdGhpcy5idWlsZFN3aXRjaEZvcm1MaXN0KHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGN1cnJlbnQpKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBjbG9zZVN3aXRjaE1vZGFsKCkge1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGb3JtQ2hhbmdlRXZlbnQoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0gPSBmb3JtO1xuICB9XG5cbiAgZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogc3RyaW5nIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gICAgfVxuICAgIGlmIChpdGVtLnV1aWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnV1aWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3dpdGNoRm9ybUxpc3Qoc2VsZWN0ZWRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdExpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW0pLFxuICAgICAgICBsYWJlbDogaXRlbS50ZW1wbGF0ZU5hbWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLlNlbGVjdCxcbiAgICAgICAgbGFiZWw6ICfnrZvpgInnu4QnLFxuICAgICAgICBuYW1lOiAnc2NoZW1lS2V5JyxcbiAgICAgICAgcmVxdWlyZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgIHZhbHVlOiBzZWxlY3RlZEtleSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6nnrZvpgInnu4QnLFxuICAgICAgICBzZWxlY3RPcHRpb246IHtcbiAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBoZFNob3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgc2VsZWN0TGlzdDogc2VsZWN0TGlzdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1Td2l0Y2goKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lS2V5ID0gdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS5zY2hlbWVLZXk7XG4gICAgaWYgKHNjaGVtZUtleSA9PSBudWxsIHx8IHNjaGVtZUtleSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBsZXQgdGFyZ2V0OiBIZEZpbHRlclNjaGVtZSA9IG51bGw7XG4gICAgaWYgKHNjaGVtZUtleSA9PT0gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5KSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIXMudXVpZClcbiAgICAgICAgfHwgbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy51dWlkID09PSBzY2hlbWVLZXkpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgdHJ1ZSk7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVmYXVsdFNjaGVtZShpdGVtOiBIZEZpbHRlclNjaGVtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShpdGVtICYmIGl0ZW0udGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gIH1cblxuICBjYW5EZWxldGVDdXJyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWRcbiAgICAgICYmIHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgIT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIHNhdmVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICB1dWlkOiB0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQgPyB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA6IG51bGwsXG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+S/neWtmOaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5L+d5a2Y5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb3BlblNhdmVBc01vZGFsKCkge1xuICAgIHRoaXMuYnVpbGRTYXZlQXNGb3JtTGlzdCgpO1xuICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNhdmVBc0Zvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZUFzRm9ybUxpc3QoKSB7XG4gICAgdGhpcy5zYXZlQXNGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLklucHV0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hOWQjeensCcsXG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZU5hbWUnLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgbWF4TGVuZ3RoOiA1MCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAn6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJ1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBjb25maXJtU2F2ZUFzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0gfHwgIXRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSAoKHRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtLmdldFJhd1ZhbHVlKCkudGVtcGxhdGVOYW1lKSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfkuI3og73kvb/nlKjjgIzpu5jorqTmnaHku7bjgI3kvZzkuLrnrZvpgInnu4TlkI3np7DvvIzor7fkvb/nlKjjgIzkv53lrZjkuLrlvZPliY3jgI3opobnm5bpu5jorqTmnaHku7YnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuc29tZShzID0+IHMudGVtcGxhdGVOYW1lID09PSBuYW1lKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign562b6YCJ57uE5ZCN56ew5bey5a2Y5ZyoJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJvZHk6IEhkRmlsdGVyU2NoZW1lID0ge1xuICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgIHRlbXBsYXRlTmFtZTogbmFtZSxcbiAgICAgIGZpbHRlclZhbHVlOiB0aGlzLnNlcmlhbGl6ZUZpbHRlclZhbHVlKClcbiAgICB9O1xuICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5zYXZlKGJvZHkpLnN1YnNjcmliZShcbiAgICAgIChzYXZlZCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKCflj6blrZjkuLrmiJDlip8nKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gc2F2ZWQ7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBzYXZlZC50ZW1wbGF0ZU5hbWU7XG4gICAgICAgIHRoaXMucmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WPpuWtmOS4uuWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5EZWxldGVDdXJyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXVpZCA9IHRoaXMuY3VycmVudFNjaGVtZS51dWlkO1xuICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5kZWxldGUodXVpZCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKCfliKDpmaTmiJDlip8nKTtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZmlsdGVyKHMgPT4gcy51dWlkICE9PSB1dWlkKTtcbiAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yig6Zmk5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVTdG9yZS5xdWVyeUJ5RmlsdGVyS2V5KHRoaXMuZmlsdGVyU2NoZW1lS2V5KS5zdWJzY3JpYmUoXG4gICAgICAobGlzdCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gZm91bmQ7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gZm91bmQudGVtcGxhdGVOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICgpID0+IHsgLyogaWdub3JlICovIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNjaGVtZUJ5TmFtZShuYW1lOiBzdHJpbmcsIGVtaXRTZWFyY2g6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXREaXNwbGF5U2NoZW1lTGlzdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IGxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBuYW1lKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgZW1pdFNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNjaGVtZShzY2hlbWU6IEhkRmlsdGVyU2NoZW1lLCBlbWl0U2VhcmNoOiBib29sZWFuKSB7XG4gICAgdGhpcy5jdXJyZW50U2NoZW1lID0gc2NoZW1lICYmIHNjaGVtZS51dWlkID8gc2NoZW1lIDoge1xuICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgIHRlbXBsYXRlTmFtZTogc2NoZW1lID8gc2NoZW1lLnRlbXBsYXRlTmFtZSA6IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgZmlsdGVyVmFsdWU6IHNjaGVtZSA/IHNjaGVtZS5maWx0ZXJWYWx1ZSA6IEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSlcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSB0aGlzLmN1cnJlbnRTY2hlbWUudGVtcGxhdGVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuXG4gICAgbGV0IHZhbHVlczogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FICYmICEoc2NoZW1lICYmIHNjaGVtZS51dWlkKSkge1xuICAgICAgdmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlcyA9IEpTT04ucGFyc2Uoc2NoZW1lLmZpbHRlclZhbHVlIHx8ICd7fScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB2YWx1ZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgICAvLyDlupPkuK3pu5jorqTmnaHku7bopobnm5bliJ3lp4vlgLzvvJrku6Xpu5jorqTlgLzkuLrlupXvvIzlho3lj6DliqDlupPlgLxcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9LCB2YWx1ZXMgfHwge30pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhdGNoRmlsdGVyVmFsdWVzKHZhbHVlcyk7XG4gICAgaWYgKGVtaXRTZWFyY2gpIHtcbiAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGaWx0ZXJEYXRhKCkgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZpbHRlclZhbHVlcyh2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtIHx8ICF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0Y2g6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlcywgaXRlbS5uYW1lKSkge1xuICAgICAgICBwYXRjaFtpdGVtLm5hbWVdID0gdGhpcy5yZXZpdmVGaWx0ZXJWYWx1ZShpdGVtLCB2YWx1ZXNbaXRlbS5uYW1lXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShwYXRjaCk7XG4gIH1cblxuICAvKipcbiAgICog5aSa6YCJIC8g5pel5pyf6IyD5Zu056m65oCB55SoIFtd77yM6YG/5YWNIEZvcm1Db250cm9sIOS4uiBudWxsIOaXtiBuei1zZWxlY3QgbXVsdGlwbGUg5LiN5pi+56S6IHBsYWNlaG9sZGVy44CCXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUZpbHRlckNvbnRyb2xWYWx1ZShmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKFxuICAgICAgZmlsdGVyICYmXG4gICAgICAoZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLk11bHRpcGxlU2VsZWN0IHx8XG4gICAgICAgIGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlUmFuZ2UpICYmXG4gICAgICB2YWx1ZSA9PSBudWxsXG4gICAgKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2aXZlRmlsdGVyVmFsdWUoZmlsdGVyOiBGaWx0ZXIsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVGaWx0ZXJDb250cm9sVmFsdWUoZmlsdGVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZVJhbmdlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IHRoaXMucGFyc2VEYXRlTGlrZSh2KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZSB8fCBmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRGF0ZUxpa2UodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZUxpa2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IHZhbHVlIDogZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGxhaW4ob2JqOiBhbnkpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmogPT0gbnVsbCA/IHt9IDogb2JqKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N1Y2Nlc3MobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5lcnJvcihtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCA9IGdldENhc2NhZGVyU2hvd1NlYXJjaDtcbiAgZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lID0gZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lO1xuICBnZXRDYXNjYWRlck1lbnVTdHlsZSA9IGdldENhc2NhZGVyTWVudVN0eWxlO1xufVxuIl19
|
|
1429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCO0lBb0RFLDJCQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFGdEYsaUJBY0M7UUFiUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQzZCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjs7OztRQTdDN0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDOzs7O1FBSTNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxQyxlQUFVLEdBQVksSUFB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SUFFNUIsdUNBQW1DOzs7OztJQUVuQywrQ0FBb0Q7Ozs7O0lBRXBELDRDQUFpQzs7Ozs7SUFFakMsd0NBQTZDOztJQUU3Qyx3Q0FBMkM7O0lBQzNDLHVDQUEwQzs7SUFFMUMsK0NBQThCOztJQUM5Qix1Q0FBMkI7O0lBQzNCLDhDQUE4Qjs7Ozs7SUFDOUIsMENBQW9GOzs7OztJQUNwRiw0Q0FBb0M7Ozs7O0lBQ3BDLDhDQUFtRTs7Ozs7SUFDbkUsc0RBQThDOzs7OztJQUU5QywrQ0FBcUQ7Ozs7O0lBQ3JELG1EQUF5RDs7Ozs7SUFDekQsMENBQWdEOzs7OztJQUNoRCw0Q0FBa0Q7Ozs7OztJQUdsRCxnREFBeUQ7Ozs7O0lBQ3pELGtEQUFzQzs7SUFFdEMsdUNBQXVDOztJQUN2QywwQ0FBcUM7O0lBQ3JDLDhDQUFrRDs7SUFDbEQsMENBQXNCOztJQUN0Qix5Q0FBcUI7O0lBRXJCLCtDQUEyQjs7SUFDM0IsMkNBQXFDOztJQUNyQywrQ0FBOEI7O0lBRTlCLCtDQUEyQjs7SUFDM0IsMkNBQXFDOztJQUNyQywrQ0FBOEI7O0lBRTlCLDhDQUEyRDs7Ozs7SUFDM0QsNkNBQWtEOztJQW9yQmxELGtEQUE4Qzs7SUFDOUMscURBQW9EOztJQUNwRCxpREFBNEM7Ozs7O0lBbnJCMUMsK0JBQXVCOzs7OztJQUN2Qix3Q0FBb0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlckxpc3RUeXBlIH0gZnJvbSAnLi9oZC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtSXRlbSwgRm9ybUxpc3RUeXBlIH0gZnJvbSAnLi4vaGQtZm9ybS9oZC1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lLFxuICBnZXRDYXNjYWRlck1lbnVTdHlsZSxcbiAgZ2V0Q2FzY2FkZXJTaG93U2VhcmNoLFxufSBmcm9tICcuLi91dGlscy9jYXNjYWRlci51dGlsJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQge1xuICBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgSERfRklMVEVSX1NDSEVNRV9TVE9SRSxcbiAgSGRGaWx0ZXJTY2hlbWUsXG4gIEhkRmlsdGVyU2NoZW1lU3RvcmVcbn0gZnJvbSAnLi9oZC1maWx0ZXItc2NoZW1lJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hkLWZpbHRlci5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIEhkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgZmlsdGVyTGlzdDogQXJyYXk8RmlsdGVyPjtcbiAgLyoqIOaYr+WQpuWQr+eUqOetm+mAiee7hO+8iOm7mOiupOWFs+mXre+8iSAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZW5hYmxlRmlsdGVyU2NoZW1lID0gZmFsc2U7XG4gIC8qKiDnrZvpgInlmajmoIfor4bvvIzlvIDlkK/nrZvpgInnu4Tml7blv4XkvKAgKi9cbiAgQElucHV0KCkgZmlsdGVyU2NoZW1lS2V5OiBzdHJpbmc7XG4gIC8qKiDmmK/lkKbljrvmjokgaGQtZmlsdGVyLWNvbnRhaW5lciDnmoQgcGFkZGluZ++8jOm7mOiupCBmYWxzZSAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgaGlkZVBhZGRpbmcgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNldEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHZhbGlkYXRlRmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBpc1Nob3dNb3JlOiBib29sZWFuID0gdHJ1ZTtcbiAgZmlsdGVyTGlzdE1vZHVsYXI6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgc2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZm46IGFueSwgZXZlbnQ6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55OyB9PigpO1xuICBwcml2YXRlIGRlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZm46IGFueTsgZXZlbnQ6IGFueSB9PigpO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQ6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lTG9hZFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNjaGVtZUFjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiDpobXpnaLphY3nva7nmoTliJ3lp4vlgLzvvIjomZrmi5/jgIzpu5jorqTmnaHku7bjgI3vvIkgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gZmFsc2U7XG5cbiAgc2NoZW1lTGlzdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gIGN1cnJlbnRTY2hlbWU6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgY3VycmVudFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICBzY2hlbWVTYXZpbmcgPSBmYWxzZTtcblxuICBzd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc3dpdGNoRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzd2l0Y2hWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICBzYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2F2ZUFzRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzYXZlQXNWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICByZWFkb25seSBkZWZhdWx0U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBwcml2YXRlIHJlYWRvbmx5IHN3aXRjaERlZmF1bHRLZXkgPSAnX19ERUZBVUxUX18nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSERfRklMVEVSX1NDSEVNRV9TVE9SRSkgcHJpdmF0ZSBzY2hlbWVTdG9yZTogSGRGaWx0ZXJTY2hlbWVTdG9yZVxuICApIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgLy8g6aaW5qyh5Yqg6L295Y+q5Zyo6L+Z6YeM6K+35rGC5LiA5qyh77ybbmdPbkNoYW5nZXMg6aaW5qyh5Lmf5Lya5bim5LiKIGVuYWJsZUZpbHRlclNjaGVtZS9maWx0ZXJTY2hlbWVLZXnvvIzpgb/lhY3ph43lpI3osIPmjqXlj6NcbiAgICB0aGlzLnRyeUxvYWRTY2hlbWVzKHRydWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJMaXN0J10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gfHwgY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10pIHtcbiAgICAgIC8vIOmmluasoeWPmOabtOS4jiBuZ09uSW5pdCDph43lpI3vvIjnrKzkuozmrKHkvJogdW5zdWJzY3JpYmUg56ys5LiA5qyh77yM6KGo546w5Li66K+35rGC5peg6L+U5Zue77yJ77yb5LuF5ZCO57ut5YiH5o2i5YaN5Yqg6L29XG4gICAgICBjb25zdCBlbmFibGVMYXRlciA9IGNoYW5nZXNbJ2VuYWJsZUZpbHRlclNjaGVtZSddICYmICFjaGFuZ2VzWydlbmFibGVGaWx0ZXJTY2hlbWUnXS5maXJzdENoYW5nZTtcbiAgICAgIGNvbnN0IGtleUxhdGVyID0gY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10gJiYgIWNoYW5nZXNbJ2ZpbHRlclNjaGVtZUtleSddLmZpcnN0Q2hhbmdlO1xuICAgICAgaWYgKGVuYWJsZUxhdGVyIHx8IGtleUxhdGVyKSB7XG4gICAgICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lTG9hZFN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVMb2FkU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FuVXNlU2NoZW1lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmVuYWJsZUZpbHRlclNjaGVtZSAmJiB0aGlzLmZpbHRlclNjaGVtZUtleSAmJiB0aGlzLnNjaGVtZVN0b3JlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd01vcmUgPSB0cnVlO1xuICAgIGlmICghdGhpcy5jaGVja0xpc3QodGhpcy5maWx0ZXJMaXN0KSkge1xuICAgICAgdGhyb3cgJ2ZpbHRlcue7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMgyc7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICB0aGlzLmZpbHRlckxpc3QgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggJSA0O1xuICAgIGNvbnN0IGZvcm1Hcm91cExpc3QgPSB7fTtcbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgdGhpcy5ub3JtYWxpemVGaWx0ZXJDb250cm9sVmFsdWUoaXRlbSwgaXRlbS52YWx1ZSksXG4gICAgICAgIFtdLFxuICAgICAgKTtcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXNDYXB0dXJlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZ2V0RmlsdGVyRGF0YSgpKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgb25PcGVuQ2hhbmdlRXZlbnQoXG4gICAgZm46IGFueSxcbiAgICBvcGVuOiBib29sZWFuLFxuICAgIG9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lOiBhbnksXG4gICAgZmlsdGVyPzogRmlsdGVyLFxuICApIHtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWxleW8gOaXtuWFiOa4heepuuaXpyBvcHRpb25z77yM6YG/5YWN5p2h5Lu25Y+Y5YyW5ZCO6K+35rGC6L+U5Zue5YmN5LuN5bGV56S65LiK5LiA5om55LiL5ouJ5pWw5o2uXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZpbHRlcik7XG4gICAgfVxuICAgIGNvbnN0IGRlYm91bmNlTXMgPVxuICAgICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IG9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgIDogMDtcbiAgICAvLyDmnKrphY3nva7miJbkuLogMO+8muWQjOatpeinpuWPke+8jOS4jei1sCBkZWJvdW5jZVRpbWXvvIjpgb/lhY3lvILmraXvvIlcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBvcGVuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0ID0gZGVib3VuY2VNcztcbiAgICBpZiAodGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMub3BlbkNoYW5nZVN1YmplY3QubmV4dCh7IGZuLCBldmVudDogb3BlbiB9KTtcbiAgfVxuXG4gIC8qKiDmnIkgb25PcGVuQ2hhbmdlRXZlbnQg5pe25bGV5byA5LiL5ouJ5YWI5riF56m66YCJ6aG577yM55Sx5Lia5Yqh5Zue6LCD5YaN5YaZ5YWl5paw5pWw5o2uICovXG4gIHByaXZhdGUgY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgIWZpbHRlci5zZWxlY3RPcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gZmlsdGVyLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3QgIT0gbnVsbCkge1xuICAgICAgb3B0LnNlbGVjdExpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55KSB7XG4gICAgaWYgKGZuICYmIHNlbGVjdE9wdGlvbikge1xuICAgICAgZm4oZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIOW9k+WJjeWxleekuueahOetm+mAiemhueaVsOmHj++8iOWwiumHjSBpdGVtLnNob3fvvIzkuI7lsZXlvIAv5pS26LW35LiA6Ie077yJICovXG4gIGdldFZpc2libGVGaWx0ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5maWx0ZXJMaXN0IHx8IFtdKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2hvdyAhPT0gZmFsc2UpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiDlsJHmnaHku7bml7bliqDlrr3lrZfmrrXliJfvvJox4oaSMTjjgIEy4oaSOeOAgeKJpTPihpI2ICovXG4gIGdldEZpbHRlckNvbFNwYW4oKTogbnVtYmVyIHtcbiAgICBjb25zdCBuID0gdGhpcy5nZXRWaXNpYmxlRmlsdGVyQ291bnQoKTtcbiAgICBpZiAobiA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgICBpZiAobiA9PT0gMikge1xuICAgICAgcmV0dXJuIDk7XG4gICAgfVxuICAgIHJldHVybiA2O1xuICB9XG5cbiAgY29tcHV0ZU9mZnNldCgpIHtcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB0aGlzLmdldFZpc2libGVGaWx0ZXJDb3VudCgpO1xuICAgIC8vIOKJpDIg5Liq5Y+v6KeB5p2h5Lu25pe25a2X5q615bey5Yqg5a695Y2g5ruh5LiA6KGM5Ymp5L2Z77yM5oyJ6ZKu5LiN5YaNIG9mZnNldFxuICAgIGlmICh2aXNpYmxlQ291bnQgPD0gMikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IG1vZHVsYXIgPSB2aXNpYmxlQ291bnQgJSA0O1xuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDQpIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gICAgLy8g4omlM++8muayv+eUqOWOnyAlNCDpgLvovpHvvIzmjInlj6/op4HmlbDorqHnrpfvvIjpgb/lhY3mlLbotbflkI7plJnkvY3vvIlcbiAgICByZXR1cm4gdGhpcy5pc1Nob3dNb3JlXG4gICAgICA/ICgobW9kdWxhciA9PT0gMCB8fCB2aXNpYmxlQ291bnQgPiA3KSA/IDAgOiAoMyAtIG1vZHVsYXIpICogNilcbiAgICAgIDogKG1vZHVsYXIgPT09IDAgPyAxOCA6ICgzIC0gbW9kdWxhcikgKiA2KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZpbHRlcj4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZUxpc3QgPSBbXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoWy4uLm5ldyBTZXQobmFtZUxpc3QpXS5sZW5ndGggIT09IGxpc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo6YeN5aSNbmFtZeWAvCEnO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKTtcbiAgICBpZiAodGhpcy5yZXNldEV2ZW50Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0RXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKSB7XG4gICAgY29uc3QgcmVzZXRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICByZXNldFZhbHVlW2l0ZW0ubmFtZV0gPSB0aGlzLm5vcm1hbGl6ZUZpbHRlckNvbnRyb2xWYWx1ZShpdGVtLCBpdGVtLnZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5wYXRjaFZhbHVlKHJlc2V0VmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldEZpbHRlckRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd01vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dNb3JlID0gIXRoaXMuaXNTaG93TW9yZTtcbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uc2hvdyA9IHRoaXMuaXNTaG93TW9yZSA/IGluZGV4IDwgNyA6IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5wdXRDbGVhbihmaWx0ZXI6IEZpbHRlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoT2JqZWN0ID0ge307XG4gICAgcGF0Y2hPYmplY3RbZmlsdGVyLm5hbWVdID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5wYXRjaFZhbHVlKHBhdGNoT2JqZWN0KTtcbiAgfVxuXG4gIGlzQWxsb3dDbGVhcihpdGVtOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXRlbS5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIGlmIChpdGVtLnNlbGVjdE9wdGlvbiAmJiBpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0g562b6YCJ57uEIC0tLS0tLS0tLS1cblxuICBwcml2YXRlIHRyeUxvYWRTY2hlbWVzKGFwcGx5RGVmYXVsdDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHRoaXMuc2NoZW1lTGlzdCA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVMb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVMb2FkU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5xdWVyeUJ5RmlsdGVyS2V5KHRoaXMuZmlsdGVyU2NoZW1lS2V5KS5zdWJzY3JpYmUoXG4gICAgICAobGlzdCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gbGlzdCB8fCBbXTtcbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdCkge1xuICAgICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHRoaXMuY3VycmVudFNjaGVtZS51dWlkKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBmb3VuZCB8fCBudWxsO1xuICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBmb3VuZCA/IGZvdW5kLnRlbXBsYXRlTmFtZSA6IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WKoOi9veetm+mAieaooeeJiOWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICAgIGlmIChhcHBseURlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5U2NoZW1lQnlOYW1lKEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiog5bGV56S655So5YiX6KGo77ya5L+d6K+B5pyJ44CM6buY6K6k5p2h5Lu244CNICovXG4gIGdldERpc3BsYXlTY2hlbWVMaXN0KCk6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxIZEZpbHRlclNjaGVtZT4gPSBbXTtcbiAgICBjb25zdCBmcm9tRGIgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gICAgaWYgKGZyb21EYikge1xuICAgICAgcmVzdWx0LnB1c2goZnJvbURiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgICB0ZW1wbGF0ZU5hbWU6IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgICBmaWx0ZXJWYWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICAgICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLmZvckVhY2gocyA9PiB7XG4gICAgICBpZiAocy50ZW1wbGF0ZU5hbWUgIT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvcGVuU3dpdGNoTW9kYWwoKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U2NoZW1lXG4gICAgICB8fCB7XG4gICAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICAgIHRlbXBsYXRlTmFtZTogdGhpcy5jdXJyZW50U2NoZW1lTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgICAgZmlsdGVyVmFsdWU6ICcnXG4gICAgICB9O1xuICAgIHRoaXMuYnVpbGRTd2l0Y2hGb3JtTGlzdCh0aGlzLmdldFN3aXRjaE9wdGlvbktleShjdXJyZW50KSk7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VTd2l0Y2hNb2RhbCgpIHtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoRm9ybUNoYW5nZUV2ZW50KGZvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMuc3dpdGNoVmFsaWRhdGVGb3JtID0gZm9ybTtcbiAgfVxuXG4gIGdldFN3aXRjaE9wdGlvbktleShpdGVtOiBIZEZpbHRlclNjaGVtZSk6IHN0cmluZyB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5O1xuICAgIH1cbiAgICBpZiAoaXRlbS51dWlkKSB7XG4gICAgICByZXR1cm4gaXRlbS51dWlkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN3aXRjaEZvcm1MaXN0KHNlbGVjdGVkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWxlY3RMaXN0ID0gdGhpcy5nZXREaXNwbGF5U2NoZW1lTGlzdCgpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLmdldFN3aXRjaE9wdGlvbktleShpdGVtKSxcbiAgICAgICAgbGFiZWw6IGl0ZW0udGVtcGxhdGVOYW1lXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuc3dpdGNoRm9ybUxpc3QgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEZvcm1MaXN0VHlwZS5TZWxlY3QsXG4gICAgICAgIGxhYmVsOiAn562b6YCJ57uEJyxcbiAgICAgICAgbmFtZTogJ3NjaGVtZUtleScsXG4gICAgICAgIHJlcXVpcmU6IHRydWUsXG4gICAgICAgIHdpZHRoOiA0LFxuICAgICAgICB2YWx1ZTogc2VsZWN0ZWRLZXksXG4gICAgICAgIHBsYWNlaG9sZGVyOiAn6K+36YCJ5oup562b6YCJ57uEJyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiB7XG4gICAgICAgICAgdmFsdWU6ICd2YWx1ZScsXG4gICAgICAgICAgbGFiZWw6ICdsYWJlbCcsXG4gICAgICAgICAgaGRTaG93U2VhcmNoOiB0cnVlLFxuICAgICAgICAgIHNlbGVjdExpc3Q6IHNlbGVjdExpc3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBjb25maXJtU3dpdGNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0gfHwgIXRoaXMuc3dpdGNoVmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36YCJ5oup562b6YCJ57uEJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtZUtleSA9IHRoaXMuc3dpdGNoVmFsaWRhdGVGb3JtLmdldFJhd1ZhbHVlKCkuc2NoZW1lS2V5O1xuICAgIGlmIChzY2hlbWVLZXkgPT0gbnVsbCB8fCBzY2hlbWVLZXkgPT09ICcnKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36YCJ5oup562b6YCJ57uEJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCk7XG4gICAgbGV0IHRhcmdldDogSGRGaWx0ZXJTY2hlbWUgPSBudWxsO1xuICAgIGlmIChzY2hlbWVLZXkgPT09IHRoaXMuc3dpdGNoRGVmYXVsdEtleSkge1xuICAgICAgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FICYmICFzLnV1aWQpXG4gICAgICAgIHx8IGxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldCA9IGxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gc2NoZW1lS2V5KTtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNjaGVtZSh0YXJnZXQsIHRydWUpO1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc0RlZmF1bHRTY2hlbWUoaXRlbTogSGRGaWx0ZXJTY2hlbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoaXRlbSAmJiBpdGVtLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICB9XG5cbiAgY2FuRGVsZXRlQ3VycmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkXG4gICAgICAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudGVtcGxhdGVOYW1lICE9PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gIH1cblxuICBzYXZlQ3VycmVudFNjaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgIGNvbnN0IGJvZHk6IEhkRmlsdGVyU2NoZW1lID0ge1xuICAgICAgdXVpZDogdGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkID8gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQgOiBudWxsLFxuICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgIHRlbXBsYXRlTmFtZTogbmFtZSxcbiAgICAgIGZpbHRlclZhbHVlOiB0aGlzLnNlcmlhbGl6ZUZpbHRlclZhbHVlKClcbiAgICB9O1xuICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5zYXZlKGJvZHkpLnN1YnNjcmliZShcbiAgICAgIChzYXZlZCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKCfkv53lrZjmiJDlip8nKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gc2F2ZWQ7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBzYXZlZC50ZW1wbGF0ZU5hbWU7XG4gICAgICAgIHRoaXMucmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+S/neWtmOWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG9wZW5TYXZlQXNNb2RhbCgpIHtcbiAgICB0aGlzLmJ1aWxkU2F2ZUFzRm9ybUxpc3QoKTtcbiAgICB0aGlzLnNhdmVBc01vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBjbG9zZVNhdmVBc01vZGFsKCkge1xuICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzYXZlQXNGb3JtQ2hhbmdlRXZlbnQoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0gPSBmb3JtO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNhdmVBc0Zvcm1MaXN0KCkge1xuICAgIHRoaXMuc2F2ZUFzRm9ybUxpc3QgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEZvcm1MaXN0VHlwZS5JbnB1dCxcbiAgICAgICAgbGFiZWw6ICfnrZvpgInnu4TlkI3np7AnLFxuICAgICAgICBuYW1lOiAndGVtcGxhdGVOYW1lJyxcbiAgICAgICAgcmVxdWlyZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgIG1heExlbmd0aDogNTAsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCdcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uZmlybVNhdmVBcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtIHx8ICF0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gKCh0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLnRlbXBsYXRlTmFtZSkgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign5LiN6IO95L2/55So44CM6buY6K6k5p2h5Lu244CN5L2c5Li6562b6YCJ57uE5ZCN56ew77yM6K+35L2/55So44CM5L+d5a2Y5Li65b2T5YmN44CN6KaG55uW6buY6K6k5p2h5Lu2Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLnNvbWUocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+etm+mAiee7hOWQjeensOW3suWtmOWcqCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBib2R5OiBIZEZpbHRlclNjaGVtZSA9IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5zZXJpYWxpemVGaWx0ZXJWYWx1ZSgpXG4gICAgfTtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuc2F2ZShib2R5KS5zdWJzY3JpYmUoXG4gICAgICAoc2F2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Y+m5a2Y5Li65oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNhdmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gc2F2ZWQudGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLnJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCflj6blrZjkuLrlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlQ3VycmVudFNjaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuRGVsZXRlQ3VycmVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHV1aWQgPSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZDtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuZGVsZXRlKHV1aWQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Yig6Zmk5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLmZpbHRlcihzID0+IHMudXVpZCAhPT0gdXVpZCk7XG4gICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WIoOmZpOWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lU3RvcmUucXVlcnlCeUZpbHRlcktleSh0aGlzLmZpbHRlclNjaGVtZUtleSkuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gbGlzdCB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHRoaXMuY3VycmVudFNjaGVtZS51dWlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoKSA9PiB7IC8qIGlnbm9yZSAqLyB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWVCeU5hbWUobmFtZTogc3RyaW5nLCBlbWl0U2VhcmNoOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBjb25zdCB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5hcHBseVNjaGVtZSh0YXJnZXQsIGVtaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWUoc2NoZW1lOiBIZEZpbHRlclNjaGVtZSwgZW1pdFNlYXJjaDogYm9vbGVhbikge1xuICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNjaGVtZSAmJiBzY2hlbWUudXVpZCA/IHNjaGVtZSA6IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IHNjaGVtZSA/IHNjaGVtZS50ZW1wbGF0ZU5hbWUgOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgIGZpbHRlclZhbHVlOiBzY2hlbWUgPyBzY2hlbWUuZmlsdGVyVmFsdWUgOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gdGhpcy5jdXJyZW50U2NoZW1lLnRlbXBsYXRlTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcblxuICAgIGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSAmJiAhKHNjaGVtZSAmJiBzY2hlbWUudXVpZCkpIHtcbiAgICAgIHZhbHVlcyA9IHRoaXMuY2xvbmVQbGFpbih0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZXMgPSBKU09OLnBhcnNlKHNjaGVtZS5maWx0ZXJWYWx1ZSB8fCAne30nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdmFsdWVzID0ge307XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgLy8g5bqT5Lit6buY6K6k5p2h5Lu26KaG55uW5Yid5aeL5YC877ya5Lul6buY6K6k5YC85Li65bqV77yM5YaN5Y+g5Yqg5bqT5YC8XG4gICAgICAgIHZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSwgdmFsdWVzIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYXRjaEZpbHRlclZhbHVlcyh2YWx1ZXMpO1xuICAgIGlmIChlbWl0U2VhcmNoKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0RmlsdGVyRGF0YSgpIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGaWx0ZXJWYWx1ZXModmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSB8fCAhdGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGNoOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodmFsdWVzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZXMsIGl0ZW0ubmFtZSkpIHtcbiAgICAgICAgcGF0Y2hbaXRlbS5uYW1lXSA9IHRoaXMucmV2aXZlRmlsdGVyVmFsdWUoaXRlbSwgdmFsdWVzW2l0ZW0ubmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkmumAieepuuaAgeeUqCBbXe+8jOmBv+WFjSBGb3JtQ29udHJvbCDkuLogbnVsbCDml7Ygbnotc2VsZWN0IG11bHRpcGxlIOS4jeaYvuekuiBwbGFjZWhvbGRlcuOAglxuICAgKiBEYXRlUmFuZ2Ug5b+F6aG75L+d5oyBIG51bGzvvIjmiJbmiorljoblj7LnqbrmlbDnu4TlvZLkuIDkuLogbnVsbO+8ie+8muS4muWKoeS+p+Wkp+mHj+eUqCAhdmFsdWUg5Yik5pat77yMXG4gICAqIOiLpeinhOiMg+aIkCBbXSDkvJrlm6AgdHJ1dGh5IOi1sOi/myBtb21lbnQodmFsdWVbMF0p77yM6KKr6Kej5p6Q5oiQ44CM5LuK5aSp44CN44CCXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUZpbHRlckNvbnRyb2xWYWx1ZShmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5NdWx0aXBsZVNlbGVjdCAmJiB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlUmFuZ2UgJiZcbiAgICAgICh2YWx1ZSA9PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2aXZlRmlsdGVyVmFsdWUoZmlsdGVyOiBGaWx0ZXIsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVGaWx0ZXJDb250cm9sVmFsdWUoZmlsdGVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZVJhbmdlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB0aGlzLnBhcnNlRGF0ZUxpa2UodikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLkRhdGUgfHwgZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLk1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGVMaWtlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGVMaWtlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyB2YWx1ZSA6IGQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IHZhbHVlIDogZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBsYWluKG9iajogYW55KTogYW55IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqID09IG51bGwgPyB7fSA6IG9iaikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dTdWNjZXNzKG1zZzogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZS5wcm90b3R5cGUuc3VjY2Vzcyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Vycm9yKG1zZzogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZS5wcm90b3R5cGUuZXJyb3IobXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICB9XG4gIH1cblxuICBnZXRDYXNjYWRlclNob3dTZWFyY2ggPSBnZXRDYXNjYWRlclNob3dTZWFyY2g7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSA9IGdldENhc2NhZGVyTWVudUNsYXNzTmFtZTtcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUgPSBnZXRDYXNjYWRlck1lbnVTdHlsZTtcbn1cbiJdfQ==
|