haya-select 1.0.114 → 1.0.115
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/build/select/index.js +9 -5
- package/package.json +1 -1
package/build/select/index.js
CHANGED
|
@@ -1345,7 +1345,7 @@ class HayaSelect extends ShapeComponent {
|
|
|
1345
1345
|
*/
|
|
1346
1346
|
mobileOptionsContainer({ id, optionsContent }) {
|
|
1347
1347
|
const sheetMaxHeight = Math.round(Dimensions.get("window").height * 0.8);
|
|
1348
|
-
|
|
1348
|
+
let sheetStyle = this.stylingFor("optionsContainer", {
|
|
1349
1349
|
position: "absolute",
|
|
1350
1350
|
zIndex: 100000,
|
|
1351
1351
|
elevation: 100000,
|
|
@@ -1359,6 +1359,10 @@ class HayaSelect extends ShapeComponent {
|
|
|
1359
1359
|
overflow: "hidden",
|
|
1360
1360
|
visibility: this.s.optionsVisibility
|
|
1361
1361
|
}, [sheetMaxHeight, this.s.optionsVisibility]);
|
|
1362
|
+
if ("height" in sheetStyle) {
|
|
1363
|
+
sheetStyle = Object.assign({}, sheetStyle);
|
|
1364
|
+
delete sheetStyle.height;
|
|
1365
|
+
}
|
|
1362
1366
|
return (React.createElement(View, { dataSet: this.mobileOptionsOverlayDataSet ||= { class: "mobile-options-overlay" }, style: this.stylingFor("mobileOptionsOverlay", styles.mobileOptionsOverlay ||= {
|
|
1363
1367
|
position: Platform.OS == "web" ? "fixed" : "absolute",
|
|
1364
1368
|
top: 0,
|
|
@@ -1376,11 +1380,11 @@ class HayaSelect extends ShapeComponent {
|
|
|
1376
1380
|
left: 0,
|
|
1377
1381
|
backgroundColor: "rgba(15, 23, 42, 0.32)"
|
|
1378
1382
|
}), testID: "haya-select-mobile-options-backdrop", ...this.tt.mobileOptionsBackdropPanResponder.panHandlers }),
|
|
1379
|
-
React.createElement(View, { dataSet: this.cache("mobileOptionsContainerDataSet", {
|
|
1383
|
+
React.createElement(View, { dataSet: this.cache("mobileOptionsContainerDataSet", { id, role: "dialog", optionsPlacement: "sheet", optionsVisibility: this.s.optionsVisibility || "hidden" }, [id, this.s.optionsVisibility]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: sheetStyle, testID: "haya-select-options-container" },
|
|
1380
1384
|
React.createElement(ScrollView, { contentContainerStyle: this.stylingFor("mobileOptionsScrollContent", styles.mobileOptionsScrollContent ||= {
|
|
1381
1385
|
flexGrow: 1,
|
|
1382
1386
|
justifyContent: "flex-end"
|
|
1383
|
-
}), dataSet: this.mobileOptionsScrollViewDataSet ||= { class: "mobile-options-scroll-view" }, keyboardShouldPersistTaps: "handled", nestedScrollEnabled: true, style: this.stylingFor("mobileOptionsScrollView", styles.mobileOptionsScrollView ||= { flexShrink: 1 }), testID: "haya-select-mobile-options-scroll-view" }, optionsContent),
|
|
1387
|
+
}), dataSet: this.mobileOptionsScrollViewDataSet ||= { class: "mobile-options-scroll-view" }, keyboardShouldPersistTaps: "handled", nestedScrollEnabled: true, style: this.stylingFor("mobileOptionsScrollView", styles.mobileOptionsScrollView ||= { flexGrow: 0, flexShrink: 1, minHeight: 0 }), testID: "haya-select-mobile-options-scroll-view" }, optionsContent),
|
|
1384
1388
|
React.createElement(View, { dataSet: this.mobileOptionsSearchContainerDataSet ||= { class: "mobile-options-search-container" }, style: this.stylingFor("mobileOptionsSearchContainer", styles.mobileOptionsSearchContainer ||= {
|
|
1385
1389
|
borderTopColor: "#cbd5e1",
|
|
1386
1390
|
borderTopWidth: 1,
|
|
@@ -1485,7 +1489,7 @@ class HayaSelect extends ShapeComponent {
|
|
|
1485
1489
|
style.overflow = "hidden";
|
|
1486
1490
|
}
|
|
1487
1491
|
style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width]);
|
|
1488
|
-
return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", {
|
|
1492
|
+
return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { id, role: "dialog", optionsVisibility: optionsVisibility || "hidden" }, [id, optionsVisibility]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: style, testID: "haya-select-options-container" },
|
|
1489
1493
|
Platform.OS == "web" &&
|
|
1490
1494
|
optionsContent,
|
|
1491
1495
|
Platform.OS != "web" &&
|
|
@@ -1715,4 +1719,4 @@ class HayaSelect extends ShapeComponent {
|
|
|
1715
1719
|
}
|
|
1716
1720
|
const HayaSelectShapeComponent = shapeComponent(HayaSelect);
|
|
1717
1721
|
export default memo(HayaSelectShapeComponent);
|
|
1718
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN2RyxPQUFPLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQ3ZELE9BQU8sRUFBQyxjQUFjLEVBQUUsY0FBYyxFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDekYsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFBO0FBQy9CLE9BQU8sZUFBZSxNQUFNLHVDQUF1QyxDQUFBO0FBQ25FLE9BQU8sY0FBYyxNQUFNLG1EQUFtRCxDQUFBO0FBQzlFLE9BQU8sZ0JBQWdCLE1BQU0scURBQXFELENBQUE7QUFDbEYsT0FBTyxJQUFJLE1BQU0sc0NBQXNDLENBQUE7QUFDdkQsT0FBTyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBQzdCLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFBO0FBQ3hDLE9BQU8sb0JBQW9CLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sVUFBVSxNQUFNLDBCQUEwQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxnQkFBZ0IsTUFBTSx1QkFBdUIsQ0FBQTtB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QUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXRGLElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztBQUdILE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRTNELGVBQWUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlsc1wiXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi9jb25maWcuanNcIlxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtEaW1lbnNpb25zLCBQYW5SZXNwb25kZXIsIFBsYXRmb3JtLCBQcmVzc2FibGUsIFNjcm9sbFZpZXcsIFRleHRJbnB1dCwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVSZWYsIG1lbW8sIHVzZUVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZVwiXG5pbXBvcnQgaWRGb3JDb21wb25lbnQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvaW5wdXRzL2lkLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IG5hbWVGb3JDb21wb25lbnQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvaW5wdXRzL25hbWUtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgVGV4dCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC91dGlscy90ZXh0XCJcbmltcG9ydCBPcHRpb24gZnJvbSBcIi4vb3B0aW9uXCJcbmltcG9ydCBPcHRpb25Hcm91cCBmcm9tIFwiLi9vcHRpb24tZ3JvdXBcIlxuaW1wb3J0IFBhZ2luYXRpb25QYWdlQnV0dG9uIGZyb20gXCIuL3BhZ2luYXRpb24tcGFnZS1idXR0b25cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlbmRlckh0bWwgZnJvbSBcInJlYWN0LW5hdGl2ZS1yZW5kZXItaHRtbFwiXG5pbXBvcnQge1BvcnRhbH0gZnJvbSBcImNvbmpvaW50bWVudFwiXG5pbXBvcnQgdXNlRXZlbnRMaXN0ZW5lciBmcm9tIFwieWEtdXNlLWV2ZW50LWxpc3RlbmVyXCJcbmltcG9ydCB1c2VQcmVzc091dHNpZGUgZnJvbSBcIm91dHNpZGUtZXllL2J1aWxkL3VzZS1wcmVzcy1vdXRzaWRlXCJcblxuY29uc3Qgc3R5bGVzID0ge31cbmNvbnN0IGRhdGFTZXRzID0ge31cbmNvbnN0IE1PQklMRV9PUFRJT05TX01BWF9XSURUSCA9IDc2OFxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RUb2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpY29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB2YWx1ZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFt0ZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjb250ZW50XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjdXJyZW50Q29udGVudF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc2FibGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodG1sXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtyaWdodF1cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbiBwcm9wcyBhcmUgYWxsb3dlZDsgSGF5YVNlbGVjdCBvbmx5IHVzZXMgdGhlIGtleXMgYWJvdmUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbENvdW50XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlU2l6ZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthdHRyaWJ1dGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z11cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbaWRdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW21vZGVsXVxuICogQHByb3BlcnR5IHtcImF1dG9cInxcImFsd2F5c1wifFwibmV2ZXJcIn0gW21vYmlsZU9wdGlvbnNNb2RlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbbXVsdGlwbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vT3B0aW9uc1RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkJsdXJdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oQXJyYXk8c3RyaW5nfG51bWJlcj49KTogdm9pZH0gW29uQ2hhbmdlVmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkZvY3VzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0Nsb3NlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNMb2FkZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNBYnNvbHV0ZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNQb3J0YWxdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29wdGlvbnNXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VhcmNoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dElucHV0UHJvcHN9IFtzZWFyY2hUZXh0SW5wdXRQcm9wc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbc3R5bGVzXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFt0b2dnbGVkXVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0VG9nZ2xlT3B0aW9uPn0gW3RvZ2dsZU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0cmFuc3BhcmVudF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFt2YWx1ZXNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3RhdGVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IGN1cnJlbnRPcHRpb25zXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gc2VsZWN0Q29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gZW5kT2ZTZWxlY3RMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IGhlaWdodFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9IGxvYWRlZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc1JlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFnZUlucHV0Rm9jdXNlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhZ2VJbnB1dFZhbHVlXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBwYWdlU2l6ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdExheW91dHxudWxsfSBvcHRpb25zQ29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBvcHRpb25zVG9wXG4gKiBAcHJvcGVydHkge1wiaGlkZGVuXCJ8XCJ2aXNpYmxlXCJ8dW5kZWZpbmVkfSBvcHRpb25zVmlzaWJpbGl0eVxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfG51bGx9IG9wdGlvbnNXaWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsTGVmdFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsVG9wXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSB0b3RhbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvcF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVmdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF1cbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgUmVhY3QgTmF0aXZlIGFuZCBSZWFjdCBOYXRpdmUgV2ViIGxheW91dCBrZXlzLlxuICogQHBhcmFtIHtIYXlhU2VsZWN0TGF5b3V0fG51bGx8dW5kZWZpbmVkfSBsYXlvdXQgTmF0aXZlIGxheW91dC5cbiAqIEByZXR1cm5zIHtIYXlhU2VsZWN0TGF5b3V0fSBOb3JtYWxpemVkIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTGF5b3V0KGxheW91dCkge1xuICBjb25zdCBub3JtYWxpemVkTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5b3V0KVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZExheW91dC5sZWZ0ICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueCA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC5sZWZ0ID0gbm9ybWFsaXplZExheW91dC54XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQudG9wICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueSA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC50b3AgPSBub3JtYWxpemVkTGF5b3V0LnlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkTGF5b3V0XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBsYXlvdXQgaGFzIHVzYWJsZSBhYnNvbHV0ZS1pc2ggcG9zaXRpb24uXG4gKiBAcGFyYW0ge0hheWFTZWxlY3RMYXlvdXR8bnVsbHx1bmRlZmluZWR9IGxheW91dCBMYXlvdXQgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdG9wIGFuZCBsZWZ0IGNhbiBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBsYXlvdXRIYXNQb3NpdGlvbihsYXlvdXQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LmxlZnQpICYmIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LnRvcClcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBpY29uXG4gKiBAcHJvcGVydHkge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RUb2dnbGVPcHRpb258dW5kZWZpbmVkfSB0b2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gdG9nZ2xlVmFsdWVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPbkNoYW5nZVBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0U3RhdGV9IHN0YXRlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IHN0eWxlXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlID0gKGNvbXBvbmVudCkgPT4ge1xuICBsZXQgbmFtZSA9IG5hbWVGb3JDb21wb25lbnQoY29tcG9uZW50KVxuXG4gIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gY29tcG9uZW50LmdldEN1cnJlbnRPcHRpb25zKClcbiAgY29uc3QgdmFsdWVzID0gY29tcG9uZW50LmdldFZhbHVlcygpXG5cbiAgY29uc3QgaGFzTXVsdGlwbGVWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDBcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlICYmIG5hbWUgJiYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA+IDAgfHwgaGFzTXVsdGlwbGVWYWx1ZXMpKSB7XG4gICAgbmFtZSArPSBcIltdXCJcbiAgfVxuXG4gIHJldHVybiBuYW1lXG59XG5cbi8qKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gKi9cbmNsYXNzIEhheWFTZWxlY3QgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVidWc6IGZhbHNlLFxuICAgIG1vYmlsZU9wdGlvbnNNb2RlOiBcImF1dG9cIixcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICBzZWFyY2hUZXh0SW5wdXRQcm9wczogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW50OiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHRUb2dnbGVkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGRlZmF1bHRWYWx1ZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbW9iaWxlT3B0aW9uc01vZGU6IFByb3BUeXBlcy5vbmVPZihbXCJhdXRvXCIsIFwiYWx3YXlzXCIsIFwibmV2ZXJcIl0pLFxuICAgIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbm9PcHRpb25zVGV4dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zQ2xvc2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbkNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGN1cnJlbnRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBodG1sOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICByaWdodDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWRcbiAgICAgIH0pKSxcbiAgICAgIFByb3BUeXBlcy5mdW5jXG4gICAgXSkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1BvcnRhbDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHNlYXJjaFRleHRJbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH0pKSxcbiAgICB0cmFuc3BhcmVudDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZXM6IFByb3BUeXBlcy5hcnJheVxuICB9KVxuXG4gIGNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gIGJvZHlTY3JvbGxMb2NrZWQgPSBmYWxzZVxuICBlbmRPZlNlbGVjdFJlZiA9IGNyZWF0ZVJlZigpXG4gIGxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkID0gMFxuICBvcHRpb25zQ29udGFpbmVyUmVmID0gY3JlYXRlUmVmKClcbiAgcGFnZUlucHV0UmVmID0gY3JlYXRlUmVmKClcbiAgcHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgcHJldmlvdXNEb2N1bWVudE92ZXJmbG93ID0gdW5kZWZpbmVkXG4gIHNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgc2VhcmNoVGV4dElucHV0UmVmID0gY3JlYXRlUmVmKClcbiAgc2VsZWN0Q29udGFpbmVyUmVmID0gY3JlYXRlUmVmKClcbiAgdCA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKS50XG4gIHdpbmRvd1dpZHRoID0gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikud2lkdGhcbiAgd2luZG93SGVpZ2h0ID0gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikuaGVpZ2h0XG4gIC8qKiBAdHlwZSB7SGF5YVNlbGVjdFN0YXRlfSAqL1xuICBzdGF0ZSA9IHtcbiAgICBjdXJyZW50T3B0aW9uczogdGhpcy5kZWZhdWx0Q3VycmVudE9wdGlvbnMoKSxcbiAgICBzZWxlY3RDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgZW5kT2ZTZWxlY3RMYXlvdXQ6IG51bGwsXG4gICAgaGVpZ2h0OiBudWxsLFxuICAgIGxvYWRlZE9wdGlvbnM6IHRoaXMuZGVmYXVsdExvYWRlZE9wdGlvbnMoKSxcbiAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IDAsXG4gICAgbG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IDAsXG4gICAgcGFnZTogMSxcbiAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgcGFnZVNpemU6IG51bGwsXG4gICAgb3BlbmVkOiBmYWxzZSxcbiAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgIG9wdGlvbnNQbGFjZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zVG9wOiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1Zpc2liaWxpdHk6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zV2lkdGg6IHVuZGVmaW5lZCxcbiAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsLFxuICAgIHRvdGFsQ291bnQ6IG51bGwsXG4gICAgdG9nZ2xlZDogdGhpcy5kZWZhdWx0VG9nZ2xlZCgpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzRGVidWdFbmFibGVkID0gKCkgPT4gQm9vbGVhbih0aGlzLnAuZGVidWcpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbZGV0YWlsc11cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkZWJ1Z0xvZyA9IChmdW5jdGlvbk5hbWUsIGRldGFpbHMgPSB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgcmV0dXJuXG5cbiAgICBjb25zdCBiYXNlRGV0YWlscyA9IHtcbiAgICAgIGlkOiB0aGlzLnAuaWQsXG4gICAgICBuYW1lOiB0aGlzLnAubmFtZVxuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlZERldGFpbHMgPSBkZXRhaWxzID8gT2JqZWN0LmFzc2lnbih7fSwgYmFzZURldGFpbHMsIGRldGFpbHMpIDogYmFzZURldGFpbHNcblxuICAgIGlmIChtZXJnZWREZXRhaWxzICYmIE9iamVjdC5rZXlzKG1lcmdlZERldGFpbHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbSGF5YVNlbGVjdF0gJHtmdW5jdGlvbk5hbWV9YCwgbWVyZ2VkRGV0YWlscylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYFtIYXlhU2VsZWN0XSAke2Z1bmN0aW9uTmFtZX1gKVxuICAgIH1cbiAgfVxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKVxuXG4gICAgdGhpcy50ID0gdFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhheWFTZWxlY3Q6IFVuZGVmaW5lZCBnaXZlbiBhcyB2YWx1ZVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93VGFyZ2V0ID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJiB0eXBlb2Ygd2luZG93ICE9IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiBudWxsXG5cbiAgICB1c2VFdmVudExpc3RlbmVyKERpbWVuc2lvbnMsIFwiY2hhbmdlXCIsIHRoaXMudHQub25EaW1lbnNpb25zQ2hhbmdlKVxuICAgIHVzZVByZXNzT3V0c2lkZSh0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWYsIHRoaXMudHQub25QcmVzc091dHNpZGVPcHRpb25zKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93VGFyZ2V0LCBcInJlc2l6ZVwiLCB0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkRGVib3VuY2VkKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93VGFyZ2V0LCBcInNjcm9sbFwiLCB0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZERlYm91bmNlZClcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXR1cFwiLCB7XG4gICAgICBoYXNDb250cm9sbGVkVmFsdWVzOiBcInZhbHVlc1wiIGluIHRoaXMucHJvcHMsXG4gICAgICBoYXNDb250cm9sbGVkVG9nZ2xlZDogXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcyxcbiAgICAgIG11bHRpcGxlOiB0aGlzLnAubXVsdGlwbGUsXG4gICAgICBvcHRpb25zVHlwZTogQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpID8gXCJhcnJheVwiIDogdHlwZW9mIHRoaXMucHJvcHMub3B0aW9uc1xuICAgIH0pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudHQuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuICYmIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0KSB7XG4gICAgICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSwgW3RoaXMudHQuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuLCB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dF0pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudE9wdGlvbklkcyA9IHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgJiYgYW55dGhpbmdEaWZmZXJlbnQoY3VycmVudE9wdGlvbklkcywgdGhpcy5wcm9wcy52YWx1ZXMpICYmIHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudEZyb21HaXZlblZhbHVlcygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucHJvcHMudmFsdWVzXSlcbiAgfVxuXG4gIHRyYW5zbGF0ZShtc2dJRCwgb3B0aW9ucykge1xuICAgIGlmIChtc2dJRC5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMudChgaGF5YV9zZWxlY3Qke21zZ0lEfWAsIG9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnQobXNnSUQsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gKi9cbiAgZGVmYXVsdEN1cnJlbnRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIHZhbHVlc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykpIHJldHVybiBbXVxuICAgIGNvbnN0IGNvbnRyb2xsZWRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbXVxuXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKCh7dmFsdWV9KSA9PlxuICAgICAgKGRlZmF1bHRWYWx1ZSAmJiB2YWx1ZSA9PSBkZWZhdWx0VmFsdWUpIHx8XG4gICAgICAgIChkZWZhdWx0VmFsdWVzICYmIGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXModmFsdWUpKSB8fFxuICAgICAgICBjb250cm9sbGVkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58dW5kZWZpbmVkfSAqL1xuICBkZWZhdWx0TG9hZGVkT3B0aW9ucygpIHtcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2Ygb3B0aW9uczogJHt0eXBlb2Ygb3B0aW9uc31gKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ9ICovXG4gIGdldEFjdGl2ZVBhZ2UgPSAoKSA9PiB0aGlzLnMucGFnZSB8fCAxXG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc01vYmlsZU9wdGlvbnNTaGVldCgpIHtcbiAgICBpZiAodGhpcy5wLm1vYmlsZU9wdGlvbnNNb2RlID09IFwiYWx3YXlzXCIpIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucC5tb2JpbGVPcHRpb25zTW9kZSA9PSBcIm5ldmVyXCIpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoIDw9IE1PQklMRV9PUFRJT05TX01BWF9XSURUSFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58SGF5YVNlbGVjdE9wdGlvbnNSZXN1bHR9IHJlc3VsdFxuICAgKiBAcmV0dXJucyB7SGF5YVNlbGVjdE9wdGlvbnNSZXN1bHR9XG4gICAqL1xuICBwYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkgcmV0dXJuIHtvcHRpb25zOiByZXN1bHR9XG5cbiAgICBpZiAocmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0Lm9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpb25zOiByZXN1bHQub3B0aW9ucyxcbiAgICAgICAgdG90YWxDb3VudDogcmVzdWx0LnRvdGFsQ291bnQsXG4gICAgICAgIHBhZ2U6IHJlc3VsdC5wYWdlLFxuICAgICAgICBwYWdlU2l6ZTogcmVzdWx0LnBhZ2VTaXplXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wdGlvbnMgcmVzdWx0OiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IHBhcmFtcy5vcHRpb25zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnBhZ2VdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnBhZ2VTaXplXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy50b3RhbENvdW50XVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAqL1xuICByZXNvbHZlUGFnZVNpemUoe29wdGlvbnMsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSkge1xuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUocGFnZVNpemUpICYmIHBhZ2VTaXplID4gMCkgcmV0dXJuIHBhZ2VTaXplXG5cbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRoaXMucy5wYWdlU2l6ZSkgJiYgdGhpcy5zLnBhZ2VTaXplID4gMCAmJiBwYWdlICE9IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnMucGFnZVNpemVcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5sZW5ndGhcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHRoaXMucy5wYWdlU2l6ZSkgJiYgdGhpcy5zLnBhZ2VTaXplID4gMCA/IHRoaXMucy5wYWdlU2l6ZSA6IG51bGxcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59ICovXG4gIGRlZmF1bHRUb2dnbGVkKCkge1xuICAgIHJldHVybiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucHJvcHMuZGVmYXVsdFRvZ2dsZWQgfHwge31cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBwb3J0YWxOYW1lKCkge1xuICAgIHJldHVybiBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpIHx8IGBoYXlhLXNlbGVjdC0ke1N0cmluZyhpZEZvckNvbXBvbmVudCh0aGlzKSl9YFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gKi9cbiAgZ2V0VG9nZ2xlZCA9ICgpID0+IChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5zLnRvZ2dsZWRcblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fSAqL1xuICBnZXRWYWx1ZXMgPSAoKSA9PiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzKVxuICAgID8gKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgPyB0aGlzLnAudmFsdWVzIDogW10pXG4gICAgOiAoQXJyYXkuaXNBcnJheSh0aGlzLnMuY3VycmVudE9wdGlvbnMpID8gdGhpcy5zLmN1cnJlbnRPcHRpb25zIDogW10pLm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb258e3ZhbHVlOiBzdHJpbmd8bnVtYmVyfT59ICovXG4gIGdldEN1cnJlbnRPcHRpb25zID0gKCkgPT4ge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdHlwZW9mIHRoaXMucHJvcHMudmFsdWVzICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpICYmIHRoaXMucC52YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW11cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnAudmFsdWVzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT0gdmFsdWUpXG5cbiAgICAgICAgICBpZiAob3B0aW9uKSByZXN1bHQucHVzaChvcHRpb24pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucy5sb2FkZWRPcHRpb25zICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gKi9cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucC52YWx1ZXMpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgICAgdGhpcy5zLmxvYWRlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT0gdmFsdWUpIHx8XG4gICAgICAgICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT0gdmFsdWUpXG5cbiAgICAgICAgICBpZiAob3B0aW9uKSByZXN1bHQucHVzaChvcHRpb24pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIC8vIE9wdGlvbnMgaGF2ZW4ndCBiZWVuIGxvYWRlZCB5ZXQuXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucC52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHt2YWx1ZX0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnMuY3VycmVudE9wdGlvbnNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj59ICovXG4gIGdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKSB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcykge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgPyB0aGlzLnAudmFsdWVzIDogW11cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuXG4gICAgaWYgKCFjdXJyZW50T3B0aW9ucykgcmV0dXJuIFtdXG5cbiAgICByZXR1cm4gY3VycmVudE9wdGlvbnNcbiAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uPy52YWx1ZSlcbiAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIilcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbCwgb3B0aW9uc30gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY29tcG9uZW50RGlkTW91bnRcIiwge1xuICAgICAgaGFzQXR0cmlidXRlTW9kZWw6IEJvb2xlYW4oYXR0cmlidXRlICYmIG1vZGVsKSxcbiAgICAgIGhhc0RlZmF1bHRWYWx1ZXM6IEJvb2xlYW4oZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSxcbiAgICAgIG9wdGlvbnNUeXBlOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoKChkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlcyB8fCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpIHx8IChhdHRyaWJ1dGUgJiYgbW9kZWwpKSAmJiB0eXBlb2Ygb3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuXG4gICAgaWYgKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIGNvbnN0IG5ld1RvZ2dsZWQgPSB0aGlzLnAudG9nZ2xlZFxuXG4gICAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQodGhpcy5zdGF0ZS50b2dnbGVkLCBuZXdUb2dnbGVkKSkge1xuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhuZXdTdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNvbXBvbmVudERpZFVwZGF0ZVwiLCB7c3luY2luZ0tleXM6IE9iamVjdC5rZXlzKG5ld1N0YXRlKX0pXG4gICAgICB0aGlzLnMudG9nZ2xlZCA9IG5ld1N0YXRlLnRvZ2dsZWRcbiAgICB9XG5cbiAgICB0aGlzLnN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgPyB0aGlzLnByb3BzLnZhbHVlcyA6IFtdXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcbiAgICBjb25zdCBtb2JpbGVPcHRpb25zU2hlZXQgPSB0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KClcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IDQsXG4gICAgICBib3JkZXJXaWR0aDogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiAxLFxuICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgY3Vyc29yOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJwb2ludGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQpIHtcbiAgICAgIC8vIFByZXZlbnQgc2VsZWN0IGZyb20gY2hhbmdpbmcgc2l6ZSBvbmNlIHRoZSBjb250ZW50IGlzIHJlcGxhY2VkIHdpdGggc2VhcmNoIHRleHQgb25jZSBvcGVuZWRcbiAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmhlaWdodCA9IHRoaXMucy5oZWlnaHRcblxuICAgICAgY29uc3QgYmFzZUJvcmRlclJhZGl1cyA9IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuXG4gICAgICBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gMFxuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInJvb3RWaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgYXBwbGllZFJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCxcbiAgICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXBvbmVudDogXCJoYXlhLXNlbGVjdFwiLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG9wZW5lZCxcbiAgICAgICAgICBvcHRpb25zUGxhY2VtZW50LFxuICAgICAgICAgIHJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgICAgIHRvZ2dsZXM6IEJvb2xlYW4odG9nZ2xlT3B0aW9ucylcbiAgICAgICAgfSwgW3RoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsIGNsYXNzTmFtZSwgaWQsIG9wZW5lZCwgb3B0aW9uc1BsYWNlbWVudCwgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLCBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtYWluXCIpfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdFwiXG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLnNlbGVjdENvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJzZWxlY3QtY29udGFpbmVyXCJ9fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uU2VsZWN0Q29udGFpbmVyTGF5b3V0fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25TZWxlY3RDbGlja2VkfVxuICAgICAgICAgIHJlZj17dGhpcy50dC5zZWxlY3RDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsfVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXNlbGVjdC1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudFNlbGVjdGVkRGF0YVNldCB8fD0ge2NsYXNzOiBcImN1cnJlbnQtc2VsZWN0ZWRcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudFNlbGVjdGVkXCIsIHRoaXMuY3VycmVudFNlbGVjdGVkU3R5bGUgfHw9IHtmbGV4OiAxLCBmbGV4V3JhcDogXCJ3cmFwXCIsIG92ZXJmbG93OiBcImhpZGRlblwifSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1jdXJyZW50LXNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyghb3BlbmVkIHx8IG1vYmlsZU9wdGlvbnNTaGVldCkgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wLm11bHRpcGxlID8gdmFsdWVzIDogW3ZhbHVlc1swXV0pLm1hcCgodmFsdWUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGN1cnJlbnQtdmFsdWUtJHt2YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudE9wdGlvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJjdXJyZW50LW9wdGlvblwifX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW50T3B0aW9uLmtleSB8fCBgY3VycmVudC12YWx1ZS0ke2N1cnJlbnRPcHRpb24udmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25cIiwge21hcmdpblJpZ2h0OiA2fSl9XG4gICAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LWN1cnJlbnQtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwXCIsIHRoaXMuY3VycmVudE9wdGlvbkdyb3VwU3R5bGUgfHw9IHtmb250V2VpZ2h0OiBcImJvbGRcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uR3JvdXBUZXh0XCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udHlwZSAhPSBcImdyb3VwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1BsYXRmb3JtLk9TID09IFwid2ViXCIgJiYgbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlnZyhjdXJyZW50T3B0aW9uLCBcInZhbHVlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJlc2VudE9wdGlvbihjdXJyZW50T3B0aW9uLCBcImN1cnJlbnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2hldnJvbkNvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJjaGV2cm9uLWNvbnRhaW5lclwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjaGV2cm9uQ29udGFpbmVyXCIsIHRoaXMuY2hldnJvbkNvbnRhaW5lclN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDhcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtY2hldnJvbi1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gbmFtZT17b3BlbmVkID8gXCJjaGV2cm9uLXVwXCIgOiBcImNoZXZyb24tZG93blwifSBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvblwiLCB0aGlzLmNoZXZyb25TdHlsZSB8fD0ge2ZvbnRTaXplOiAxMn0pfSAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5lbmRPZlNlbGVjdERhdGFTZXQgfHw9IHtjbGFzczogXCJlbmQtb2Ytc2VsZWN0XCJ9fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uRW5kT2ZTZWxlY3RMYXlvdXR9XG4gICAgICAgICAgcmVmPXtlbmRPZlNlbGVjdFJlZn1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1lbmQtb2Ytc2VsZWN0XCJcbiAgICAgICAgLz5cbiAgICAgICAge29wZW5lZCAmJiB0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxQb3J0YWwgbmFtZT17dGhpcy5wb3J0YWxOYW1lKCl9PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvUG9ydGFsPlxuICAgICAgICB9XG4gICAgICAgIHtvcGVuZWQgJiYgIXRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHNlYXJjaFRleHRJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICBkYXRhU2V0PXt0aGlzLnNlYXJjaFRleHRJbnB1dERhdGFTZXQgfHw9IHtjbGFzczogXCJzZWFyY2gtdGV4dC1pbnB1dFwifX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLnNlYXJjaFRleHRWYWx1ZX1cbiAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uQ2hhbmdlU2VhcmNoVGV4dH1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMudHJhbnNsYXRlKFwiLnNlYXJjaF9kb3RfZG90X2RvdFwiKX1cbiAgICAgICAgcmVmPXt0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZn1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcInNlYXJjaFRleHRJbnB1dFwiLCB0aGlzLnNlYXJjaFRleHRJbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICAgIG91dGxpbmU6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIH0pfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1zZWFyY2gtaW5wdXRcIlxuICAgICAgICB7Li4udGhpcy5wLnNlYXJjaFRleHRJbnB1dFByb3BzfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICBkZWZhdWx0VmFsdWVzICgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWx9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgcmV0dXJuIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgICBpZiAoZGVmYXVsdFZhbHVlcykgcmV0dXJuIGRlZmF1bHRWYWx1ZXNcblxuICAgIGlmIChhdHRyaWJ1dGUgJiYgbW9kZWwpIHtcbiAgICAgIGlmICghKGF0dHJpYnV0ZSBpbiBtb2RlbCkpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBhdHRyaWJ1dGUgb24gJHttb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWV9OiAke2F0dHJpYnV0ZX1gKVxuXG4gICAgICByZXR1cm4gbW9kZWxbYXR0cmlidXRlXSgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHRoaXMuZGVmYXVsdFZhbHVlcygpXG5cbiAgICBpZiAoIWRlZmF1bHRWYWx1ZXMpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFja1wiLCB7ZGVmYXVsdFZhbHVlc30pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb3BzLm9wdGlvbnMoe1xuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuZ2V0U2VhcmNoVGV4dCgpLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICB2YWx1ZXM6IGRlZmF1bHRWYWx1ZXNcbiAgICB9KVxuXG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2sucmVzdWx0XCIsIHtsb2FkZWRPcHRpb25zQ291bnQ6IG9wdGlvbnM/Lmxlbmd0aCB8fCAwfSlcblxuICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IHRoaXMuc3RhdGUuY3VycmVudE9wdGlvbnMuY29uY2F0KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7cGFnZT86IG51bWJlcn19IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgbG9hZE9wdGlvbnMgPSBhc3luYyAoe3BhZ2V9ID0ge30pID0+IHtcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuZ2V0U2VhcmNoVGV4dCgpXG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkXG4gICAgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zXCIsIHtcbiAgICAgIHBhZ2UsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIG9wdGlvbnNUeXBlOiBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gXCJhcnJheVwiIDogdHlwZW9mIG9wdGlvbnNcbiAgICB9KVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnMsIHNlYXJjaFZhbHVlLCByZXF1ZXN0SWQpXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdGVkUGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYWdlKSA/IHBhZ2UgOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3NlYXJjaFZhbHVlLCBwYWdlOiByZXF1ZXN0ZWRQYWdlfSlcbiAgICBjb25zdCB7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzdWx0UGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuXG4gICAgaWYgKHJlcXVlc3RJZCAhPSB0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnMuaWdub3JlZF9zdGFsZV9yZXN1bHRcIiwge1xuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkOiB0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgICByZXF1ZXN0ZWRQYWdlLFxuICAgICAgICBzZWFyY2hWYWx1ZVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHJlc3VsdFBhZ2UpID8gcmVzdWx0UGFnZSA6IHJlcXVlc3RlZFBhZ2VcbiAgICBjb25zdCByZXNvbHZlZFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlUGFnZVNpemUoe29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2U6IHJlc29sdmVkUGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KVxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgTnVtYmVyLmlzRmluaXRlKHJlc29sdmVkUGFnZVNpemUpICYmIHJlc29sdmVkUGFnZVNpemUgPiAwXG4gICAgICA/IE1hdGguY2VpbCh0b3RhbENvdW50IC8gcmVzb2x2ZWRQYWdlU2l6ZSlcbiAgICAgIDogbnVsbFxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBsb2FkZWRPcHRpb25zLFxuICAgICAgbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICBwYWdlOiByZXNvbHZlZFBhZ2UsXG4gICAgICBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKHJlc29sdmVkUGFnZSksXG4gICAgICBwYWdlU2l6ZTogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gcmVzb2x2ZWRQYWdlU2l6ZSA6IG51bGwsXG4gICAgICB0b3RhbENvdW50OiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyB0b3RhbENvdW50IDogbnVsbFxuICAgIH0sICgpID0+IHRoaXMucHJvcHMub25PcHRpb25zTG9hZGVkPy4oe29wdGlvbnM6IGxvYWRlZE9wdGlvbnN9KSlcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5yZXN1bHRcIiwge1xuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zPy5sZW5ndGggfHwgMCxcbiAgICAgIHJlc29sdmVkUGFnZSxcbiAgICAgIHJlc29sdmVkUGFnZVNpemUsXG4gICAgICB0b3RhbENvdW50OiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyB0b3RhbENvdW50IDogbnVsbFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7a2V5OiBzdHJpbmcsIGxvYWRlZE9wdGlvbjogSGF5YVNlbGVjdE9wdGlvbn19XG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9XG4gICAqL1xuICBoYXlhU2VsZWN0T3B0aW9uKHtrZXksIGxvYWRlZE9wdGlvbn0pIHtcbiAgICBpZiAobG9hZGVkT3B0aW9uLnR5cGUgPT0gXCJncm91cFwiKSB7XG4gICAgICByZXR1cm4gPE9wdGlvbkdyb3VwIGtleT17a2V5fSBvcHRpb249e2xvYWRlZE9wdGlvbn0gLz5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE9wdGlvblxuICAgICAgICBjdXJyZW50T3B0aW9uVmFsdWVzPXt0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKX1cbiAgICAgICAgaWNvbj17dGhpcy5pY29uRm9yT3B0aW9uKGxvYWRlZE9wdGlvbil9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBvcHRpb249e2xvYWRlZE9wdGlvbn1cbiAgICAgICAgb25PcHRpb25DbGlja2VkPXt0aGlzLnR0Lm9uT3B0aW9uQ2xpY2tlZH1cbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudD17dGhpcy5zLm9wdGlvbnNQbGFjZW1lbnR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hWYWx1ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXF1ZXN0SWRdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZCA9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zRnJvbUFycmF5XCIsIHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRvdGFsT3B0aW9uc0NvdW50OiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICB0aGlzLnMubG9hZGVkT3B0aW9ucyA9IGxvYWRlZE9wdGlvbnNcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgdGhpcy5zLnBhZ2UgPSAxXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gXCIxXCJcbiAgICB0aGlzLnMucGFnZVNpemUgPSBudWxsXG4gICAgdGhpcy5zLnRvdGFsQ291bnQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7d2luZG93OiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fX0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkRpbWVuc2lvbnNDaGFuZ2UgPSAoe3dpbmRvd30pID0+IHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LndpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaGVpZ2h0XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZiwgXCJzZWxlY3RDb250YWluZXJMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkVuZE9mU2VsZWN0TGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcblxuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgbWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKSB7XG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLCBcImVuZE9mU2VsZWN0TGF5b3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBuYXRpdmUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMgZm9yIHBvcnRhbCBwb3NpdGlvbmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWZPYmplY3Q8b2JqZWN0Pn0gcmVmIFZpZXcgcmVmLlxuICAgKiBAcGFyYW0ge1wic2VsZWN0Q29udGFpbmVyTGF5b3V0XCJ8XCJlbmRPZlNlbGVjdExheW91dFwifSBzdGF0ZUtleSBTdGF0ZSBsYXlvdXQga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1lYXN1cmVOYXRpdmVMYXlvdXQocmVmLCBzdGF0ZUtleSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSByZXR1cm5cblxuICAgIGNvbnN0IGVsZW1lbnQgPSByZWYuY3VycmVudFxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3cgIT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIGVsZW1lbnQubWVhc3VyZUluV2luZG93KChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkTGF5b3V0ID0ge2hlaWdodCwgbGVmdCwgdG9wLCB3aWR0aH1cblxuICAgICAgaWYgKCFsYXlvdXRIYXNQb3NpdGlvbihtZWFzdXJlZExheW91dCkpIHJldHVyblxuXG4gICAgICAvKiogQHR5cGUge1BhcnRpYWw8SGF5YVNlbGVjdFN0YXRlPn0gKi9cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBbc3RhdGVLZXldOiBtZWFzdXJlZExheW91dFxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVLZXkgPT0gXCJlbmRPZlNlbGVjdExheW91dFwiICYmIHRoaXMucy5vcGVuZWQgJiYgd2lkdGgpIHtcbiAgICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gd2lkdGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnNbc3RhdGVLZXldLCBtZWFzdXJlZExheW91dCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnNcIiwge2Nsb3NlZE9wdGlvbnNDb3VudDogY2xvc2VkT3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICBsb2FkZWRPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgICAgdG90YWxDb3VudDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNsb3NlT3B0aW9ucy5kb25lXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWQsIG9wdGlvbnNWaXNpYmlsaXR5OiB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHl9KVxuICAgICAgfVxuICAgIClcblxuICAgIGlmICh0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQoe29wdGlvbnM6IGNsb3NlZE9wdGlvbnN9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAub25CbHVyKSB0aGlzLnAub25CbHVyKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBnZXRTZWFyY2hUZXh0ID0gKCkgPT4gdGhpcy5zZWFyY2hUZXh0VmFsdWUgfHwgXCJcIlxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcmVzZXRTZWFyY2hUZXh0SW5wdXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZi5jdXJyZW50XG5cbiAgICBpZiAoaW5wdXQ/LmNsZWFyKSB7XG4gICAgICBpbnB1dC5jbGVhcigpXG4gICAgfSBlbHNlIGlmIChpbnB1dD8uc2V0TmF0aXZlUHJvcHMpIHtcbiAgICAgIGlucHV0LnNldE5hdGl2ZVByb3BzKHt0ZXh0OiBcIlwifSlcbiAgICB9IGVsc2UgaWYgKGlucHV0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IFwiXCJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBpZiB0aGUgcmVmIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgdmFsdWUgYXNzaWdubWVudC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkNoYW5nZVNlYXJjaFRleHQgPSAoc2VhcmNoVGV4dCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkNoYW5nZVNlYXJjaFRleHRcIiwge3NlYXJjaFRleHQsIGN1cnJlbnRQYWdlOiB0aGlzLnMucGFnZX0pXG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBzZWFyY2hUZXh0XG5cbiAgICBpZiAodGhpcy5zLnBhZ2UgIT0gMSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZTogMSwgcGFnZUlucHV0VmFsdWU6IFwiMVwifSwgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9wZW5PcHRpb25zKCkge1xuICAgIGNvbnN0IG1vYmlsZU9wdGlvbnNTaGVldCA9IHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9wZW5PcHRpb25zXCIsIHtcbiAgICAgIGN1cnJlbnRPcHRpb25zQ291bnQ6IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBtb2JpbGVPcHRpb25zU2hlZXQsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0aGlzLnAuc2VhcmNoXG4gICAgfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9ICFtb2JpbGVPcHRpb25zU2hlZXRcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IG1vYmlsZU9wdGlvbnNTaGVldCA/IG51bGwgOiB0aGlzLnMuc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJzaGVldFwiIDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IG1vYmlsZU9wdGlvbnNTaGVldCA/IHVuZGVmaW5lZCA6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGgsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAobW9iaWxlT3B0aW9uc1NoZWV0KSB7XG4gICAgICAgICAgdGhpcy5sb2NrQm9keVNjcm9sbCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICAgICAgdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyh7cGFnZTogMX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBsb2NrQm9keVNjcm9sbCgpIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiB8fCB0eXBlb2YgZG9jdW1lbnQgPT0gXCJ1bmRlZmluZWRcIiB8fCB0aGlzLmJvZHlTY3JvbGxMb2NrZWQpIHJldHVyblxuXG4gICAgdGhpcy5wcmV2aW91c0JvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHk/LnN0eWxlLm92ZXJmbG93XG4gICAgdGhpcy5wcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/LnN0eWxlLm92ZXJmbG93XG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG5cbiAgICB0aGlzLmJvZHlTY3JvbGxMb2NrZWQgPSB0cnVlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHVubG9ja0JvZHlTY3JvbGwoKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9IFwid2ViXCIgfHwgdHlwZW9mIGRvY3VtZW50ID09IFwidW5kZWZpbmVkXCIgfHwgIXRoaXMuYm9keVNjcm9sbExvY2tlZCkgcmV0dXJuXG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgfHwgXCJcIlxuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNEb2N1bWVudE92ZXJmbG93IHx8IFwiXCJcblxuICAgIHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgICB0aGlzLnByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIC8vIERlYm91bmNlIGFmdGVyIHVuLW1vdW50IGhhbmRlbGluZy5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvblNoZWV0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uXCIpXG4gICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSB0cnVlXG4gICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIGlmICh0aGlzLnMub3B0aW9uc1BsYWNlbWVudCAhPSBcInNoZWV0XCIpIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucy5vcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIikge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXQsIHNlbGVjdENvbnRhaW5lckxheW91dH0gPSB0aGlzLnNcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dFxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCJcbiAgICAgID8gZW5kT2ZTZWxlY3RMYXlvdXQ/LnRvcFxuICAgICAgOiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICA/IHNlbGVjdENvbnRhaW5lckxheW91dC50b3AgKyBzZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9uc1RvcCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCIsIHJlYXNvbjogXCJtaXNzaW5nLW9wdGlvbnMtdG9wXCJ9KVxuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbiA9IG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgb3B0aW9uc1RvcFxuICAgIGNvbnN0IHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPSB3aW5kb3dIZWlnaHQgKyAodGhpcy5zLnNjcm9sbFRvcCB8fCAwKVxuXG4gICAgaWYgKHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbikge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYWJvdmVcIn0pXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIn0pXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIHRoaXMubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICBvcHRpb25zUGxhY2VtZW50OiBcInNoZWV0XCIsXG4gICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICBvcHRpb25zV2lkdGg6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RMYXlvdXR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlXCIpXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJhYm92ZVwiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25CZWxvdygpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkJlbG93XCIpXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Jlc2l6ZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQW55dGhpbmdSZXNpemVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkLCAyNSlcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uQW55dGhpbmdTY3JvbGxlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Njcm9sbGVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnMuc2Nyb2xsTGVmdCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGxcbiAgICAgIHRoaXMucy5zY3JvbGxUb3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHJldHVyblxuXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25QcmVzc091dHNpZGVPcHRpb25zID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvblByZXNzT3V0c2lkZU9wdGlvbnNcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgLy8gSWYgb3B0aW9ucyBhcmUgb3BlbiBhbmQgYSBjbGljayBpcyBtYWRlIG91dHNpZGUgb2YgdGhlIG9wdGlvbnMgY29udGFpbmVyXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgUmVzcG9uZGVyIGV2ZW50LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uTW9iaWxlT3B0aW9uc0JhY2tkcm9wUmVsZWFzZSA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgfVxuXG4gIG1vYmlsZU9wdGlvbnNCYWNrZHJvcFBhblJlc3BvbmRlciA9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICAgIG9uU3RhcnRTaG91bGRTZXRQYW5SZXNwb25kZXI6ICgpID0+IHRydWUsXG4gICAgb25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoKSA9PiBmYWxzZSxcbiAgICBvblBhblJlc3BvbmRlclJlbGVhc2U6IHRoaXMudHQub25Nb2JpbGVPcHRpb25zQmFja2Ryb3BSZWxlYXNlLFxuICAgIG9uUGFuUmVzcG9uZGVyVGVybWluYXRlOiB0aGlzLnR0Lm9uTW9iaWxlT3B0aW9uc0JhY2tkcm9wUmVsZWFzZVxuICB9KVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9ICovXG4gIHBhZ2luYXRpb25Ub3RhbFBhZ2VzKCkge1xuICAgIGNvbnN0IHt0b3RhbENvdW50fSA9IHRoaXMuc1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgfHwgdG90YWxDb3VudCA8PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7XG4gICAgICBvcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucyB8fCBbXSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgcGFnZVNpemU6IHRoaXMucy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnRcbiAgICB9KVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFnZVNpemUpIHx8IHBhZ2VTaXplIDw9IDApIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyBwYWdlU2l6ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8e2tleTogc3RyaW5nLCB0eXBlOiBcInBhZ2VcInxcImVsbGlwc2lzXCIsIHZhbHVlPzogbnVtYmVyfT59XG4gICAqL1xuICBwYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIGNvbnN0IGFkZFBhZ2UgPSAocGFnZSkgPT4gaXRlbXMucHVzaCh7a2V5OiBgcGFnZS0ke3BhZ2V9YCwgdHlwZTogXCJwYWdlXCIsIHZhbHVlOiBwYWdlfSlcbiAgICBjb25zdCBhZGRFbGxpcHNpcyA9IChrZXkpID0+IGl0ZW1zLnB1c2goe2tleSwgdHlwZTogXCJlbGxpcHNpc1wifSlcblxuICAgIGlmICh0b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IHRvdGFsUGFnZXM7IHBhZ2UgKz0gMSkge1xuICAgICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtc1xuICAgIH1cblxuICAgIGFkZFBhZ2UoMSlcblxuICAgIGNvbnN0IHdpbmRvd1NpemUgPSAyXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMiwgY3VycmVudFBhZ2UgLSB3aW5kb3dTaXplKVxuICAgIGxldCBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgY3VycmVudFBhZ2UgKyB3aW5kb3dTaXplKVxuXG4gICAgaWYgKGN1cnJlbnRQYWdlIDw9IDMpIHtcbiAgICAgIHN0YXJ0ID0gMlxuICAgICAgZW5kID0gTWF0aC5taW4odG90YWxQYWdlcyAtIDEsIDUpXG4gICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzIC0gMikge1xuICAgICAgZW5kID0gdG90YWxQYWdlcyAtIDFcbiAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMiwgdG90YWxQYWdlcyAtIDQpXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gMikgYWRkRWxsaXBzaXMoXCJlbGxpcHNpcy1zdGFydFwiKVxuXG4gICAgZm9yIChsZXQgcGFnZSA9IHN0YXJ0OyBwYWdlIDw9IGVuZDsgcGFnZSArPSAxKSB7XG4gICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgfVxuXG4gICAgaWYgKGVuZCA8IHRvdGFsUGFnZXMgLSAxKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLWVuZFwiKVxuXG4gICAgYWRkUGFnZSh0b3RhbFBhZ2VzKVxuXG4gICAgcmV0dXJuIGl0ZW1zXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcykge1xuICAgIGNvbnN0IGFjdGl2ZVBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IGZhbGxiYWNrVGV4dCA9IGBQYWdlICR7YWN0aXZlUGFnZX0gb2YgJHt0b3RhbFBhZ2VzfWBcblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZShcIi5wYWdpbmF0aW9uX3BhZ2Vfb2ZfcGFnZXNcIiwge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxsYmFja1RleHQsXG4gICAgICBwYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgdG90YWxQYWdlc1xuICAgIH0pIHx8IGZhbGxiYWNrVGV4dFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwYWdpbmF0aW9uSW5wdXRWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgaWYgKHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkKSByZXR1cm4gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG5cbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uRGlzcGxheVZhbHVlKHRvdGFsUGFnZXMpXG4gIH1cblxuICAvKiogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgKi9cbiAgc2V0UGFnaW5hdGlvblBhZ2UgPSAocGFnZSkgPT4ge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0UGFnaW5hdGlvblBhZ2VcIiwge3JlcXVlc3RlZFBhZ2U6IHBhZ2UsIHRvdGFsUGFnZXN9KVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSByZXR1cm5cblxuICAgIGNvbnN0IG5leHRQYWdlID0gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5mbG9vcihwYWdlKSwgMSksIHRvdGFsUGFnZXMpXG5cbiAgICBpZiAobmV4dFBhZ2UgPT0gdGhpcy5nZXRBY3RpdmVQYWdlKCkpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7cGFnZTogbmV4dFBhZ2UsIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcobmV4dFBhZ2UpfSxcbiAgICAgICgpID0+IHRoaXMudHQubG9hZE9wdGlvbnMoe3BhZ2U6IG5leHRQYWdlfSlcbiAgICApXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uUHJldlByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpIC0gMSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25OZXh0UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgKyAxKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvblBhZ2luYXRpb25JbnB1dEZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gdHJ1ZVxuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UgPSAodmFsdWUpID0+IHtcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Qmx1ciA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcbiAgICBjb25zdCByYXdWYWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/IHRoaXMucy5wYWdlSW5wdXRWYWx1ZVxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcmF3VmFsdWUgPyBOdW1iZXIoU3RyaW5nKHJhd1ZhbHVlKS5tYXRjaCgvXFxkKy8pPy5bMF0pIDogTmFOXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkVmFsdWUpID8gcGFyc2VkVmFsdWUgOiBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgJiYgTnVtYmVyLmlzRmluaXRlKG5leHRQYWdlKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0Rm9jdXNlZDogZmFsc2V9LCAoKSA9PiB0aGlzLnNldFBhZ2luYXRpb25QYWdlKG5leHRQYWdlKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgIH0pXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRTdWJtaXQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRQYWdlID0gTnVtYmVyKHRoaXMucy5wYWdlSW5wdXRWYWx1ZSlcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG5leHRQYWdlKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0Rm9jdXNlZDogZmFsc2V9LCAoKSA9PiB0aGlzLnNldFBhZ2luYXRpb25QYWdlKG5leHRQYWdlKSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dEtleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQ/LmtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cblxuICAgIHRoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXQoZXZlbnQpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBwYWdpbmF0aW9uQ29udHJvbHMoKSB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzIHx8IHRvdGFsUGFnZXMgPD0gMSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBwcmV2RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA8PSAxXG4gICAgY29uc3QgbmV4dERpc2FibGVkID0gY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtjbGFzczogXCJvcHRpb25zLXBhZ2luYXRpb25cIn19XG4gICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge1xuICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBcIiNlMmU4ZjBcIixcbiAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICAgICAgICBwYWRkaW5nOiA4XG4gICAgICAgIH19XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW9wdGlvbnMtcGFnaW5hdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24taGVhZGVyXCJ9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIn19XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtcGFnaW5hdGlvbi1oZWFkZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblByZXZCdXR0b24gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLXByZXZcIn19XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJldkRpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25QcmV2UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtwcmV2RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogcHJldkRpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtcGFnaW5hdGlvbi1wcmV2XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLWxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInBhZ2luYXRpb25MYWJlbERhdGFTZXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogXCJwYWdpbmF0aW9uLWxhYmVsXCIsXG4gICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlXG4gICAgICAgICAgICB9LCBbY3VycmVudFBhZ2VdKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkxhYmVsQnV0dG9uIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjFmNWY5XCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxNCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMTQwLFxuICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogNlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXBhZ2luYXRpb24tbGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbklucHV0IHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1pbnB1dFwifX1cbiAgICAgICAgICAgICAga2V5Ym9hcmRUeXBlPVwibnVtYmVyLXBhZFwiXG4gICAgICAgICAgICAgIG9uQmx1cj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEJsdXJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvblByZXNzSW49e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRGb2N1c31cbiAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0S2V5RG93bn1cbiAgICAgICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0U3VibWl0fVxuICAgICAgICAgICAgICByZWY9e3RoaXMudHQucGFnZUlucHV0UmVmfVxuICAgICAgICAgICAgICBzZWxlY3RUZXh0T25Gb2N1c1xuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25JbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1wYWdpbmF0aW9uLWlucHV0XCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMucGFnaW5hdGlvbklucHV0VmFsdWUodG90YWxQYWdlcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uTmV4dEJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tbmV4dFwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtuZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbk5leHRQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke25leHREaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBuZXh0RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1wYWdpbmF0aW9uLW5leHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25QYWdlcyB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcGFnZXNcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uUGFnZXMgfHw9IHtcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICAgICAgICBmbGV4V3JhcDogXCJ3cmFwXCIsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIG1hcmdpblRvcDogOFxuICAgICAgICAgIH19XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtcGFnaW5hdGlvbi1wYWdlc1wiXG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcImVsbGlwc2lzXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYHBhZ2luYXRpb25FbGxpcHNpcy0ke2l0ZW0ua2V5fWBdIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1lbGxpcHNpc1wifX1cbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpcyB8fD0ge3BhZGRpbmdIb3Jpem9udGFsOiA2fX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXBhZ2luYXRpb24tZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiM2NDc0OGJcIixcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UGFnaW5hdGlvblBhZ2VCdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e2l0ZW0udmFsdWUgPT0gY3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICBvblBhZ2VTZWxlY3RlZD17dGhpcy50dC5zZXRQYWdpbmF0aW9uUGFnZX1cbiAgICAgICAgICAgICAgICBwYWdlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2lkOiBzdHJpbmd8bnVtYmVyLCBvcHRpb25zQ29udGVudDogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfX0gYXJncyBNb2JpbGUgc2hlZXQgY29udGVudC5cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zQ29udGVudH0pIHtcbiAgICBjb25zdCBzaGVldE1heEhlaWdodCA9IE1hdGgucm91bmQoRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikuaGVpZ2h0ICogMC44KVxuICAgIGNvbnN0IHNoZWV0U3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDEwMDAwMCxcbiAgICAgIGVsZXZhdGlvbjogMTAwMDAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgbWF4SGVpZ2h0OiBzaGVldE1heEhlaWdodCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsXG4gICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAxOCxcbiAgICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAxOCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgdmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5XG4gICAgfSwgW3NoZWV0TWF4SGVpZ2h0LCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMubW9iaWxlT3B0aW9uc092ZXJsYXlEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtb3ZlcmxheVwifX1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNPdmVybGF5XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zT3ZlcmxheSB8fD0ge1xuICAgICAgICAgIHBvc2l0aW9uOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5LFxuICAgICAgICAgIGVsZXZhdGlvbjogOTk5OTlcbiAgICAgICAgfSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLW92ZXJsYXlcIlxuICAgICAgPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wRGF0YVNldCB8fD0ge2NsYXNzOiBcIm1vYmlsZS1vcHRpb25zLWJhY2tkcm9wXCJ9fVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zQmFja2Ryb3BcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcCB8fD0ge1xuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDE1LCAyMywgNDIsIDAuMzIpXCJcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1tb2JpbGUtb3B0aW9ucy1iYWNrZHJvcFwiXG4gICAgICAgICAgey4uLnRoaXMudHQubW9iaWxlT3B0aW9uc0JhY2tkcm9wUGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfVxuICAgICAgICAvPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXG4gICAgICAgICAgICBcIm1vYmlsZU9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAgICB7Y2xhc3M6IFwib3B0aW9ucy1jb250YWluZXJcIiwgaWQsIHJvbGU6IFwiZGlhbG9nXCIsIG9wdGlvbnNQbGFjZW1lbnQ6IFwic2hlZXRcIiwgb3B0aW9uc1Zpc2liaWxpdHk6IHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eSB8fCBcImhpZGRlblwifSxcbiAgICAgICAgICAgIFtpZCwgdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5XVxuICAgICAgICAgICl9XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICAgIHJlZj17dGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0eWxlPXtzaGVldFN0eWxlfVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW9wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgICBjb250ZW50Q29udGFpbmVyU3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTY3JvbGxDb250ZW50XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2Nyb2xsQ29udGVudCB8fD0ge1xuICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIlxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3RGF0YVNldCB8fD0ge2NsYXNzOiBcIm1vYmlsZS1vcHRpb25zLXNjcm9sbC12aWV3XCJ9fVxuICAgICAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz1cImhhbmRsZWRcIlxuICAgICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2Nyb2xsVmlldyB8fD0ge2ZsZXhTaHJpbms6IDF9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLXNjcm9sbC12aWV3XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uc0NvbnRlbnR9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtc2VhcmNoLWNvbnRhaW5lclwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zU2VhcmNoQ29udGFpbmVyXCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2VhcmNoQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDE0LFxuICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDEwXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLXNlYXJjaC1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnNlYXJjaFRleHRJbnB1dCgpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIG9wdGlvbnNDb250YWluZXIoKSB7XG4gICAgY29uc3Qge3NlbGVjdENvbnRhaW5lckxheW91dCwgbG9hZGVkT3B0aW9ucywgZW5kT2ZTZWxlY3RMYXlvdXQsIG9wdGlvbnNDb250YWluZXJMYXlvdXQsIG9wdGlvbnNQbGFjZW1lbnQsIG9wdGlvbnNWaXNpYmlsaXR5fSA9IHRoaXMuc1xuICAgIGxldCBsZWZ0LCB0b3BcbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG4gICAgY29uc3QgZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPSBvcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIiA/IFwiYmVsb3dcIiA6IG9wdGlvbnNQbGFjZW1lbnRcbiAgICBjb25zdCBvcHRpb25zQ29udGVudCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtsb2FkZWRPcHRpb25zPy5tYXAoKGxvYWRlZE9wdGlvbikgPT5cbiAgICAgICAgICB0aGlzLmhheWFTZWxlY3RPcHRpb24oe1xuICAgICAgICAgICAga2V5OiBsb2FkZWRPcHRpb24ua2V5IHx8IGBsb2FkZWQtb3B0aW9uLSR7bG9hZGVkT3B0aW9uLnZhbHVlfWAsXG4gICAgICAgICAgICBsb2FkZWRPcHRpb25cbiAgICAgICAgICB9KVxuICAgICAgICApfVxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMubm9PcHRpb25zQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcIm5vLW9wdGlvbnMtY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm5vT3B0aW9uc0NvbnRhaW5lclwiLCB0aGlzLm5vT3B0aW9uc0NvbnRhaW5lclN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDEwLFxuICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogOCxcbiAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiA4LFxuICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAxMFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1uby1vcHRpb25zLWNvbnRhaW5lclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIHt0aGlzLnAubm9PcHRpb25zVGV4dCA/IHRoaXMucC5ub09wdGlvbnNUZXh0KCkgOiB0aGlzLnRyYW5zbGF0ZShcIi5ub19vcHRpb25zX2ZvdW5kXCIpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7dGhpcy5wYWdpbmF0aW9uQ29udHJvbHMoKX1cbiAgICAgIDwvPlxuICAgIClcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zQ29udGVudH0pXG4gICAgfVxuXG4gICAgbGV0IHN0eWxlID0ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICBlbGV2YXRpb246IDk5OTk5LFxuICAgICAgdmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHksXG4gICAgICB3aWR0aDogdGhpcy5wLm9wdGlvbnNXaWR0aCB8fCB0aGlzLnMub3B0aW9uc1dpZHRoLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiBcIiM5OTlcIixcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICBvdmVyZmxvd1k6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcImF1dG9cIiA6IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICghdGhpcy5wLm9wdGlvbnNQb3J0YWwpIHtcbiAgICAgIHN0eWxlLnRvcCA9IDBcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgfSBlbHNlIGlmICghdGhpcy5wLm9wdGlvbnNBYnNvbHV0ZSkge1xuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgIHN0eWxlLmJvdHRvbSA9IDBcbiAgICB9IGVsc2UgaWYgKGRlc2t0b3BPcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgMVxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcCArIHNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShsZWZ0KSAmJiBOdW1iZXIuaXNGaW5pdGUodG9wKSkge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgICBzdHlsZS50b3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gdG9wIC0gMiA6IHRvcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua29ud24gb3B0aW9ucyBwbGFjZW1lbnQ6ICR7ZGVza3RvcE9wdGlvbnNQbGFjZW1lbnR9YClcbiAgICB9XG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgc3R5bGUub3BhY2l0eSA9IG9wdGlvbnNWaXNpYmlsaXR5ID09IFwiaGlkZGVuXCIgPyAwIDogMVxuICAgICAgc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHN0eWxlLCBbbGVmdCwgdG9wLCBzdHlsZS52aXNpYmlsaXR5LCBzdHlsZS53aWR0aF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICBcIm9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAge2NsYXNzOiBcIm9wdGlvbnMtY29udGFpbmVyXCIsIGlkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zVmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgW2lkLCBvcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1vcHRpb25zLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgb3B0aW9uc0NvbnRlbnRcbiAgICAgICAgfVxuICAgICAgICB7UGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiaGFuZGxlZFwiXG4gICAgICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BuYXRpdmVPcHRpb25zU2Nyb2xsVmlldy0ke3N0eWxlLm1heEhlaWdodCB8fCAzMDB9YF0gfHw9IHtcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBzdHlsZS5tYXhIZWlnaHQgfHwgMzAwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb25zQ29udGVudH1cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBsb2FkZWRPcHRpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbkNsaWNrZWQgPSAoZXZlbnQsIGxvYWRlZE9wdGlvbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgY29uc3Qge29uQ2hhbmdlLCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bXVsdGlwbGV9ID0gdGhpcy5wXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG4gICAgY29uc3QgZXhpc3RpbmdPcHRpb24gPSBjdXJyZW50T3B0aW9ucy5maW5kKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlID09IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBuZXdUb2dnbGVkID0gey4uLnRvZ2dsZWR9XG4gICAgbGV0IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgbGV0IGFjdGlvblxuXG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uKSB7XG4gICAgICBpZiAodG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9nZ2xlID0gdG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRvZ2dsZU9wdGlvbnMuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IGN1cnJlbnRUb2dnbGUpXG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAodG9nZ2xlT3B0aW9ucy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgIC8vIE5vIG5leHQgdG9nZ2xlZCAtIHJlbW92ZSB0b2dnbGVkIGFuZCBvcHRpb25cbiAgICAgICAgICBkZWxldGUgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgICAgYWN0aW9uID0gXCJyZW1vdmUtb3B0aW9uLWFmdGVyLWxhc3QtdG9nZ2xlXCJcblxuICAgICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IHRvZ2dsZWQgLSBzZXQgdG8gbmV4dCB0b2dnbGVcbiAgICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSBkaWdnKHRvZ2dsZU9wdGlvbnMsIGN1cnJlbnRJbmRleCArIDEsIFwidmFsdWVcIilcbiAgICAgICAgICBhY3Rpb24gPSBcImN5Y2xlLXRvZ2dsZVwiXG4gICAgICAgIH1cblxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY3VycmVudCBvcHRpb25zXG4gICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNsaWNrZWQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICBpZiAobG9hZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgICAgIGFjdGlvbjogXCJpZ25vcmUtZGlzYWJsZWQtb3B0aW9uXCIsXG4gICAgICAgICAgb3B0aW9uVmFsdWU6IGxvYWRlZE9wdGlvbi52YWx1ZVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gU2V0IGZyZXNoIHRvZ2dsZVxuICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSB0b2dnbGVPcHRpb25zWzBdLnZhbHVlXG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChtdWx0aXBsZSB8fCB0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIGFjdGlvbiA9IFwiYWRkLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KFtsb2FkZWRPcHRpb25dKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uID0gXCJyZXBsYWNlLXNpbmdsZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IFtsb2FkZWRPcHRpb25dXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjdXJyZW50T3B0aW9ucyBhcmUgY29udHJvbGxlZCBhbmQgYSB1c2VNZW1vIGNhbGxiYWNrIGlzIGhhbmRlbGluZyBzZXR0aW5nIGN1cnJlbnQgb3B0aW9ucy5cbiAgICB9IGVsc2UgaWYgKG5ld0N1cnJlbnRPcHRpb25zKSB7XG4gICAgICBuZXdTdGF0ZS5jdXJyZW50T3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zIHx8IGN1cnJlbnRPcHRpb25zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uT3B0aW9uQ2xpY2tlZFwiLCB7XG4gICAgICBhY3Rpb246IGFjdGlvbiB8fCBcInRvZ2dsZS1vbmx5XCIsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWUsXG4gICAgICBvcHRpb25zQ291bnRCZWZvcmU6IGN1cnJlbnRPcHRpb25zLmxlbmd0aCxcbiAgICAgIG9wdGlvbnNDb3VudEFmdGVyOiBvcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICBpZiAoIW11bHRpcGxlKSB0aGlzLmNsb3NlT3B0aW9ucyh7b3B0aW9uc30pXG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9uQ2hhbmdlUGF5bG9hZH0gKi9cbiAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHRvZ2dsZXM6IG5ld1RvZ2dsZWRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2VWYWx1ZSkge1xuICAgICAgbGV0IG9wdGlvblZhbHVlXG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvblZhbHVlID0gZGlnKG9wdGlvbnMsIDAsIFwidmFsdWVcIilcbiAgICAgIH1cblxuICAgICAgdGhpcy5wLm9uQ2hhbmdlVmFsdWUob3B0aW9uVmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFwidG9nZ2xlZFwiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMudG9nZ2xlZCA9IG5ld1N0YXRlLnRvZ2dsZWRcbiAgICB9XG5cbiAgICBpZiAoXCJjdXJyZW50T3B0aW9uc1wiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBuZXdTdGF0ZS5jdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGluZ05hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbc3R5bGVdXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2NhY2hlc11cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICBzdHlsaW5nRm9yKHN0eWxpbmdOYW1lLCBzdHlsZSA9IHt9LCBjYWNoZXMgPSBbXSkge1xuICAgIGxldCBjdXN0b21TdHlsaW5nID0gZGlnKHRoaXMsIFwicHJvcHNcIiwgXCJzdHlsZXNcIiwgc3R5bGluZ05hbWUpXG4gICAgY29uc3QgYmFzZVN0eWxlID0gey4uLnN0eWxlfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHlsaW5nID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHR9ICovXG4gICAgICBjdXN0b21TdHlsaW5nID0gY3VzdG9tU3R5bGluZyh7XG4gICAgICAgIG9wZW5lZDogdGhpcy5zLm9wZW5lZCxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBzdHlsZTogYmFzZVN0eWxlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjdXN0b21TdHlsaW5nKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVN0eWxlLCBjdXN0b21TdHlsaW5nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKGBzdHlsaW5nRm9yLSR7c3R5bGluZ05hbWV9YCwgc3R5bGUsIGNhY2hlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICovXG4gIGljb25Gb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3Qge3RvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuXG4gICAgaWYgKHRvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSkge1xuICAgICAgY29uc3QgdG9nZ2xlZFZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgICBjb25zdCB0b2dnbGVkT3B0aW9uID0gdG9nZ2xlT3B0aW9ucy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IHRvZ2dsZWRWYWx1ZSlcblxuICAgICAgaWYgKCF0b2dnbGVkT3B0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRvZ2dsZSBvcHRpb24gZm9yIHZhbHVlOiAke3RvZ2dsZWRWYWx1ZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlZE9wdGlvbi5pY29uXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7XCJjdXJyZW50XCJ8XCJvcHRpb25cIn0gbW9kZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgcHJlc2VudE9wdGlvbiA9IChvcHRpb24sIG1vZGUpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uQ29udGVudCwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuaWNvbkZvck9wdGlvbihvcHRpb24pXG4gICAgY29uc3QgdG9nZ2xlVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICBjb25zdCB0b2dnbGVPcHRpb24gPSB0b2dnbGVPcHRpb25zPy5maW5kKCh0b2dnbGVPcHRpb25JKSA9PiB0b2dnbGVPcHRpb25JLnZhbHVlID09IHRvZ2dsZVZhbHVlKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG9wdGlvbi52YWx1ZSlcbiAgICBsZXQgc3R5bGVcbiAgICBsZXQgY29udGVudE5vZGVcblxuICAgIGlmIChtb2RlID09IFwiY3VycmVudFwiKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInByZXNlbnRPcHRpb25WaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgdGV4dDogb3B0aW9uLnRleHQsXG4gICAgICAgICAgdG9nZ2xlSWNvbjogdG9nZ2xlT3B0aW9uPy5pY29uLFxuICAgICAgICAgIHRvZ2dsZVZhbHVlOiB0b2dnbGVPcHRpb24/LnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWVcbiAgICAgICAgfSwgW29wdGlvbi50ZXh0LCBvcHRpb24udmFsdWUsIHRvZ2dsZU9wdGlvbj8uaWNvbiwgdG9nZ2xlT3B0aW9uPy52YWx1ZV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblN0eWxlXCIsIHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwifSl9XG4gICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAhKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25QbGFjZWhvbGRlclN0eWxlXCIsIHt3aWR0aDogMjB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvZ2dsZS1pY29uLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25Db250YWluZXJTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIHdpZHRoOiAyMH0pfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT17aWNvbn1cbiAgICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9wdGlvblJlbmRlckNvbnRleHR9ICovXG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbkNvbnRlbnQoe2ljb24sIG1vZGUsIG9wdGlvbiwgc2VsZWN0ZWQsIHRvZ2dsZU9wdGlvbiwgdG9nZ2xlVmFsdWUsIHRvZ2dsZWR9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImN1cnJlbnRcIiAmJiBvcHRpb24uY3VycmVudENvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmN1cnJlbnRDb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxSZW5kZXJIdG1sIHNvdXJjZT17e2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gKFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJvcHRpb24tcHJlc2VudGF0aW9uLXRleHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge29wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uQ29udGVudFN0eWxlXCIsIHtmbGV4OiAxfSl9PlxuICAgICAgICAgICAgICAgIHtjb250ZW50Tm9kZX1cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0ICYmXG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25SaWdodFN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgbWFyZ2luTGVmdDogOH0pfT5cbiAgICAgICAgICAgICAgICAgIHtvcHRpb24ucmlnaHR9XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApXG4gICAgICAgIH0pKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKCkge1xuICAgIGNvbnN0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnMuY3VycmVudE9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBbXVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRpb25zKHtwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSwgdmFsdWVzfSlcbiAgICBjb25zdCB7b3B0aW9uczogY3VycmVudE9wdGlvbnN9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBjdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuICAgIGNvbnN0IHN0YXRlVmFsdWVzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQoY3VycmVudFZhbHVlcywgc3RhdGVWYWx1ZXMpKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQgPSBzaGFwZUNvbXBvbmVudChIYXlhU2VsZWN0KVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKEhheWFTZWxlY3RTaGFwZUNvbXBvbmVudClcbiJdfQ==
|
|
1722
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN2RyxPQUFPLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQ3ZELE9BQU8sRUFBQyxjQUFjLEVBQUUsY0FBYyxFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDekYsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFBO0FBQy9CLE9BQU8sZUFBZSxNQUFNLHVDQUF1QyxDQUFBO0FBQ25FLE9BQU8sY0FBYyxNQUFNLG1EQUFtRCxDQUFBO0FBQzlFLE9BQU8sZ0JBQWdCLE1BQU0scURBQXFELENBQUE7QUFDbEYsT0FBTyxJQUFJLE1BQU0sc0NBQXNDLENBQUE7QUFDdkQsT0FBTyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBQzdCLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFBO0FBQ3hDLE9BQU8sb0JBQW9CLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sVUFBVSxNQUFNLDBCQUEwQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxnQkFBZ0IsTUFBTSx1QkFBdUIsQ0FBQTtB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LGFBQWEsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdEYsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDeEMsQ0FBQztJQUNILENBQUM7O0FBR0gsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFM0QsZUFBZSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YW55dGhpbmdEaWZmZXJlbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9kaWZmLXV0aWxzXCJcbmltcG9ydCBDb25maWcgZnJvbSBcIi4uL2NvbmZpZy5qc1wiXG5pbXBvcnQge2RpZywgZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge0RpbWVuc2lvbnMsIFBhblJlc3BvbmRlciwgUGxhdGZvcm0sIFByZXNzYWJsZSwgU2Nyb2xsVmlldywgVGV4dElucHV0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBSZWFjdCwge2NyZWF0ZVJlZiwgbWVtbywgdXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBUZXh0IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL3V0aWxzL3RleHRcIlxuaW1wb3J0IE9wdGlvbiBmcm9tIFwiLi9vcHRpb25cIlxuaW1wb3J0IE9wdGlvbkdyb3VwIGZyb20gXCIuL29wdGlvbi1ncm91cFwiXG5pbXBvcnQgUGFnaW5hdGlvblBhZ2VCdXR0b24gZnJvbSBcIi4vcGFnaW5hdGlvbi1wYWdlLWJ1dHRvblwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVuZGVySHRtbCBmcm9tIFwicmVhY3QtbmF0aXZlLXJlbmRlci1odG1sXCJcbmltcG9ydCB7UG9ydGFsfSBmcm9tIFwiY29uam9pbnRtZW50XCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCJ5YS11c2UtZXZlbnQtbGlzdGVuZXJcIlxuaW1wb3J0IHVzZVByZXNzT3V0c2lkZSBmcm9tIFwib3V0c2lkZS1leWUvYnVpbGQvdXNlLXByZXNzLW91dHNpZGVcIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgZGF0YVNldHMgPSB7fVxuY29uc3QgTU9CSUxFX09QVElPTlNfTUFYX1dJRFRIID0gNzY4XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGljb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHZhbHVlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2NvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2N1cnJlbnRDb250ZW50XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzYWJsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0bWxdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3JpZ2h0XVxuICpcbiAqIEFkZGl0aW9uYWwgb3B0aW9uIHByb3BzIGFyZSBhbGxvd2VkOyBIYXlhU2VsZWN0IG9ubHkgdXNlcyB0aGUga2V5cyBhYm92ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25zUmVzdWx0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvdGFsQ291bnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VTaXplXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2F0dHJpYnV0ZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkZWZhdWx0VG9nZ2xlZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gW2RlZmF1bHRWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFtkZWZhdWx0VmFsdWVzXVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gW2RlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtpZF1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbbW9kZWxdXG4gKiBAcHJvcGVydHkge1wiYXV0b1wifFwiYWx3YXlzXCJ8XCJuZXZlclwifSBbbW9iaWxlT3B0aW9uc01vZGVdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttdWx0aXBsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbbm9PcHRpb25zVGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQmx1cl1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihBcnJheTxzdHJpbmd8bnVtYmVyPj0pOiB2b2lkfSBbb25DaGFuZ2VWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uRm9jdXNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtvcHRpb25zOiBBcnJheX0pOiB2b2lkfSBbb25PcHRpb25zQ2xvc2VkXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0xvYWRlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24ob2JqZWN0KTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbb3B0aW9uQ29udGVudF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58ZnVuY3Rpb24oKTogKEFycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0KX0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9uc0Fic29sdXRlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9uc1BvcnRhbF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb3B0aW9uc1dpZHRoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtwbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWFyY2hdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5UZXh0SW5wdXRQcm9wc30gW3NlYXJjaFRleHRJbnB1dFByb3BzXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFtzdHlsZXNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3RvZ2dsZWRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RUb2dnbGVPcHRpb24+fSBbdG9nZ2xlT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gW3ZhbHVlc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RTdGF0ZVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gY3VycmVudE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdExheW91dHxudWxsfSBzZWxlY3RDb250YWluZXJMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdExheW91dHxudWxsfSBlbmRPZlNlbGVjdExheW91dFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gaGVpZ2h0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gbG9hZGVkT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvYWRPcHRpb25zUmVxdWVzdElkXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYWdlSW5wdXRGb2N1c2VkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFnZUlucHV0VmFsdWVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHBhZ2VTaXplXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZW5lZFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0TGF5b3V0fG51bGx9IG9wdGlvbnNDb250YWluZXJMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7XCJhYm92ZVwifFwiYmVsb3dcInxcInNoZWV0XCJ8dW5kZWZpbmVkfSBvcHRpb25zUGxhY2VtZW50XG4gKiBAcHJvcGVydHkge251bWJlcnx1bmRlZmluZWR9IG9wdGlvbnNUb3BcbiAqIEBwcm9wZXJ0eSB7XCJoaWRkZW5cInxcInZpc2libGVcInx1bmRlZmluZWR9IG9wdGlvbnNWaXNpYmlsaXR5XG4gKiBAcHJvcGVydHkge251bWJlcnx1bmRlZmluZWR8bnVsbH0gb3B0aW9uc1dpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBzY3JvbGxMZWZ0XG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBzY3JvbGxUb3BcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHRvdGFsQ291bnRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdG9wXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsZWZ0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt4XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt5XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWR0aF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbaGVpZ2h0XVxuICovXG5cbi8qKlxuICogTm9ybWFsaXplcyBSZWFjdCBOYXRpdmUgYW5kIFJlYWN0IE5hdGl2ZSBXZWIgbGF5b3V0IGtleXMuXG4gKiBAcGFyYW0ge0hheWFTZWxlY3RMYXlvdXR8bnVsbHx1bmRlZmluZWR9IGxheW91dCBOYXRpdmUgbGF5b3V0LlxuICogQHJldHVybnMge0hheWFTZWxlY3RMYXlvdXR9IE5vcm1hbGl6ZWQgbGF5b3V0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVMYXlvdXQobGF5b3V0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMYXlvdXQgPSBPYmplY3QuYXNzaWduKHt9LCBsYXlvdXQpXG5cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkTGF5b3V0LmxlZnQgIT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygbm9ybWFsaXplZExheW91dC54ID09IFwibnVtYmVyXCIpIHtcbiAgICBub3JtYWxpemVkTGF5b3V0LmxlZnQgPSBub3JtYWxpemVkTGF5b3V0LnhcbiAgfVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZExheW91dC50b3AgIT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygbm9ybWFsaXplZExheW91dC55ID09IFwibnVtYmVyXCIpIHtcbiAgICBub3JtYWxpemVkTGF5b3V0LnRvcCA9IG5vcm1hbGl6ZWRMYXlvdXQueVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRMYXlvdXRcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGxheW91dCBoYXMgdXNhYmxlIGFic29sdXRlLWlzaCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7SGF5YVNlbGVjdExheW91dHxudWxsfHVuZGVmaW5lZH0gbGF5b3V0IExheW91dCB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgd2hlbiB0b3AgYW5kIGxlZnQgY2FuIGJlIHVzZWQuXG4gKi9cbmZ1bmN0aW9uIGxheW91dEhhc1Bvc2l0aW9uKGxheW91dCkge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKGxheW91dD8ubGVmdCkgJiYgTnVtYmVyLmlzRmluaXRlKGxheW91dD8udG9wKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25SZW5kZXJDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGljb25cbiAqIEBwcm9wZXJ0eSB7XCJjdXJyZW50XCJ8XCJvcHRpb25cIn0gbW9kZVxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdFRvZ2dsZU9wdGlvbnx1bmRlZmluZWR9IHRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSB0b2dnbGVWYWx1ZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gdG9nZ2xlZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9uQ2hhbmdlUGF5bG9hZFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RTdHlsaW5nQ29udGV4dFxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7XCJhYm92ZVwifFwiYmVsb3dcInxcInNoZWV0XCJ8dW5kZWZpbmVkfSBvcHRpb25zUGxhY2VtZW50XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3R5bGVcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUgPSAoY29tcG9uZW50KSA9PiB7XG4gIGxldCBuYW1lID0gbmFtZUZvckNvbXBvbmVudChjb21wb25lbnQpXG5cbiAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBjb21wb25lbnQuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICBjb25zdCB2YWx1ZXMgPSBjb21wb25lbnQuZ2V0VmFsdWVzKClcblxuICBjb25zdCBoYXNNdWx0aXBsZVZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID4gMFxuXG4gIGlmIChjb21wb25lbnQucHJvcHMubXVsdGlwbGUgJiYgbmFtZSAmJiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCB8fCBoYXNNdWx0aXBsZVZhbHVlcykpIHtcbiAgICBuYW1lICs9IFwiW11cIlxuICB9XG5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSAqL1xuY2xhc3MgSGF5YVNlbGVjdCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgbW9iaWxlT3B0aW9uc01vZGU6IFwiYXV0b1wiLFxuICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICBub09wdGlvbnNUZXh0OiBudWxsLFxuICAgIG9uQmx1cjogbnVsbCxcbiAgICBvbkZvY3VzOiBudWxsLFxuICAgIG9wdGlvbnNBYnNvbHV0ZTogdHJ1ZSxcbiAgICBvcHRpb25zUG9ydGFsOiB0cnVlLFxuICAgIG9wdGlvbnNXaWR0aDogbnVsbCxcbiAgICBzZWFyY2g6IGZhbHNlLFxuICAgIHNlYXJjaFRleHRJbnB1dFByb3BzOiB1bmRlZmluZWQsXG4gICAgdHJhbnNwYXJlbnQ6IGZhbHNlXG4gIH1cblxuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGF0dHJpYnV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdFRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgZGVmYXVsdFZhbHVlczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMubm9kZSxcbiAgICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtb2JpbGVPcHRpb25zTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJhbHdheXNcIiwgXCJuZXZlclwiXSksXG4gICAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBub09wdGlvbnNUZXh0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNDbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT3B0aW9uc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgY3VycmVudENvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGh0bWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHJpZ2h0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZFxuICAgICAgfSkpLFxuICAgICAgUHJvcFR5cGVzLmZ1bmNcbiAgICBdKS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNBYnNvbHV0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zUG9ydGFsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2g6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgc2VhcmNoVGV4dElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gICAgfSkpLFxuICAgIHRyYW5zcGFyZW50OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5XG4gIH0pXG5cbiAgY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIGVuZE9mU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcbiAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSAwXG4gIG9wdGlvbnNDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICBwYWdlSW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBwcmV2aW91c0JvZHlPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICBwcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICBzZWFyY2hUZXh0SW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBzZWxlY3RDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICB0ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpLnRcbiAgd2luZG93V2lkdGggPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS53aWR0aFxuICB3aW5kb3dIZWlnaHQgPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS5oZWlnaHRcbiAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3RhdGV9ICovXG4gIHN0YXRlID0ge1xuICAgIGN1cnJlbnRPcHRpb25zOiB0aGlzLmRlZmF1bHRDdXJyZW50T3B0aW9ucygpLFxuICAgIHNlbGVjdENvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBlbmRPZlNlbGVjdExheW91dDogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgbG9hZGVkT3B0aW9uczogdGhpcy5kZWZhdWx0TG9hZGVkT3B0aW9ucygpLFxuICAgIGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZDogMCxcbiAgICBsb2FkT3B0aW9uc1JlcXVlc3RJZDogMCxcbiAgICBwYWdlOiAxLFxuICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICBvcGVuZWQ6IGZhbHNlLFxuICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgb3B0aW9uc1BsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNUb3A6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zVmlzaWJpbGl0eTogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkLFxuICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGwsXG4gICAgdG90YWxDb3VudDogbnVsbCxcbiAgICB0b2dnbGVkOiB0aGlzLmRlZmF1bHRUb2dnbGVkKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNEZWJ1Z0VuYWJsZWQgPSAoKSA9PiBCb29sZWFuKHRoaXMucC5kZWJ1ZylcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtkZXRhaWxzXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRlYnVnTG9nID0gKGZ1bmN0aW9uTmFtZSwgZGV0YWlscyA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghdGhpcy5pc0RlYnVnRW5hYmxlZCgpKSByZXR1cm5cblxuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xuICAgICAgaWQ6IHRoaXMucC5pZCxcbiAgICAgIG5hbWU6IHRoaXMucC5uYW1lXG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkRGV0YWlscyA9IGRldGFpbHMgPyBPYmplY3QuYXNzaWduKHt9LCBiYXNlRGV0YWlscywgZGV0YWlscykgOiBiYXNlRGV0YWlsc1xuXG4gICAgaWYgKG1lcmdlZERldGFpbHMgJiYgT2JqZWN0LmtleXMobWVyZ2VkRGV0YWlscykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coYFtIYXlhU2VsZWN0XSAke2Z1bmN0aW9uTmFtZX1gLCBtZXJnZWREZXRhaWxzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWApXG4gICAgfVxuICB9XG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge3R9ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpXG5cbiAgICB0aGlzLnQgPSB0XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wcm9wcy52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGF5YVNlbGVjdDogVW5kZWZpbmVkIGdpdmVuIGFzIHZhbHVlXCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dUYXJnZXQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIoRGltZW5zaW9ucywgXCJjaGFuZ2VcIiwgdGhpcy50dC5vbkRpbWVuc2lvbnNDaGFuZ2UpXG4gICAgdXNlUHJlc3NPdXRzaWRlKHRoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZiwgdGhpcy50dC5vblByZXNzT3V0c2lkZU9wdGlvbnMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwicmVzaXplXCIsIHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwic2Nyb2xsXCIsIHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldHVwXCIsIHtcbiAgICAgIGhhc0NvbnRyb2xsZWRWYWx1ZXM6IFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyxcbiAgICAgIGhhc0NvbnRyb2xsZWRUb2dnbGVkOiBcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgbXVsdGlwbGU6IHRoaXMucC5tdWx0aXBsZSxcbiAgICAgIG9wdGlvbnNUeXBlOiBBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zXG4gICAgfSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4sIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0XSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50T3B0aW9uSWRzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSAmJiBhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50T3B0aW9uSWRzLCB0aGlzLnByb3BzLnZhbHVlcykgJiYgdHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wcm9wcy52YWx1ZXNdKVxuICB9XG5cbiAgdHJhbnNsYXRlKG1zZ0lELCBvcHRpb25zKSB7XG4gICAgaWYgKG1zZ0lELnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KGBoYXlhX3NlbGVjdCR7bXNnSUR9YCwgb3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudChtc2dJRCwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICBkZWZhdWx0Q3VycmVudE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgdmFsdWVzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSkgcmV0dXJuIFtdXG4gICAgY29uc3QgY29udHJvbGxlZFZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFtdXG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKHt2YWx1ZX0pID0+XG4gICAgICAoZGVmYXVsdFZhbHVlICYmIHZhbHVlID09IGRlZmF1bHRWYWx1ZSkgfHxcbiAgICAgICAgKGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHx8XG4gICAgICAgIGNvbnRyb2xsZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRMb2FkZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBvcHRpb25zOiAke3R5cGVvZiBvcHRpb25zfWApXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0QWN0aXZlUGFnZSA9ICgpID0+IHRoaXMucy5wYWdlIHx8IDFcblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzTW9iaWxlT3B0aW9uc1NoZWV0KCkge1xuICAgIGlmICh0aGlzLnAubW9iaWxlT3B0aW9uc01vZGUgPT0gXCJhbHdheXNcIikgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5wLm1vYmlsZU9wdGlvbnNNb2RlID09IFwibmV2ZXJcIikgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikud2lkdGggPD0gTU9CSUxFX09QVElPTlNfTUFYX1dJRFRIXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH1cbiAgICovXG4gIHBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4ge29wdGlvbnM6IHJlc3VsdH1cblxuICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHJlc3VsdC5vcHRpb25zLFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQudG90YWxDb3VudCxcbiAgICAgICAgcGFnZTogcmVzdWx0LnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiByZXN1bHQucGFnZVNpemVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gcGFyYW1zLm9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZVNpemVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnRvdGFsQ291bnRdXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIHJlc29sdmVQYWdlU2l6ZSh7b3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KSB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgJiYgcGFnZVNpemUgPiAwKSByZXR1cm4gcGFnZVNpemVcblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwICYmIHBhZ2UgIT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucy5wYWdlU2l6ZVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwID8gdGhpcy5zLnBhZ2VTaXplIDogbnVsbFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gKi9cbiAgZGVmYXVsdFRvZ2dsZWQoKSB7XG4gICAgcmV0dXJuIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5wcm9wcy5kZWZhdWx0VG9nZ2xlZCB8fCB7fVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIHBvcnRhbE5hbWUoKSB7XG4gICAgcmV0dXJuIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgfHwgYGhheWEtc2VsZWN0LSR7U3RyaW5nKGlkRm9yQ29tcG9uZW50KHRoaXMpKX1gXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBnZXRUb2dnbGVkID0gKCkgPT4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnMudG9nZ2xlZFxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj59ICovXG4gIGdldFZhbHVlcyA9ICgpID0+IChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpXG4gICAgPyAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXSlcbiAgICA6IChBcnJheS5pc0FycmF5KHRoaXMucy5jdXJyZW50T3B0aW9ucykgPyB0aGlzLnMuY3VycmVudE9wdGlvbnMgOiBbXSkubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbnx7dmFsdWU6IHN0cmluZ3xudW1iZXJ9Pn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgJiYgdGhpcy5wLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gKi9cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucC52YWx1ZXMpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnAub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zLmxvYWRlZE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gT3B0aW9ucyBoYXZlbid0IGJlZW4gbG9hZGVkIHlldC5cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoe3ZhbHVlfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5jdXJyZW50T3B0aW9uc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpIHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb25zKSByZXR1cm4gW11cblxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uc1xuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24/LnZhbHVlKVxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsLCBvcHRpb25zfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRNb3VudFwiLCB7XG4gICAgICBoYXNBdHRyaWJ1dGVNb2RlbDogQm9vbGVhbihhdHRyaWJ1dGUgJiYgbW9kZWwpLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlczogQm9vbGVhbihkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlcyB8fCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpLFxuICAgICAgb3B0aW9uc1R5cGU6IHR5cGVvZiBvcHRpb25zXG4gICAgfSlcblxuICAgIGlmICgoKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgfHwgKGF0dHJpYnV0ZSAmJiBtb2RlbCkpICYmIHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG5cbiAgICBpZiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykge1xuICAgICAgY29uc3QgbmV3VG9nZ2xlZCA9IHRoaXMucC50b2dnbGVkXG5cbiAgICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnN0YXRlLnRvZ2dsZWQsIG5ld1RvZ2dsZWQpKSB7XG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY29tcG9uZW50RGlkVXBkYXRlXCIsIHtzeW5jaW5nS2V5czogT2JqZWN0LmtleXMobmV3U3RhdGUpfSlcbiAgICAgIHRoaXMucy50b2dnbGVkID0gbmV3U3RhdGUudG9nZ2xlZFxuICAgIH1cblxuICAgIHRoaXMuc3luY09wdGlvbnNQbGFjZW1lbnRXaXRoTW9kZSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtlbmRPZlNlbGVjdFJlZn0gPSB0aGlzLnR0XG4gICAgY29uc3Qge3RyYW5zcGFyZW50fSA9IHRoaXMucFxuICAgIGNvbnN0IHtjbGFzc05hbWUsIHBsYWNlaG9sZGVyLCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSA/IHRoaXMucHJvcHMudmFsdWVzIDogW11cbiAgICBjb25zdCB7b3BlbmVkLCBvcHRpb25zUGxhY2VtZW50fSA9IHRoaXMuc1xuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgaWQgPSBpZEZvckNvbXBvbmVudCh0aGlzKVxuICAgIGNvbnN0IG1vYmlsZU9wdGlvbnNTaGVldCA9IHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKVxuXG4gICAgY29uc3Qgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwgPSB7Li4udGhpcy5zdHlsaW5nRm9yKFwic2VsZWN0Q29udGFpbmVyXCIsIHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyQ29sb3I6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogXCIjOTk5XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogNCxcbiAgICAgIGJvcmRlcldpZHRoOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IDEsXG4gICAgICBjb2xvcjogXCIjMDAwXCIsXG4gICAgICBjdXJzb3I6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcInBvaW50ZXJcIiA6IHVuZGVmaW5lZCxcbiAgICAgIHBhZGRpbmdUb3A6IDUsXG4gICAgICBwYWRkaW5nQm90dG9tOiA1LFxuICAgICAgcGFkZGluZ0xlZnQ6IDVcbiAgICB9LCBbdHJhbnNwYXJlbnRdKX1cblxuICAgIGlmIChvcGVuZWQgJiYgIW1vYmlsZU9wdGlvbnNTaGVldCkge1xuICAgICAgLy8gUHJldmVudCBzZWxlY3QgZnJvbSBjaGFuZ2luZyBzaXplIG9uY2UgdGhlIGNvbnRlbnQgaXMgcmVwbGFjZWQgd2l0aCBzZWFyY2ggdGV4dCBvbmNlIG9wZW5lZFxuICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuaGVpZ2h0ID0gdGhpcy5zLmhlaWdodFxuXG4gICAgICBjb25zdCBiYXNlQm9yZGVyUmFkaXVzID0gc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG5cbiAgICAgIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYWJvdmVcIikge1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG5cbiAgICAgICAgZGVsZXRlIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSAwXG5cbiAgICAgICAgZGVsZXRlIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicm9vdFZpZXdEYXRhU2V0XCIsIHtcbiAgICAgICAgICBhcHBsaWVkUmVxdWVzdElkOiB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLFxuICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgY29tcG9uZW50OiBcImhheWEtc2VsZWN0XCIsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgb3BlbmVkLFxuICAgICAgICAgIG9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgICAgcmVxdWVzdElkOiB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgICAgdG9nZ2xlczogQm9vbGVhbih0b2dnbGVPcHRpb25zKVxuICAgICAgICB9LCBbdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCwgY2xhc3NOYW1lLCBpZCwgb3BlbmVkLCBvcHRpb25zUGxhY2VtZW50LCB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQsIEJvb2xlYW4odG9nZ2xlT3B0aW9ucyldKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1haW5cIil9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0XCJcbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VsZWN0Q29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcInNlbGVjdC1jb250YWluZXJcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25TZWxlY3RDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblNlbGVjdENsaWNrZWR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdHlsZT17c2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWx9XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qtc2VsZWN0LWNvbnRhaW5lclwiXG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50U2VsZWN0ZWREYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1zZWxlY3RlZFwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50U2VsZWN0ZWRcIiwgdGhpcy5jdXJyZW50U2VsZWN0ZWRTdHlsZSB8fD0ge2ZsZXg6IDEsIGZsZXhXcmFwOiBcIndyYXBcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LWN1cnJlbnQtc2VsZWN0ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcGVuZWQgJiYgIW1vYmlsZU9wdGlvbnNTaGVldCAmJlxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRleHRJbnB1dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7KCFvcGVuZWQgfHwgbW9iaWxlT3B0aW9uc1NoZWV0KSAmJlxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgPFRleHQgbnVtYmVyT2ZMaW5lcz17MX0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm5vdGhpbmdTZWxlY3RlZFwiLCB0aGlzLm5vdGhpbmdTZWxlY3RlZFN0eWxlIHx8PSB7Y29sb3I6IFwiZ3JleVwifSl9PlxuICAgICAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgdGhpcy50cmFuc2xhdGUoXCIubm90aGluZ19zZWxlY3RlZFwiKX1cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwICYmIFBsYXRmb3JtLk9TID09IFwid2ViXCIgJiZcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnAubXVsdGlwbGUgPyB2YWx1ZXMgOiBbdmFsdWVzWzBdXSkubWFwKCh2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgY3VycmVudC12YWx1ZS0ke3ZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlcy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubWFwKChjdXJyZW50T3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50T3B0aW9uRGF0YVNldCB8fD0ge2NsYXNzOiBcImN1cnJlbnQtb3B0aW9uXCJ9fVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbnRPcHRpb24ua2V5IHx8IGBjdXJyZW50LXZhbHVlLSR7Y3VycmVudE9wdGlvbi52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvblwiLCB7bWFyZ2luUmlnaHQ6IDZ9KX1cbiAgICAgICAgICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtY3VycmVudC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uR3JvdXBcIiwgdGhpcy5jdXJyZW50T3B0aW9uR3JvdXBTdHlsZSB8fD0ge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFRleHRcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlICE9IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJiBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkaWdnKGN1cnJlbnRPcHRpb24sIFwidmFsdWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcmVzZW50T3B0aW9uKGN1cnJlbnRPcHRpb24sIFwiY3VycmVudFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jaGV2cm9uQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcImNoZXZyb24tY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25Db250YWluZXJcIiwgdGhpcy5jaGV2cm9uQ29udGFpbmVyU3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogOFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1jaGV2cm9uLWNvbnRhaW5lclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBuYW1lPXtvcGVuZWQgPyBcImNoZXZyb24tdXBcIiA6IFwiY2hldnJvbi1kb3duXCJ9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjaGV2cm9uXCIsIHRoaXMuY2hldnJvblN0eWxlIHx8PSB7Zm9udFNpemU6IDEyfSl9IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLmVuZE9mU2VsZWN0RGF0YVNldCB8fD0ge2NsYXNzOiBcImVuZC1vZi1zZWxlY3RcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25FbmRPZlNlbGVjdExheW91dH1cbiAgICAgICAgICByZWY9e2VuZE9mU2VsZWN0UmVmfVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LWVuZC1vZi1zZWxlY3RcIlxuICAgICAgICAvPlxuICAgICAgICB7b3BlbmVkICYmIHRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFBvcnRhbCBuYW1lPXt0aGlzLnBvcnRhbE5hbWUoKX0+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9Qb3J0YWw+XG4gICAgICAgIH1cbiAgICAgICAge29wZW5lZCAmJiAhdGhpcy5wLm9wdGlvbnNQb3J0YWwgJiZcbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb250YWluZXIoKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gKi9cbiAgc2VhcmNoVGV4dElucHV0KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VhcmNoVGV4dElucHV0RGF0YVNldCB8fD0ge2NsYXNzOiBcInNlYXJjaC10ZXh0LWlucHV0XCJ9fVxuICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc2VhcmNoVGV4dFZhbHVlfVxuICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25DaGFuZ2VTZWFyY2hUZXh0fVxuICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy50cmFuc2xhdGUoXCIuc2VhcmNoX2RvdF9kb3RfZG90XCIpfVxuICAgICAgICByZWY9e3RoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwic2VhcmNoVGV4dElucHV0XCIsIHRoaXMuc2VhcmNoVGV4dElucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgICAgb3V0bGluZTogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwibm9uZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgfSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXNlYXJjaC1pbnB1dFwiXG4gICAgICAgIHsuLi50aGlzLnAuc2VhcmNoVGV4dElucHV0UHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj58c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRWYWx1ZXMgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSByZXR1cm4gZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIGlmIChkZWZhdWx0VmFsdWVzKSByZXR1cm4gZGVmYXVsdFZhbHVlc1xuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBtb2RlbCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlIGluIG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX06ICR7YXR0cmlidXRlfWApXG5cbiAgICAgIHJldHVybiBtb2RlbFthdHRyaWJ1dGVdKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIGxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5kZWZhdWx0VmFsdWVzKClcblxuICAgIGlmICghZGVmYXVsdFZhbHVlcykgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrXCIsIHtkZWZhdWx0VmFsdWVzfSlcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvcHMub3B0aW9ucyh7XG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5nZXRTZWFyY2hUZXh0KCksXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHZhbHVlczogZGVmYXVsdFZhbHVlc1xuICAgIH0pXG5cbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjay5yZXN1bHRcIiwge2xvYWRlZE9wdGlvbnNDb3VudDogb3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuXG4gICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gdGhpcy5zdGF0ZS5jdXJyZW50T3B0aW9ucy5jb25jYXQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3twYWdlPzogbnVtYmVyfX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkT3B0aW9ucyA9IGFzeW5jICh7cGFnZX0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5nZXRTZWFyY2hUZXh0KClcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNcIiwge1xuICAgICAgcGFnZSxcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZClcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhZ2UpID8gcGFnZSA6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7c2VhcmNoVmFsdWUsIHBhZ2U6IHJlcXVlc3RlZFBhZ2V9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXN1bHRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG5cbiAgICBpZiAocmVxdWVzdElkICE9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5pZ25vcmVkX3N0YWxlX3Jlc3VsdFwiLCB7XG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHNlYXJjaFZhbHVlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocmVzdWx0UGFnZSkgPyByZXN1bHRQYWdlIDogcmVxdWVzdGVkUGFnZVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzb2x2ZWRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBOdW1iZXIuaXNGaW5pdGUocmVzb2x2ZWRQYWdlU2l6ZSkgJiYgcmVzb2x2ZWRQYWdlU2l6ZSA+IDBcbiAgICAgID8gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyByZXNvbHZlZFBhZ2VTaXplKVxuICAgICAgOiBudWxsXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIHBhZ2U6IHJlc29sdmVkUGFnZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcocmVzb2x2ZWRQYWdlKSxcbiAgICAgIHBhZ2VTaXplOiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyByZXNvbHZlZFBhZ2VTaXplIDogbnVsbCxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSwgKCkgPT4gdGhpcy5wcm9wcy5vbk9wdGlvbnNMb2FkZWQ/Lih7b3B0aW9uczogbG9hZGVkT3B0aW9uc30pKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLnJlc3VsdFwiLCB7XG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgICAgcmVzb2x2ZWRQYWdlLFxuICAgICAgcmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3trZXk6IHN0cmluZywgbG9hZGVkT3B0aW9uOiBIYXlhU2VsZWN0T3B0aW9ufX1cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIGhheWFTZWxlY3RPcHRpb24oe2tleSwgbG9hZGVkT3B0aW9ufSkge1xuICAgIGlmIChsb2FkZWRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIpIHtcbiAgICAgIHJldHVybiA8T3B0aW9uR3JvdXAga2V5PXtrZXl9IG9wdGlvbj17bG9hZGVkT3B0aW9ufSAvPlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8T3B0aW9uXG4gICAgICAgIGN1cnJlbnRPcHRpb25WYWx1ZXM9e3RoaXMuZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpfVxuICAgICAgICBpY29uPXt0aGlzLmljb25Gb3JPcHRpb24obG9hZGVkT3B0aW9uKX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIG9wdGlvbj17bG9hZGVkT3B0aW9ufVxuICAgICAgICBvbk9wdGlvbkNsaWNrZWQ9e3RoaXMudHQub25PcHRpb25DbGlja2VkfVxuICAgICAgICBvcHRpb25zUGxhY2VtZW50PXt0aGlzLnMub3B0aW9uc1BsYWNlbWVudH1cbiAgICAgICAgcHJlc2VudE9wdGlvbj17dGhpcy50dC5wcmVzZW50T3B0aW9ufVxuICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEJhY2tncm91bmRDb2xvcn1cbiAgICAgICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaFZhbHVlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3JlcXVlc3RJZF1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBsb2FkT3B0aW9uc0Zyb21BcnJheShvcHRpb25zLCBzZWFyY2hWYWx1ZSwgcmVxdWVzdElkID0gdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCkge1xuICAgIGNvbnN0IGxvd2VyU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZT8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGxvYWRlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigoe3RleHR9KSA9PiAhbG93ZXJTZWFyY2hWYWx1ZSB8fCB0ZXh0Py50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhsb3dlclNlYXJjaFZhbHVlKSlcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNGcm9tQXJyYXlcIiwge1xuICAgICAgcmVxdWVzdElkLFxuICAgICAgdG90YWxPcHRpb25zQ291bnQ6IG9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnMubGVuZ3RoXG4gICAgfSlcblxuICAgIHRoaXMucy5sb2FkZWRPcHRpb25zID0gbG9hZGVkT3B0aW9uc1xuICAgIHRoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICB0aGlzLnMucGFnZSA9IDFcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBcIjFcIlxuICAgIHRoaXMucy5wYWdlU2l6ZSA9IG51bGxcbiAgICB0aGlzLnMudG90YWxDb3VudCA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3t3aW5kb3c6IHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcn19fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uRGltZW5zaW9uc0NoYW5nZSA9ICh7d2luZG93fSkgPT4ge1xuICAgIHRoaXMud2luZG93V2lkdGggPSB3aW5kb3cud2lkdGhcbiAgICB0aGlzLndpbmRvd0hlaWdodCA9IHdpbmRvdy5oZWlnaHRcblxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENvbnRhaW5lckxheW91dCA9IChlKSA9PiB7XG4gICAgdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e25hdGl2ZUV2ZW50Pzoge2xheW91dD86IEhheWFTZWxlY3RMYXlvdXR9fX0gZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uRW5kT2ZTZWxlY3RMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGVuZE9mU2VsZWN0TGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtlbmRPZlNlbGVjdExheW91dH1cblxuICAgIGlmICh0aGlzLnMub3BlbmVkICYmIGVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aCkge1xuICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gZW5kT2ZTZWxlY3RMYXlvdXQud2lkdGhcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PiB7XG4gICAgICB0aGlzLm1lYXN1cmVOYXRpdmVMYXlvdXQodGhpcy50dC5lbmRPZlNlbGVjdFJlZiwgXCJlbmRPZlNlbGVjdExheW91dFwiKVxuXG4gICAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e25hdGl2ZUV2ZW50Pzoge2xheW91dD86IEhheWFTZWxlY3RMYXlvdXR9fX0gZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uT3B0aW9uc0NvbnRhaW5lckxheW91dCA9IChlKSA9PiB7XG4gICAgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBtZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpIHtcbiAgICB0aGlzLm1lYXN1cmVOYXRpdmVMYXlvdXQodGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYsIFwic2VsZWN0Q29udGFpbmVyTGF5b3V0XCIpXG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBNZWFzdXJlcyBhIG5hdGl2ZSB2aWV3IGluIHdpbmRvdyBjb29yZGluYXRlcyBmb3IgcG9ydGFsIHBvc2l0aW9uaW5nLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlJlZk9iamVjdDxvYmplY3Q+fSByZWYgVmlldyByZWYuXG4gICAqIEBwYXJhbSB7XCJzZWxlY3RDb250YWluZXJMYXlvdXRcInxcImVuZE9mU2VsZWN0TGF5b3V0XCJ9IHN0YXRlS2V5IFN0YXRlIGxheW91dCBrZXkuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbWVhc3VyZU5hdGl2ZUxheW91dChyZWYsIHN0YXRlS2V5KSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHJldHVyblxuXG4gICAgY29uc3QgZWxlbWVudCA9IHJlZi5jdXJyZW50XG4gICAgaWYgKCFlbGVtZW50IHx8IHR5cGVvZiBlbGVtZW50Lm1lYXN1cmVJbldpbmRvdyAhPSBcImZ1bmN0aW9uXCIpIHJldHVyblxuXG4gICAgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3coKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWRMYXlvdXQgPSB7aGVpZ2h0LCBsZWZ0LCB0b3AsIHdpZHRofVxuXG4gICAgICBpZiAoIWxheW91dEhhc1Bvc2l0aW9uKG1lYXN1cmVkTGF5b3V0KSkgcmV0dXJuXG5cbiAgICAgIC8qKiBAdHlwZSB7UGFydGlhbDxIYXlhU2VsZWN0U3RhdGU+fSAqL1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIFtzdGF0ZUtleV06IG1lYXN1cmVkTGF5b3V0XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZUtleSA9PSBcImVuZE9mU2VsZWN0TGF5b3V0XCIgJiYgdGhpcy5zLm9wZW5lZCAmJiB3aWR0aCkge1xuICAgICAgICBuZXdTdGF0ZS5vcHRpb25zV2lkdGggPSB3aWR0aFxuICAgICAgfVxuXG4gICAgICBpZiAoIWFueXRoaW5nRGlmZmVyZW50KHRoaXMuc1tzdGF0ZUtleV0sIG1lYXN1cmVkTGF5b3V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uU2VsZWN0Q2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgY29uc3Qge29wZW5lZH0gPSB0aGlzLnNcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25TZWxlY3RDbGlja2VkXCIsIHtvcGVuZWR9KVxuXG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5PcHRpb25zKClcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0LmxvYWRPcHRpb25zLCAyMDApXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e29wdGlvbnM/OiBBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn19IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xvc2VPcHRpb25zKHtvcHRpb25zfSA9IHt9KSB7XG4gICAgY29uc3QgY2xvc2VkT3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNsb3NlT3B0aW9uc1wiLCB7Y2xvc2VkT3B0aW9uc0NvdW50OiBjbG9zZWRPcHRpb25zPy5sZW5ndGggfHwgMH0pXG4gICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIGxvYWRlZE9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgb3B0aW9uc0NvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgICAgIHBhZ2VTaXplOiBudWxsLFxuICAgICAgICB0b3RhbENvdW50OiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY2xvc2VPcHRpb25zLmRvbmVcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZCwgb3B0aW9uc1Zpc2liaWxpdHk6IHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKSB7XG4gICAgICB0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCh7b3B0aW9uczogY2xvc2VkT3B0aW9uc30pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucC5vbkJsdXIpIHRoaXMucC5vbkJsdXIoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGdldFNlYXJjaFRleHQgPSAoKSA9PiB0aGlzLnNlYXJjaFRleHRWYWx1ZSB8fCBcIlwiXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICByZXNldFNlYXJjaFRleHRJbnB1dCA9ICgpID0+IHtcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLmN1cnJlbnRcblxuICAgIGlmIChpbnB1dD8uY2xlYXIpIHtcbiAgICAgIGlucHV0LmNsZWFyKClcbiAgICB9IGVsc2UgaWYgKGlucHV0Py5zZXROYXRpdmVQcm9wcykge1xuICAgICAgaW5wdXQuc2V0TmF0aXZlUHJvcHMoe3RleHQ6IFwiXCJ9KVxuICAgIH0gZWxzZSBpZiAoaW5wdXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gXCJcIlxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGlmIHRoZSByZWYgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCB2YWx1ZSBhc3NpZ25tZW50LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQ2hhbmdlU2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQ2hhbmdlU2VhcmNoVGV4dFwiLCB7c2VhcmNoVGV4dCwgY3VycmVudFBhZ2U6IHRoaXMucy5wYWdlfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IHNlYXJjaFRleHRcblxuICAgIGlmICh0aGlzLnMucGFnZSAhPSAxKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlOiAxLCBwYWdlSW5wdXRWYWx1ZTogXCIxXCJ9LCB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb3Blbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbW9iaWxlT3B0aW9uc1NoZWV0ID0gdGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib3Blbk9wdGlvbnNcIiwge1xuICAgICAgY3VycmVudE9wdGlvbnNDb3VudDogdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpPy5sZW5ndGggfHwgMCxcbiAgICAgIG1vYmlsZU9wdGlvbnNTaGVldCxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRoaXMucC5zZWFyY2hcbiAgICB9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gIW1vYmlsZU9wdGlvbnNTaGVldFxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogbW9iaWxlT3B0aW9uc1NoZWV0ID8gbnVsbCA6IHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQ/LmhlaWdodCxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBtb2JpbGVPcHRpb25zU2hlZXQgPyBcInNoZWV0XCIgOiBcImJlbG93XCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBtb2JpbGVPcHRpb25zU2hlZXQgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogbW9iaWxlT3B0aW9uc1NoZWV0ID8gdW5kZWZpbmVkIDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aCxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChtb2JpbGVPcHRpb25zU2hlZXQpIHtcbiAgICAgICAgICB0aGlzLmxvY2tCb2R5U2Nyb2xsKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lYXN1cmVOYXRpdmVTZWxlY3RMYXlvdXRzKClcbiAgICAgICAgICB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmxvYWRPcHRpb25zKHtwYWdlOiAxfSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wLm9uRm9jdXMpIHRoaXMucC5vbkZvY3VzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgZm9jdXNUZXh0SW5wdXQgPSAoKSA9PiBkaWdnKHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLCBcImN1cnJlbnRcIik/LmZvY3VzKClcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGxvY2tCb2R5U2Nyb2xsKCkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiIHx8IHR5cGVvZiBkb2N1bWVudCA9PSBcInVuZGVmaW5lZFwiIHx8IHRoaXMuYm9keVNjcm9sbExvY2tlZCkgcmV0dXJuXG5cbiAgICB0aGlzLnByZXZpb3VzQm9keU92ZXJmbG93ID0gZG9jdW1lbnQuYm9keT8uc3R5bGUub3ZlcmZsb3dcbiAgICB0aGlzLnByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8uc3R5bGUub3ZlcmZsb3dcblxuICAgIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIlxuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcblxuICAgIHRoaXMuYm9keVNjcm9sbExvY2tlZCA9IHRydWVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgdW5sb2NrQm9keVNjcm9sbCgpIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiB8fCB0eXBlb2YgZG9jdW1lbnQgPT0gXCJ1bmRlZmluZWRcIiB8fCAhdGhpcy5ib2R5U2Nyb2xsTG9ja2VkKSByZXR1cm5cblxuICAgIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5wcmV2aW91c0JvZHlPdmVyZmxvdyB8fCBcIlwiXG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5wcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgfHwgXCJcIlxuXG4gICAgdGhpcy5wcmV2aW91c0JvZHlPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICAgIHRoaXMucHJldmlvdXNEb2N1bWVudE92ZXJmbG93ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5ib2R5U2Nyb2xsTG9ja2VkID0gZmFsc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uKCkge1xuICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gLy8gRGVib3VuY2UgYWZ0ZXIgdW4tbW91bnQgaGFuZGVsaW5nLlxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25cIilcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IHRydWVcbiAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkJlbG93KClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc3luY09wdGlvbnNQbGFjZW1lbnRXaXRoTW9kZSgpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkge1xuICAgICAgaWYgKHRoaXMucy5vcHRpb25zUGxhY2VtZW50ICE9IFwic2hlZXRcIikgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25TaGVldCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQgPT0gXCJzaGVldFwiKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkJlbG93KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25TaGVldCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7d2luZG93SGVpZ2h0fSA9IHRoaXMudHRcbiAgICBjb25zdCB7b3B0aW9uc0NvbnRhaW5lckxheW91dCwgc2VsZWN0Q29udGFpbmVyTGF5b3V0fSA9IHRoaXMuc1xuICAgIGNvbnN0IGVuZE9mU2VsZWN0TGF5b3V0ID0gdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0XG5cbiAgICBjb25zdCBvcHRpb25zVG9wID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIlxuICAgICAgPyBlbmRPZlNlbGVjdExheW91dD8udG9wXG4gICAgICA6IHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LmhlaWdodCA9PSBcIm51bWJlclwiXG4gICAgICAgID8gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcCArIHNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zVG9wKSkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIiwgcmVhc29uOiBcIm1pc3Npbmctb3B0aW9ucy10b3BcIn0pXG4gICAgICB0aGlzLm1lYXN1cmVOYXRpdmVTZWxlY3RMYXlvdXRzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNUb3RhbEJvdHRvbVBvc2l0aW9uID0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyBvcHRpb25zVG9wXG4gICAgY29uc3Qgd2luZG93SGVpZ2h0V2l0aFNjcm9sbCA9IHdpbmRvd0hlaWdodCArICh0aGlzLnMuc2Nyb2xsVG9wIHx8IDApXG5cbiAgICBpZiAod2luZG93SGVpZ2h0V2l0aFNjcm9sbCA8IG9wdGlvbnNUb3RhbEJvdHRvbVBvc2l0aW9uKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW5cIiwge3BsYWNlbWVudDogXCJhYm92ZVwifSlcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW5cIiwge3BsYWNlbWVudDogXCJiZWxvd1wifSlcbiAgICAgIHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25TaGVldCgpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgdGhpcy5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwic2hlZXRcIixcbiAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGNvbnN0IHtlbmRPZlNlbGVjdExheW91dH0gPSB0aGlzLnNcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVcIilcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImFib3ZlXCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkJlbG93KCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3dcIilcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkFueXRoaW5nUmVzaXplZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Jlc2l6ZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nUmVzaXplZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Njcm9sbGVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkFueXRoaW5nU2Nyb2xsZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMucy5zY3JvbGxMZWZ0ID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbFxuICAgICAgdGhpcy5zLnNjcm9sbFRvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZCwgMjUpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvblByZXNzT3V0c2lkZU9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uUHJlc3NPdXRzaWRlT3B0aW9uc1wiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICAvLyBJZiBvcHRpb25zIGFyZSBvcGVuIGFuZCBhIGNsaWNrIGlzIG1hZGUgb3V0c2lkZSBvZiB0aGUgb3B0aW9ucyBjb250YWluZXJcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCBSZXNwb25kZXIgZXZlbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Nb2JpbGVPcHRpb25zQmFja2Ryb3BSZWxlYXNlID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICB9XG5cbiAgbW9iaWxlT3B0aW9uc0JhY2tkcm9wUGFuUmVzcG9uZGVyID0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKCkgPT4gdHJ1ZSxcbiAgICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXI6ICgpID0+IGZhbHNlLFxuICAgIG9uUGFuUmVzcG9uZGVyUmVsZWFzZTogdGhpcy50dC5vbk1vYmlsZU9wdGlvbnNCYWNrZHJvcFJlbGVhc2UsXG4gICAgb25QYW5SZXNwb25kZXJUZXJtaW5hdGU6IHRoaXMudHQub25Nb2JpbGVPcHRpb25zQmFja2Ryb3BSZWxlYXNlXG4gIH0pXG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gKi9cbiAgcGFnaW5hdGlvblRvdGFsUGFnZXMoKSB7XG4gICAgY29uc3Qge3RvdGFsQ291bnR9ID0gdGhpcy5zXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSB8fCB0b3RhbENvdW50IDw9IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtcbiAgICAgIG9wdGlvbnM6IHRoaXMucy5sb2FkZWRPcHRpb25zIHx8IFtdLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICBwYWdlU2l6ZTogdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudFxuICAgIH0pXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgfHwgcGFnZVNpemUgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtBcnJheTx7a2V5OiBzdHJpbmcsIHR5cGU6IFwicGFnZVwifFwiZWxsaXBzaXNcIiwgdmFsdWU/OiBudW1iZXJ9Pn1cbiAgICovXG4gIHBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgY29uc3QgYWRkUGFnZSA9IChwYWdlKSA9PiBpdGVtcy5wdXNoKHtrZXk6IGBwYWdlLSR7cGFnZX1gLCB0eXBlOiBcInBhZ2VcIiwgdmFsdWU6IHBhZ2V9KVxuICAgIGNvbnN0IGFkZEVsbGlwc2lzID0gKGtleSkgPT4gaXRlbXMucHVzaCh7a2V5LCB0eXBlOiBcImVsbGlwc2lzXCJ9KVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdG90YWxQYWdlczsgcGFnZSArPSAxKSB7XG4gICAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgYWRkUGFnZSgxKVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IDJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50UGFnZSAtIHdpbmRvd1NpemUpXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCBjdXJyZW50UGFnZSArIHdpbmRvd1NpemUpXG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPD0gMykge1xuICAgICAgc3RhcnQgPSAyXG4gICAgICBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgNSlcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICBlbmQgPSB0b3RhbFBhZ2VzIC0gMVxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgyLCB0b3RhbFBhZ2VzIC0gNClcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiAyKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLXN0YXJ0XCIpXG5cbiAgICBmb3IgKGxldCBwYWdlID0gc3RhcnQ7IHBhZ2UgPD0gZW5kOyBwYWdlICs9IDEpIHtcbiAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgdG90YWxQYWdlcyAtIDEpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtZW5kXCIpXG5cbiAgICBhZGRQYWdlKHRvdGFsUGFnZXMpXG5cbiAgICByZXR1cm4gaXRlbXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgYWN0aXZlUGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgZmFsbGJhY2tUZXh0ID0gYFBhZ2UgJHthY3RpdmVQYWdlfSBvZiAke3RvdGFsUGFnZXN9YFxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKFwiLnBhZ2luYXRpb25fcGFnZV9vZl9wYWdlc1wiLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbGxiYWNrVGV4dCxcbiAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICB0b3RhbFBhZ2VzXG4gICAgfSkgfHwgZmFsbGJhY2tUZXh0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBpZiAodGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQpIHJldHVybiB0aGlzLnMucGFnZUlucHV0VmFsdWVcblxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcylcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gcGFnZSAqL1xuICBzZXRQYWdpbmF0aW9uUGFnZSA9IChwYWdlKSA9PiB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRQYWdpbmF0aW9uUGFnZVwiLCB7cmVxdWVzdGVkUGFnZTogcGFnZSwgdG90YWxQYWdlc30pXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHJldHVyblxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLmZsb29yKHBhZ2UpLCAxKSwgdG90YWxQYWdlcylcblxuICAgIGlmIChuZXh0UGFnZSA9PSB0aGlzLmdldEFjdGl2ZVBhZ2UoKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtwYWdlOiBuZXh0UGFnZSwgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhuZXh0UGFnZSl9LFxuICAgICAgKCkgPT4gdGhpcy50dC5sb2FkT3B0aW9ucyh7cGFnZTogbmV4dFBhZ2V9KVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25QcmV2UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgLSAxKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbk5leHRQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSArIDEpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSB0cnVlXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICBvblBhZ2luYXRpb25JbnB1dENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IHZhbHVlXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRCbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSByYXdWYWx1ZSA/IE51bWJlcihTdHJpbmcocmF3VmFsdWUpLm1hdGNoKC9cXGQrLyk/LlswXSkgOiBOYU5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRWYWx1ZSkgPyBwYXJzZWRWYWx1ZSA6IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAodG90YWxQYWdlcyAmJiBOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dFN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0S2V5RG93biA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudD8ua2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuXG4gICAgdGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdChldmVudClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIHBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMgfHwgdG90YWxQYWdlcyA8PSAxKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHByZXZEaXNhYmxlZCA9IGN1cnJlbnRQYWdlIDw9IDFcbiAgICBjb25zdCBuZXh0RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge2NsYXNzOiBcIm9wdGlvbnMtcGFnaW5hdGlvblwifX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2UyZThmMFwiLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiAxLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfX1cbiAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qtb3B0aW9ucy1wYWdpbmF0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1oZWFkZXJcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwifX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1wYWdpbmF0aW9uLWhlYWRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uUHJldkJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcHJldlwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcmV2RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvblByZXZQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke3ByZXZEaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwcmV2RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1wYWdpbmF0aW9uLXByZXZcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicGFnaW5hdGlvbkxhYmVsRGF0YVNldFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcInBhZ2luYXRpb24tbGFiZWxcIixcbiAgICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VcbiAgICAgICAgICAgIH0sIFtjdXJyZW50UGFnZV0pfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTGFiZWxCdXR0b24gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmMWY1ZjlcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE0LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAxNDAsXG4gICAgICAgICAgICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiA2XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtcGFnaW5hdGlvbi1sYWJlbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSW5wdXQgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWlucHV0XCJ9fVxuICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1iZXItcGFkXCJcbiAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Qmx1cn1cbiAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Rm9jdXN9XG4gICAgICAgICAgICAgIG9uUHJlc3NJbj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvbktleURvd249e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRLZXlEb3dufVxuICAgICAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy50dC5wYWdlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHNlbGVjdFRleHRPbkZvY3VzXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbklucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjMGYxNzJhXCIsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgIG91dGxpbmU6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogMTIwXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXBhZ2luYXRpb24taW5wdXRcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wYWdpbmF0aW9uSW5wdXRWYWx1ZSh0b3RhbFBhZ2VzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25OZXh0QnV0dG9uIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1uZXh0XCJ9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e25leHREaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uTmV4dFByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7bmV4dERpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IG5leHREaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LXBhZ2luYXRpb24tbmV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblBhZ2VzIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1wYWdlc1wifX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25QYWdlcyB8fD0ge1xuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgbWFyZ2luVG9wOiA4XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1wYWdpbmF0aW9uLXBhZ2VzXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiZWxsaXBzaXNcIikge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgcGFnaW5hdGlvbkVsbGlwc2lzLSR7aXRlbS5rZXl9YF0gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWVsbGlwc2lzXCJ9fVxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzIHx8PSB7cGFkZGluZ0hvcml6b250YWw6IDZ9fVxuICAgICAgICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtcGFnaW5hdGlvbi1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXNUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzY0NzQ4YlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxQYWdpbmF0aW9uUGFnZUJ1dHRvblxuICAgICAgICAgICAgICAgIGFjdGl2ZT17aXRlbS52YWx1ZSA9PSBjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgIG9uUGFnZVNlbGVjdGVkPXt0aGlzLnR0LnNldFBhZ2luYXRpb25QYWdlfVxuICAgICAgICAgICAgICAgIHBhZ2U9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7aWQ6IHN0cmluZ3xudW1iZXIsIG9wdGlvbnNDb250ZW50OiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9fSBhcmdzIE1vYmlsZSBzaGVldCBjb250ZW50LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgbW9iaWxlT3B0aW9uc0NvbnRhaW5lcih7aWQsIG9wdGlvbnNDb250ZW50fSkge1xuICAgIGNvbnN0IHNoZWV0TWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS5oZWlnaHQgKiAwLjgpXG4gICAgbGV0IHNoZWV0U3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDEwMDAwMCxcbiAgICAgIGVsZXZhdGlvbjogMTAwMDAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgbWF4SGVpZ2h0OiBzaGVldE1heEhlaWdodCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsXG4gICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAxOCxcbiAgICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAxOCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgdmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5XG4gICAgfSwgW3NoZWV0TWF4SGVpZ2h0LCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldKVxuXG4gICAgaWYgKFwiaGVpZ2h0XCIgaW4gc2hlZXRTdHlsZSkge1xuICAgICAgc2hlZXRTdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIHNoZWV0U3R5bGUpXG4gICAgICBkZWxldGUgc2hlZXRTdHlsZS5oZWlnaHRcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5tb2JpbGVPcHRpb25zT3ZlcmxheURhdGFTZXQgfHw9IHtjbGFzczogXCJtb2JpbGUtb3B0aW9ucy1vdmVybGF5XCJ9fVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc092ZXJsYXlcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNPdmVybGF5IHx8PSB7XG4gICAgICAgICAgcG9zaXRpb246IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICAgICAgZWxldmF0aW9uOiA5OTk5OVxuICAgICAgICB9KX1cbiAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtbW9iaWxlLW9wdGlvbnMtb3ZlcmxheVwiXG4gICAgICA+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5tb2JpbGVPcHRpb25zQmFja2Ryb3BEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtYmFja2Ryb3BcIn19XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNCYWNrZHJvcFwiLCBzdHlsZXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wIHx8PSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMTUsIDIzLCA0MiwgMC4zMilcIlxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLWJhY2tkcm9wXCJcbiAgICAgICAgICB7Li4udGhpcy50dC5tb2JpbGVPcHRpb25zQmFja2Ryb3BQYW5SZXNwb25kZXIucGFuSGFuZGxlcnN9XG4gICAgICAgIC8+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICAgIFwibW9iaWxlT3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICAgIHtpZCwgcm9sZTogXCJkaWFsb2dcIiwgb3B0aW9uc1BsYWNlbWVudDogXCJzaGVldFwiLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5IHx8IFwiaGlkZGVuXCJ9LFxuICAgICAgICAgICAgW2lkLCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldXG4gICAgICAgICAgKX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NoZWV0U3R5bGV9XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qtb3B0aW9ucy1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc1Njcm9sbENvbnRlbnRcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNTY3JvbGxDb250ZW50IHx8PSB7XG4gICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMubW9iaWxlT3B0aW9uc1Njcm9sbFZpZXdEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtc2Nyb2xsLXZpZXdcIn19XG4gICAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiaGFuZGxlZFwiXG4gICAgICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkXG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc1Njcm9sbFZpZXdcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3IHx8PSB7ZmxleEdyb3c6IDAsIGZsZXhTaHJpbms6IDEsIG1pbkhlaWdodDogMH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtbW9iaWxlLW9wdGlvbnMtc2Nyb2xsLXZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb25zQ29udGVudH1cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMubW9iaWxlT3B0aW9uc1NlYXJjaENvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJtb2JpbGUtb3B0aW9ucy1zZWFyY2gtY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXJcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXIgfHw9IHtcbiAgICAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAxNCxcbiAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMTBcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtbW9iaWxlLW9wdGlvbnMtc2VhcmNoLWNvbnRhaW5lclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuc2VhcmNoVGV4dElucHV0KCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV8bnVsbH0gKi9cbiAgb3B0aW9uc0NvbnRhaW5lcigpIHtcbiAgICBjb25zdCB7c2VsZWN0Q29udGFpbmVyTGF5b3V0LCBsb2FkZWRPcHRpb25zLCBlbmRPZlNlbGVjdExheW91dCwgb3B0aW9uc0NvbnRhaW5lckxheW91dCwgb3B0aW9uc1BsYWNlbWVudCwgb3B0aW9uc1Zpc2liaWxpdHl9ID0gdGhpcy5zXG4gICAgbGV0IGxlZnQsIHRvcFxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcbiAgICBjb25zdCBkZXNrdG9wT3B0aW9uc1BsYWNlbWVudCA9IG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJzaGVldFwiID8gXCJiZWxvd1wiIDogb3B0aW9uc1BsYWNlbWVudFxuICAgIGNvbnN0IG9wdGlvbnNDb250ZW50ID0gKFxuICAgICAgPD5cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lm1hcCgobG9hZGVkT3B0aW9uKSA9PlxuICAgICAgICAgIHRoaXMuaGF5YVNlbGVjdE9wdGlvbih7XG4gICAgICAgICAgICBrZXk6IGxvYWRlZE9wdGlvbi5rZXkgfHwgYGxvYWRlZC1vcHRpb24tJHtsb2FkZWRPcHRpb24udmFsdWV9YCxcbiAgICAgICAgICAgIGxvYWRlZE9wdGlvblxuICAgICAgICAgIH0pXG4gICAgICAgICl9XG4gICAgICAgIHtsb2FkZWRPcHRpb25zPy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5ub09wdGlvbnNDb250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibm8tb3B0aW9ucy1jb250YWluZXJcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibm9PcHRpb25zQ29udGFpbmVyXCIsIHRoaXMubm9PcHRpb25zQ29udGFpbmVyU3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiA4LFxuICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDEwXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW5vLW9wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAge3RoaXMucC5ub09wdGlvbnNUZXh0ID8gdGhpcy5wLm5vT3B0aW9uc1RleHQoKSA6IHRoaXMudHJhbnNsYXRlKFwiLm5vX29wdGlvbnNfZm91bmRcIil9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICAgIHt0aGlzLnBhZ2luYXRpb25Db250cm9scygpfVxuICAgICAgPC8+XG4gICAgKVxuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lcih7aWQsIG9wdGlvbnNDb250ZW50fSlcbiAgICB9XG5cbiAgICBsZXQgc3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgekluZGV4OiA5OTk5OSxcbiAgICAgIGVsZXZhdGlvbjogOTk5OTksXG4gICAgICB2aXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSxcbiAgICAgIHdpZHRoOiB0aGlzLnAub3B0aW9uc1dpZHRoIHx8IHRoaXMucy5vcHRpb25zV2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyQ29sb3I6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBtYXhIZWlnaHQ6IDMwMCxcbiAgICAgIG92ZXJmbG93WTogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwiYXV0b1wiIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnAub3B0aW9uc1BvcnRhbCkge1xuICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnAub3B0aW9uc0Fic29sdXRlKSB7XG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgc3R5bGUuYm90dG9tID0gMFxuICAgIH0gZWxzZSBpZiAoZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyAxXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5sZWZ0XG4gICAgICAgIHRvcCA9IHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LmhlaWdodCA9PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBzZWxlY3RDb250YWluZXJMYXlvdXQudG9wICsgc2VsZWN0Q29udGFpbmVyTGF5b3V0LmhlaWdodCArIDFcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyB0b3AgLSAyIDogdG9wXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgICBzdHlsZS50b3AgPSAwXG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZXNrdG9wT3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgIC8vIG9uTGF5b3V0IHRvcCB2YWx1ZSBpcyBzb21ldGltZXMgbmVnYXRpdmUgc28gdXNlIGJyb3dzZXIgSlMgdG8gZ2V0IGl0IGluc3RlYWRcbiAgICAgICAgdG9wID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcblxuICAgICAgICAvLyBvbkxheW91dCBsZWZ0IHZhbHVlcyBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgd2hlbiBjaGFuZ2VkXG4gICAgICAgIGxlZnQgPSBkaWdnKHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5sZWZ0XG4gICAgICAgIHRvcCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8udG9wXG4gICAgICB9XG5cbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobGVmdCkgJiYgTnVtYmVyLmlzRmluaXRlKHRvcCkpIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgICAgc3R5bGUudG9wID0gdG9wIC0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgICBzdHlsZS50b3AgPSAwXG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rb253biBvcHRpb25zIHBsYWNlbWVudDogJHtkZXNrdG9wT3B0aW9uc1BsYWNlbWVudH1gKVxuICAgIH1cblxuICAgIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICBzdHlsZS5vcGFjaXR5ID0gb3B0aW9uc1Zpc2liaWxpdHkgPT0gXCJoaWRkZW5cIiA/IDAgOiAxXG4gICAgICBzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvbnNDb250YWluZXJcIiwgc3R5bGUsIFtsZWZ0LCB0b3AsIHN0eWxlLnZpc2liaWxpdHksIHN0eWxlLndpZHRoXSlcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFxuICAgICAgICAgIFwib3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICB7aWQsIHJvbGU6IFwiZGlhbG9nXCIsIG9wdGlvbnNWaXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSB8fCBcImhpZGRlblwifSxcbiAgICAgICAgICBbaWQsIG9wdGlvbnNWaXNpYmlsaXR5XVxuICAgICAgICApfVxuICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgIHJlZj17dGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW9wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAge1BsYXRmb3JtLk9TID09IFwid2ViXCIgJiZcbiAgICAgICAgICBvcHRpb25zQ29udGVudFxuICAgICAgICB9XG4gICAgICAgIHtQbGF0Zm9ybS5PUyAhPSBcIndlYlwiICYmXG4gICAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICAgIGtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHM9XCJoYW5kbGVkXCJcbiAgICAgICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWRcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYG5hdGl2ZU9wdGlvbnNTY3JvbGxWaWV3LSR7c3R5bGUubWF4SGVpZ2h0IHx8IDMwMH1gXSB8fD0ge1xuICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHN0eWxlLm1heEhlaWdodCB8fCAzMDBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnNDb250ZW50fVxuICAgICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IGxvYWRlZE9wdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uT3B0aW9uQ2xpY2tlZCA9IChldmVudCwgbG9hZGVkT3B0aW9uKSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBjb25zdCB7b25DaGFuZ2UsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHttdWx0aXBsZX0gPSB0aGlzLnBcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IGN1cnJlbnRPcHRpb25zLmZpbmQoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUgPT0gbG9hZGVkT3B0aW9uLnZhbHVlKVxuICAgIGNvbnN0IG5ld1RvZ2dsZWQgPSB7Li4udG9nZ2xlZH1cbiAgICBsZXQgbmV3Q3VycmVudE9wdGlvbnNcbiAgICBsZXQgYWN0aW9uXG5cbiAgICBpZiAoZXhpc3RpbmdPcHRpb24pIHtcbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUb2dnbGUgPSB0b2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV1cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdG9nZ2xlT3B0aW9ucy5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsdWUgPT0gY3VycmVudFRvZ2dsZSlcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID49ICh0b2dnbGVPcHRpb25zLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgLy8gTm8gbmV4dCB0b2dnbGVkIC0gcmVtb3ZlIHRvZ2dsZWQgYW5kIG9wdGlvblxuICAgICAgICAgIGRlbGV0ZSBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV1cbiAgICAgICAgICBhY3Rpb24gPSBcInJlbW92ZS1vcHRpb24tYWZ0ZXItbGFzdC10b2dnbGVcIlxuXG4gICAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9ucy5maWx0ZXIoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUgIT0gbG9hZGVkT3B0aW9uLnZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFscmVhZHkgdG9nZ2xlZCAtIHNldCB0byBuZXh0IHRvZ2dsZVxuICAgICAgICAgIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXSA9IGRpZ2codG9nZ2xlT3B0aW9ucywgY3VycmVudEluZGV4ICsgMSwgXCJ2YWx1ZVwiKVxuICAgICAgICAgIGFjdGlvbiA9IFwiY3ljbGUtdG9nZ2xlXCJcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjdXJyZW50IG9wdGlvbnNcbiAgICAgICAgYWN0aW9uID0gXCJyZW1vdmUtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9ucy5maWx0ZXIoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUgIT0gbG9hZGVkT3B0aW9uLnZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgY2xpY2tlZCBvcHRpb24gaXMgZGlzYWJsZWRcbiAgICAgIGlmIChsb2FkZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uT3B0aW9uQ2xpY2tlZFwiLCB7XG4gICAgICAgICAgYWN0aW9uOiBcImlnbm9yZS1kaXNhYmxlZC1vcHRpb25cIixcbiAgICAgICAgICBvcHRpb25WYWx1ZTogbG9hZGVkT3B0aW9uLnZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodG9nZ2xlT3B0aW9ucykge1xuICAgICAgICAvLyBTZXQgZnJlc2ggdG9nZ2xlXG4gICAgICAgIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXSA9IHRvZ2dsZU9wdGlvbnNbMF0udmFsdWVcbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG11bHRpcGxlIHx8IHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgYWN0aW9uID0gXCJhZGQtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9ucy5jb25jYXQoW2xvYWRlZE9wdGlvbl0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb24gPSBcInJlcGxhY2Utc2luZ2xlLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gW2xvYWRlZE9wdGlvbl1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMudmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGN1cnJlbnRPcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBhIHVzZU1lbW8gY2FsbGJhY2sgaXMgaGFuZGVsaW5nIHNldHRpbmcgY3VycmVudCBvcHRpb25zLlxuICAgIH0gZWxzZSBpZiAobmV3Q3VycmVudE9wdGlvbnMpIHtcbiAgICAgIG5ld1N0YXRlLmN1cnJlbnRPcHRpb25zID0gbmV3Q3VycmVudE9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gbmV3Q3VycmVudE9wdGlvbnMgfHwgY3VycmVudE9wdGlvbnNcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25PcHRpb25DbGlja2VkXCIsIHtcbiAgICAgIGFjdGlvbjogYWN0aW9uIHx8IFwidG9nZ2xlLW9ubHlcIixcbiAgICAgIG11bHRpcGxlLFxuICAgICAgb3B0aW9uVmFsdWU6IGxvYWRlZE9wdGlvbi52YWx1ZSxcbiAgICAgIG9wdGlvbnNDb3VudEJlZm9yZTogY3VycmVudE9wdGlvbnMubGVuZ3RoLFxuICAgICAgb3B0aW9uc0NvdW50QWZ0ZXI6IG9wdGlvbnMubGVuZ3RoXG4gICAgfSlcblxuICAgIGlmICghbXVsdGlwbGUpIHRoaXMuY2xvc2VPcHRpb25zKHtvcHRpb25zfSlcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0T25DaGFuZ2VQYXlsb2FkfSAqL1xuICAgICAgb25DaGFuZ2Uoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdG9nZ2xlczogbmV3VG9nZ2xlZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZVZhbHVlKSB7XG4gICAgICBsZXQgb3B0aW9uVmFsdWVcblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBkaWcob3B0aW9ucywgMCwgXCJ2YWx1ZVwiKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnAub25DaGFuZ2VWYWx1ZShvcHRpb25WYWx1ZSlcbiAgICB9XG5cbiAgICBpZiAoXCJ0b2dnbGVkXCIgaW4gbmV3U3RhdGUpIHtcbiAgICAgIHRoaXMucy50b2dnbGVkID0gbmV3U3RhdGUudG9nZ2xlZFxuICAgIH1cblxuICAgIGlmIChcImN1cnJlbnRPcHRpb25zXCIgaW4gbmV3U3RhdGUpIHtcbiAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IG5ld1N0YXRlLmN1cnJlbnRPcHRpb25zXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsaW5nTmFtZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtzdHlsZV1cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBbY2FjaGVzXVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICovXG4gIHN0eWxpbmdGb3Ioc3R5bGluZ05hbWUsIHN0eWxlID0ge30sIGNhY2hlcyA9IFtdKSB7XG4gICAgbGV0IGN1c3RvbVN0eWxpbmcgPSBkaWcodGhpcywgXCJwcm9wc1wiLCBcInN0eWxlc1wiLCBzdHlsaW5nTmFtZSlcbiAgICBjb25zdCBiYXNlU3R5bGUgPSB7Li4uc3R5bGV9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0eWxpbmcgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RTdHlsaW5nQ29udGV4dH0gKi9cbiAgICAgIGN1c3RvbVN0eWxpbmcgPSBjdXN0b21TdHlsaW5nKHtcbiAgICAgICAgb3BlbmVkOiB0aGlzLnMub3BlbmVkLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiB0aGlzLnMub3B0aW9uc1BsYWNlbWVudCxcbiAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0eWxlOiBiYXNlU3R5bGVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbVN0eWxpbmcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlU3R5bGUsIGN1c3RvbVN0eWxpbmcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoYHN0eWxpbmdGb3ItJHtzdHlsaW5nTmFtZX1gLCBzdHlsZSwgY2FjaGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cbiAgaWNvbkZvck9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCB7dG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG5cbiAgICBpZiAodG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpKSB7XG4gICAgICBjb25zdCB0b2dnbGVkVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICAgIGNvbnN0IHRvZ2dsZWRPcHRpb24gPSB0b2dnbGVPcHRpb25zLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsdWUgPT0gdG9nZ2xlZFZhbHVlKVxuXG4gICAgICBpZiAoIXRvZ2dsZWRPcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIGEgdG9nZ2xlIG9wdGlvbiBmb3IgdmFsdWU6ICR7dG9nZ2xlZFZhbHVlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2dnbGVkT3B0aW9uLmljb25cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAgICogQHBhcmFtIHtcImN1cnJlbnRcInxcIm9wdGlvblwifSBtb2RlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9XG4gICAqL1xuICBwcmVzZW50T3B0aW9uID0gKG9wdGlvbiwgbW9kZSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25Db250ZW50LCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBpY29uID0gdGhpcy5pY29uRm9yT3B0aW9uKG9wdGlvbilcbiAgICBjb25zdCB0b2dnbGVWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgIGNvbnN0IHRvZ2dsZU9wdGlvbiA9IHRvZ2dsZU9wdGlvbnM/LmZpbmQoKHRvZ2dsZU9wdGlvbkkpID0+IHRvZ2dsZU9wdGlvbkkudmFsdWUgPT0gdG9nZ2xlVmFsdWUpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgPT0gb3B0aW9uLnZhbHVlKVxuICAgIGxldCBzdHlsZVxuICAgIGxldCBjb250ZW50Tm9kZVxuXG4gICAgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIpIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicHJlc2VudE9wdGlvblZpZXdEYXRhU2V0XCIsIHtcbiAgICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCxcbiAgICAgICAgICB0b2dnbGVJY29uOiB0b2dnbGVPcHRpb24/Lmljb24sXG4gICAgICAgICAgdG9nZ2xlVmFsdWU6IHRvZ2dsZU9wdGlvbj8udmFsdWUsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9LCBbb3B0aW9uLnRleHQsIG9wdGlvbi52YWx1ZSwgdG9nZ2xlT3B0aW9uPy5pY29uLCB0b2dnbGVPcHRpb24/LnZhbHVlXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uU3R5bGVcIiwge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCJ9KX1cbiAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmICEob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvblBsYWNlaG9sZGVyU3R5bGVcIiwge3dpZHRoOiAyMH0pfVxuICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb24tcGxhY2Vob2xkZXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvbkNvbnRhaW5lclN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgd2lkdGg6IDIwfSl9PlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPXtpY29ufVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uQ29udGVudCkge1xuICAgICAgICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dH0gKi9cbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uQ29udGVudCh7aWNvbiwgbW9kZSwgb3B0aW9uLCBzZWxlY3RlZCwgdG9nZ2xlT3B0aW9uLCB0b2dnbGVWYWx1ZSwgdG9nZ2xlZH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwiY3VycmVudFwiICYmIG9wdGlvbi5jdXJyZW50Q29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY3VycmVudENvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmNvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TICE9IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPFJlbmRlckh0bWwgc291cmNlPXt7aHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSAoXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb24tdGV4dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25Db250ZW50U3R5bGVcIiwge2ZsZXg6IDF9KX0+XG4gICAgICAgICAgICAgICAge2NvbnRlbnROb2RlfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIHtvcHRpb24ucmlnaHQgJiZcbiAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblJpZ2h0U3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCBtYXJnaW5MZWZ0OiA4fSl9PlxuICAgICAgICAgICAgICAgICAge29wdGlvbi5yaWdodH1cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIClcbiAgICAgICAgfSkoKX1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIHNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKSB7XG4gICAgY29uc3Qge29wdGlvbnMsIHZhbHVlc30gPSB0aGlzLnBcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IFtdXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3BhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLCB2YWx1ZXN9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBjdXJyZW50T3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IGN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG4gICAgY29uc3Qgc3RhdGVWYWx1ZXMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50VmFsdWVzLCBzdGF0ZVZhbHVlcykpIHtcbiAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IEhheWFTZWxlY3RTaGFwZUNvbXBvbmVudCA9IHNoYXBlQ29tcG9uZW50KEhheWFTZWxlY3QpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oSGF5YVNlbGVjdFNoYXBlQ29tcG9uZW50KVxuIl19
|