react-magma-dom 5.1.0 → 5.1.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +12 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/react-magma-dom.cjs.development.js +12 -12
- package/dist/react-magma-dom.cjs.development.js.map +1 -1
- package/dist/react-magma-dom.cjs.production.min.js +1 -1
- package/dist/react-magma-dom.cjs.production.min.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -26843,7 +26843,7 @@ var StyledTreeItem = /*#__PURE__*/_styled("li", {
|
|
|
26843
26843
|
}, ";padding-right:", function (props) {
|
|
26844
26844
|
return props.theme.spaceScale.spacing02;
|
|
26845
26845
|
}, ";", function (props) {
|
|
26846
|
-
return props.selected && /*#__PURE__*/css("&:before{position:absolute;background-color:", props.isInverse ? props.theme.colors.tertiary500 : props.theme.colors.primary500, ";block-size:100%;content:'';inline-size:", props.theme.spaceScale.spacing02, ";inset-block-start:0;inset-inline-start:0;};label:StyledTreeItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRVEiLCJmaWxlIjoiVHJlZUl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEFydGljbGVJY29uLCBDaGV2cm9uUmlnaHRJY29uLCBFeHBhbmRNb3JlSWNvbiwgRm9sZGVySWNvbiwgfSBmcm9tICdyZWFjdC1tYWdtYS1pY29ucyc7XHJcbmltcG9ydCB7IFRyZWVJdGVtQ29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0IH0gZnJvbSAnLi9UcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0NvbmZpZ0NvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3Q29uZmlnQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld1NlbGVjdGlvbkNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld1NlbGVjdGFibGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgY2hlY2tlZFN0YXR1c1RvQm9vbGVhbiwgdXNlVHJlZUl0ZW0sIH0gZnJvbSAnLi91c2VUcmVlSXRlbSc7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZU9mZnNldCwgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yLCBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IsIFRyZWVOb2RlVHlwZSwgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi8uLic7XHJcbmltcG9ydCB1c2VEZXZpY2VEZXRlY3QgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGV2aWNlRGV0ZWN0JztcclxuaW1wb3J0IHsgdXNlRm9jdXNMb2NrIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRm9jdXNMb2NrJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IG1lcmdlUmVmcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQW5ub3VuY2UgfSBmcm9tICcuLi9Bbm5vdW5jZSc7XHJcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnLi4vQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBJbmRldGVybWluYXRlQ2hlY2tib3gsIEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cywgfSBmcm9tICcuLi9JbmRldGVybWluYXRlQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAnLi4vVHJhbnNpdGlvbic7XHJcbmltcG9ydCB7IFZpc3VhbGx5SGlkZGVuIH0gZnJvbSAnLi4vVmlzdWFsbHlIaWRkZW4nO1xyXG5jb25zdCBTdHlsZWRUcmVlSXRlbSA9IHN0eWxlZC5saSBgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgY3Vyc29yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtV3JhcHBlckN1cnNvcihwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy5zZWxlY3RhYmxlVHlwZSwgcHJvcHMubm9kZVR5cGUpfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIGZhbHNlLCBmYWxzZSwgcHJvcHMuaXNWaXJ0dWFsaXplZCl9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGRpdjpmaXJzdC1vZi10eXBlIHtcbiAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmIHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKVxyXG4gICAgOiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgICAgIHRyYW5zcGFyZW50aXplKDAuOTIsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKX07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6ICR7cHJvcHMgPT4gY2FsY3VsYXRlT2Zmc2V0KHByb3BzLm5vZGVUeXBlLCBwcm9wcy5kZXB0aCwgdHJ1ZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIHRydWUsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG5cbiAgICAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmXHJcbiAgICBjc3MgYFxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMuaXNJbnZlcnNlXHJcbiAgICAgICAgPyBwcm9wcy50aGVtZS5jb2xvcnMudGVydGlhcnk1MDBcclxuICAgICAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwfTtcbiAgICAgICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGlubGluZS1zaXplOiAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAyfTtcbiAgICAgICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IGdldEhvdmVyQmFja2dyb3VuZCh7XHJcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxyXG4gICAgaG92ZXJDb2xvcjogcHJvcHMuaG92ZXJDb2xvcixcclxuICAgIGlzSW52ZXJzZTogcHJvcHMuaXNJbnZlcnNlLFxyXG4gICAgdGhlbWU6IHByb3BzLnRoZW1lLFxyXG59KX07XG4gICAgfVxuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRIb3ZlckJhY2tncm91bmQoeyBpc0Rpc2FibGVkLCBob3ZlckNvbG9yLCBpc0ludmVyc2UsIHRoZW1lIH0pIHtcclxuICAgIGlmIChpc0Rpc2FibGVkKVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoaG92ZXJDb2xvcilcclxuICAgICAgICByZXR1cm4gaG92ZXJDb2xvcjtcclxuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IGlzSW52ZXJzZSA/IDAuOCA6IDAuOTU7XHJcbiAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUodHJhbnNwYXJlbmN5LCB0aGVtZS5jb2xvcnMubmV1dHJhbDkwMCk7XHJcbn1cclxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGNvbG9yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIG1hcmdpbi1sZWZ0OiAwO1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaWNvblNpemVzLm1lZGl1bX1weDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRMYWJlbFdyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICB3aWR0aDogMTAwJTtcbmA7XHJcbmNvbnN0IFN0eWxlZEV4cGFuZFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5jb2xvciB8fFxyXG4gICAgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgd2lkdGg6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG4gIGhlaWdodDogJHsoeyBzaXplLCB0aGVtZSB9KSA9PiBzaXplICE9PSB1bmRlZmluZWQgPyBgJHtzaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fTtcbmA7XHJcbmNvbnN0IEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwOH07XG4gIGJvdHRvbTogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IHByb3BzLmd1aWRlTGluZUxlZnR9O1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFZpcnR1YWxpemVkR3VpZGVMaW5lID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAwO1xuICBib3JkZXItaW5saW5lLXN0YXJ0OiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcclxuY29uc3QgU3R5bGVkQ2hlY2tib3hXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2ZsZXgnIDogJ2lubGluZS1mbGV4Jyl9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogJHtwcm9wcyA9PiBgY2FsYygxMDAlIC0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30pYH07XG5gO1xyXG5jb25zdCBTdHlsZWRJdGVtV3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtwcm9wcyA9PiAocHJvcHMuaGFzQWRkaXRpb25hbENvbnRlbnQgPyAnY29sdW1uJyA6ICdyb3cnKX07XG4gIGFsaWduLWl0ZW1zOiAke3Byb3BzID0+IChwcm9wcy5oYXNDdXN0b21JY29uU2l6ZSA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnKX07XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZSwgcHJvcHMubm9kZVR5cGUpfTtcbmA7XHJcbmNvbnN0IEFkZGl0aW9uYWxDb250ZW50V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA1fTtcbmA7XHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbUNvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcclxuICAgIGNvbnN0IHsgYWRkaXRpb25hbENvbnRlbnQsIGNoaWxkcmVuLCBob3ZlckNvbG9yLCBpY29uLCBpbmRleDogaW5kZXhQcm9wLCBsYWJlbCwgbGFiZWxTdHlsZSwgc3R5bGUsIHRlc3RJZCwgdG9wTGV2ZWw6IHRvcExldmVsUHJvcCwgdHJlZUl0ZW1TdHlsZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoKTtcclxuICAgIC8vIFJlYWQgaGllcmFyY2h5IGluZm9ybWF0aW9uIGZyb20gY29udGV4dCAocmVkdWNlcyBjbG9uZUVsZW1lbnQgb3ZlcmhlYWQpXHJcbiAgICBjb25zdCBoaWVyYXJjaHlDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQpO1xyXG4gICAgLy8gVXNlIGNvbnRleHQgdmFsdWVzIGlmIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgY29uc3QgaW5kZXggPSBpbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IGluZGV4UHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaW5kZXg7XHJcbiAgICBjb25zdCB0b3BMZXZlbCA9IHRvcExldmVsUHJvcCAhPT0gdW5kZWZpbmVkID8gdG9wTGV2ZWxQcm9wIDogaGllcmFyY2h5Q29udGV4dC5pc1RvcExldmVsO1xyXG4gICAgLy8gQ29uc3VtZSBzcGxpdCBjb250ZXh0cyBmb3IgcmVkdWNlZCByZS1yZW5kZXIgc2NvcGVcclxuICAgIGNvbnN0IHsgaXRlbVRvRm9jdXMgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgaGFuZGxlRXhwYW5kZWRDaGFuZ2UgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgZXhwYW5kSWNvblN0eWxlcywgaGFzR3VpZGVMaW5lcywgaGFzSWNvbnMsIGlzVG9wTGV2ZWxTZWxlY3RhYmxlLCBzZWxlY3RhYmxlLCBzZWxlY3RQYXJlbnRzID0gdHJ1ZSwgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdDb25maWdDb250ZXh0KTtcclxuICAgIC8vIFBhc3MgdGhlIHJlc29sdmVkIHZhbHVlcyB0byB1c2VUcmVlSXRlbVxyXG4gICAgY29uc3QgcHJvcHNXaXRoSGllcmFyY2h5ID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIGluZGV4LFxyXG4gICAgICAgIHRvcExldmVsLFxyXG4gICAgICAgIGl0ZW1EZXB0aDogaGllcmFyY2h5Q29udGV4dC5kZXB0aCxcclxuICAgICAgICBwYXJlbnREZXB0aDogaGllcmFyY2h5Q29udGV4dC5wYXJlbnREZXB0aCxcclxuICAgIH07XHJcbiAgICBjb25zdCB7IGNvbnRleHRWYWx1ZSwgaGFuZGxlQ2xpY2ssIGhhbmRsZUtleURvd24gfSA9IHVzZVRyZWVJdGVtKHByb3BzV2l0aEhpZXJhcmNoeSwgZm9yd2FyZGVkUmVmKTtcclxuICAgIGNvbnN0IHsgaXNEaXNhYmxlZCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3QgeyBpc01hY09TIH0gPSB1c2VEZXZpY2VEZXRlY3QoKTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLCBjaGVja2VkU3RhdHVzLCBleHBhbmRlZCwgaGFzT3duVHJlZUl0ZW1zLCBpdGVtRGVwdGgsIGl0ZW1JZCwgcmVmLCBzZWxlY3RlZEl0ZW1zLCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBoYXNPd25UcmVlSXRlbXMgPyBUcmVlTm9kZVR5cGUuYnJhbmNoIDogVHJlZU5vZGVUeXBlLmxlYWY7XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlXHJcbiAgICAgICAgPyBzZWxlY3RlZEl0ZW1zPy5bMF0/Lml0ZW1JZCA9PT0gaXRlbUlkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgYXJpYUNoZWNrZWRWYWx1ZSA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aVxyXG4gICAgICAgID8gY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmluZGV0ZXJtaW5hdGVcclxuICAgICAgICAgICAgPyAnbWl4ZWQnXHJcbiAgICAgICAgICAgIDogY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmNoZWNrZWRcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBbaXNJbnNpZGVUcmVlSXRlbSwgc2V0SXNJbnNpZGVUcmVlSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCB0cmVlSXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGZvY3VzVHJhcEVsZW1lbnQgPSB1c2VGb2N1c0xvY2soaXNJbnNpZGVUcmVlSXRlbSk7XHJcbiAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzID0gJ2J1dHRvbiwgW3JvbGU9XCJidXR0b25cIl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xyXG4gICAgY29uc3QgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyA9IFJlYWN0LnVzZUNhbGxiYWNrKChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZWwgPT4gIWVsLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fFxyXG4gICAgICAgICAgICAoZWwudGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiBlbC50YWJJbmRleCA+PSAwKSk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgbGFiZWwgYW5kIGFkZGl0aW9uYWwgY29udGVudCBvZiBhIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG5hdmlnYXRlIHRocm91Z2ggaW50ZXJhY3RpdmUgZWxlbWVudHMgdXNpbmcgdGhlIGBUYWJgIGtleSwgYWN0aXZhdGUgdGhlbSB3aXRoIGBFbnRlcmAgb3IgYFNwYWNlYCxcclxuICAgICAqIGFuZCBleGl0IG91dHNpZGUgYW5kIGZvY3VzIHRoZSB3aG9sZSB0cmVlIGl0ZW0gd2l0aCBgRXNjYXBlYC5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3QgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc1NwYWNlID0ga2V5ID09PSAnICc7XHJcbiAgICAgICAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09ICdFc2NhcGUnO1xyXG4gICAgICAgIGNvbnN0IGlzVGFiID0ga2V5ID09PSAnVGFiJztcclxuICAgICAgICBjb25zdCBpc0FjdGl2YXRpb25LZXkgPSBpc0VudGVyIHx8IGlzU3BhY2U7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGBUYWJgLCB3ZSBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzVGFiICYmIGlzSW5zaWRlVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgbGlzdCBvZiBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3aGljaCBhcmUgb25seSBpbmNsdWRlZCBmb3IgY3VycmVudCB0cmVlIGl0ZW1cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0LmZpbHRlcihlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0VHJlZUl0ZW0gPSBlbC5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFRyZWVJdGVtID09PSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2hpZnRLZXkgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyBkaXJlY3Rpb24gKyB0b3RhbCkgJSB0b3RhbDtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBjdXJyZW50VHJlZUl0ZW1JbnRlcmFjdGl2ZUVsZW1lbnRzW25leHRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50VG9Gb2N1cy5mb2N1cygpLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByZXNzaW5nIGBFbnRlcmAgb3IgYFNwYWNlYCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpbGwgdHJpZ2dlciBpdHMgY2xpY2sgZXZlbnRcclxuICAgICAgICBpZiAoaXNBY3RpdmF0aW9uS2V5ICYmIGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTW92ZXMgZm9jdXMgb3V0c2lkZSB0aGUgdHJlZSBpdGVtIGFuZCBmb2N1c2VzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmIHdoZW4gYEVzY2FwZWAgaXMgcHJlc3NlZFxyXG4gICAgICAgIGlmIChpc0VzY2FwZSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZSA9IHRyZWVJdGVtUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRyZWVJdGVtTm9kZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNJbnNpZGVUcmVlSXRlbV0pO1xyXG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IG5vZGVUeXBlID09PSBUcmVlTm9kZVR5cGUuYnJhbmNoID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9sZGVySWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXJ0aWNsZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSwgW25vZGVUeXBlXSk7XHJcbiAgICAvLyBNZW1vaXNlIHRoZSBsYWJlbCBKU1ggc28gdGhlIGBjaGVja2JveFByb3BzYCBtZW1vIGJlbG93IGFjdHVhbGx5IGhhc1xyXG4gICAgLy8gYSBzdGFibGUgYGxhYmVsVGV4dGAgcmVmZXJlbmNlIGJldHdlZW4gcmVuZGVycy4gUHJldmlvdXNseSB0aGlzXHJcbiAgICAvLyBlbGVtZW50IHdhcyByZS1jcmVhdGVkIG9uIGV2ZXJ5IHJlbmRlciwgd2hpY2ggZm9yY2VkXHJcbiAgICAvLyBgY2hlY2tib3hQcm9wc2AgdG8gYWxzbyBiZSByZS1jcmVhdGVkIGFuZCBhbnkgZnV0dXJlIFJlYWN0Lm1lbW8gb25cclxuICAgIC8vIENoZWNrYm94L0luZGV0ZXJtaW5hdGVDaGVja2JveCB3b3VsZCBhbHdheXMgYmFpbCBvdXQuXHJcbiAgICBjb25zdCBsYWJlbFRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsV3JhcHBlciwgeyB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZTogbGFiZWxTdHlsZSwgaWQ6IGAke2l0ZW1JZH0tbGFiZWxgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWxhYmVsYCB9LFxyXG4gICAgICAgIGhhc0ljb25zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEljb25XcmFwcGVyLCB7IGlzSW52ZXJzZTogaXNJbnZlcnNlLCB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0taWNvbmAgfSwgaWNvbiB8fCBkZWZhdWx0SWNvbikpLFxyXG4gICAgICAgIGxhYmVsKSksIFtcclxuICAgICAgICB0aGVtZSxcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICBsYWJlbFN0eWxlLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICB0ZXN0SWQsXHJcbiAgICAgICAgaGFzSWNvbnMsXHJcbiAgICAgICAgaWNvbixcclxuICAgICAgICBkZWZhdWx0SWNvbixcclxuICAgICAgICBsYWJlbCxcclxuICAgIF0pO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gYWRkaXRpb25hbENvbnRlbnQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpZDogYCR7aXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmAgfSwgYWRkaXRpb25hbENvbnRlbnQpKSA6IG51bGwsIFthZGRpdGlvbmFsQ29udGVudCwgdGhlbWUsIGl0ZW1JZCwgdGVzdElkXSk7XHJcbiAgICAvLyBTdGFibGUgcGVyLWNoaWxkIGhpZXJhcmNoeSB2YWx1ZXMuIFRoZSByZWZlcmVuY2UgbXVzdCBub3QgY2hhbmdlIG9uXHJcbiAgICAvLyByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBUcmVlVmlld1NlbGVjdGlvbkNvbnRleHQsIG90aGVyd2lzZSBldmVyeVxyXG4gICAgLy8gbmVzdGVkIFRyZWVJdGVtIHJlLXJlbmRlcnMgdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgUmVhY3QubWVtbyBpc1xyXG4gICAgLy8gZGVmZWF0ZWQuXHJcbiAgICBjb25zdCBjaGlsZEhpZXJhcmNoaWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XHJcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KGNvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgYXJyW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgZGVwdGg6IGl0ZW1EZXB0aCArIDEsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnREZXB0aDogaXRlbURlcHRoLFxyXG4gICAgICAgICAgICAgICAgaXNUb3BMZXZlbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0sIFtjaGlsZHJlbiwgaXRlbURlcHRoXSk7XHJcbiAgICAvLyBNZW1vaXplIGlubGluZSBzdHlsZSBvYmplY3RzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xyXG4gICAgY29uc3QgY2hlY2tib3hJbnB1dFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDMgfSksIFt0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM10pO1xyXG4gICAgY29uc3QgY2hlY2tib3hMYWJlbFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xyXG4gICAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pLCBbXSk7XHJcbiAgICAvLyBQcm9wcyBzaGFyZWQgYnkgQ2hlY2tib3ggYW5kIEluZGV0ZXJtaW5hdGVDaGVja2JveFxyXG4gICAgY29uc3QgY2hlY2tib3hQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcclxuICAgICAgICBoaWRlRm9jdXM6IHRydWUsXHJcbiAgICAgICAgaWQ6IGAke2l0ZW1JZH0tY2hlY2tib3hgLFxyXG4gICAgICAgIGlucHV0U3R5bGU6IGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBsYWJlbFN0eWxlOiBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0OiBsYWJlbFRleHQsXHJcbiAgICAgICAgb25DaGFuZ2U6IGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgICAgICB0YWJJbmRleDogLTEsXHJcbiAgICAgICAgdGVzdElkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgIH0pLCBbXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgY2hlY2tib3hJbnB1dFN0eWxlLFxyXG4gICAgICAgIGNoZWNrYm94TGFiZWxTdHlsZSxcclxuICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBvbkV4cGFuZGVkQ2xpY2tlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaGFuZGxlRXhwYW5kZWRDaGFuZ2UoZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICB9LCBbaGFuZGxlRXhwYW5kZWRDaGFuZ2UsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRXhwYW5kQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgb25FeHBhbmRlZENsaWNrZWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZU9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5jbG9zZXN0KCdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBhW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3JvbGU9XCJtZW51aXRlbVwiXScpO1xyXG4gICAgICAgIC8vIFByZXZlbnRpbmcgc2VsZWN0aW5nIHRoZSBpdGVtIHdoZW4gY2xpY2tpbmcgb24gaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hlbiBgc2VsZWN0YWJsZWAgaXMgYHNpbmdsZWBcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHNlbGVjdFBhcmVudHMgaXMgZmFsc2UgYW5kIHRoaXMgaXMgYSBwYXJlbnQgaXRlbSwgaGFuZGxlIGV4cGFuZC9jb2xsYXBzZSBpbnN0ZWFkIG9mIHNlbGVjdGlvblxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlICYmXHJcbiAgICAgICAgICAgICFzZWxlY3RQYXJlbnRzICYmXHJcbiAgICAgICAgICAgIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gc2VsZWN0YWJsZT1vZmYgbW9kZSwgY2xpY2tpbmcgYW55d2hlcmUgb24gYSBwYXJlbnQgaXRlbSB0b2dnbGVzIGV4cGFuZC9jb2xsYXBzZVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUub2ZmICYmIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5zaW5nbGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ2xpY2soZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHRhYkluZGV4ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1Ub0ZvY3VzID09PSBpdGVtSWQgPyAwIDogLTE7XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgaXRlbVRvRm9jdXMsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd0NoZWNrYm94ID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm11bHRpICYmXHJcbiAgICAgICAgKGlzVG9wTGV2ZWxTZWxlY3RhYmxlICE9PSBmYWxzZSB8fCAhdG9wTGV2ZWwpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBQcmVzc2luZyBgQ3RybCArIEVudGVyYCBvciBgQ29tbWFuZCArIEVudGVyYCBmb2N1c2VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpdGhpbiB0aGUgdHJlZSBpdGVtXHJcbiAgICAgKiBhbmQgbG9ja3MgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIGZvY3VzIGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBpdCBoYW5kbGVzIGtleSBldmVudHMgZm9yIGludGVyYWN0aW9uIGVsZW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEl0IGFsc28gaGFuZGxlcyB0aGUgb3RoZXIga2V5cyB0byB0cmlnZ2VyIHRoZSBjbGljayBldmVudCBvbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICogKiovXHJcbiAgICBjb25zdCBvbktleURvd25IYW5kbGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc0N0cmxPckNvbW1hbmQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsRW50ZXIgPSBpc0N0cmxPckNvbW1hbmQgJiYgaXNFbnRlcjtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIEN0cmwgKyBFbnRlciBvciBDb21tYW5kICsgRW50ZXIsIGZvY3VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50XHJcbiAgICAgICAgLy8gYW5kIGxvY2sgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAoaXNDdHJsRW50ZXIgJiYgdGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0odHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdFswXTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgdmFsaWQgQ1NTIHNlbGVjdG9ycyBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIHBlcmlvZHMgaW4gaXRlbUlkKVxyXG4gICAgICAgIGNvbnN0IHNhZmVJdGVtSWQgPSBDU1MuZXNjYXBlKGl0ZW1JZCk7XHJcbiAgICAgICAgY29uc3QgaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQgPSB0YXJnZXQuY2xvc2VzdChgIyR7c2FmZUl0ZW1JZH0tbGFiZWwsICMke3NhZmVJdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmApO1xyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGhhbmRsZSBrZXkgZXZlbnRzIGZvciB0aG9zZSBhcmVhc1xyXG4gICAgICAgIGlmIChpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiwgaGFuZGxlIGtleSBkb3duIGZvciB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBoYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duLFxyXG4gICAgICAgIGhhbmRsZUtleURvd24sXHJcbiAgICBdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHRWYWx1ZSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBzdHlsZTogdHJlZUl0ZW1TdHlsZXMgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRUcmVlSXRlbSwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBcImFyaWEtZXhwYW5kZWRcIjogaGFzT3duVHJlZUl0ZW1zID8gZXhwYW5kZWQgOiBudWxsLCBcImFyaWEtc2VsZWN0ZWRcIjogc2VsZWN0ZWRJdGVtLCBcImFyaWEtY2hlY2tlZFwiOiBzaG91bGRTaG93Q2hlY2tib3ggPyBhcmlhQ2hlY2tlZFZhbHVlIDogbnVsbCwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc093blRyZWVJdGVtczogaGFzT3duVHJlZUl0ZW1zLCBpZDogaXRlbUlkLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgaXNWaXJ0dWFsaXplZDogaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkLCBub2RlVHlwZTogbm9kZVR5cGUsIHJvbGU6IFwidHJlZWl0ZW1cIiwgc2VsZWN0YWJsZVR5cGU6IHNlbGVjdGFibGUsIHNlbGVjdGVkOiBzZWxlY3RlZEl0ZW0sIHRoZW1lOiB0aGVtZSwgdGFiSW5kZXg6IHRhYkluZGV4LCBvbktleURvd246IG9uS2V5RG93bkhhbmRsZXIsIHJlZjogdHJlZUl0ZW1SZWYsIGhvdmVyQ29sb3I6IGhvdmVyQ29sb3IgfSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEl0ZW1XcmFwcGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkID8/IGl0ZW1JZH0taXRlbXdyYXBwZXJgLCBkZXB0aDogaXRlbURlcHRoLCBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgaGFzQ3VzdG9tSWNvblNpemU6ICEhZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgaWQ6IGAke2l0ZW1JZH0taXRlbXdyYXBwZXJgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgbm9kZVR5cGU6IG5vZGVUeXBlLCBzZWxlY3RhYmxlOiBzZWxlY3RhYmxlLCBzdHlsZTogc3R5bGUsIHRoZW1lOiB0aGVtZSwgcmVmOiBtZXJnZVJlZnMocmVmLCBmb2N1c1RyYXBFbGVtZW50KSwgb25DbGljazogaGFuZGxlT25DbGljayB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRFeHBhbmRXcmFwcGVyLCB7IHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUsIGNvbG9yOiBleHBhbmRJY29uU3R5bGVzPy5jb2xvciwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1leHBhbmRgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgb25DbGljazogaGFuZGxlRXhwYW5kQ2xpY2ssIHRoZW1lOiB0aGVtZSB9LCBleHBhbmRlZCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEV4cGFuZE1vcmVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRTaG93Q2hlY2tib3ggPyAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRDaGVja2JveFdyYXBwZXIsIHsgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lOiB0aGVtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChJbmRldGVybWluYXRlQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgc3RhdHVzOiBjaGVja2VkU3RhdHVzIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBjaGVja2VkOiBjaGVja2VkU3RhdHVzVG9Cb29sZWFuKGNoZWNrZWRTdGF0dXMpIH0pKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSksXHJcbiAgICAgICAgICAgICAgICBoYXNHdWlkZUxpbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW1EZXB0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IGl0ZW1EZXB0aCB9LCAoXywgZCkgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlydHVhbGl6ZWRHdWlkZUxpbmUsIHsga2V5OiBgZ3VpZGVsaW5lLSR7ZH1gLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LXZpcnR1YWxpemVkLWd1aWRlbGluZS0ke2R9YCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXRJbmxpbmVTdGFydDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgZCwgZmFsc2UsIGZhbHNlLCB0cnVlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXNPd25UcmVlSXRlbXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEd1aWRlTGluZSwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWd1aWRlbGluZWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGd1aWRlTGluZUxlZnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGl0ZW1EZXB0aCwgZmFsc2UsIGZhbHNlLCBmYWxzZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KSBgIH0pKSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgY2hpbGRJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZD8udHlwZSAhPT0gVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHN0YWJsZSwgcHJlLW1lbW9pc2VkIHZhbHVlIChzZWUgY2hpbGRIaWVyYXJjaGllcyBhYm92ZSkuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkSGllcmFyY2h5VmFsdWUgPSBjaGlsZEhpZXJhcmNoaWVzW2NoaWxkSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCB7IGlzT3BlbjogZXhwYW5kZWQsIHVubW91bnRPbkV4aXQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgcm9sZTogXCJncm91cFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dC5Qcm92aWRlciwgeyBrZXk6IGNoaWxkLnByb3BzLml0ZW1JZCwgdmFsdWU6IG5lc3RlZEhpZXJhcmNoeVZhbHVlIH0sIGNoaWxkKSkpKTtcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgaXNNYWNPUyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXN1YWxseUhpZGRlbiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5ub3VuY2UsIG51bGwsIGV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPyBpMThuLmV4cGFuc2lvblN0YXRlLmV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgOiBpMThuLmV4cGFuc2lvblN0YXRlLmNvbGxhcHNlZCkpKSkpKTtcclxufSk7XHJcbi8qKlxyXG4gKiBDdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgUmVhY3QubWVtb1xyXG4gKiBPbmx5IHJlLXJlbmRlciBUcmVlSXRlbSB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZVxyXG4gKi9cclxuZnVuY3Rpb24gYXJlUHJvcHNFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xyXG4gICAgLy8gQ2hlY2sgaWYgaXRlbUlkIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXRlbUlkICE9PSBuZXh0UHJvcHMuaXRlbUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgbGFiZWwgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbCAhPT0gbmV4dFByb3BzLmxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pc0Rpc2FibGVkICE9PSBuZXh0UHJvcHMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGljb24gY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pY29uICE9PSBuZXh0UHJvcHMuaWNvbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGFkZGl0aW9uYWwgY29udGVudCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmFkZGl0aW9uYWxDb250ZW50ICE9PSBuZXh0UHJvcHMuYWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBob3ZlciBjb2xvciBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmhvdmVyQ29sb3IgIT09IG5leHRQcm9wcy5ob3ZlckNvbG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgY2hpbGRyZW4gY2hhbmdlZCAoZm9yIG5lc3RlZCB0cmVlIGl0ZW1zKVxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2UgY2hpbGRyZW4gY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5jaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgc3R5bGVzIGNoYW5nZWRcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIHN0eWxlIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuc3R5bGUgIT09IG5leHRQcm9wcy5zdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWxTdHlsZSAhPT0gbmV4dFByb3BzLmxhYmVsU3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLnRyZWVJdGVtU3R5bGVzICE9PSBuZXh0UHJvcHMudHJlZUl0ZW1TdHlsZXMpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBBbGwgcmVsZXZhbnQgcHJvcHMgYXJlIGVxdWFsLCBza2lwIHJlLXJlbmRlclxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIE1lbW9pemVkIFRyZWVJdGVtIGNvbXBvbmVudFxyXG4gKiBPbmx5IHJlLXJlbmRlcnMgd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2UsIGltcHJvdmluZyBwZXJmb3JtYW5jZSBmb3IgbGFyZ2UgdHJlZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbSA9IFJlYWN0Lm1lbW8oVHJlZUl0ZW1Db21wb25lbnQsIGFyZVByb3BzRXF1YWwpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1UcmVlSXRlbS5qcy5tYXAiXX0= */"));
|
|
26846
|
+
return props.selected && /*#__PURE__*/css("&:before{position:absolute;background-color:", props.isInverse ? props.theme.colors.tertiary500 : props.theme.colors.primary500, ";block-size:100%;content:'';inline-size:", props.theme.spaceScale.spacing02, ";inset-block-start:0;inset-inline-start:0;};label:StyledTreeItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRVEiLCJmaWxlIjoiVHJlZUl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEFydGljbGVJY29uLCBDaGV2cm9uUmlnaHRJY29uLCBFeHBhbmRNb3JlSWNvbiwgRm9sZGVySWNvbiwgfSBmcm9tICdyZWFjdC1tYWdtYS1pY29ucyc7XHJcbmltcG9ydCB7IFRyZWVJdGVtQ29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0IH0gZnJvbSAnLi9UcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0NvbmZpZ0NvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3Q29uZmlnQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld1NlbGVjdGlvbkNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld1NlbGVjdGFibGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgY2hlY2tlZFN0YXR1c1RvQm9vbGVhbiwgdXNlVHJlZUl0ZW0sIH0gZnJvbSAnLi91c2VUcmVlSXRlbSc7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZU9mZnNldCwgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yLCBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IsIFRyZWVOb2RlVHlwZSwgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi8uLic7XHJcbmltcG9ydCB1c2VEZXZpY2VEZXRlY3QgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGV2aWNlRGV0ZWN0JztcclxuaW1wb3J0IHsgdXNlRm9jdXNMb2NrIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRm9jdXNMb2NrJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IG1lcmdlUmVmcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQW5ub3VuY2UgfSBmcm9tICcuLi9Bbm5vdW5jZSc7XHJcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnLi4vQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBJbmRldGVybWluYXRlQ2hlY2tib3gsIEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cywgfSBmcm9tICcuLi9JbmRldGVybWluYXRlQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAnLi4vVHJhbnNpdGlvbic7XHJcbmltcG9ydCB7IFZpc3VhbGx5SGlkZGVuIH0gZnJvbSAnLi4vVmlzdWFsbHlIaWRkZW4nO1xyXG5jb25zdCBTdHlsZWRUcmVlSXRlbSA9IHN0eWxlZC5saSBgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgY3Vyc29yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtV3JhcHBlckN1cnNvcihwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy5zZWxlY3RhYmxlVHlwZSwgcHJvcHMubm9kZVR5cGUpfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIGZhbHNlLCBmYWxzZSwgcHJvcHMuaXNWaXJ0dWFsaXplZCl9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGRpdjpmaXJzdC1vZi10eXBlIHtcbiAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmIHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKVxyXG4gICAgOiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgICAgIHRyYW5zcGFyZW50aXplKDAuOTIsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKX07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6ICR7cHJvcHMgPT4gY2FsY3VsYXRlT2Zmc2V0KHByb3BzLm5vZGVUeXBlLCBwcm9wcy5kZXB0aCwgdHJ1ZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIHRydWUsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG5cbiAgICAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmXHJcbiAgICBjc3MgYFxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMuaXNJbnZlcnNlXHJcbiAgICAgICAgPyBwcm9wcy50aGVtZS5jb2xvcnMudGVydGlhcnk1MDBcclxuICAgICAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwfTtcbiAgICAgICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGlubGluZS1zaXplOiAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAyfTtcbiAgICAgICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IGdldEhvdmVyQmFja2dyb3VuZCh7XHJcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxyXG4gICAgaG92ZXJDb2xvcjogcHJvcHMuaG92ZXJDb2xvcixcclxuICAgIGlzSW52ZXJzZTogcHJvcHMuaXNJbnZlcnNlLFxyXG4gICAgdGhlbWU6IHByb3BzLnRoZW1lLFxyXG59KX07XG4gICAgfVxuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRIb3ZlckJhY2tncm91bmQoeyBpc0Rpc2FibGVkLCBob3ZlckNvbG9yLCBpc0ludmVyc2UsIHRoZW1lIH0pIHtcclxuICAgIGlmIChpc0Rpc2FibGVkKVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoaG92ZXJDb2xvcilcclxuICAgICAgICByZXR1cm4gaG92ZXJDb2xvcjtcclxuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IGlzSW52ZXJzZSA/IDAuOCA6IDAuOTU7XHJcbiAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUodHJhbnNwYXJlbmN5LCB0aGVtZS5jb2xvcnMubmV1dHJhbDkwMCk7XHJcbn1cclxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGNvbG9yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIG1hcmdpbi1sZWZ0OiAwO1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaWNvblNpemVzLm1lZGl1bX1weDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRMYWJlbFdyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICB3aWR0aDogMTAwJTtcbmA7XHJcbmNvbnN0IFN0eWxlZEV4cGFuZFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5jb2xvciB8fFxyXG4gICAgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgd2lkdGg6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG4gIGhlaWdodDogJHsoeyBzaXplLCB0aGVtZSB9KSA9PiBzaXplICE9PSB1bmRlZmluZWQgPyBgJHtzaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fTtcbmA7XHJcbmNvbnN0IEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwOH07XG4gIGJvdHRvbTogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IHByb3BzLmd1aWRlTGluZUxlZnR9O1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFZpcnR1YWxpemVkR3VpZGVMaW5lID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAwO1xuICBib3JkZXItaW5saW5lLXN0YXJ0OiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcclxuY29uc3QgU3R5bGVkQ2hlY2tib3hXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2ZsZXgnIDogJ2lubGluZS1mbGV4Jyl9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogJHtwcm9wcyA9PiBgY2FsYygxMDAlIC0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30pYH07XG5gO1xyXG5jb25zdCBTdHlsZWRJdGVtV3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtwcm9wcyA9PiAocHJvcHMuaGFzQWRkaXRpb25hbENvbnRlbnQgPyAnY29sdW1uJyA6ICdyb3cnKX07XG4gIGFsaWduLWl0ZW1zOiAke3Byb3BzID0+IChwcm9wcy5oYXNDdXN0b21JY29uU2l6ZSA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnKX07XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZSwgcHJvcHMubm9kZVR5cGUpfTtcbmA7XHJcbmNvbnN0IEFkZGl0aW9uYWxDb250ZW50V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA1fTtcbmA7XHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbUNvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcclxuICAgIGNvbnN0IHsgYWRkaXRpb25hbENvbnRlbnQsIGNoaWxkcmVuLCBob3ZlckNvbG9yLCBpY29uLCBpbmRleDogaW5kZXhQcm9wLCBsYWJlbCwgbGFiZWxTdHlsZSwgc3R5bGUsIHRlc3RJZCwgdG9wTGV2ZWw6IHRvcExldmVsUHJvcCwgdHJlZUl0ZW1TdHlsZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoKTtcclxuICAgIC8vIFJlYWQgaGllcmFyY2h5IGluZm9ybWF0aW9uIGZyb20gY29udGV4dCAocmVkdWNlcyBjbG9uZUVsZW1lbnQgb3ZlcmhlYWQpXHJcbiAgICBjb25zdCBoaWVyYXJjaHlDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQpO1xyXG4gICAgLy8gVXNlIGNvbnRleHQgdmFsdWVzIGlmIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgY29uc3QgaW5kZXggPSBpbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IGluZGV4UHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaW5kZXg7XHJcbiAgICBjb25zdCB0b3BMZXZlbCA9IHRvcExldmVsUHJvcCAhPT0gdW5kZWZpbmVkID8gdG9wTGV2ZWxQcm9wIDogaGllcmFyY2h5Q29udGV4dC5pc1RvcExldmVsO1xyXG4gICAgLy8gQ29uc3VtZSBzcGxpdCBjb250ZXh0cyBmb3IgcmVkdWNlZCByZS1yZW5kZXIgc2NvcGVcclxuICAgIGNvbnN0IHsgaXRlbVRvRm9jdXMgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgaGFuZGxlRXhwYW5kZWRDaGFuZ2UgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgZXhwYW5kSWNvblN0eWxlcywgaGFzR3VpZGVMaW5lcywgaGFzSWNvbnMsIGlzVG9wTGV2ZWxTZWxlY3RhYmxlLCBzZWxlY3RhYmxlLCBzZWxlY3RQYXJlbnRzID0gdHJ1ZSwgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdDb25maWdDb250ZXh0KTtcclxuICAgIC8vIFBhc3MgdGhlIHJlc29sdmVkIHZhbHVlcyB0byB1c2VUcmVlSXRlbVxyXG4gICAgY29uc3QgcHJvcHNXaXRoSGllcmFyY2h5ID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIGluZGV4LFxyXG4gICAgICAgIHRvcExldmVsLFxyXG4gICAgICAgIGl0ZW1EZXB0aDogaGllcmFyY2h5Q29udGV4dC5kZXB0aCxcclxuICAgICAgICBwYXJlbnREZXB0aDogaGllcmFyY2h5Q29udGV4dC5wYXJlbnREZXB0aCxcclxuICAgIH07XHJcbiAgICBjb25zdCB7IGNvbnRleHRWYWx1ZSwgaGFuZGxlQ2xpY2ssIGhhbmRsZUtleURvd24gfSA9IHVzZVRyZWVJdGVtKHByb3BzV2l0aEhpZXJhcmNoeSwgZm9yd2FyZGVkUmVmKTtcclxuICAgIGNvbnN0IHsgaXNEaXNhYmxlZCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3QgeyBpc01hY09TIH0gPSB1c2VEZXZpY2VEZXRlY3QoKTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLCBjaGVja2VkU3RhdHVzLCBleHBhbmRlZCwgaGFzT3duVHJlZUl0ZW1zLCBpdGVtRGVwdGgsIGl0ZW1JZCwgcmVmLCBzZWxlY3RlZEl0ZW1zLCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBoYXNPd25UcmVlSXRlbXMgPyBUcmVlTm9kZVR5cGUuYnJhbmNoIDogVHJlZU5vZGVUeXBlLmxlYWY7XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlXHJcbiAgICAgICAgPyBzZWxlY3RlZEl0ZW1zPy5bMF0/Lml0ZW1JZCA9PT0gaXRlbUlkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgYXJpYUNoZWNrZWRWYWx1ZSA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aVxyXG4gICAgICAgID8gY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmluZGV0ZXJtaW5hdGVcclxuICAgICAgICAgICAgPyAnbWl4ZWQnXHJcbiAgICAgICAgICAgIDogY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmNoZWNrZWRcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBbaXNJbnNpZGVUcmVlSXRlbSwgc2V0SXNJbnNpZGVUcmVlSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCB0cmVlSXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGZvY3VzVHJhcEVsZW1lbnQgPSB1c2VGb2N1c0xvY2soaXNJbnNpZGVUcmVlSXRlbSk7XHJcbiAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzID0gJ2J1dHRvbiwgW3JvbGU9XCJidXR0b25cIl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xyXG4gICAgY29uc3QgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyA9IFJlYWN0LnVzZUNhbGxiYWNrKChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZWwgPT4gIWVsLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fFxyXG4gICAgICAgICAgICAoZWwudGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiBlbC50YWJJbmRleCA+PSAwKSk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgbGFiZWwgYW5kIGFkZGl0aW9uYWwgY29udGVudCBvZiBhIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG5hdmlnYXRlIHRocm91Z2ggaW50ZXJhY3RpdmUgZWxlbWVudHMgdXNpbmcgdGhlIGBUYWJgIGtleSwgYWN0aXZhdGUgdGhlbSB3aXRoIGBFbnRlcmAgb3IgYFNwYWNlYCxcclxuICAgICAqIGFuZCBleGl0IG91dHNpZGUgYW5kIGZvY3VzIHRoZSB3aG9sZSB0cmVlIGl0ZW0gd2l0aCBgRXNjYXBlYC5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3QgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc1NwYWNlID0ga2V5ID09PSAnICc7XHJcbiAgICAgICAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09ICdFc2NhcGUnO1xyXG4gICAgICAgIGNvbnN0IGlzVGFiID0ga2V5ID09PSAnVGFiJztcclxuICAgICAgICBjb25zdCBpc0FjdGl2YXRpb25LZXkgPSBpc0VudGVyIHx8IGlzU3BhY2U7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGBUYWJgLCB3ZSBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzVGFiICYmIGlzSW5zaWRlVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgbGlzdCBvZiBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3aGljaCBhcmUgb25seSBpbmNsdWRlZCBmb3IgY3VycmVudCB0cmVlIGl0ZW1cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0LmZpbHRlcihlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0VHJlZUl0ZW0gPSBlbC5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFRyZWVJdGVtID09PSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2hpZnRLZXkgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyBkaXJlY3Rpb24gKyB0b3RhbCkgJSB0b3RhbDtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBjdXJyZW50VHJlZUl0ZW1JbnRlcmFjdGl2ZUVsZW1lbnRzW25leHRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50VG9Gb2N1cy5mb2N1cygpLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByZXNzaW5nIGBFbnRlcmAgb3IgYFNwYWNlYCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpbGwgdHJpZ2dlciBpdHMgY2xpY2sgZXZlbnRcclxuICAgICAgICBpZiAoaXNBY3RpdmF0aW9uS2V5ICYmIGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTW92ZXMgZm9jdXMgb3V0c2lkZSB0aGUgdHJlZSBpdGVtIGFuZCBmb2N1c2VzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmIHdoZW4gYEVzY2FwZWAgaXMgcHJlc3NlZFxyXG4gICAgICAgIGlmIChpc0VzY2FwZSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZSA9IHRyZWVJdGVtUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRyZWVJdGVtTm9kZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNJbnNpZGVUcmVlSXRlbV0pO1xyXG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IG5vZGVUeXBlID09PSBUcmVlTm9kZVR5cGUuYnJhbmNoID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9sZGVySWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXJ0aWNsZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSwgW25vZGVUeXBlXSk7XHJcbiAgICAvLyBNZW1vaXNlIHRoZSBsYWJlbCBKU1ggc28gdGhlIGBjaGVja2JveFByb3BzYCBtZW1vIGJlbG93IGFjdHVhbGx5IGhhc1xyXG4gICAgLy8gYSBzdGFibGUgYGxhYmVsVGV4dGAgcmVmZXJlbmNlIGJldHdlZW4gcmVuZGVycy4gUHJldmlvdXNseSB0aGlzXHJcbiAgICAvLyBlbGVtZW50IHdhcyByZS1jcmVhdGVkIG9uIGV2ZXJ5IHJlbmRlciwgd2hpY2ggZm9yY2VkXHJcbiAgICAvLyBgY2hlY2tib3hQcm9wc2AgdG8gYWxzbyBiZSByZS1jcmVhdGVkIGFuZCBhbnkgZnV0dXJlIFJlYWN0Lm1lbW8gb25cclxuICAgIC8vIENoZWNrYm94L0luZGV0ZXJtaW5hdGVDaGVja2JveCB3b3VsZCBhbHdheXMgYmFpbCBvdXQuXHJcbiAgICBjb25zdCBsYWJlbFRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsV3JhcHBlciwgeyB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZTogbGFiZWxTdHlsZSwgaWQ6IGAke2l0ZW1JZH0tbGFiZWxgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWxhYmVsYCB9LFxyXG4gICAgICAgIGhhc0ljb25zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEljb25XcmFwcGVyLCB7IGlzSW52ZXJzZTogaXNJbnZlcnNlLCB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0taWNvbmAgfSwgaWNvbiB8fCBkZWZhdWx0SWNvbikpLFxyXG4gICAgICAgIGxhYmVsKSksIFtcclxuICAgICAgICB0aGVtZSxcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICBsYWJlbFN0eWxlLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICB0ZXN0SWQsXHJcbiAgICAgICAgaGFzSWNvbnMsXHJcbiAgICAgICAgaWNvbixcclxuICAgICAgICBkZWZhdWx0SWNvbixcclxuICAgICAgICBsYWJlbCxcclxuICAgIF0pO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gYWRkaXRpb25hbENvbnRlbnQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpZDogYCR7aXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmAgfSwgYWRkaXRpb25hbENvbnRlbnQpKSA6IG51bGwsIFthZGRpdGlvbmFsQ29udGVudCwgdGhlbWUsIGl0ZW1JZCwgdGVzdElkXSk7XHJcbiAgICAvLyBTdGFibGUgcGVyLWNoaWxkIGhpZXJhcmNoeSB2YWx1ZXMuIFRoZSByZWZlcmVuY2UgbXVzdCBub3QgY2hhbmdlIG9uXHJcbiAgICAvLyByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBUcmVlVmlld1NlbGVjdGlvbkNvbnRleHQsIG90aGVyd2lzZSBldmVyeVxyXG4gICAgLy8gbmVzdGVkIFRyZWVJdGVtIHJlLXJlbmRlcnMgdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgUmVhY3QubWVtbyBpc1xyXG4gICAgLy8gZGVmZWF0ZWQuXHJcbiAgICBjb25zdCBjaGlsZEhpZXJhcmNoaWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XHJcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KGNvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgYXJyW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgZGVwdGg6IGl0ZW1EZXB0aCArIDEsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnREZXB0aDogaXRlbURlcHRoLFxyXG4gICAgICAgICAgICAgICAgaXNUb3BMZXZlbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0sIFtjaGlsZHJlbiwgaXRlbURlcHRoXSk7XHJcbiAgICAvLyBNZW1vaXplIGlubGluZSBzdHlsZSBvYmplY3RzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xyXG4gICAgY29uc3QgY2hlY2tib3hJbnB1dFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDMgfSksIFt0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM10pO1xyXG4gICAgY29uc3QgY2hlY2tib3hMYWJlbFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xyXG4gICAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pLCBbXSk7XHJcbiAgICAvLyBQcm9wcyBzaGFyZWQgYnkgQ2hlY2tib3ggYW5kIEluZGV0ZXJtaW5hdGVDaGVja2JveFxyXG4gICAgY29uc3QgY2hlY2tib3hQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcclxuICAgICAgICBoaWRlRm9jdXM6IHRydWUsXHJcbiAgICAgICAgaWQ6IGAke2l0ZW1JZH0tY2hlY2tib3hgLFxyXG4gICAgICAgIGlucHV0U3R5bGU6IGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBsYWJlbFN0eWxlOiBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0OiBsYWJlbFRleHQsXHJcbiAgICAgICAgb25DaGFuZ2U6IGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgICAgICB0YWJJbmRleDogLTEsXHJcbiAgICAgICAgdGVzdElkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgIH0pLCBbXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgY2hlY2tib3hJbnB1dFN0eWxlLFxyXG4gICAgICAgIGNoZWNrYm94TGFiZWxTdHlsZSxcclxuICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBvbkV4cGFuZGVkQ2xpY2tlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaGFuZGxlRXhwYW5kZWRDaGFuZ2UoZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICB9LCBbaGFuZGxlRXhwYW5kZWRDaGFuZ2UsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRXhwYW5kQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgb25FeHBhbmRlZENsaWNrZWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZU9uQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5jbG9zZXN0KCdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBhW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3JvbGU9XCJtZW51aXRlbVwiXScpO1xyXG4gICAgICAgIC8vIFByZXZlbnRpbmcgc2VsZWN0aW5nIHRoZSBpdGVtIHdoZW4gY2xpY2tpbmcgb24gaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hlbiBgc2VsZWN0YWJsZWAgaXMgYHNpbmdsZWBcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHNlbGVjdFBhcmVudHMgaXMgZmFsc2UgYW5kIHRoaXMgaXMgYSBwYXJlbnQgaXRlbSwgaGFuZGxlIGV4cGFuZC9jb2xsYXBzZSBpbnN0ZWFkIG9mIHNlbGVjdGlvblxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlICYmXHJcbiAgICAgICAgICAgICFzZWxlY3RQYXJlbnRzICYmXHJcbiAgICAgICAgICAgIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gc2VsZWN0YWJsZT1vZmYgbW9kZSwgY2xpY2tpbmcgYW55d2hlcmUgb24gYSBwYXJlbnQgaXRlbSB0b2dnbGVzIGV4cGFuZC9jb2xsYXBzZVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUub2ZmICYmIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5zaW5nbGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ2xpY2soZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICBoYW5kbGVDbGljayxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgb25FeHBhbmRlZENsaWNrZWQsXHJcbiAgICAgICAgaGFzT3duVHJlZUl0ZW1zLFxyXG4gICAgICAgIHNlbGVjdFBhcmVudHMsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRhYkluZGV4ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1Ub0ZvY3VzID09PSBpdGVtSWQgPyAwIDogLTE7XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgaXRlbVRvRm9jdXMsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd0NoZWNrYm94ID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm11bHRpICYmXHJcbiAgICAgICAgKGlzVG9wTGV2ZWxTZWxlY3RhYmxlICE9PSBmYWxzZSB8fCAhdG9wTGV2ZWwpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBQcmVzc2luZyBgQ3RybCArIEVudGVyYCBvciBgQ29tbWFuZCArIEVudGVyYCBmb2N1c2VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpdGhpbiB0aGUgdHJlZSBpdGVtXHJcbiAgICAgKiBhbmQgbG9ja3MgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIGZvY3VzIGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBpdCBoYW5kbGVzIGtleSBldmVudHMgZm9yIGludGVyYWN0aW9uIGVsZW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEl0IGFsc28gaGFuZGxlcyB0aGUgb3RoZXIga2V5cyB0byB0cmlnZ2VyIHRoZSBjbGljayBldmVudCBvbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICogKiovXHJcbiAgICBjb25zdCBvbktleURvd25IYW5kbGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc0N0cmxPckNvbW1hbmQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsRW50ZXIgPSBpc0N0cmxPckNvbW1hbmQgJiYgaXNFbnRlcjtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIEN0cmwgKyBFbnRlciBvciBDb21tYW5kICsgRW50ZXIsIGZvY3VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50XHJcbiAgICAgICAgLy8gYW5kIGxvY2sgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAoaXNDdHJsRW50ZXIgJiYgdGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0odHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdFswXTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgdmFsaWQgQ1NTIHNlbGVjdG9ycyBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIHBlcmlvZHMgaW4gaXRlbUlkKVxyXG4gICAgICAgIGNvbnN0IHNhZmVJdGVtSWQgPSBDU1MuZXNjYXBlKGl0ZW1JZCk7XHJcbiAgICAgICAgY29uc3QgaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQgPSB0YXJnZXQuY2xvc2VzdChgIyR7c2FmZUl0ZW1JZH0tbGFiZWwsICMke3NhZmVJdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmApO1xyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGhhbmRsZSBrZXkgZXZlbnRzIGZvciB0aG9zZSBhcmVhc1xyXG4gICAgICAgIGlmIChpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiwgaGFuZGxlIGtleSBkb3duIGZvciB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBoYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duLFxyXG4gICAgICAgIGhhbmRsZUtleURvd24sXHJcbiAgICBdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHRWYWx1ZSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBzdHlsZTogdHJlZUl0ZW1TdHlsZXMgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRUcmVlSXRlbSwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBcImFyaWEtZXhwYW5kZWRcIjogaGFzT3duVHJlZUl0ZW1zID8gZXhwYW5kZWQgOiBudWxsLCBcImFyaWEtc2VsZWN0ZWRcIjogc2VsZWN0ZWRJdGVtLCBcImFyaWEtY2hlY2tlZFwiOiBzaG91bGRTaG93Q2hlY2tib3ggPyBhcmlhQ2hlY2tlZFZhbHVlIDogbnVsbCwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc093blRyZWVJdGVtczogaGFzT3duVHJlZUl0ZW1zLCBpZDogaXRlbUlkLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgaXNWaXJ0dWFsaXplZDogaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkLCBub2RlVHlwZTogbm9kZVR5cGUsIHJvbGU6IFwidHJlZWl0ZW1cIiwgc2VsZWN0YWJsZVR5cGU6IHNlbGVjdGFibGUsIHNlbGVjdGVkOiBzZWxlY3RlZEl0ZW0sIHRoZW1lOiB0aGVtZSwgdGFiSW5kZXg6IHRhYkluZGV4LCBvbktleURvd246IG9uS2V5RG93bkhhbmRsZXIsIHJlZjogdHJlZUl0ZW1SZWYsIGhvdmVyQ29sb3I6IGhvdmVyQ29sb3IgfSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEl0ZW1XcmFwcGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkID8/IGl0ZW1JZH0taXRlbXdyYXBwZXJgLCBkZXB0aDogaXRlbURlcHRoLCBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgaGFzQ3VzdG9tSWNvblNpemU6ICEhZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgaWQ6IGAke2l0ZW1JZH0taXRlbXdyYXBwZXJgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgbm9kZVR5cGU6IG5vZGVUeXBlLCBzZWxlY3RhYmxlOiBzZWxlY3RhYmxlLCBzdHlsZTogc3R5bGUsIHRoZW1lOiB0aGVtZSwgcmVmOiBtZXJnZVJlZnMocmVmLCBmb2N1c1RyYXBFbGVtZW50KSwgb25DbGljazogaGFuZGxlT25DbGljayB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRFeHBhbmRXcmFwcGVyLCB7IHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUsIGNvbG9yOiBleHBhbmRJY29uU3R5bGVzPy5jb2xvciwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1leHBhbmRgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgb25DbGljazogaGFuZGxlRXhwYW5kQ2xpY2ssIHRoZW1lOiB0aGVtZSB9LCBleHBhbmRlZCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEV4cGFuZE1vcmVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRTaG93Q2hlY2tib3ggPyAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRDaGVja2JveFdyYXBwZXIsIHsgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lOiB0aGVtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChJbmRldGVybWluYXRlQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgc3RhdHVzOiBjaGVja2VkU3RhdHVzIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBjaGVja2VkOiBjaGVja2VkU3RhdHVzVG9Cb29sZWFuKGNoZWNrZWRTdGF0dXMpIH0pKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSksXHJcbiAgICAgICAgICAgICAgICBoYXNHdWlkZUxpbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW1EZXB0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IGl0ZW1EZXB0aCB9LCAoXywgZCkgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlydHVhbGl6ZWRHdWlkZUxpbmUsIHsga2V5OiBgZ3VpZGVsaW5lLSR7ZH1gLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LXZpcnR1YWxpemVkLWd1aWRlbGluZS0ke2R9YCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXRJbmxpbmVTdGFydDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgZCwgZmFsc2UsIGZhbHNlLCB0cnVlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXNPd25UcmVlSXRlbXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEd1aWRlTGluZSwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWd1aWRlbGluZWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGd1aWRlTGluZUxlZnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGl0ZW1EZXB0aCwgZmFsc2UsIGZhbHNlLCBmYWxzZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KSBgIH0pKSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgY2hpbGRJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZD8udHlwZSAhPT0gVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHN0YWJsZSwgcHJlLW1lbW9pc2VkIHZhbHVlIChzZWUgY2hpbGRIaWVyYXJjaGllcyBhYm92ZSkuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkSGllcmFyY2h5VmFsdWUgPSBjaGlsZEhpZXJhcmNoaWVzW2NoaWxkSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCB7IGlzT3BlbjogZXhwYW5kZWQsIHVubW91bnRPbkV4aXQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgcm9sZTogXCJncm91cFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dC5Qcm92aWRlciwgeyBrZXk6IGNoaWxkLnByb3BzLml0ZW1JZCwgdmFsdWU6IG5lc3RlZEhpZXJhcmNoeVZhbHVlIH0sIGNoaWxkKSkpKTtcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgaXNNYWNPUyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXN1YWxseUhpZGRlbiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5ub3VuY2UsIG51bGwsIGV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPyBpMThuLmV4cGFuc2lvblN0YXRlLmV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgOiBpMThuLmV4cGFuc2lvblN0YXRlLmNvbGxhcHNlZCkpKSkpKTtcclxufSk7XHJcbi8qKlxyXG4gKiBDdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgUmVhY3QubWVtb1xyXG4gKiBPbmx5IHJlLXJlbmRlciBUcmVlSXRlbSB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZVxyXG4gKi9cclxuZnVuY3Rpb24gYXJlUHJvcHNFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xyXG4gICAgLy8gQ2hlY2sgaWYgaXRlbUlkIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXRlbUlkICE9PSBuZXh0UHJvcHMuaXRlbUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgbGFiZWwgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbCAhPT0gbmV4dFByb3BzLmxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pc0Rpc2FibGVkICE9PSBuZXh0UHJvcHMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGljb24gY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pY29uICE9PSBuZXh0UHJvcHMuaWNvbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGFkZGl0aW9uYWwgY29udGVudCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmFkZGl0aW9uYWxDb250ZW50ICE9PSBuZXh0UHJvcHMuYWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBob3ZlciBjb2xvciBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmhvdmVyQ29sb3IgIT09IG5leHRQcm9wcy5ob3ZlckNvbG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgY2hpbGRyZW4gY2hhbmdlZCAoZm9yIG5lc3RlZCB0cmVlIGl0ZW1zKVxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2UgY2hpbGRyZW4gY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5jaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgc3R5bGVzIGNoYW5nZWRcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIHN0eWxlIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuc3R5bGUgIT09IG5leHRQcm9wcy5zdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWxTdHlsZSAhPT0gbmV4dFByb3BzLmxhYmVsU3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLnRyZWVJdGVtU3R5bGVzICE9PSBuZXh0UHJvcHMudHJlZUl0ZW1TdHlsZXMpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBBbGwgcmVsZXZhbnQgcHJvcHMgYXJlIGVxdWFsLCBza2lwIHJlLXJlbmRlclxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIE1lbW9pemVkIFRyZWVJdGVtIGNvbXBvbmVudFxyXG4gKiBPbmx5IHJlLXJlbmRlcnMgd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2UsIGltcHJvdmluZyBwZXJmb3JtYW5jZSBmb3IgbGFyZ2UgdHJlZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbSA9IFJlYWN0Lm1lbW8oVHJlZUl0ZW1Db21wb25lbnQsIGFyZVByb3BzRXF1YWwpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1UcmVlSXRlbS5qcy5tYXAiXX0= */"));
|
|
26847
26847
|
}, " &:hover{background:", function (props) {
|
|
26848
26848
|
return getHoverBackground({
|
|
26849
26849
|
isDisabled: props.isDisabled,
|
|
@@ -26851,7 +26851,7 @@ var StyledTreeItem = /*#__PURE__*/_styled("li", {
|
|
|
26851
26851
|
isInverse: props.isInverse,
|
|
26852
26852
|
theme: props.theme
|
|
26853
26853
|
});
|
|
26854
|
-
}, ";}}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QmlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26854
|
+
}, ";}}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QmlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26855
26855
|
function getHoverBackground(_ref) {
|
|
26856
26856
|
var isDisabled = _ref.isDisabled,
|
|
26857
26857
|
hoverColor = _ref.hoverColor,
|
|
@@ -26873,13 +26873,13 @@ var IconWrapper$9 = /*#__PURE__*/_styled("span", {
|
|
|
26873
26873
|
return props.theme.iconSizes.medium;
|
|
26874
26874
|
}, "px;width:", function (props) {
|
|
26875
26875
|
return props.theme.iconSizes.medium;
|
|
26876
|
-
}, "px;vertical-align:middle;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtR2dDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26876
|
+
}, "px;vertical-align:middle;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtR2dDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26877
26877
|
var StyledLabelWrapper = /*#__PURE__*/_styled("span", {
|
|
26878
26878
|
target: "e1xiryew6",
|
|
26879
26879
|
label: "StyledLabelWrapper"
|
|
26880
26880
|
})("display:flex;align-items:flex-start;color:", function (props) {
|
|
26881
26881
|
return getTreeItemLabelColor(props.isInverse, props.isDisabled, props.theme);
|
|
26882
|
-
}, ";width:100%;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4R3VDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26882
|
+
}, ";width:100%;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4R3VDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26883
26883
|
var StyledExpandWrapper = /*#__PURE__*/_styled("div", {
|
|
26884
26884
|
target: "e1xiryew5",
|
|
26885
26885
|
label: "StyledExpandWrapper"
|
|
@@ -26895,7 +26895,7 @@ var StyledExpandWrapper = /*#__PURE__*/_styled("div", {
|
|
|
26895
26895
|
var size = _ref3.size,
|
|
26896
26896
|
theme = _ref3.theme;
|
|
26897
26897
|
return size !== undefined ? size + "px" : theme.spaceScale.spacing06;
|
|
26898
|
-
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSHVDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26898
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSHVDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26899
26899
|
var GuideLine = /*#__PURE__*/_styled("div", {
|
|
26900
26900
|
target: "e1xiryew4",
|
|
26901
26901
|
label: "GuideLine"
|
|
@@ -26905,13 +26905,13 @@ var GuideLine = /*#__PURE__*/_styled("div", {
|
|
|
26905
26905
|
return props.guideLineLeft;
|
|
26906
26906
|
}, ";width:0;border-inline-start:1px solid ", function (props) {
|
|
26907
26907
|
return props.isInverse ? curriedTransparentize(0.7, props.theme.colors.neutral100) : props.theme.colors.neutral300;
|
|
26908
|
-
}, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SDZCIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26908
|
+
}, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SDZCIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26909
26909
|
var VirtualizedGuideLine = /*#__PURE__*/_styled("div", {
|
|
26910
26910
|
target: "e1xiryew3",
|
|
26911
26911
|
label: "VirtualizedGuideLine"
|
|
26912
26912
|
})("position:absolute;top:0;bottom:0;width:0;border-inline-start:1px solid ", function (props) {
|
|
26913
26913
|
return props.isInverse ? curriedTransparentize(0.7, props.theme.colors.neutral100) : props.theme.colors.neutral300;
|
|
26914
|
-
}, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEySXdDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26914
|
+
}, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEySXdDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26915
26915
|
var StyledCheckboxWrapper = /*#__PURE__*/_styled("div", {
|
|
26916
26916
|
target: "e1xiryew2",
|
|
26917
26917
|
label: "StyledCheckboxWrapper"
|
|
@@ -26921,7 +26921,7 @@ var StyledCheckboxWrapper = /*#__PURE__*/_styled("div", {
|
|
|
26921
26921
|
return props.hasAdditionalContent ? 'flex' : 'inline-flex';
|
|
26922
26922
|
}, ";flex-direction:column;width:", function (props) {
|
|
26923
26923
|
return "calc(100% - " + props.theme.spaceScale.spacing03 + ")";
|
|
26924
|
-
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1SnlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26924
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1SnlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26925
26925
|
var StyledItemWrapper = /*#__PURE__*/_styled("div", {
|
|
26926
26926
|
target: "e1xiryew1",
|
|
26927
26927
|
label: "StyledItemWrapper"
|
|
@@ -26931,13 +26931,13 @@ var StyledItemWrapper = /*#__PURE__*/_styled("div", {
|
|
|
26931
26931
|
return props.hasCustomIconSize ? 'center' : 'flex-start';
|
|
26932
26932
|
}, ";cursor:", function (props) {
|
|
26933
26933
|
return getTreeItemWrapperCursor(props.isDisabled, props.selectable, props.nodeType);
|
|
26934
|
-
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SnFDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26934
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SnFDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26935
26935
|
var AdditionalContentWrapper$1 = /*#__PURE__*/_styled("div", {
|
|
26936
26936
|
target: "e1xiryew0",
|
|
26937
26937
|
label: "AdditionalContentWrapper"
|
|
26938
26938
|
})("margin-bottom:", function (props) {
|
|
26939
26939
|
return props.theme.spaceScale.spacing05;
|
|
26940
|
-
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSzRDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26940
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSzRDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgaGFuZGxlQ2xpY2ssXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIG9uRXhwYW5kZWRDbGlja2VkLFxyXG4gICAgICAgIGhhc093blRyZWVJdGVtcyxcclxuICAgICAgICBzZWxlY3RQYXJlbnRzLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
|
|
26941
26941
|
var TreeItemComponent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
26942
26942
|
var _selectedItems$;
|
|
26943
26943
|
var additionalContent = props.additionalContent,
|
|
@@ -27154,7 +27154,7 @@ var TreeItemComponent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
|
27154
27154
|
onExpandedClicked(event);
|
|
27155
27155
|
}
|
|
27156
27156
|
}, [isDisabled, onExpandedClicked]);
|
|
27157
|
-
var handleOnClick = function
|
|
27157
|
+
var handleOnClick = useCallback(function (event) {
|
|
27158
27158
|
if (isDisabled) {
|
|
27159
27159
|
event.stopPropagation();
|
|
27160
27160
|
return;
|
|
@@ -27179,7 +27179,7 @@ var TreeItemComponent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
|
27179
27179
|
if (selectable === TreeViewSelectable.single) {
|
|
27180
27180
|
handleClick(event, itemId);
|
|
27181
27181
|
}
|
|
27182
|
-
};
|
|
27182
|
+
}, [isDisabled, selectable, handleClick, itemId, onExpandedClicked, hasOwnTreeItems, selectParents]);
|
|
27183
27183
|
var tabIndex = useMemo(function () {
|
|
27184
27184
|
if (isDisabled) {
|
|
27185
27185
|
return undefined;
|