@bikdotai/bik-component-library 0.0.77-4.beta.0.4 → 0.0.77-4.beta.0.5

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.
@@ -1 +1,5 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var I=require("@emotion/styled/base"),g=require("../../_virtual/_tslib.js"),C=require("react/jsx-runtime"),A=require("../../assets/icons/check.svg.js"),c=require("../../assets/icons/chevronLeft.svg.js"),l=require("../../assets/icons/chevronRight.svg.js"),b=require("../../assets/icons/cross.svg.js"),Z=require("../../assets/icons/edit.svg.js"),d=require("../../assets/icons/info.svg.js"),G=require("../../assets/icons/refresh.svg.js"),X=require("../../assets/icons/thumbs_down.svg.js"),V=require("../../assets/icons/thumbs_up.svg.js"),W=require("../../helpers/BaseWhatsappContentLang.helper.js"),H=require("react"),B=require("../../constants/Theme.js"),R=require("../tooltips/Tooltip.js"),u=require("../TypographyStyle.js"),J=require("./ai/actionRegistry.js"),N=require("./ai/api.js"),x=require("./CustomEditor.styled.js"),m=require("./WhatsAppTextEditorHeader.js");function y(I){return I&&"object"==typeof I&&"default"in I?I:{default:I}}var i=y(I),F=y(H);function n(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const Y="Character limit reached",a=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("production"===process.env.NODE_ENV?{name:"6cf6k2",styles:"padding:10px 12px 8px"}:{name:"6cf6k2",styles:"padding:10px 12px 8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJ3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:n}),p=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",B.COLORS.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkJ1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),h=i.default("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",B.COLORS.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),S=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:n}),U=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",B.COLORS.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0R3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),s=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",B.COLORS.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkR5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),k=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",B.COLORS.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0U2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),Q=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",B.COLORS.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":B.COLORS.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0VrRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),o=new W.BaseWhatsappContentLangHelper,w={[m.EditorActionTypes.BOLD]:"*",[m.EditorActionTypes.ITALIC]:"_",[m.EditorActionTypes.STRIKETHROUGH]:"~"};function v(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const z=F.default.forwardRef(((I,W)=>{var{onChange:y,onClickVariable:i,text:F,RightComponent:n,error:z,limit:t,onError:e,rows:j,actions:T,editorInstanceKey:D,templateType:L="marketing",templateId:K,requestExecutor:O,baseUrl:P,endpointPath:E,useCase:f,storeId:M,apiAdapter:r,conversationId:q="whatsapp-template-editor",systemId:_="whatsapp-writer",intent:$="default",enabledAIActions:II=[m.AIEditorActionTypes.REPHRASE,m.AIEditorActionTypes.SHORTEN,m.AIEditorActionTypes.EXPAND,m.AIEditorActionTypes.EMOJIFY],disableBuiltInAIActions:gI=!1,promptOverrides:CI,rephraseTones:AI,aiActionMinChars:cI,instructionSuggestions:lI=J.DEFAULT_INSTRUCTION_SUGGESTIONS,onAIEvent:bI,onAITagComputed:ZI,onAIToneSelect:dI,onAIActionRequest:GI,onBuildAIPrompt:XI}=I,VI=g.__rest(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const WI=H.useRef(null),[HI,BI]=H.useState(F||""),[RI,uI]=H.useState(!1),[JI,NI]=H.useState(0),[xI,mI]=H.useState(!1),[yI,iI]=H.useState(!1),[FI,nI]=H.useState(""),[YI,aI]=H.useState({}),[pI,hI]=H.useState(null),[SI,UI]=H.useState([]),[sI,kI]=H.useState(0),[QI,oI]=H.useState(null),wI=H.useRef(null),vI=H.useRef(null),zI=H.useRef(!1),tI=H.useRef(null),eI=H.useRef(null),jI=H.useMemo((()=>J.resolveActionPrompts(L,CI,AI)),[CI,AI,L]),TI=H.useMemo((()=>{const I=FI.trim().toLowerCase();return I?lI.filter((g=>g.toLowerCase().includes(I))):[]}),[lI,FI]),DI=H.useMemo((()=>Object.assign(Object.assign({},J.DEFAULT_AI_ACTION_MIN_CHARS),cI||{})),[cI]),LI=DI[m.AIEditorActionTypes.REPHRASE]||J.DEFAULT_AI_ACTION_MIN_CHARS[m.AIEditorActionTypes.REPHRASE],KI=H.useCallback(((I,g)=>{null==bI||bI(I,g)}),[bI]),OI=H.useCallback((I=>{BI((g=>g===I?g:I))}),[]),PI=H.useCallback((I=>{if(tI.current&&clearTimeout(tI.current),I.length>1200)return null==y||y(I,I),void(tI.current=setTimeout((()=>{null==y||y(I,o.getHTML(I))}),16));null==y||y(I,o.getHTML(I))}),[y]),EI=H.useCallback((()=>{hI(null),UI([]),kI(0),oI(null)}),[]),fI=H.useCallback((()=>{if(JI>=5)return;const I=JI+1;NI(I),"undefined"!=typeof window&&D&&sessionStorage.setItem(v(D),String(I)),uI(!0),vI.current&&clearTimeout(vI.current),vI.current=setTimeout((()=>{uI(!1)}),1200)}),[D,JI]);function MI(I){const g=null==WI?void 0:WI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function rI(I){var g,C;let A=null!==(C=null===(g=WI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(WI.current&&I){const g=WI.current.selectionStart,C=WI.current.selectionEnd,c=I;if(g===C)return qI(c);{A=o.wrappWildcard(g,C,c,A);const I=o.getHTML(A);return OI(A),{text:A,html:I}}}return{text:A,html:A}}function qI(I){var g,C;const A=null!==(C=null===(g=WI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(WI.current&&I){const g=WI.current.selectionStart;if(g===WI.current.selectionEnd)return _I(I,g)}return{text:A,html:A}}function _I(I,g){var C,A;let c=null!==(A=null===(C=WI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=o.getHTML(c);return OI(c),{text:c,html:l}}H.useEffect((()=>{if("undefined"==typeof window||!D)return;const I=Number(sessionStorage.getItem(v(D))||"0");Number.isNaN(I)||NI(I)}),[D]),H.useEffect((()=>{if(!(HI.length>=LI))return zI.current=!1,uI(!1),void(wI.current&&(clearTimeout(wI.current),wI.current=null));zI.current||fI(),wI.current&&clearTimeout(wI.current),wI.current=setTimeout((()=>{fI()}),3e3),zI.current=!0}),[HI,LI,fI]),H.useEffect((()=>()=>{wI.current&&clearTimeout(wI.current),vI.current&&clearTimeout(vI.current),tI.current&&clearTimeout(tI.current)}),[]);const $I=SI[sI]||"",Ig=SI.length<3,gg=!!pI&&SI.length>0,Cg=SI.length<=1||sI<=0,Ag=SI.length<=1||sI>=SI.length-1,cg=H.useCallback((function(I){let C=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0;return g.__awaiter(void 0,void 0,void 0,(function*(){var g,l,b;if(!(GI||r||O&&P))return void(null==e||e("AI configuration missing"));if(!HI.trim())return;const Z=DI[I]||J.DEFAULT_AI_ACTION_MIN_CHARS[I]||50;if(HI.length<Z)return;if(xI)return;if(C&&!Ig)return;const d=jI[I],G=c||YI[I]||d.defaultToneId||(null===(l=null===(g=d.tones)||void 0===g?void 0:g[0])||void 0===l?void 0:l.id),X=null===(b=d.tones)||void 0===b?void 0:b.find((I=>I.id===G)),V=void 0!==A?A:FI,W=(null==XI?void 0:XI({actionType:I,currentText:HI,templateType:L,config:d,toneId:G,toneLabel:null==X?void 0:X.label,instructionText:V||void 0}))||N.buildActionPrompt({config:d,currentText:HI,selectedToneId:G,instructionText:V});mI(!0),KI("ai_action_triggered",{action_type:I,template_id:K});try{const g=GI?yield GI({actionType:I,currentText:HI,templateType:L,toneId:G,toneLabel:null==X?void 0:X.label,instructionText:V||void 0,prompt:W}):yield N.requestAISuggestion({apiAdapter:r,requestExecutor:O,baseUrl:P,endpointPath:E,prompt:W,intent:$,conversationId:q,systemId:_,useCase:f,storeId:M}),A="string"==typeof g?g.trim():((null==g?void 0:g.body)||"").trim();if(!A)return;if(!C)return hI(HI),oI(I),UI([A]),void kI(0);UI((I=>{const g=[...I,A].slice(0,3);return kI(g.length-1),g}))}catch(I){null==e||e("Failed to generate AI suggestion")}finally{mI(!1)}}))}),[O,P,HI,xI,Ig,jI,YI,FI,KI,K,E,r,$,q,_,f,M,L,e,DI,GI,XI]),lg=H.useCallback((()=>{if(!$I||!pI||!QI)return;OI($I),PI($I),KI("ai_suggestion_accepted",{action_type:QI,template_id:K});const I=function(I,g){const C=I.length,A=g.length,c=Array(A+1).fill(0).map(((I,g)=>g));for(let l=1;l<=C;l++){let C=c[0];c[0]=l;for(let b=1;b<=A;b++){const A=c[b];I[l-1]===g[b-1]?c[b]=C:c[b]=Math.min(c[b-1],c[b],C)+1,C=A}}return c[A]}(pI,$I),g=Math.max(pI.length,$I.length,1),C=I/g;null==ZI||ZI({changedCharacters:I,templateLength:g,changePercent:C,isAiTagged:C>=.5}),EI()}),[$I,pI,QI,OI,PI,KI,K,ZI,EI]),bg=H.useCallback((()=>{QI&&(KI("ai_suggestion_discarded",{action_type:QI,template_id:K}),EI())}),[EI,KI,QI,K]),Zg=H.useCallback((I=>{QI&&KI("ai_feedback_submitted",{action_type:QI,template_id:K,rating:I,candidate_index:sI+1})}),[KI,QI,sI,K]),dg=H.useMemo((()=>gI?[]:II.map((I=>{var g,C,A;const c=jI[I],l=YI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===m.AIEditorActionTypes.REPHRASE,loading:xI&&QI===I,highlighted:I===m.AIEditorActionTypes.REPHRASE&&RI,disabled:!HI.trim()||HI.length<(DI[I]||J.DEFAULT_AI_ACTION_MIN_CHARS[I]||50)||xI||gg&&QI===I,showToneDropdown:I===m.AIEditorActionTypes.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[II,gI,jI,YI,xI,QI,gg,RI,HI,DI]);H.useImperativeHandle(W,(()=>({addTextOrWrap:rI,addText:qI,get:()=>HI,setCaretPosition:MI})),[rI,qI,HI]),H.useEffect((()=>{void 0!==F&&OI(F||"")}),[F,OI]),H.useEffect((()=>{if(!t||!e)return;const I=HI.length>t?Y:null!=z?z:"";eI.current!==I&&(eI.current=I,e(I))}),[HI,z,t,e]);const Gg={border:0,background:"transparent",padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:B.COLORS.content.primary};return C.jsxs(x.OuterContainer,{children:[C.jsxs(x.Container,Object.assign({isError:!!z},{children:[gg?C.jsxs("div",Object.assign({style:{padding:"12px",display:"flex",flexDirection:"column",gap:8,maxHeight:260,overflowY:"auto"}},{children:[C.jsx("div",Object.assign({style:{textDecoration:"line-through",color:B.COLORS.content.secondary}},{children:pI})),C.jsx("div",{children:$I}),C.jsxs("div",Object.assign({style:{display:"flex",alignItems:"center",gap:8}},{children:[C.jsxs("span",{children:[sI+1,"/",SI.length]}),C.jsx("button",Object.assign({"aria-label":"Previous suggestion",type:"button",style:Gg,disabled:Cg,onClick:()=>kI((I=>Math.max(0,I-1)))},{children:C.jsx(c.default,{width:14,height:14})})),C.jsx("button",Object.assign({"aria-label":"Next suggestion",type:"button",style:Gg,disabled:Ag,onClick:()=>kI((I=>Math.min(SI.length-1,I+1)))},{children:C.jsx(l.default,{width:14,height:14})})),C.jsx(R.Tooltip,Object.assign({body:"Like",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Like suggestion",type:"button",style:Gg,onClick:()=>Zg("like")},{children:C.jsx(V.default,{width:14,height:14})}))})),C.jsx(R.Tooltip,Object.assign({body:"Dislike",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Dislike suggestion",type:"button",style:Gg,onClick:()=>Zg("dislike")},{children:C.jsx(X.default,{width:14,height:14})}))})),Ig?C.jsx(R.Tooltip,Object.assign({body:"Regenerate",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Regenerate suggestion",type:"button",style:Gg,disabled:xI,onClick:()=>{QI&&cg(QI,!0)}},{children:C.jsx(G.default,{width:14,height:14})}))})):null,C.jsx(R.Tooltip,Object.assign({body:"Discard",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Discard suggestion",type:"button",style:Gg,onClick:bg},{children:C.jsx(b.default,{width:14,height:14})}))})),C.jsx(R.Tooltip,Object.assign({body:"Accept",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Accept suggestion",type:"button",style:Gg,onClick:lg},{children:C.jsx(A.default,{width:14,height:14})}))}))]}))]})):C.jsx(x.TextSpace,Object.assign({ref:WI},VI,{value:HI,onChange:function(I){const g=I.target.value;OI(g),PI(g)},onPaste:I=>{var g,C;const A=I.clipboardData.getData("text");if(A.length>1200){const c=(null===(g=WI.current)||void 0===g?void 0:g.selectionStart)||0,l=(null===(C=WI.current)||void 0===C?void 0:C.selectionEnd)||c,b=HI.slice(0,c)+A+HI.slice(l);requestAnimationFrame((()=>{OI(b),PI(b)})),I.preventDefault()}},rows:j})),yI?C.jsxs(a,{children:[C.jsxs(p,{children:[C.jsx(Z.default,{width:18,height:18,color:B.COLORS.content.secondary}),C.jsx(h,{value:FI,placeholder:"Add specific instructions to refine your message",onChange:I=>nI(I.target.value)}),C.jsxs(S,{children:[C.jsx(U,Object.assign({type:"button",onClick:()=>{nI(""),iI(!1)}},{children:"Cancel"})),C.jsx(s,Object.assign({type:"button",onClick:()=>{const I=FI.trim();iI(!1),nI(""),cg(m.AIEditorActionTypes.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),FI.trim().length>0&&TI.length>0?C.jsx(k,{children:TI.map((I=>C.jsx(Q,Object.assign({type:"button",selected:FI===I,onClick:()=>nI(I)},{children:I}),I)))}):null]}):null,C.jsx(m.WhatsAppTextEditorHeader,{actions:T,ref:WI,onActionSelect:function(I){const g=w[I];if(g&&WI.current){const I=WI.current.selectionStart;if(I===WI.current.selectionEnd){const{text:C}=_I(g,I);MI(I+1),PI(C)}else{const{text:I}=rI(g);PI(I)}}},RightComponent:n,onEmojiClick:function(I){const{text:g}=qI(I);PI(g)},aiActions:dg,disableAllActions:gg||xI,instructionActive:yI,onAIInstructionsClick:()=>iI(!0),onAIToneChange:(I,g)=>{aI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==dI||dI(I,g),I===m.AIEditorActionTypes.REPHRASE&&cg(I,!1,void 0,g)},onAIActionClick:I=>{if(!xI){if(gg){if(QI===I)return;return EI(),void cg(I,!1)}cg(I,!1)}}})]})),z&&z!==Y?C.jsxs("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[C.jsx(d.default,{width:16,height:16,color:B.COLORS.content.negative}),C.jsx(u.BodyCaption,Object.assign({color:B.COLORS.content.negative},{children:z}))]})):C.jsx(C.Fragment,{children:t?C.jsxs(u.BodyCaption,Object.assign({style:{color:z===Y||HI.length>t?B.COLORS.content.negative:B.COLORS.content.secondary}},{children:[HI.length,"/",t]})):C.jsx(C.Fragment,{})})]})}));z.displayName="WhatsAppTextEditor",exports.WhatsAppTextEditor=z;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var I=require("@emotion/styled/base"),g=require("../../_virtual/_tslib.js"),C=require("react/jsx-runtime"),A=require("@emotion/react"),c=require("../../assets/icons/check.svg.js"),l=require("../../assets/icons/chevronLeft.svg.js"),b=require("../../assets/icons/chevronRight.svg.js"),Z=require("../../assets/icons/cross.svg.js"),X=require("../../assets/icons/edit.svg.js"),G=require("../../assets/icons/info.svg.js"),d=require("../../assets/icons/refresh.svg.js"),V=require("../../assets/icons/thumbs_down.svg.js"),W=require("../../assets/icons/thumbs_up.svg.js"),H=require("../../helpers/BaseWhatsappContentLang.helper.js"),B=require("react"),R=require("../../constants/Theme.js"),J=require("../tooltips/Tooltip.js"),u=require("../TypographyStyle.js"),N=require("./ai/actionRegistry.js"),x=require("./ai/api.js"),y=require("./CustomEditor.styled.js"),m=require("./WhatsAppTextEditorHeader.js");function Y(I){return I&&"object"==typeof I&&"default"in I?I:{default:I}}var i=Y(I),F=Y(B);function a(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const n="Character limit reached",p=A.keyframes`
2
+ 0% { opacity: 0.55; }
3
+ 50% { opacity: 1; }
4
+ 100% { opacity: 0.55; }
5
+ `,h=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh9"}:{target:"ea7i3sh9",label:"EditorSkeletonContainer"})("production"===process.env.NODE_ENV?{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px"}:{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0MyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */",toString:a}),S=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh8"}:{target:"ea7i3sh8",label:"EditorSkeletonLine"})("height:16px;border-radius:6px;width:",(I=>I.width),";background:#ececef;animation:",p," 1.1s ease-in-out infinite;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUNzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),U=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("production"===process.env.NODE_ENV?{name:"6cf6k2",styles:"padding:10px 12px 8px"}:{name:"6cf6k2",styles:"padding:10px 12px 8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEN3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */",toString:a}),s=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",R.COLORS.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUR1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),k=i.default("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",R.COLORS.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMERzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),o=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUVzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */",toString:a}),w=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",R.COLORS.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0V3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),z=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",R.COLORS.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUZ5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),v=i.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",R.COLORS.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEY2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),Q=i.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",R.COLORS.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":R.COLORS.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUdrRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUVkaXRvckFjdGlvblR5cGVzLCBFZGl0b3JBY3Rpb25UeXBlcywgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB9IGZyb20gJy4vV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyJztcclxuY29uc3QgTElNSVRfUkVBQ0hFRCA9ICdDaGFyYWN0ZXIgbGltaXQgcmVhY2hlZCc7XHJcbmNvbnN0IFJFUEhSQVNFX0lETEVfTVMgPSAzMDAwO1xyXG5jb25zdCBNQVhfUkVQSFJBU0VfSElHSExJR0hUUyA9IDU7XHJcbmNvbnN0IE1BWF9TVUdHRVNUSU9OUyA9IDM7XHJcbmNvbnN0IExBUkdFX0lOUFVUX1RIUkVTSE9MRCA9IDEyMDA7XHJcbmNvbnN0IHNrZWxldG9uUHVsc2UgPSBrZXlmcmFtZXMgYFxuXHQwJSB7IG9wYWNpdHk6IDAuNTU7IH1cblx0NTAlIHsgb3BhY2l0eTogMTsgfVxuXHQxMDAlIHsgb3BhY2l0eTogMC41NTsgfVxuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTRweCAxMnB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDEwcHg7XG5cdG1pbi1oZWlnaHQ6IDE1MHB4O1xuYDtcclxuY29uc3QgRWRpdG9yU2tlbGV0b25MaW5lID0gc3R5bGVkLmRpdiBgXG5cdGhlaWdodDogMTZweDtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHR3aWR0aDogJHsocHJvcHMpID0+IHByb3BzLndpZHRofTtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0YW5pbWF0aW9uOiAke3NrZWxldG9uUHVsc2V9IDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSldIH0pKSwgZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sIHsgY2hpbGRyZW46IFtfanN4KEluZm9JY29uLCB7IHdpZHRoOiAxNiwgaGVpZ2h0OiAxNiwgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0pLCBfanN4KEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgY29sb3I6IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlIH0sIHsgY2hpbGRyZW46IGVycm9yIH0pKV0gfSkpKSA6IChfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogbGltaXQgPyAoX2pzeHMoQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZXJyb3IgPT09IExJTUlUX1JFQUNIRUQgfHwgY3VycmVudFRleHQubGVuZ3RoID4gbGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ09MT1JTLmNvbnRlbnQubmVnYXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW2N1cnJlbnRUZXh0Lmxlbmd0aCwgXCIvXCIsIGxpbWl0XSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7fSkpIH0pKV0gfSkpO1xyXG59KTtcclxuV2hhdHNBcHBUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1doYXRzQXBwVGV4dEVkaXRvcic7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdoYXRzQXBwVGV4dEVkaXRvci5qcy5tYXAiXX0= */")),t=new H.BaseWhatsappContentLangHelper,e={[m.EditorActionTypes.BOLD]:"*",[m.EditorActionTypes.ITALIC]:"_",[m.EditorActionTypes.STRIKETHROUGH]:"~"};function j(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const T=F.default.forwardRef(((I,A)=>{var{onChange:H,onClickVariable:Y,text:i,RightComponent:F,error:a,limit:p,onError:T,rows:D,actions:L,editorInstanceKey:K,templateType:O="marketing",templateId:E,requestExecutor:P,baseUrl:f,endpointPath:M,useCase:r,storeId:q,apiAdapter:_,conversationId:$="whatsapp-template-editor",systemId:II="whatsapp-writer",intent:gI="default",enabledAIActions:CI=[m.AIEditorActionTypes.REPHRASE,m.AIEditorActionTypes.SHORTEN,m.AIEditorActionTypes.EXPAND,m.AIEditorActionTypes.EMOJIFY],disableBuiltInAIActions:AI=!1,promptOverrides:cI,rephraseTones:lI,aiActionMinChars:bI,instructionSuggestions:ZI=N.DEFAULT_INSTRUCTION_SUGGESTIONS,onAIEvent:XI,onAITagComputed:GI,onAIToneSelect:dI,onAIActionRequest:VI,onBuildAIPrompt:WI}=I,HI=g.__rest(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const BI=B.useRef(null),[RI,JI]=B.useState(i||""),[uI,NI]=B.useState(!1),[xI,yI]=B.useState(0),[mI,YI]=B.useState(!1),[iI,FI]=B.useState(!1),[aI,nI]=B.useState(""),[pI,hI]=B.useState({}),[SI,UI]=B.useState(null),[sI,kI]=B.useState([]),[oI,wI]=B.useState(0),[zI,vI]=B.useState(null),QI=B.useRef(null),tI=B.useRef(null),eI=B.useRef(!1),jI=B.useRef(null),TI=B.useRef(null),DI=B.useMemo((()=>N.resolveActionPrompts(O,cI,lI)),[cI,lI,O]),LI=B.useMemo((()=>{const I=aI.trim().toLowerCase();return I?ZI.filter((g=>g.toLowerCase().includes(I))):[]}),[ZI,aI]),KI=B.useMemo((()=>Object.assign(Object.assign({},N.DEFAULT_AI_ACTION_MIN_CHARS),bI||{})),[bI]),OI=KI[m.AIEditorActionTypes.REPHRASE]||N.DEFAULT_AI_ACTION_MIN_CHARS[m.AIEditorActionTypes.REPHRASE],EI=B.useCallback(((I,g)=>{null==XI||XI(I,g)}),[XI]),PI=B.useCallback((I=>{JI((g=>g===I?g:I))}),[]),fI=B.useCallback((I=>{if(jI.current&&clearTimeout(jI.current),I.length>1200)return null==H||H(I,I),void(jI.current=setTimeout((()=>{null==H||H(I,t.getHTML(I))}),16));null==H||H(I,t.getHTML(I))}),[H]),MI=B.useCallback((()=>{UI(null),kI([]),wI(0),vI(null)}),[]),rI=B.useCallback((()=>{if(xI>=5)return;const I=xI+1;yI(I),"undefined"!=typeof window&&K&&sessionStorage.setItem(j(K),String(I)),NI(!0),tI.current&&clearTimeout(tI.current),tI.current=setTimeout((()=>{NI(!1)}),1200)}),[K,xI]);function qI(I){const g=null==BI?void 0:BI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function _I(I){var g,C;let A=null!==(C=null===(g=BI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(BI.current&&I){const g=BI.current.selectionStart,C=BI.current.selectionEnd,c=I;if(g===C)return $I(c);{A=t.wrappWildcard(g,C,c,A);const I=t.getHTML(A);return PI(A),{text:A,html:I}}}return{text:A,html:A}}function $I(I){var g,C;const A=null!==(C=null===(g=BI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(BI.current&&I){const g=BI.current.selectionStart;if(g===BI.current.selectionEnd)return Ig(I,g)}return{text:A,html:A}}function Ig(I,g){var C,A;let c=null!==(A=null===(C=BI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=t.getHTML(c);return PI(c),{text:c,html:l}}B.useEffect((()=>{if("undefined"==typeof window||!K)return;const I=Number(sessionStorage.getItem(j(K))||"0");Number.isNaN(I)||yI(I)}),[K]),B.useEffect((()=>{if(!(RI.length>=OI))return eI.current=!1,NI(!1),void(QI.current&&(clearTimeout(QI.current),QI.current=null));eI.current||rI(),QI.current&&clearTimeout(QI.current),QI.current=setTimeout((()=>{rI()}),3e3),eI.current=!0}),[RI,OI,rI]),B.useEffect((()=>()=>{QI.current&&clearTimeout(QI.current),tI.current&&clearTimeout(tI.current),jI.current&&clearTimeout(jI.current)}),[]);const gg=sI[oI]||"",Cg=sI.length<3,Ag=!!SI&&sI.length>0,cg=sI.length<=1||oI<=0,lg=sI.length<=1||oI>=sI.length-1,bg=B.useCallback((function(I){let C=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0;return g.__awaiter(void 0,void 0,void 0,(function*(){var g,l,b;if(!(VI||_||P&&f))return void(null==T||T("AI configuration missing"));if(!RI.trim())return;const Z=KI[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50;if(RI.length<Z)return;if(mI)return;if(C&&!Cg)return;const X=DI[I],G=c||pI[I]||X.defaultToneId||(null===(l=null===(g=X.tones)||void 0===g?void 0:g[0])||void 0===l?void 0:l.id),d=null===(b=X.tones)||void 0===b?void 0:b.find((I=>I.id===G)),V=void 0!==A?A:aI,W=(null==WI?void 0:WI({actionType:I,currentText:RI,templateType:O,config:X,toneId:G,toneLabel:null==d?void 0:d.label,instructionText:V||void 0}))||x.buildActionPrompt({config:X,currentText:RI,selectedToneId:G,instructionText:V});YI(!0),EI("ai_action_triggered",{action_type:I,template_id:E});try{const g=VI?yield VI({actionType:I,currentText:RI,templateType:O,toneId:G,toneLabel:null==d?void 0:d.label,instructionText:V||void 0,prompt:W}):yield x.requestAISuggestion({apiAdapter:_,requestExecutor:P,baseUrl:f,endpointPath:M,prompt:W,intent:gI,conversationId:$,systemId:II,useCase:r,storeId:q}),A="string"==typeof g?g.trim():((null==g?void 0:g.body)||"").trim();if(!A)return;if(!C)return UI(RI),vI(I),kI([A]),void wI(0);kI((I=>{const g=[...I,A].slice(0,3);return wI(g.length-1),g}))}catch(I){null==T||T("Failed to generate AI suggestion")}finally{YI(!1)}}))}),[P,f,RI,mI,Cg,DI,pI,aI,EI,E,M,_,gI,$,II,r,q,O,T,KI,VI,WI]),Zg=B.useCallback((()=>{if(!gg||!SI||!zI)return;PI(gg),fI(gg),EI("ai_suggestion_accepted",{action_type:zI,template_id:E});const I=function(I,g){const C=I.length,A=g.length,c=Array(A+1).fill(0).map(((I,g)=>g));for(let l=1;l<=C;l++){let C=c[0];c[0]=l;for(let b=1;b<=A;b++){const A=c[b];I[l-1]===g[b-1]?c[b]=C:c[b]=Math.min(c[b-1],c[b],C)+1,C=A}}return c[A]}(SI,gg),g=Math.max(SI.length,gg.length,1),C=I/g;null==GI||GI({changedCharacters:I,templateLength:g,changePercent:C,isAiTagged:C>=.5}),MI()}),[gg,SI,zI,PI,fI,EI,E,GI,MI]),Xg=B.useCallback((()=>{zI&&(EI("ai_suggestion_discarded",{action_type:zI,template_id:E}),MI())}),[MI,EI,zI,E]),Gg=B.useCallback((I=>{zI&&EI("ai_feedback_submitted",{action_type:zI,template_id:E,rating:I,candidate_index:oI+1})}),[EI,zI,oI,E]),dg=B.useMemo((()=>AI?[]:CI.map((I=>{var g,C,A;const c=DI[I],l=pI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===m.AIEditorActionTypes.REPHRASE,loading:mI&&zI===I,highlighted:I===m.AIEditorActionTypes.REPHRASE&&uI,disabled:!RI.trim()||RI.length<(KI[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50)||mI||Ag&&zI===I,showToneDropdown:I===m.AIEditorActionTypes.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[CI,AI,DI,pI,mI,zI,Ag,uI,RI,KI]);B.useImperativeHandle(A,(()=>({addTextOrWrap:_I,addText:$I,get:()=>RI,setCaretPosition:qI})),[_I,$I,RI]),B.useEffect((()=>{void 0!==i&&PI(i||"")}),[i,PI]),B.useEffect((()=>{if(!p||!T)return;const I=RI.length>p?n:null!=a?a:"";TI.current!==I&&(TI.current=I,T(I))}),[RI,a,p,T]);const Vg={border:0,background:"transparent",padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:R.COLORS.content.primary};return C.jsxs(y.OuterContainer,{children:[C.jsxs(y.Container,Object.assign({isError:!!a},{children:[Ag?C.jsxs("div",Object.assign({style:{padding:"12px",display:"flex",flexDirection:"column",gap:8,maxHeight:260,overflowY:"auto"}},{children:[C.jsx("div",Object.assign({style:{textDecoration:"line-through",color:R.COLORS.content.secondary}},{children:SI})),C.jsx("div",{children:gg}),C.jsxs("div",Object.assign({style:{display:"flex",alignItems:"center",gap:8}},{children:[C.jsxs("span",{children:[oI+1,"/",sI.length]}),C.jsx("button",Object.assign({"aria-label":"Previous suggestion",type:"button",style:Vg,disabled:cg,onClick:()=>wI((I=>Math.max(0,I-1)))},{children:C.jsx(l.default,{width:14,height:14})})),C.jsx("button",Object.assign({"aria-label":"Next suggestion",type:"button",style:Vg,disabled:lg,onClick:()=>wI((I=>Math.min(sI.length-1,I+1)))},{children:C.jsx(b.default,{width:14,height:14})})),C.jsx(J.Tooltip,Object.assign({body:"Like",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Like suggestion",type:"button",style:Vg,onClick:()=>Gg("like")},{children:C.jsx(W.default,{width:14,height:14})}))})),C.jsx(J.Tooltip,Object.assign({body:"Dislike",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Dislike suggestion",type:"button",style:Vg,onClick:()=>Gg("dislike")},{children:C.jsx(V.default,{width:14,height:14})}))})),Cg?C.jsx(J.Tooltip,Object.assign({body:"Regenerate",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Regenerate suggestion",type:"button",style:Vg,disabled:mI,onClick:()=>{zI&&bg(zI,!0)}},{children:C.jsx(d.default,{width:14,height:14})}))})):null,C.jsx(J.Tooltip,Object.assign({body:"Discard",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Discard suggestion",type:"button",style:Vg,onClick:Xg},{children:C.jsx(Z.default,{width:14,height:14})}))})),C.jsx(J.Tooltip,Object.assign({body:"Accept",placement:"top"},{children:C.jsx("button",Object.assign({"aria-label":"Accept suggestion",type:"button",style:Vg,onClick:Zg},{children:C.jsx(c.default,{width:14,height:14})}))}))]}))]})):mI?C.jsxs(h,{children:[C.jsx(S,{width:"96%"}),C.jsx(S,{width:"92%"}),C.jsx(S,{width:"88%"}),C.jsx(S,{width:"54%"})]}):C.jsx(y.TextSpace,Object.assign({ref:BI},HI,{value:RI,onChange:function(I){const g=I.target.value;PI(g),fI(g)},onPaste:I=>{var g,C;const A=I.clipboardData.getData("text");if(A.length>1200){const c=(null===(g=BI.current)||void 0===g?void 0:g.selectionStart)||0,l=(null===(C=BI.current)||void 0===C?void 0:C.selectionEnd)||c,b=RI.slice(0,c)+A+RI.slice(l);requestAnimationFrame((()=>{PI(b),fI(b)})),I.preventDefault()}},rows:D})),iI?C.jsxs(U,{children:[C.jsxs(s,{children:[C.jsx(X.default,{width:18,height:18,color:R.COLORS.content.secondary}),C.jsx(k,{value:aI,placeholder:"Add specific instructions to refine your message",onChange:I=>nI(I.target.value)}),C.jsxs(o,{children:[C.jsx(w,Object.assign({type:"button",onClick:()=>{nI(""),FI(!1)}},{children:"Cancel"})),C.jsx(z,Object.assign({type:"button",onClick:()=>{const I=aI.trim();FI(!1),nI(""),bg(m.AIEditorActionTypes.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),aI.trim().length>0&&LI.length>0?C.jsx(v,{children:LI.map((I=>C.jsx(Q,Object.assign({type:"button",selected:aI===I,onClick:()=>nI(I)},{children:I}),I)))}):null]}):null,C.jsx(m.WhatsAppTextEditorHeader,{actions:L,ref:BI,onActionSelect:function(I){const g=e[I];if(g&&BI.current){const I=BI.current.selectionStart;if(I===BI.current.selectionEnd){const{text:C}=Ig(g,I);qI(I+1),fI(C)}else{const{text:I}=_I(g);fI(I)}}},RightComponent:F,onEmojiClick:function(I){const{text:g}=$I(I);fI(g)},aiActions:dg,disableAllActions:Ag||mI,instructionActive:iI,onAIInstructionsClick:()=>FI(!0),onAIToneChange:(I,g)=>{hI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==dI||dI(I,g),I===m.AIEditorActionTypes.REPHRASE&&bg(I,!1,void 0,g)},onAIActionClick:I=>{if(!mI){if(Ag){if(zI===I)return;return MI(),void bg(I,!1)}bg(I,!1)}}})]})),a&&a!==n?C.jsxs("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[C.jsx(G.default,{width:16,height:16,color:R.COLORS.content.negative}),C.jsx(u.BodyCaption,Object.assign({color:R.COLORS.content.negative},{children:a}))]})):C.jsx(C.Fragment,{children:p?C.jsxs(u.BodyCaption,Object.assign({style:{color:a===n||RI.length>p?R.COLORS.content.negative:R.COLORS.content.secondary}},{children:[RI.length,"/",p]})):C.jsx(C.Fragment,{})})]})}));T.displayName="WhatsAppTextEditor",exports.WhatsAppTextEditor=T;